Skip to content

Commit 11270e7

Browse files
kinglongmeeamschuma-ntap
authored andcommitted
xprtrdma: treat all calls not a bcall when bc_serv is NULL
When a rdma server returns a fault format reply, nfs v3 client may treats it as a bcall when bc service is not exist. The debug message at rpcrdma_bc_receive_call are, [56579.837169] RPC: rpcrdma_bc_receive_call: callback XID 00000001, length=20 [56579.837174] RPC: rpcrdma_bc_receive_call: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 After that, rpcrdma_bc_receive_call will meets NULL pointer as, [ 226.057890] BUG: unable to handle kernel NULL pointer dereference at 00000000000000c8 ... [ 226.058704] RIP: 0010:_raw_spin_lock+0xc/0x20 ... [ 226.059732] Call Trace: [ 226.059878] rpcrdma_bc_receive_call+0x138/0x327 [rpcrdma] [ 226.060011] __ib_process_cq+0x89/0x170 [ib_core] [ 226.060092] ib_cq_poll_work+0x26/0x80 [ib_core] [ 226.060257] process_one_work+0x1a7/0x360 [ 226.060367] ? create_worker+0x1a0/0x1a0 [ 226.060440] worker_thread+0x30/0x390 [ 226.060500] ? create_worker+0x1a0/0x1a0 [ 226.060574] kthread+0x116/0x130 [ 226.060661] ? kthread_flush_work_fn+0x10/0x10 [ 226.060724] ret_from_fork+0x35/0x40 ... Signed-off-by: Kinglong Mee <[email protected]> Reviewed-by: Chuck Lever <[email protected]> Signed-off-by: Anna Schumaker <[email protected]>
1 parent c3ed222 commit 11270e7

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

net/sunrpc/xprtrdma/rpc_rdma.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,7 @@ static bool
11211121
rpcrdma_is_bcall(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep)
11221122
#if defined(CONFIG_SUNRPC_BACKCHANNEL)
11231123
{
1124+
struct rpc_xprt *xprt = &r_xprt->rx_xprt;
11241125
struct xdr_stream *xdr = &rep->rr_stream;
11251126
__be32 *p;
11261127

@@ -1144,6 +1145,10 @@ rpcrdma_is_bcall(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep)
11441145
if (*p != cpu_to_be32(RPC_CALL))
11451146
return false;
11461147

1148+
/* No bc service. */
1149+
if (xprt->bc_serv == NULL)
1150+
return false;
1151+
11471152
/* Now that we are sure this is a backchannel call,
11481153
* advance to the RPC header.
11491154
*/

0 commit comments

Comments
 (0)