hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/infiniband/ulp/iser/iser_initiator.c
....@@ -72,7 +72,7 @@
7272 return err;
7373 }
7474
75
- err = iser_reg_rdma_mem(iser_task, ISER_DIR_IN, false);
75
+ err = iser_reg_mem_fastreg(iser_task, ISER_DIR_IN, false);
7676 if (err) {
7777 iser_err("Failed to set up Data-IN RDMA\n");
7878 return err;
....@@ -126,8 +126,8 @@
126126 return err;
127127 }
128128
129
- err = iser_reg_rdma_mem(iser_task, ISER_DIR_OUT,
130
- buf_out->data_len == imm_sz);
129
+ err = iser_reg_mem_fastreg(iser_task, ISER_DIR_OUT,
130
+ buf_out->data_len == imm_sz);
131131 if (err != 0) {
132132 iser_err("Failed to register write cmd RDMA mem\n");
133133 return err;
....@@ -250,8 +250,8 @@
250250 iser_conn->qp_max_recv_dtos_mask = session->cmds_max - 1; /* cmds_max is 2^N */
251251 iser_conn->min_posted_rx = iser_conn->qp_max_recv_dtos >> 2;
252252
253
- if (device->reg_ops->alloc_reg_res(ib_conn, session->scsi_cmds_max,
254
- iser_conn->pages_per_mr))
253
+ if (iser_alloc_fastreg_pool(ib_conn, session->scsi_cmds_max,
254
+ iser_conn->pages_per_mr))
255255 goto create_rdma_reg_res_failed;
256256
257257 if (iser_alloc_login_buf(iser_conn))
....@@ -293,7 +293,7 @@
293293 rx_desc_alloc_fail:
294294 iser_free_login_buf(iser_conn);
295295 alloc_login_buf_fail:
296
- device->reg_ops->free_reg_res(ib_conn);
296
+ iser_free_fastreg_pool(ib_conn);
297297 create_rdma_reg_res_failed:
298298 iser_err("failed allocating rx descriptors / data buffers\n");
299299 return -ENOMEM;
....@@ -306,8 +306,7 @@
306306 struct ib_conn *ib_conn = &iser_conn->ib_conn;
307307 struct iser_device *device = ib_conn->device;
308308
309
- if (device->reg_ops->free_reg_res)
310
- device->reg_ops->free_reg_res(ib_conn);
309
+ iser_free_fastreg_pool(ib_conn);
311310
312311 rx_desc = iser_conn->rx_descs;
313312 for (i = 0; i < iser_conn->qp_max_recv_dtos; i++, rx_desc++)
....@@ -358,6 +357,8 @@
358357
359358 /**
360359 * iser_send_command - send command PDU
360
+ * @conn: link to matching iscsi connection
361
+ * @task: SCSI command task
361362 */
362363 int iser_send_command(struct iscsi_conn *conn,
363364 struct iscsi_task *task)
....@@ -429,6 +430,9 @@
429430
430431 /**
431432 * iser_send_data_out - send data out PDU
433
+ * @conn: link to matching iscsi connection
434
+ * @task: SCSI command task
435
+ * @hdr: pointer to the LLD's iSCSI message header
432436 */
433437 int iser_send_data_out(struct iscsi_conn *conn,
434438 struct iscsi_task *task,
....@@ -592,14 +596,13 @@
592596 static inline int
593597 iser_inv_desc(struct iser_fr_desc *desc, u32 rkey)
594598 {
595
- if (likely(rkey == desc->rsc.mr->rkey)) {
596
- desc->rsc.mr_valid = 0;
597
- } else if (likely(desc->pi_ctx && rkey == desc->pi_ctx->sig_mr->rkey)) {
598
- desc->pi_ctx->sig_mr_valid = 0;
599
- } else {
599
+ if (unlikely((!desc->sig_protected && rkey != desc->rsc.mr->rkey) ||
600
+ (desc->sig_protected && rkey != desc->rsc.sig_mr->rkey))) {
600601 iser_err("Bogus remote invalidation for rkey %#x\n", rkey);
601602 return -EINVAL;
602603 }
604
+
605
+ desc->rsc.mr_valid = 0;
603606
604607 return 0;
605608 }
....@@ -750,6 +753,9 @@
750753 iser_task->prot[ISER_DIR_IN].data_len = 0;
751754 iser_task->prot[ISER_DIR_OUT].data_len = 0;
752755
756
+ iser_task->prot[ISER_DIR_IN].dma_nents = 0;
757
+ iser_task->prot[ISER_DIR_OUT].dma_nents = 0;
758
+
753759 memset(&iser_task->rdma_reg[ISER_DIR_IN], 0,
754760 sizeof(struct iser_mem_reg));
755761 memset(&iser_task->rdma_reg[ISER_DIR_OUT], 0,
....@@ -761,7 +767,7 @@
761767 int prot_count = scsi_prot_sg_count(iser_task->sc);
762768
763769 if (iser_task->dir[ISER_DIR_IN]) {
764
- iser_unreg_rdma_mem(iser_task, ISER_DIR_IN);
770
+ iser_unreg_mem_fastreg(iser_task, ISER_DIR_IN);
765771 iser_dma_unmap_task_data(iser_task,
766772 &iser_task->data[ISER_DIR_IN],
767773 DMA_FROM_DEVICE);
....@@ -772,7 +778,7 @@
772778 }
773779
774780 if (iser_task->dir[ISER_DIR_OUT]) {
775
- iser_unreg_rdma_mem(iser_task, ISER_DIR_OUT);
781
+ iser_unreg_mem_fastreg(iser_task, ISER_DIR_OUT);
776782 iser_dma_unmap_task_data(iser_task,
777783 &iser_task->data[ISER_DIR_OUT],
778784 DMA_TO_DEVICE);