Skip to content

Commit e26d2d2

Browse files
Sagi Grimbergdledford
authored andcommitted
IB/iser: Change the increment rkey flow logic
When we enable remote invalidate support we won't want to perform local invalidates at the same time we do today, but we still need to get new rkeys. So, decouple the rkey update from the local invalidate and tie it to memory reg instead. Signed-off-by: Sagi Grimberg <[email protected]> Signed-off-by: Jenny Derzhavetz <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Signed-off-by: Doug Ledford <[email protected]>
1 parent 422bd0a commit e26d2d2

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

drivers/infiniband/ulp/iser/iser_memory.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -362,21 +362,16 @@ iser_set_prot_checks(struct scsi_cmnd *sc, u8 *mask)
362362
*mask |= ISER_CHECK_GUARD;
363363
}
364364

365-
static void
365+
static inline void
366366
iser_inv_rkey(struct ib_send_wr *inv_wr,
367367
struct ib_mr *mr,
368368
struct ib_cqe *cqe)
369369
{
370-
u32 rkey;
371-
372370
inv_wr->opcode = IB_WR_LOCAL_INV;
373371
inv_wr->wr_cqe = cqe;
374372
inv_wr->ex.invalidate_rkey = mr->rkey;
375373
inv_wr->send_flags = 0;
376374
inv_wr->num_sge = 0;
377-
378-
rkey = ib_inc_rkey(mr->rkey);
379-
ib_update_fast_reg_key(mr, rkey);
380375
}
381376

382377
static int
@@ -390,6 +385,7 @@ iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
390385
struct ib_sig_attrs *sig_attrs = &tx_desc->sig_attrs;
391386
struct ib_cqe *cqe = &iser_task->iser_conn->ib_conn.reg_cqe;
392387
struct ib_sig_handover_wr *wr;
388+
struct ib_mr *mr = pi_ctx->sig_mr;
393389
int ret;
394390

395391
memset(sig_attrs, 0, sizeof(*sig_attrs));
@@ -400,7 +396,9 @@ iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
400396
iser_set_prot_checks(iser_task->sc, &sig_attrs->check_mask);
401397

402398
if (pi_ctx->sig_mr_valid)
403-
iser_inv_rkey(iser_tx_next_wr(tx_desc), pi_ctx->sig_mr, cqe);
399+
iser_inv_rkey(iser_tx_next_wr(tx_desc), mr, cqe);
400+
401+
ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey));
404402

405403
wr = sig_handover_wr(iser_tx_next_wr(tx_desc));
406404
wr->wr.opcode = IB_WR_REG_SIG_MR;
@@ -409,7 +407,7 @@ iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
409407
wr->wr.num_sge = 1;
410408
wr->wr.send_flags = 0;
411409
wr->sig_attrs = sig_attrs;
412-
wr->sig_mr = pi_ctx->sig_mr;
410+
wr->sig_mr = mr;
413411
if (scsi_prot_sg_count(iser_task->sc))
414412
wr->prot = &prot_reg->sge;
415413
else
@@ -419,8 +417,8 @@ iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
419417
IB_ACCESS_REMOTE_WRITE;
420418
pi_ctx->sig_mr_valid = 1;
421419

422-
sig_reg->sge.lkey = pi_ctx->sig_mr->lkey;
423-
sig_reg->rkey = pi_ctx->sig_mr->rkey;
420+
sig_reg->sge.lkey = mr->lkey;
421+
sig_reg->rkey = mr->rkey;
424422
sig_reg->sge.addr = 0;
425423
sig_reg->sge.length = scsi_transfer_length(iser_task->sc);
426424

@@ -445,6 +443,8 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task,
445443
if (rsc->mr_valid)
446444
iser_inv_rkey(iser_tx_next_wr(tx_desc), mr, cqe);
447445

446+
ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey));
447+
448448
n = ib_map_mr_sg(mr, mem->sg, mem->size, SIZE_4K);
449449
if (unlikely(n != mem->size)) {
450450
iser_err("failed to map sg (%d/%d)\n",

0 commit comments

Comments
 (0)