aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.h8
-rw-r--r--drivers/infiniband/ulp/iser/iser_memory.c4
-rw-r--r--drivers/infiniband/ulp/iser/iser_verbs.c2
3 files changed, 9 insertions, 5 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h
index b4290f509a39..56607140ff3a 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.h
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.h
@@ -280,13 +280,17 @@ struct iser_device {
280 enum iser_data_dir cmd_dir); 280 enum iser_data_dir cmd_dir);
281}; 281};
282 282
283enum iser_reg_indicator {
284 ISER_DATA_KEY_VALID = 1 << 0,
285};
286
283struct fast_reg_descriptor { 287struct fast_reg_descriptor {
284 struct list_head list; 288 struct list_head list;
285 /* For fast registration - FRWR */ 289 /* For fast registration - FRWR */
286 struct ib_mr *data_mr; 290 struct ib_mr *data_mr;
287 struct ib_fast_reg_page_list *data_frpl; 291 struct ib_fast_reg_page_list *data_frpl;
288 /* Valid for fast registration flag */ 292 /* registration indicators container */
289 bool valid; 293 u8 reg_indicators;
290}; 294};
291 295
292struct iser_conn { 296struct iser_conn {
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
index d25587e2f296..a7a0d3e8f822 100644
--- a/drivers/infiniband/ulp/iser/iser_memory.c
+++ b/drivers/infiniband/ulp/iser/iser_memory.c
@@ -479,7 +479,7 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task,
479 return -EINVAL; 479 return -EINVAL;
480 } 480 }
481 481
482 if (!desc->valid) { 482 if (!(desc->reg_indicators & ISER_DATA_KEY_VALID)) {
483 memset(&inv_wr, 0, sizeof(inv_wr)); 483 memset(&inv_wr, 0, sizeof(inv_wr));
484 inv_wr.wr_id = ISER_FASTREG_LI_WRID; 484 inv_wr.wr_id = ISER_FASTREG_LI_WRID;
485 inv_wr.opcode = IB_WR_LOCAL_INV; 485 inv_wr.opcode = IB_WR_LOCAL_INV;
@@ -514,7 +514,7 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task,
514 iser_err("fast registration failed, ret:%d\n", ret); 514 iser_err("fast registration failed, ret:%d\n", ret);
515 return ret; 515 return ret;
516 } 516 }
517 desc->valid = false; 517 desc->reg_indicators &= ~ISER_DATA_KEY_VALID;
518 518
519 sge->lkey = desc->data_mr->lkey; 519 sge->lkey = desc->data_mr->lkey;
520 sge->addr = desc->data_frpl->page_list[0] + offset; 520 sge->addr = desc->data_frpl->page_list[0] + offset;
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 95fcfcac0100..6a5f4245182a 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -296,7 +296,7 @@ iser_create_fastreg_desc(struct ib_device *ib_device, struct ib_pd *pd,
296 } 296 }
297 iser_info("Create fr_desc %p page_list %p\n", 297 iser_info("Create fr_desc %p page_list %p\n",
298 desc, desc->data_frpl->page_list); 298 desc, desc->data_frpl->page_list);
299 desc->valid = true; 299 desc->reg_indicators |= ISER_DATA_KEY_VALID;
300 300
301 return 0; 301 return 0;
302 302