diff options
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_memory.c | 15 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_verbs.c | 14 |
3 files changed, 12 insertions, 19 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h index 67914027c614..e1a01c6e6e12 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.h +++ b/drivers/infiniband/ulp/iser/iscsi_iser.h | |||
@@ -138,6 +138,8 @@ | |||
138 | #define ISER_WSV 0x08 | 138 | #define ISER_WSV 0x08 |
139 | #define ISER_RSV 0x04 | 139 | #define ISER_RSV 0x04 |
140 | 140 | ||
141 | #define ISER_FRWR_LI_WRID 0xffffffffffffffffULL | ||
142 | |||
141 | struct iser_hdr { | 143 | struct iser_hdr { |
142 | u8 flags; | 144 | u8 flags; |
143 | u8 rsvd[3]; | 145 | u8 rsvd[3]; |
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c index 1ce0c97d2ccb..f7701795cef2 100644 --- a/drivers/infiniband/ulp/iser/iser_memory.c +++ b/drivers/infiniband/ulp/iser/iser_memory.c | |||
@@ -457,8 +457,8 @@ static int iser_fast_reg_mr(struct fast_reg_descriptor *desc, | |||
457 | 457 | ||
458 | if (!desc->valid) { | 458 | if (!desc->valid) { |
459 | memset(&inv_wr, 0, sizeof(inv_wr)); | 459 | memset(&inv_wr, 0, sizeof(inv_wr)); |
460 | inv_wr.wr_id = ISER_FRWR_LI_WRID; | ||
460 | inv_wr.opcode = IB_WR_LOCAL_INV; | 461 | inv_wr.opcode = IB_WR_LOCAL_INV; |
461 | inv_wr.send_flags = IB_SEND_SIGNALED; | ||
462 | inv_wr.ex.invalidate_rkey = desc->data_mr->rkey; | 462 | inv_wr.ex.invalidate_rkey = desc->data_mr->rkey; |
463 | wr = &inv_wr; | 463 | wr = &inv_wr; |
464 | /* Bump the key */ | 464 | /* Bump the key */ |
@@ -468,8 +468,8 @@ static int iser_fast_reg_mr(struct fast_reg_descriptor *desc, | |||
468 | 468 | ||
469 | /* Prepare FASTREG WR */ | 469 | /* Prepare FASTREG WR */ |
470 | memset(&fastreg_wr, 0, sizeof(fastreg_wr)); | 470 | memset(&fastreg_wr, 0, sizeof(fastreg_wr)); |
471 | fastreg_wr.wr_id = ISER_FRWR_LI_WRID; | ||
471 | fastreg_wr.opcode = IB_WR_FAST_REG_MR; | 472 | fastreg_wr.opcode = IB_WR_FAST_REG_MR; |
472 | fastreg_wr.send_flags = IB_SEND_SIGNALED; | ||
473 | fastreg_wr.wr.fast_reg.iova_start = desc->data_frpl->page_list[0] + offset; | 473 | fastreg_wr.wr.fast_reg.iova_start = desc->data_frpl->page_list[0] + offset; |
474 | fastreg_wr.wr.fast_reg.page_list = desc->data_frpl; | 474 | fastreg_wr.wr.fast_reg.page_list = desc->data_frpl; |
475 | fastreg_wr.wr.fast_reg.page_list_len = page_list_len; | 475 | fastreg_wr.wr.fast_reg.page_list_len = page_list_len; |
@@ -480,20 +480,13 @@ static int iser_fast_reg_mr(struct fast_reg_descriptor *desc, | |||
480 | IB_ACCESS_REMOTE_WRITE | | 480 | IB_ACCESS_REMOTE_WRITE | |
481 | IB_ACCESS_REMOTE_READ); | 481 | IB_ACCESS_REMOTE_READ); |
482 | 482 | ||
483 | if (!wr) { | 483 | if (!wr) |
484 | wr = &fastreg_wr; | 484 | wr = &fastreg_wr; |
485 | atomic_inc(&ib_conn->post_send_buf_count); | 485 | else |
486 | } else { | ||
487 | wr->next = &fastreg_wr; | 486 | wr->next = &fastreg_wr; |
488 | atomic_add(2, &ib_conn->post_send_buf_count); | ||
489 | } | ||
490 | 487 | ||
491 | ret = ib_post_send(ib_conn->qp, wr, &bad_wr); | 488 | ret = ib_post_send(ib_conn->qp, wr, &bad_wr); |
492 | if (ret) { | 489 | if (ret) { |
493 | if (bad_wr->next) | ||
494 | atomic_sub(2, &ib_conn->post_send_buf_count); | ||
495 | else | ||
496 | atomic_dec(&ib_conn->post_send_buf_count); | ||
497 | iser_err("fast registration failed, ret:%d\n", ret); | 490 | iser_err("fast registration failed, ret:%d\n", ret); |
498 | return ret; | 491 | return ret; |
499 | } | 492 | } |
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c index ca37edef2791..7bdb811ad5b1 100644 --- a/drivers/infiniband/ulp/iser/iser_verbs.c +++ b/drivers/infiniband/ulp/iser/iser_verbs.c | |||
@@ -993,18 +993,16 @@ static int iser_drain_tx_cq(struct iser_device *device, int cq_index) | |||
993 | if (wc.status == IB_WC_SUCCESS) { | 993 | if (wc.status == IB_WC_SUCCESS) { |
994 | if (wc.opcode == IB_WC_SEND) | 994 | if (wc.opcode == IB_WC_SEND) |
995 | iser_snd_completion(tx_desc, ib_conn); | 995 | iser_snd_completion(tx_desc, ib_conn); |
996 | else if (wc.opcode == IB_WC_LOCAL_INV || | 996 | else |
997 | wc.opcode == IB_WC_FAST_REG_MR) { | ||
998 | atomic_dec(&ib_conn->post_send_buf_count); | ||
999 | continue; | ||
1000 | } else | ||
1001 | iser_err("expected opcode %d got %d\n", | 997 | iser_err("expected opcode %d got %d\n", |
1002 | IB_WC_SEND, wc.opcode); | 998 | IB_WC_SEND, wc.opcode); |
1003 | } else { | 999 | } else { |
1004 | iser_err("tx id %llx status %d vend_err %x\n", | 1000 | iser_err("tx id %llx status %d vend_err %x\n", |
1005 | wc.wr_id, wc.status, wc.vendor_err); | 1001 | wc.wr_id, wc.status, wc.vendor_err); |
1006 | atomic_dec(&ib_conn->post_send_buf_count); | 1002 | if (wc.wr_id != ISER_FRWR_LI_WRID) { |
1007 | iser_handle_comp_error(tx_desc, ib_conn); | 1003 | atomic_dec(&ib_conn->post_send_buf_count); |
1004 | iser_handle_comp_error(tx_desc, ib_conn); | ||
1005 | } | ||
1008 | } | 1006 | } |
1009 | completed_tx++; | 1007 | completed_tx++; |
1010 | } | 1008 | } |