Skip to content

Commit e10fa96

Browse files
chuckleverTrond Myklebust
authored andcommitted
xprtrdma: Move cqe to struct rpcrdma_mr
Clean up. - Simplify variable initialization in the completion handlers. - Move another field out of struct rpcrdma_frwr. Signed-off-by: Chuck Lever <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
1 parent 0a26d10 commit e10fa96

File tree

2 files changed

+16
-21
lines changed

2 files changed

+16
-21
lines changed

net/sunrpc/xprtrdma/frwr_ops.c

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -366,9 +366,7 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
366366
static void frwr_wc_fastreg(struct ib_cq *cq, struct ib_wc *wc)
367367
{
368368
struct ib_cqe *cqe = wc->wr_cqe;
369-
struct rpcrdma_frwr *frwr =
370-
container_of(cqe, struct rpcrdma_frwr, fr_cqe);
371-
struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
369+
struct rpcrdma_mr *mr = container_of(cqe, struct rpcrdma_mr, mr_cqe);
372370

373371
/* WARNING: Only wr_cqe and status are reliable at this point */
374372
trace_xprtrdma_wc_fastreg(wc, &mr->mr_cid);
@@ -405,9 +403,9 @@ int frwr_send(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
405403
trace_xprtrdma_mr_fastreg(mr);
406404
frwr = &mr->frwr;
407405

408-
frwr->fr_cqe.done = frwr_wc_fastreg;
406+
mr->mr_cqe.done = frwr_wc_fastreg;
409407
frwr->fr_regwr.wr.next = post_wr;
410-
frwr->fr_regwr.wr.wr_cqe = &frwr->fr_cqe;
408+
frwr->fr_regwr.wr.wr_cqe = &mr->mr_cqe;
411409
frwr->fr_regwr.wr.num_sge = 0;
412410
frwr->fr_regwr.wr.opcode = IB_WR_REG_MR;
413411
frwr->fr_regwr.wr.send_flags = 0;
@@ -463,9 +461,7 @@ static void frwr_mr_done(struct ib_wc *wc, struct rpcrdma_mr *mr)
463461
static void frwr_wc_localinv(struct ib_cq *cq, struct ib_wc *wc)
464462
{
465463
struct ib_cqe *cqe = wc->wr_cqe;
466-
struct rpcrdma_frwr *frwr =
467-
container_of(cqe, struct rpcrdma_frwr, fr_cqe);
468-
struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
464+
struct rpcrdma_mr *mr = container_of(cqe, struct rpcrdma_mr, mr_cqe);
469465

470466
/* WARNING: Only wr_cqe and status are reliable at this point */
471467
trace_xprtrdma_wc_li(wc, &mr->mr_cid);
@@ -484,9 +480,8 @@ static void frwr_wc_localinv(struct ib_cq *cq, struct ib_wc *wc)
484480
static void frwr_wc_localinv_wake(struct ib_cq *cq, struct ib_wc *wc)
485481
{
486482
struct ib_cqe *cqe = wc->wr_cqe;
487-
struct rpcrdma_frwr *frwr =
488-
container_of(cqe, struct rpcrdma_frwr, fr_cqe);
489-
struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
483+
struct rpcrdma_mr *mr = container_of(cqe, struct rpcrdma_mr, mr_cqe);
484+
struct rpcrdma_frwr *frwr = &mr->frwr;
490485

491486
/* WARNING: Only wr_cqe and status are reliable at this point */
492487
trace_xprtrdma_wc_li_wake(wc, &mr->mr_cid);
@@ -529,16 +524,17 @@ void frwr_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
529524
r_xprt->rx_stats.local_inv_needed++;
530525

531526
frwr = &mr->frwr;
532-
frwr->fr_cqe.done = frwr_wc_localinv;
533527
last = &frwr->fr_invwr;
534528
last->next = NULL;
535-
last->wr_cqe = &frwr->fr_cqe;
529+
last->wr_cqe = &mr->mr_cqe;
536530
last->sg_list = NULL;
537531
last->num_sge = 0;
538532
last->opcode = IB_WR_LOCAL_INV;
539533
last->send_flags = IB_SEND_SIGNALED;
540534
last->ex.invalidate_rkey = mr->mr_handle;
541535

536+
last->wr_cqe->done = frwr_wc_localinv;
537+
542538
*prev = last;
543539
prev = &last->next;
544540
}
@@ -547,7 +543,7 @@ void frwr_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
547543
* last WR in the chain completes, all WRs in the chain
548544
* are complete.
549545
*/
550-
frwr->fr_cqe.done = frwr_wc_localinv_wake;
546+
last->wr_cqe->done = frwr_wc_localinv_wake;
551547
reinit_completion(&frwr->fr_linv_done);
552548

553549
/* Transport disconnect drains the receive CQ before it
@@ -579,9 +575,7 @@ void frwr_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
579575
static void frwr_wc_localinv_done(struct ib_cq *cq, struct ib_wc *wc)
580576
{
581577
struct ib_cqe *cqe = wc->wr_cqe;
582-
struct rpcrdma_frwr *frwr =
583-
container_of(cqe, struct rpcrdma_frwr, fr_cqe);
584-
struct rpcrdma_mr *mr = container_of(frwr, struct rpcrdma_mr, frwr);
578+
struct rpcrdma_mr *mr = container_of(cqe, struct rpcrdma_mr, mr_cqe);
585579
struct rpcrdma_rep *rep;
586580

587581
/* WARNING: Only wr_cqe and status are reliable at this point */
@@ -630,16 +624,17 @@ void frwr_unmap_async(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
630624
r_xprt->rx_stats.local_inv_needed++;
631625

632626
frwr = &mr->frwr;
633-
frwr->fr_cqe.done = frwr_wc_localinv;
634627
last = &frwr->fr_invwr;
635628
last->next = NULL;
636-
last->wr_cqe = &frwr->fr_cqe;
629+
last->wr_cqe = &mr->mr_cqe;
637630
last->sg_list = NULL;
638631
last->num_sge = 0;
639632
last->opcode = IB_WR_LOCAL_INV;
640633
last->send_flags = IB_SEND_SIGNALED;
641634
last->ex.invalidate_rkey = mr->mr_handle;
642635

636+
last->wr_cqe->done = frwr_wc_localinv;
637+
643638
*prev = last;
644639
prev = &last->next;
645640
}
@@ -649,7 +644,7 @@ void frwr_unmap_async(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
649644
* are complete. The last completion will wake up the
650645
* RPC waiter.
651646
*/
652-
frwr->fr_cqe.done = frwr_wc_localinv_done;
647+
last->wr_cqe->done = frwr_wc_localinv_done;
653648

654649
/* Transport disconnect drains the receive CQ before it
655650
* replaces the QP. The RPC reply handler won't call us

net/sunrpc/xprtrdma/xprt_rdma.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@ struct rpcrdma_sendctx {
231231
*/
232232
struct rpcrdma_frwr {
233233
struct ib_mr *fr_mr;
234-
struct ib_cqe fr_cqe;
235234
struct completion fr_linv_done;
236235
union {
237236
struct ib_reg_wr fr_regwr;
@@ -247,6 +246,7 @@ struct rpcrdma_mr {
247246
struct scatterlist *mr_sg;
248247
int mr_nents;
249248
enum dma_data_direction mr_dir;
249+
struct ib_cqe mr_cqe;
250250
struct rpcrdma_frwr frwr;
251251
struct rpcrdma_xprt *mr_xprt;
252252
u32 mr_handle;

0 commit comments

Comments
 (0)