xprtrdma: Clarify use of barrier in frwr_wc_localinv_done()
authorChuck Lever <chuck.lever@oracle.com>
Mon, 19 Apr 2021 18:03:06 +0000 (14:03 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 26 Apr 2021 13:24:47 +0000 (09:24 -0400)
Clean up: The comment and the placement of the memory barrier is
confusing. Humans want to read the function statements from head
to tail.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprtrdma/frwr_ops.c

index bfc057fdb75f59da88230bb84e1982e52cc9241b..af85cec0ce31485417fb678885119a324ee745e0 100644 (file)
@@ -592,14 +592,16 @@ static void frwr_wc_localinv_done(struct ib_cq *cq, struct ib_wc *wc)
        struct rpcrdma_frwr *frwr =
                container_of(cqe, struct rpcrdma_frwr, fr_cqe);
        struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
-       struct rpcrdma_rep *rep = mr->mr_req->rl_reply;
+       struct rpcrdma_rep *rep;
 
        /* WARNING: Only wr_cqe and status are reliable at this point */
        trace_xprtrdma_wc_li_done(wc, &frwr->fr_cid);
-       frwr_mr_done(wc, mr);
 
-       /* Ensure @rep is generated before frwr_mr_done */
+       /* Ensure that @rep is generated before the MR is released */
+       rep = mr->mr_req->rl_reply;
        smp_rmb();
+
+       frwr_mr_done(wc, mr);
        rpcrdma_complete_rqst(rep);
 
        rpcrdma_flush_disconnect(cq->cq_context, wc);