svcrdma: Select NFSv4.1 backchannel transport based on forward channel
authorChuck Lever <chuck.lever@oracle.com>
Wed, 16 Jul 2014 19:38:32 +0000 (15:38 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 18 Jul 2014 15:35:45 +0000 (11:35 -0400)
commit3c45ddf823d679a820adddd53b52c6699c9a05ac
treeca52538cb038660181621282d82cf5ff54f8d8e6
parent5d6031ca742f9f07b9c9d9322538619f3bd155ac
svcrdma: Select NFSv4.1 backchannel transport based on forward channel

The current code always selects XPRT_TRANSPORT_BC_TCP for the back
channel, even when the forward channel was not TCP (eg, RDMA). When
a 4.1 mount is attempted with RDMA, the server panics in the TCP BC
code when trying to send CB_NULL.

Instead, construct the transport protocol number from the forward
channel transport or'd with XPRT_TRANSPORT_BC. Transports that do
not support bi-directional RPC will not have registered a "BC"
transport, causing create_backchannel_client() to fail immediately.

Fixes: https://bugzilla.linux-nfs.org/show_bug.cgi?id=265
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4callback.c
include/linux/sunrpc/svc_xprt.h
net/sunrpc/svcsock.c
net/sunrpc/xprt.c
net/sunrpc/xprtrdma/svc_rdma_transport.c