rpc: keep backchannel xprt as long as server connection
authorJ. Bruce Fields <bfields@redhat.com>
Wed, 8 Dec 2010 17:45:44 +0000 (12:45 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 11 Jan 2011 20:04:10 +0000 (15:04 -0500)
commit99de8ea962bbc11a51ad4c52e3dc93bee5f6ba70
tree1cda6aaeabe8fc4e3502104005c06a3888bb0bf4
parentd75faea330dbd1873c9094e9926ae306590c0998
rpc: keep backchannel xprt as long as server connection

Multiple backchannels can share the same tcp connection; from rfc 5661 section
2.10.3.1:

A connection's association with a session is not exclusive.  A
connection associated with the channel(s) of one session may be
simultaneously associated with the channel(s) of other sessions
including sessions associated with other client IDs.

However, multiple backchannels share a connection, they must all share
the same xid stream (hence the same rpc_xprt); the only way we have to
match replies with calls at the rpc layer is using the xid.

So, keep the rpc_xprt around as long as the connection lasts, in case
we're asked to use the connection as a backchannel again.

Requests to create new backchannel clients over a given server
connection should results in creating new clients that reuse the
existing rpc_xprt.

But to start, just reject attempts to associate multiple rpc_xprt's with
the same underlying bc_xprt.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/svc_xprt.c
net/sunrpc/xprt.c
net/sunrpc/xprtsock.c