xprtrdma: Put rpcrdma_reps before waking the tear-down completion
Ensure the tear-down completion is awoken only /after/ we've stopped
fiddling with rpcrdma_rep objects in rpcrdma_post_recvs().
Fixes: 15788d1d10
("xprtrdma: Do not refresh Receive Queue while it is draining")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
1143129e4d
commit
97480cae13
|
@ -1416,11 +1416,6 @@ void rpcrdma_post_recvs(struct rpcrdma_xprt *r_xprt, int needed, bool temp)
|
|||
|
||||
rc = ib_post_recv(ep->re_id->qp, wr,
|
||||
(const struct ib_recv_wr **)&bad_wr);
|
||||
if (atomic_dec_return(&ep->re_receiving) > 0)
|
||||
complete(&ep->re_done);
|
||||
|
||||
out:
|
||||
trace_xprtrdma_post_recvs(r_xprt, count, rc);
|
||||
if (rc) {
|
||||
for (wr = bad_wr; wr;) {
|
||||
struct rpcrdma_rep *rep;
|
||||
|
@ -1431,6 +1426,11 @@ out:
|
|||
--count;
|
||||
}
|
||||
}
|
||||
if (atomic_dec_return(&ep->re_receiving) > 0)
|
||||
complete(&ep->re_done);
|
||||
|
||||
out:
|
||||
trace_xprtrdma_post_recvs(r_xprt, count, rc);
|
||||
ep->re_receive_count += count;
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue