hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/infiniband/ulp/iser/iscsi_iser.c
....@@ -205,7 +205,8 @@
205205 goto out;
206206 }
207207
208
- tx_desc->wr_idx = 0;
208
+ tx_desc->inv_wr.next = NULL;
209
+ tx_desc->reg_wr.wr.next = NULL;
209210 tx_desc->mapped = true;
210211 tx_desc->dma_addr = dma_addr;
211212 tx_desc->tx_sg[0].addr = tx_desc->dma_addr;
....@@ -406,13 +407,10 @@
406407 iscsi_iser_check_protection(struct iscsi_task *task, sector_t *sector)
407408 {
408409 struct iscsi_iser_task *iser_task = task->dd_data;
410
+ enum iser_data_dir dir = iser_task->dir[ISER_DIR_IN] ?
411
+ ISER_DIR_IN : ISER_DIR_OUT;
409412
410
- if (iser_task->dir[ISER_DIR_IN])
411
- return iser_check_task_pi_status(iser_task, ISER_DIR_IN,
412
- sector);
413
- else
414
- return iser_check_task_pi_status(iser_task, ISER_DIR_OUT,
415
- sector);
413
+ return iser_check_task_pi_status(iser_task, dir, sector);
416414 }
417415
418416 /**
....@@ -501,6 +499,7 @@
501499 iser_conn->iscsi_conn = conn;
502500
503501 out:
502
+ iscsi_put_endpoint(ep);
504503 mutex_unlock(&iser_conn->state_mutex);
505504 return error;
506505 }
....@@ -613,6 +612,7 @@
613612 struct Scsi_Host *shost;
614613 struct iser_conn *iser_conn = NULL;
615614 struct ib_conn *ib_conn;
615
+ struct ib_device *ib_dev;
616616 u32 max_fr_sectors;
617617
618618 shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 0);
....@@ -643,8 +643,9 @@
643643 }
644644
645645 ib_conn = &iser_conn->ib_conn;
646
+ ib_dev = ib_conn->device->ib_device;
646647 if (ib_conn->pi_support) {
647
- u32 sig_caps = ib_conn->device->ib_device->attrs.sig_prot_cap;
648
+ u32 sig_caps = ib_dev->attrs.sig_prot_cap;
648649
649650 shost->sg_prot_tablesize = shost->sg_tablesize;
650651 scsi_host_set_prot(shost, iser_dif_prot_caps(sig_caps));
....@@ -652,8 +653,10 @@
652653 SHOST_DIX_GUARD_CRC);
653654 }
654655
655
- if (iscsi_host_add(shost,
656
- ib_conn->device->ib_device->dev.parent)) {
656
+ if (!(ib_dev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
657
+ shost->virt_boundary_mask = SZ_4K - 1;
658
+
659
+ if (iscsi_host_add(shost, ib_dev->dev.parent)) {
657660 mutex_unlock(&iser_conn->state_mutex);
658661 goto free_host;
659662 }
....@@ -764,7 +767,6 @@
764767 enum iscsi_param param, char *buf)
765768 {
766769 struct iser_conn *iser_conn = ep->dd_data;
767
- int len;
768770
769771 switch (param) {
770772 case ISCSI_PARAM_CONN_PORT:
....@@ -775,19 +777,17 @@
775777 return iscsi_conn_get_addr_param((struct sockaddr_storage *)
776778 &iser_conn->ib_conn.cma_id->route.addr.dst_addr,
777779 param, buf);
778
- break;
779780 default:
780
- return -ENOSYS;
781
+ break;
781782 }
782
-
783
- return len;
783
+ return -ENOSYS;
784784 }
785785
786786 /**
787787 * iscsi_iser_ep_connect() - Initiate iSER connection establishment
788788 * @shost: scsi_host
789789 * @dst_addr: destination address
790
- * @non-blocking: indicate if routine can block
790
+ * @non_blocking: indicate if routine can block
791791 *
792792 * Allocate an iscsi endpoint, an iser_conn structure and bind them.
793793 * After that start RDMA connection establishment via rdma_cm. We
....@@ -962,30 +962,6 @@
962962 return 0;
963963 }
964964
965
-static int iscsi_iser_slave_alloc(struct scsi_device *sdev)
966
-{
967
- struct iscsi_session *session;
968
- struct iser_conn *iser_conn;
969
- struct ib_device *ib_dev;
970
-
971
- mutex_lock(&unbind_iser_conn_mutex);
972
-
973
- session = starget_to_session(scsi_target(sdev))->dd_data;
974
- iser_conn = session->leadconn->dd_data;
975
- if (!iser_conn) {
976
- mutex_unlock(&unbind_iser_conn_mutex);
977
- return -ENOTCONN;
978
- }
979
- ib_dev = iser_conn->ib_conn.device->ib_device;
980
-
981
- if (!(ib_dev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
982
- blk_queue_virt_boundary(sdev->request_queue, ~MASK_4K);
983
-
984
- mutex_unlock(&unbind_iser_conn_mutex);
985
-
986
- return 0;
987
-}
988
-
989965 static struct scsi_host_template iscsi_iser_sht = {
990966 .module = THIS_MODULE,
991967 .name = "iSCSI Initiator over iSER",
....@@ -998,8 +974,6 @@
998974 .eh_device_reset_handler= iscsi_eh_device_reset,
999975 .eh_target_reset_handler = iscsi_eh_recover_target,
1000976 .target_alloc = iscsi_target_alloc,
1001
- .use_clustering = ENABLE_CLUSTERING,
1002
- .slave_alloc = iscsi_iser_slave_alloc,
1003977 .proc_name = "iscsi_iser",
1004978 .this_id = -1,
1005979 .track_queue_depth = 1,
....@@ -1015,6 +989,7 @@
1015989 /* connection management */
1016990 .create_conn = iscsi_iser_conn_create,
1017991 .bind_conn = iscsi_iser_conn_bind,
992
+ .unbind_conn = iscsi_conn_unbind,
1018993 .destroy_conn = iscsi_conn_teardown,
1019994 .attr_is_visible = iser_attr_is_visible,
1020995 .set_param = iscsi_iser_set_param,