|
@@ -1695,8 +1695,7 @@ rpcrdma_register_frmr_external(struct rpcrdma_mr_seg *seg,
|
|
|
struct rpcrdma_mw *mw = seg1->mr_chunk.rl_mw;
|
|
|
struct rpcrdma_frmr *frmr = &mw->r.frmr;
|
|
|
struct ib_mr *mr = frmr->fr_mr;
|
|
|
- struct ib_send_wr invalidate_wr, frmr_wr, *bad_wr, *post_wr;
|
|
|
-
|
|
|
+ struct ib_send_wr frmr_wr, *bad_wr;
|
|
|
u8 key;
|
|
|
int len, pageoff;
|
|
|
int i, rc;
|
|
@@ -1728,22 +1727,6 @@ rpcrdma_register_frmr_external(struct rpcrdma_mr_seg *seg,
|
|
|
dprintk("RPC: %s: Using frmr %p to map %d segments\n",
|
|
|
__func__, mw, i);
|
|
|
|
|
|
- if (unlikely(frmr->fr_state != FRMR_IS_INVALID)) {
|
|
|
- dprintk("RPC: %s: frmr %x left valid, posting invalidate.\n",
|
|
|
- __func__, mr->rkey);
|
|
|
- /* Invalidate before using. */
|
|
|
- memset(&invalidate_wr, 0, sizeof invalidate_wr);
|
|
|
- invalidate_wr.wr_id = (unsigned long)(void *)mw;
|
|
|
- invalidate_wr.next = &frmr_wr;
|
|
|
- invalidate_wr.opcode = IB_WR_LOCAL_INV;
|
|
|
- invalidate_wr.send_flags = IB_SEND_SIGNALED;
|
|
|
- invalidate_wr.ex.invalidate_rkey = mr->rkey;
|
|
|
- DECR_CQCOUNT(&r_xprt->rx_ep);
|
|
|
- post_wr = &invalidate_wr;
|
|
|
- } else
|
|
|
- post_wr = &frmr_wr;
|
|
|
-
|
|
|
- /* Prepare FRMR WR */
|
|
|
memset(&frmr_wr, 0, sizeof frmr_wr);
|
|
|
frmr_wr.wr_id = (unsigned long)(void *)mw;
|
|
|
frmr_wr.opcode = IB_WR_FAST_REG_MR;
|
|
@@ -1768,8 +1751,7 @@ rpcrdma_register_frmr_external(struct rpcrdma_mr_seg *seg,
|
|
|
frmr_wr.wr.fast_reg.rkey = mr->rkey;
|
|
|
DECR_CQCOUNT(&r_xprt->rx_ep);
|
|
|
|
|
|
- rc = ib_post_send(ia->ri_id->qp, post_wr, &bad_wr);
|
|
|
-
|
|
|
+ rc = ib_post_send(ia->ri_id->qp, &frmr_wr, &bad_wr);
|
|
|
if (rc) {
|
|
|
dprintk("RPC: %s: failed ib_post_send for register,"
|
|
|
" status %i\n", __func__, rc);
|