diff options
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.c | 38 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_iscsi.c | 25 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_iscsi.h | 2 | ||||
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 12 | ||||
-rw-r--r-- | drivers/scsi/bnx2i/bnx2i_iscsi.c | 37 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | 8 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 8 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/libcxgbi.c | 26 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/libcxgbi.h | 1 | ||||
-rw-r--r-- | drivers/scsi/iscsi_tcp.c | 38 | ||||
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_os.c | 21 | ||||
-rw-r--r-- | drivers/scsi/scsi_transport_iscsi.c | 93 | ||||
-rw-r--r-- | include/scsi/scsi_transport_iscsi.h | 5 |
13 files changed, 229 insertions, 85 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c index 9c61b9c2c597..c716722628cf 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.c +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c | |||
@@ -632,6 +632,31 @@ iscsi_iser_ep_disconnect(struct iscsi_endpoint *ep) | |||
632 | iser_conn_terminate(ib_conn); | 632 | iser_conn_terminate(ib_conn); |
633 | } | 633 | } |
634 | 634 | ||
635 | static mode_t iser_attr_is_visible(int param_type, int param) | ||
636 | { | ||
637 | switch (param_type) { | ||
638 | case ISCSI_PARAM: | ||
639 | switch (param) { | ||
640 | case ISCSI_PARAM_MAX_RECV_DLENGTH: | ||
641 | case ISCSI_PARAM_MAX_XMIT_DLENGTH: | ||
642 | case ISCSI_PARAM_HDRDGST_EN: | ||
643 | case ISCSI_PARAM_DATADGST_EN: | ||
644 | case ISCSI_PARAM_CONN_ADDRESS: | ||
645 | case ISCSI_PARAM_CONN_PORT: | ||
646 | case ISCSI_PARAM_EXP_STATSN: | ||
647 | case ISCSI_PARAM_PERSISTENT_ADDRESS: | ||
648 | case ISCSI_PARAM_PERSISTENT_PORT: | ||
649 | case ISCSI_PARAM_PING_TMO: | ||
650 | case ISCSI_PARAM_RECV_TMO: | ||
651 | return S_IRUGO; | ||
652 | default: | ||
653 | return 0; | ||
654 | } | ||
655 | } | ||
656 | |||
657 | return 0; | ||
658 | } | ||
659 | |||
635 | static struct scsi_host_template iscsi_iser_sht = { | 660 | static struct scsi_host_template iscsi_iser_sht = { |
636 | .module = THIS_MODULE, | 661 | .module = THIS_MODULE, |
637 | .name = "iSCSI Initiator over iSER, v." DRV_VER, | 662 | .name = "iSCSI Initiator over iSER, v." DRV_VER, |
@@ -653,28 +678,18 @@ static struct iscsi_transport iscsi_iser_transport = { | |||
653 | .owner = THIS_MODULE, | 678 | .owner = THIS_MODULE, |
654 | .name = "iser", | 679 | .name = "iser", |
655 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T, | 680 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T, |
656 | .param_mask = ISCSI_MAX_RECV_DLENGTH | | 681 | .param_mask = ISCSI_INITIAL_R2T_EN | |
657 | ISCSI_MAX_XMIT_DLENGTH | | ||
658 | ISCSI_HDRDGST_EN | | ||
659 | ISCSI_DATADGST_EN | | ||
660 | ISCSI_INITIAL_R2T_EN | | ||
661 | ISCSI_MAX_R2T | | 682 | ISCSI_MAX_R2T | |
662 | ISCSI_IMM_DATA_EN | | 683 | ISCSI_IMM_DATA_EN | |
663 | ISCSI_FIRST_BURST | | 684 | ISCSI_FIRST_BURST | |
664 | ISCSI_MAX_BURST | | 685 | ISCSI_MAX_BURST | |
665 | ISCSI_PDU_INORDER_EN | | 686 | ISCSI_PDU_INORDER_EN | |
666 | ISCSI_DATASEQ_INORDER_EN | | 687 | ISCSI_DATASEQ_INORDER_EN | |
667 | ISCSI_CONN_PORT | | ||
668 | ISCSI_CONN_ADDRESS | | ||
669 | ISCSI_EXP_STATSN | | ||
670 | ISCSI_PERSISTENT_PORT | | ||
671 | ISCSI_PERSISTENT_ADDRESS | | ||
672 | ISCSI_TARGET_NAME | ISCSI_TPGT | | 688 | ISCSI_TARGET_NAME | ISCSI_TPGT | |
673 | ISCSI_USERNAME | ISCSI_PASSWORD | | 689 | ISCSI_USERNAME | ISCSI_PASSWORD | |
674 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | | 690 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | |
675 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | | 691 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | |
676 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | | 692 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | |
677 | ISCSI_PING_TMO | ISCSI_RECV_TMO | | ||
678 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, | 693 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, |
679 | .host_param_mask = ISCSI_HOST_HWADDRESS | | 694 | .host_param_mask = ISCSI_HOST_HWADDRESS | |
680 | ISCSI_HOST_NETDEV_NAME | | 695 | ISCSI_HOST_NETDEV_NAME | |
@@ -686,6 +701,7 @@ static struct iscsi_transport iscsi_iser_transport = { | |||
686 | .create_conn = iscsi_iser_conn_create, | 701 | .create_conn = iscsi_iser_conn_create, |
687 | .bind_conn = iscsi_iser_conn_bind, | 702 | .bind_conn = iscsi_iser_conn_bind, |
688 | .destroy_conn = iscsi_iser_conn_destroy, | 703 | .destroy_conn = iscsi_iser_conn_destroy, |
704 | .attr_is_visible = iser_attr_is_visible, | ||
689 | .set_param = iscsi_iser_set_param, | 705 | .set_param = iscsi_iser_set_param, |
690 | .get_conn_param = iscsi_conn_get_param, | 706 | .get_conn_param = iscsi_conn_get_param, |
691 | .get_ep_param = iscsi_iser_get_ep_param, | 707 | .get_ep_param = iscsi_iser_get_ep_param, |
diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c index 3cad10605023..87b7ae1ef488 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.c +++ b/drivers/scsi/be2iscsi/be_iscsi.c | |||
@@ -733,3 +733,28 @@ void beiscsi_ep_disconnect(struct iscsi_endpoint *ep) | |||
733 | beiscsi_unbind_conn_to_cid(phba, beiscsi_ep->ep_cid); | 733 | beiscsi_unbind_conn_to_cid(phba, beiscsi_ep->ep_cid); |
734 | iscsi_destroy_endpoint(beiscsi_ep->openiscsi_ep); | 734 | iscsi_destroy_endpoint(beiscsi_ep->openiscsi_ep); |
735 | } | 735 | } |
736 | |||
737 | mode_t be2iscsi_attr_is_visible(int param_type, int param) | ||
738 | { | ||
739 | switch (param_type) { | ||
740 | case ISCSI_PARAM: | ||
741 | switch (param) { | ||
742 | case ISCSI_PARAM_MAX_RECV_DLENGTH: | ||
743 | case ISCSI_PARAM_MAX_XMIT_DLENGTH: | ||
744 | case ISCSI_PARAM_HDRDGST_EN: | ||
745 | case ISCSI_PARAM_DATADGST_EN: | ||
746 | case ISCSI_PARAM_CONN_ADDRESS: | ||
747 | case ISCSI_PARAM_CONN_PORT: | ||
748 | case ISCSI_PARAM_EXP_STATSN: | ||
749 | case ISCSI_PARAM_PERSISTENT_ADDRESS: | ||
750 | case ISCSI_PARAM_PERSISTENT_PORT: | ||
751 | case ISCSI_PARAM_PING_TMO: | ||
752 | case ISCSI_PARAM_RECV_TMO: | ||
753 | return S_IRUGO; | ||
754 | default: | ||
755 | return 0; | ||
756 | } | ||
757 | } | ||
758 | |||
759 | return 0; | ||
760 | } | ||
diff --git a/drivers/scsi/be2iscsi/be_iscsi.h b/drivers/scsi/be2iscsi/be_iscsi.h index ff60b7fd92d6..4a1f2e393f31 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.h +++ b/drivers/scsi/be2iscsi/be_iscsi.h | |||
@@ -26,6 +26,8 @@ | |||
26 | #define BE2_IPV4 0x1 | 26 | #define BE2_IPV4 0x1 |
27 | #define BE2_IPV6 0x10 | 27 | #define BE2_IPV6 0x10 |
28 | 28 | ||
29 | mode_t be2iscsi_attr_is_visible(int param_type, int param); | ||
30 | |||
29 | void beiscsi_offload_connection(struct beiscsi_conn *beiscsi_conn, | 31 | void beiscsi_offload_connection(struct beiscsi_conn *beiscsi_conn, |
30 | struct beiscsi_offload_params *params); | 32 | struct beiscsi_offload_params *params); |
31 | 33 | ||
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c index 0a9bdfa3d939..d2a3e4a4d024 100644 --- a/drivers/scsi/be2iscsi/be_main.c +++ b/drivers/scsi/be2iscsi/be_main.c | |||
@@ -4364,10 +4364,7 @@ struct iscsi_transport beiscsi_iscsi_transport = { | |||
4364 | .name = DRV_NAME, | 4364 | .name = DRV_NAME, |
4365 | .caps = CAP_RECOVERY_L0 | CAP_HDRDGST | CAP_TEXT_NEGO | | 4365 | .caps = CAP_RECOVERY_L0 | CAP_HDRDGST | CAP_TEXT_NEGO | |
4366 | CAP_MULTI_R2T | CAP_DATADGST | CAP_DATA_PATH_OFFLOAD, | 4366 | CAP_MULTI_R2T | CAP_DATADGST | CAP_DATA_PATH_OFFLOAD, |
4367 | .param_mask = ISCSI_MAX_RECV_DLENGTH | | 4367 | .param_mask = |
4368 | ISCSI_MAX_XMIT_DLENGTH | | ||
4369 | ISCSI_HDRDGST_EN | | ||
4370 | ISCSI_DATADGST_EN | | ||
4371 | ISCSI_INITIAL_R2T_EN | | 4368 | ISCSI_INITIAL_R2T_EN | |
4372 | ISCSI_MAX_R2T | | 4369 | ISCSI_MAX_R2T | |
4373 | ISCSI_IMM_DATA_EN | | 4370 | ISCSI_IMM_DATA_EN | |
@@ -4376,17 +4373,11 @@ struct iscsi_transport beiscsi_iscsi_transport = { | |||
4376 | ISCSI_PDU_INORDER_EN | | 4373 | ISCSI_PDU_INORDER_EN | |
4377 | ISCSI_DATASEQ_INORDER_EN | | 4374 | ISCSI_DATASEQ_INORDER_EN | |
4378 | ISCSI_ERL | | 4375 | ISCSI_ERL | |
4379 | ISCSI_CONN_PORT | | ||
4380 | ISCSI_CONN_ADDRESS | | ||
4381 | ISCSI_EXP_STATSN | | ||
4382 | ISCSI_PERSISTENT_PORT | | ||
4383 | ISCSI_PERSISTENT_ADDRESS | | ||
4384 | ISCSI_TARGET_NAME | ISCSI_TPGT | | 4376 | ISCSI_TARGET_NAME | ISCSI_TPGT | |
4385 | ISCSI_USERNAME | ISCSI_PASSWORD | | 4377 | ISCSI_USERNAME | ISCSI_PASSWORD | |
4386 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | | 4378 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | |
4387 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | | 4379 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | |
4388 | ISCSI_LU_RESET_TMO | | 4380 | ISCSI_LU_RESET_TMO | |
4389 | ISCSI_PING_TMO | ISCSI_RECV_TMO | | ||
4390 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, | 4381 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, |
4391 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | | 4382 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | |
4392 | ISCSI_HOST_INITIATOR_NAME, | 4383 | ISCSI_HOST_INITIATOR_NAME, |
@@ -4395,6 +4386,7 @@ struct iscsi_transport beiscsi_iscsi_transport = { | |||
4395 | .create_conn = beiscsi_conn_create, | 4386 | .create_conn = beiscsi_conn_create, |
4396 | .bind_conn = beiscsi_conn_bind, | 4387 | .bind_conn = beiscsi_conn_bind, |
4397 | .destroy_conn = iscsi_conn_teardown, | 4388 | .destroy_conn = iscsi_conn_teardown, |
4389 | .attr_is_visible = be2iscsi_attr_is_visible, | ||
4398 | .set_param = beiscsi_set_param, | 4390 | .set_param = beiscsi_set_param, |
4399 | .get_conn_param = iscsi_conn_get_param, | 4391 | .get_conn_param = iscsi_conn_get_param, |
4400 | .get_session_param = iscsi_session_get_param, | 4392 | .get_session_param = iscsi_session_get_param, |
diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c index cffd4d75df56..2d529c9fa1ad 100644 --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c | |||
@@ -2177,6 +2177,30 @@ static int bnx2i_nl_set_path(struct Scsi_Host *shost, struct iscsi_path *params) | |||
2177 | return 0; | 2177 | return 0; |
2178 | } | 2178 | } |
2179 | 2179 | ||
2180 | static mode_t bnx2i_attr_is_visible(int param_type, int param) | ||
2181 | { | ||
2182 | switch (param_type) { | ||
2183 | case ISCSI_PARAM: | ||
2184 | switch (param) { | ||
2185 | case ISCSI_PARAM_MAX_RECV_DLENGTH: | ||
2186 | case ISCSI_PARAM_MAX_XMIT_DLENGTH: | ||
2187 | case ISCSI_PARAM_HDRDGST_EN: | ||
2188 | case ISCSI_PARAM_DATADGST_EN: | ||
2189 | case ISCSI_PARAM_CONN_ADDRESS: | ||
2190 | case ISCSI_PARAM_CONN_PORT: | ||
2191 | case ISCSI_PARAM_EXP_STATSN: | ||
2192 | case ISCSI_PARAM_PERSISTENT_ADDRESS: | ||
2193 | case ISCSI_PARAM_PERSISTENT_PORT: | ||
2194 | case ISCSI_PARAM_PING_TMO: | ||
2195 | case ISCSI_PARAM_RECV_TMO: | ||
2196 | return S_IRUGO; | ||
2197 | default: | ||
2198 | return 0; | ||
2199 | } | ||
2200 | } | ||
2201 | |||
2202 | return 0; | ||
2203 | } | ||
2180 | 2204 | ||
2181 | /* | 2205 | /* |
2182 | * 'Scsi_Host_Template' structure and 'iscsi_tranport' structure template | 2206 | * 'Scsi_Host_Template' structure and 'iscsi_tranport' structure template |
@@ -2207,11 +2231,7 @@ struct iscsi_transport bnx2i_iscsi_transport = { | |||
2207 | CAP_MULTI_R2T | CAP_DATADGST | | 2231 | CAP_MULTI_R2T | CAP_DATADGST | |
2208 | CAP_DATA_PATH_OFFLOAD | | 2232 | CAP_DATA_PATH_OFFLOAD | |
2209 | CAP_TEXT_NEGO, | 2233 | CAP_TEXT_NEGO, |
2210 | .param_mask = ISCSI_MAX_RECV_DLENGTH | | 2234 | .param_mask = ISCSI_INITIAL_R2T_EN | |
2211 | ISCSI_MAX_XMIT_DLENGTH | | ||
2212 | ISCSI_HDRDGST_EN | | ||
2213 | ISCSI_DATADGST_EN | | ||
2214 | ISCSI_INITIAL_R2T_EN | | ||
2215 | ISCSI_MAX_R2T | | 2235 | ISCSI_MAX_R2T | |
2216 | ISCSI_IMM_DATA_EN | | 2236 | ISCSI_IMM_DATA_EN | |
2217 | ISCSI_FIRST_BURST | | 2237 | ISCSI_FIRST_BURST | |
@@ -2219,17 +2239,11 @@ struct iscsi_transport bnx2i_iscsi_transport = { | |||
2219 | ISCSI_PDU_INORDER_EN | | 2239 | ISCSI_PDU_INORDER_EN | |
2220 | ISCSI_DATASEQ_INORDER_EN | | 2240 | ISCSI_DATASEQ_INORDER_EN | |
2221 | ISCSI_ERL | | 2241 | ISCSI_ERL | |
2222 | ISCSI_CONN_PORT | | ||
2223 | ISCSI_CONN_ADDRESS | | ||
2224 | ISCSI_EXP_STATSN | | ||
2225 | ISCSI_PERSISTENT_PORT | | ||
2226 | ISCSI_PERSISTENT_ADDRESS | | ||
2227 | ISCSI_TARGET_NAME | ISCSI_TPGT | | 2242 | ISCSI_TARGET_NAME | ISCSI_TPGT | |
2228 | ISCSI_USERNAME | ISCSI_PASSWORD | | 2243 | ISCSI_USERNAME | ISCSI_PASSWORD | |
2229 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | | 2244 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | |
2230 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | | 2245 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | |
2231 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | | 2246 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | |
2232 | ISCSI_PING_TMO | ISCSI_RECV_TMO | | ||
2233 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, | 2247 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, |
2234 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | | 2248 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | |
2235 | ISCSI_HOST_NETDEV_NAME, | 2249 | ISCSI_HOST_NETDEV_NAME, |
@@ -2238,6 +2252,7 @@ struct iscsi_transport bnx2i_iscsi_transport = { | |||
2238 | .create_conn = bnx2i_conn_create, | 2252 | .create_conn = bnx2i_conn_create, |
2239 | .bind_conn = bnx2i_conn_bind, | 2253 | .bind_conn = bnx2i_conn_bind, |
2240 | .destroy_conn = bnx2i_conn_destroy, | 2254 | .destroy_conn = bnx2i_conn_destroy, |
2255 | .attr_is_visible = bnx2i_attr_is_visible, | ||
2241 | .set_param = iscsi_set_param, | 2256 | .set_param = iscsi_set_param, |
2242 | .get_conn_param = iscsi_conn_get_param, | 2257 | .get_conn_param = iscsi_conn_get_param, |
2243 | .get_session_param = iscsi_session_get_param, | 2258 | .get_session_param = iscsi_session_get_param, |
diff --git a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c index bd22041e2789..c13b3f0a4f03 100644 --- a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c +++ b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | |||
@@ -106,25 +106,21 @@ static struct iscsi_transport cxgb3i_iscsi_transport = { | |||
106 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST | 106 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST |
107 | | CAP_DATADGST | CAP_DIGEST_OFFLOAD | | 107 | | CAP_DATADGST | CAP_DIGEST_OFFLOAD | |
108 | CAP_PADDING_OFFLOAD | CAP_TEXT_NEGO, | 108 | CAP_PADDING_OFFLOAD | CAP_TEXT_NEGO, |
109 | .param_mask = ISCSI_MAX_RECV_DLENGTH | ISCSI_MAX_XMIT_DLENGTH | | 109 | .param_mask = |
110 | ISCSI_HDRDGST_EN | ISCSI_DATADGST_EN | | ||
111 | ISCSI_INITIAL_R2T_EN | ISCSI_MAX_R2T | | 110 | ISCSI_INITIAL_R2T_EN | ISCSI_MAX_R2T | |
112 | ISCSI_IMM_DATA_EN | ISCSI_FIRST_BURST | | 111 | ISCSI_IMM_DATA_EN | ISCSI_FIRST_BURST | |
113 | ISCSI_MAX_BURST | ISCSI_PDU_INORDER_EN | | 112 | ISCSI_MAX_BURST | ISCSI_PDU_INORDER_EN | |
114 | ISCSI_DATASEQ_INORDER_EN | ISCSI_ERL | | 113 | ISCSI_DATASEQ_INORDER_EN | ISCSI_ERL | |
115 | ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS | | ||
116 | ISCSI_EXP_STATSN | ISCSI_PERSISTENT_PORT | | ||
117 | ISCSI_PERSISTENT_ADDRESS | | ||
118 | ISCSI_TARGET_NAME | ISCSI_TPGT | | 114 | ISCSI_TARGET_NAME | ISCSI_TPGT | |
119 | ISCSI_USERNAME | ISCSI_PASSWORD | | 115 | ISCSI_USERNAME | ISCSI_PASSWORD | |
120 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | | 116 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | |
121 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | | 117 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | |
122 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | | 118 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | |
123 | ISCSI_PING_TMO | ISCSI_RECV_TMO | | ||
124 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, | 119 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, |
125 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | | 120 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | |
126 | ISCSI_HOST_INITIATOR_NAME | | 121 | ISCSI_HOST_INITIATOR_NAME | |
127 | ISCSI_HOST_NETDEV_NAME, | 122 | ISCSI_HOST_NETDEV_NAME, |
123 | .attr_is_visible = cxgbi_attr_is_visible, | ||
128 | .get_host_param = cxgbi_get_host_param, | 124 | .get_host_param = cxgbi_get_host_param, |
129 | .set_host_param = cxgbi_set_host_param, | 125 | .set_host_param = cxgbi_set_host_param, |
130 | /* session management */ | 126 | /* session management */ |
diff --git a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c index ae13c4993aa3..89fca4b0787c 100644 --- a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c +++ b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | |||
@@ -107,25 +107,21 @@ static struct iscsi_transport cxgb4i_iscsi_transport = { | |||
107 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST | | 107 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST | |
108 | CAP_DATADGST | CAP_DIGEST_OFFLOAD | | 108 | CAP_DATADGST | CAP_DIGEST_OFFLOAD | |
109 | CAP_PADDING_OFFLOAD | CAP_TEXT_NEGO, | 109 | CAP_PADDING_OFFLOAD | CAP_TEXT_NEGO, |
110 | .param_mask = ISCSI_MAX_RECV_DLENGTH | ISCSI_MAX_XMIT_DLENGTH | | 110 | .param_mask = |
111 | ISCSI_HDRDGST_EN | ISCSI_DATADGST_EN | | ||
112 | ISCSI_INITIAL_R2T_EN | ISCSI_MAX_R2T | | 111 | ISCSI_INITIAL_R2T_EN | ISCSI_MAX_R2T | |
113 | ISCSI_IMM_DATA_EN | ISCSI_FIRST_BURST | | 112 | ISCSI_IMM_DATA_EN | ISCSI_FIRST_BURST | |
114 | ISCSI_MAX_BURST | ISCSI_PDU_INORDER_EN | | 113 | ISCSI_MAX_BURST | ISCSI_PDU_INORDER_EN | |
115 | ISCSI_DATASEQ_INORDER_EN | ISCSI_ERL | | 114 | ISCSI_DATASEQ_INORDER_EN | ISCSI_ERL | |
116 | ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS | | ||
117 | ISCSI_EXP_STATSN | ISCSI_PERSISTENT_PORT | | ||
118 | ISCSI_PERSISTENT_ADDRESS | | ||
119 | ISCSI_TARGET_NAME | ISCSI_TPGT | | 115 | ISCSI_TARGET_NAME | ISCSI_TPGT | |
120 | ISCSI_USERNAME | ISCSI_PASSWORD | | 116 | ISCSI_USERNAME | ISCSI_PASSWORD | |
121 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | | 117 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | |
122 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | | 118 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | |
123 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | | 119 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | |
124 | ISCSI_PING_TMO | ISCSI_RECV_TMO | | ||
125 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, | 120 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, |
126 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | | 121 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | |
127 | ISCSI_HOST_INITIATOR_NAME | | 122 | ISCSI_HOST_INITIATOR_NAME | |
128 | ISCSI_HOST_NETDEV_NAME, | 123 | ISCSI_HOST_NETDEV_NAME, |
124 | .attr_is_visible = cxgbi_attr_is_visible, | ||
129 | .get_host_param = cxgbi_get_host_param, | 125 | .get_host_param = cxgbi_get_host_param, |
130 | .set_host_param = cxgbi_set_host_param, | 126 | .set_host_param = cxgbi_set_host_param, |
131 | /* session management */ | 127 | /* session management */ |
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c index 77ac217ad5ce..e5f4f968ed7b 100644 --- a/drivers/scsi/cxgbi/libcxgbi.c +++ b/drivers/scsi/cxgbi/libcxgbi.c | |||
@@ -2566,6 +2566,32 @@ void cxgbi_iscsi_cleanup(struct iscsi_transport *itp, | |||
2566 | } | 2566 | } |
2567 | EXPORT_SYMBOL_GPL(cxgbi_iscsi_cleanup); | 2567 | EXPORT_SYMBOL_GPL(cxgbi_iscsi_cleanup); |
2568 | 2568 | ||
2569 | mode_t cxgbi_attr_is_visible(int param_type, int param) | ||
2570 | { | ||
2571 | switch (param_type) { | ||
2572 | case ISCSI_PARAM: | ||
2573 | switch (param) { | ||
2574 | case ISCSI_PARAM_MAX_RECV_DLENGTH: | ||
2575 | case ISCSI_PARAM_MAX_XMIT_DLENGTH: | ||
2576 | case ISCSI_PARAM_HDRDGST_EN: | ||
2577 | case ISCSI_PARAM_DATADGST_EN: | ||
2578 | case ISCSI_PARAM_CONN_ADDRESS: | ||
2579 | case ISCSI_PARAM_CONN_PORT: | ||
2580 | case ISCSI_PARAM_EXP_STATSN: | ||
2581 | case ISCSI_PARAM_PERSISTENT_ADDRESS: | ||
2582 | case ISCSI_PARAM_PERSISTENT_PORT: | ||
2583 | case ISCSI_PARAM_PING_TMO: | ||
2584 | case ISCSI_PARAM_RECV_TMO: | ||
2585 | return S_IRUGO; | ||
2586 | default: | ||
2587 | return 0; | ||
2588 | } | ||
2589 | } | ||
2590 | |||
2591 | return 0; | ||
2592 | } | ||
2593 | EXPORT_SYMBOL_GPL(cxgbi_attr_is_visible); | ||
2594 | |||
2569 | static int __init libcxgbi_init_module(void) | 2595 | static int __init libcxgbi_init_module(void) |
2570 | { | 2596 | { |
2571 | sw_tag_idx_bits = (__ilog2_u32(ISCSI_ITT_MASK)) + 1; | 2597 | sw_tag_idx_bits = (__ilog2_u32(ISCSI_ITT_MASK)) + 1; |
diff --git a/drivers/scsi/cxgbi/libcxgbi.h b/drivers/scsi/cxgbi/libcxgbi.h index 9267844519c9..5d453a0dba1f 100644 --- a/drivers/scsi/cxgbi/libcxgbi.h +++ b/drivers/scsi/cxgbi/libcxgbi.h | |||
@@ -709,6 +709,7 @@ int cxgbi_conn_xmit_pdu(struct iscsi_task *); | |||
709 | 709 | ||
710 | void cxgbi_cleanup_task(struct iscsi_task *task); | 710 | void cxgbi_cleanup_task(struct iscsi_task *task); |
711 | 711 | ||
712 | mode_t cxgbi_attr_is_visible(int param_type, int param); | ||
712 | void cxgbi_get_conn_stats(struct iscsi_cls_conn *, struct iscsi_stats *); | 713 | void cxgbi_get_conn_stats(struct iscsi_cls_conn *, struct iscsi_stats *); |
713 | int cxgbi_set_conn_param(struct iscsi_cls_conn *, | 714 | int cxgbi_set_conn_param(struct iscsi_cls_conn *, |
714 | enum iscsi_param, char *, int); | 715 | enum iscsi_param, char *, int); |
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index 7724414588fa..1dcb4d183bc9 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c | |||
@@ -872,6 +872,31 @@ static void iscsi_sw_tcp_session_destroy(struct iscsi_cls_session *cls_session) | |||
872 | iscsi_host_free(shost); | 872 | iscsi_host_free(shost); |
873 | } | 873 | } |
874 | 874 | ||
875 | static mode_t iscsi_sw_tcp_attr_is_visible(int param_type, int param) | ||
876 | { | ||
877 | switch (param_type) { | ||
878 | case ISCSI_PARAM: | ||
879 | switch (param) { | ||
880 | case ISCSI_PARAM_MAX_RECV_DLENGTH: | ||
881 | case ISCSI_PARAM_MAX_XMIT_DLENGTH: | ||
882 | case ISCSI_PARAM_HDRDGST_EN: | ||
883 | case ISCSI_PARAM_DATADGST_EN: | ||
884 | case ISCSI_PARAM_CONN_ADDRESS: | ||
885 | case ISCSI_PARAM_CONN_PORT: | ||
886 | case ISCSI_PARAM_EXP_STATSN: | ||
887 | case ISCSI_PARAM_PERSISTENT_ADDRESS: | ||
888 | case ISCSI_PARAM_PERSISTENT_PORT: | ||
889 | case ISCSI_PARAM_PING_TMO: | ||
890 | case ISCSI_PARAM_RECV_TMO: | ||
891 | return S_IRUGO; | ||
892 | default: | ||
893 | return 0; | ||
894 | } | ||
895 | } | ||
896 | |||
897 | return 0; | ||
898 | } | ||
899 | |||
875 | static int iscsi_sw_tcp_slave_alloc(struct scsi_device *sdev) | 900 | static int iscsi_sw_tcp_slave_alloc(struct scsi_device *sdev) |
876 | { | 901 | { |
877 | set_bit(QUEUE_FLAG_BIDI, &sdev->request_queue->queue_flags); | 902 | set_bit(QUEUE_FLAG_BIDI, &sdev->request_queue->queue_flags); |
@@ -910,11 +935,7 @@ static struct iscsi_transport iscsi_sw_tcp_transport = { | |||
910 | .name = "tcp", | 935 | .name = "tcp", |
911 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST | 936 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_HDRDGST |
912 | | CAP_DATADGST, | 937 | | CAP_DATADGST, |
913 | .param_mask = ISCSI_MAX_RECV_DLENGTH | | 938 | .param_mask = ISCSI_INITIAL_R2T_EN | |
914 | ISCSI_MAX_XMIT_DLENGTH | | ||
915 | ISCSI_HDRDGST_EN | | ||
916 | ISCSI_DATADGST_EN | | ||
917 | ISCSI_INITIAL_R2T_EN | | ||
918 | ISCSI_MAX_R2T | | 939 | ISCSI_MAX_R2T | |
919 | ISCSI_IMM_DATA_EN | | 940 | ISCSI_IMM_DATA_EN | |
920 | ISCSI_FIRST_BURST | | 941 | ISCSI_FIRST_BURST | |
@@ -922,17 +943,11 @@ static struct iscsi_transport iscsi_sw_tcp_transport = { | |||
922 | ISCSI_PDU_INORDER_EN | | 943 | ISCSI_PDU_INORDER_EN | |
923 | ISCSI_DATASEQ_INORDER_EN | | 944 | ISCSI_DATASEQ_INORDER_EN | |
924 | ISCSI_ERL | | 945 | ISCSI_ERL | |
925 | ISCSI_CONN_PORT | | ||
926 | ISCSI_CONN_ADDRESS | | ||
927 | ISCSI_EXP_STATSN | | ||
928 | ISCSI_PERSISTENT_PORT | | ||
929 | ISCSI_PERSISTENT_ADDRESS | | ||
930 | ISCSI_TARGET_NAME | ISCSI_TPGT | | 946 | ISCSI_TARGET_NAME | ISCSI_TPGT | |
931 | ISCSI_USERNAME | ISCSI_PASSWORD | | 947 | ISCSI_USERNAME | ISCSI_PASSWORD | |
932 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | | 948 | ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | |
933 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | | 949 | ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | |
934 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | | 950 | ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO | |
935 | ISCSI_PING_TMO | ISCSI_RECV_TMO | | ||
936 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, | 951 | ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, |
937 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | | 952 | .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS | |
938 | ISCSI_HOST_INITIATOR_NAME | | 953 | ISCSI_HOST_INITIATOR_NAME | |
@@ -944,6 +959,7 @@ static struct iscsi_transport iscsi_sw_tcp_transport = { | |||
944 | .create_conn = iscsi_sw_tcp_conn_create, | 959 | .create_conn = iscsi_sw_tcp_conn_create, |
945 | .bind_conn = iscsi_sw_tcp_conn_bind, | 960 | .bind_conn = iscsi_sw_tcp_conn_bind, |
946 | .destroy_conn = iscsi_sw_tcp_conn_destroy, | 961 | .destroy_conn = iscsi_sw_tcp_conn_destroy, |
962 | .attr_is_visible = iscsi_sw_tcp_attr_is_visible, | ||
947 | .set_param = iscsi_sw_tcp_conn_set_param, | 963 | .set_param = iscsi_sw_tcp_conn_set_param, |
948 | .get_conn_param = iscsi_sw_tcp_conn_get_param, | 964 | .get_conn_param = iscsi_sw_tcp_conn_get_param, |
949 | .get_session_param = iscsi_session_get_param, | 965 | .get_session_param = iscsi_session_get_param, |
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 32df0c5fc9cc..f8a1506cb76a 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c | |||
@@ -100,6 +100,7 @@ static int qla4xxx_slave_alloc(struct scsi_device *device); | |||
100 | static int qla4xxx_slave_configure(struct scsi_device *device); | 100 | static int qla4xxx_slave_configure(struct scsi_device *device); |
101 | static void qla4xxx_slave_destroy(struct scsi_device *sdev); | 101 | static void qla4xxx_slave_destroy(struct scsi_device *sdev); |
102 | static void qla4xxx_scan_start(struct Scsi_Host *shost); | 102 | static void qla4xxx_scan_start(struct Scsi_Host *shost); |
103 | static mode_t ql4_attr_is_visible(int param_type, int param); | ||
103 | 104 | ||
104 | static struct qla4_8xxx_legacy_intr_set legacy_intr[] = | 105 | static struct qla4_8xxx_legacy_intr_set legacy_intr[] = |
105 | QLA82XX_LEGACY_INTR_CONFIG; | 106 | QLA82XX_LEGACY_INTR_CONFIG; |
@@ -137,8 +138,7 @@ static struct iscsi_transport qla4xxx_iscsi_transport = { | |||
137 | .name = DRIVER_NAME, | 138 | .name = DRIVER_NAME, |
138 | .caps = CAP_FW_DB | CAP_SENDTARGETS_OFFLOAD | | 139 | .caps = CAP_FW_DB | CAP_SENDTARGETS_OFFLOAD | |
139 | CAP_DATA_PATH_OFFLOAD, | 140 | CAP_DATA_PATH_OFFLOAD, |
140 | .param_mask = ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS | | 141 | .param_mask = ISCSI_TARGET_NAME | ISCSI_TPGT | |
141 | ISCSI_TARGET_NAME | ISCSI_TPGT | | ||
142 | ISCSI_TARGET_ALIAS, | 142 | ISCSI_TARGET_ALIAS, |
143 | .host_param_mask = ISCSI_HOST_HWADDRESS | | 143 | .host_param_mask = ISCSI_HOST_HWADDRESS | |
144 | ISCSI_HOST_IPADDRESS | | 144 | ISCSI_HOST_IPADDRESS | |
@@ -155,6 +155,7 @@ static struct iscsi_transport qla4xxx_iscsi_transport = { | |||
155 | ISCSI_NET_IPV6_LINKLOCAL_AUTOCFG | | 155 | ISCSI_NET_IPV6_LINKLOCAL_AUTOCFG | |
156 | ISCSI_NET_IFACE_ENABLE, | 156 | ISCSI_NET_IFACE_ENABLE, |
157 | .tgt_dscvr = qla4xxx_tgt_dscvr, | 157 | .tgt_dscvr = qla4xxx_tgt_dscvr, |
158 | .attr_is_visible = ql4_attr_is_visible, | ||
158 | .get_conn_param = qla4xxx_conn_get_param, | 159 | .get_conn_param = qla4xxx_conn_get_param, |
159 | .get_session_param = qla4xxx_sess_get_param, | 160 | .get_session_param = qla4xxx_sess_get_param, |
160 | .get_host_param = qla4xxx_host_get_param, | 161 | .get_host_param = qla4xxx_host_get_param, |
@@ -165,6 +166,22 @@ static struct iscsi_transport qla4xxx_iscsi_transport = { | |||
165 | 166 | ||
166 | static struct scsi_transport_template *qla4xxx_scsi_transport; | 167 | static struct scsi_transport_template *qla4xxx_scsi_transport; |
167 | 168 | ||
169 | static mode_t ql4_attr_is_visible(int param_type, int param) | ||
170 | { | ||
171 | switch (param_type) { | ||
172 | case ISCSI_PARAM: | ||
173 | switch (param) { | ||
174 | case ISCSI_PARAM_CONN_ADDRESS: | ||
175 | case ISCSI_PARAM_CONN_PORT: | ||
176 | return S_IRUGO; | ||
177 | default: | ||
178 | return 0; | ||
179 | } | ||
180 | } | ||
181 | |||
182 | return 0; | ||
183 | } | ||
184 | |||
168 | static int qla4xxx_get_iface_param(struct iscsi_iface *iface, | 185 | static int qla4xxx_get_iface_param(struct iscsi_iface *iface, |
169 | enum iscsi_param_type param_type, | 186 | enum iscsi_param_type param_type, |
170 | int param, char *buf) | 187 | int param, char *buf) |
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index 4d5e64f429e7..e9eca98e1102 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c | |||
@@ -78,7 +78,6 @@ struct iscsi_internal { | |||
78 | 78 | ||
79 | struct device_attribute *host_attrs[ISCSI_HOST_ATTRS + 1]; | 79 | struct device_attribute *host_attrs[ISCSI_HOST_ATTRS + 1]; |
80 | struct transport_container conn_cont; | 80 | struct transport_container conn_cont; |
81 | struct device_attribute *conn_attrs[ISCSI_CONN_ATTRS + 1]; | ||
82 | struct transport_container session_cont; | 81 | struct transport_container session_cont; |
83 | struct device_attribute *session_attrs[ISCSI_SESSION_ATTRS + 1]; | 82 | struct device_attribute *session_attrs[ISCSI_SESSION_ATTRS + 1]; |
84 | }; | 83 | }; |
@@ -2030,6 +2029,70 @@ static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, \ | |||
2030 | iscsi_conn_ep_attr(address, ISCSI_PARAM_CONN_ADDRESS); | 2029 | iscsi_conn_ep_attr(address, ISCSI_PARAM_CONN_ADDRESS); |
2031 | iscsi_conn_ep_attr(port, ISCSI_PARAM_CONN_PORT); | 2030 | iscsi_conn_ep_attr(port, ISCSI_PARAM_CONN_PORT); |
2032 | 2031 | ||
2032 | static struct attribute *iscsi_conn_attrs[] = { | ||
2033 | &dev_attr_conn_max_recv_dlength.attr, | ||
2034 | &dev_attr_conn_max_xmit_dlength.attr, | ||
2035 | &dev_attr_conn_header_digest.attr, | ||
2036 | &dev_attr_conn_data_digest.attr, | ||
2037 | &dev_attr_conn_ifmarker.attr, | ||
2038 | &dev_attr_conn_ofmarker.attr, | ||
2039 | &dev_attr_conn_address.attr, | ||
2040 | &dev_attr_conn_port.attr, | ||
2041 | &dev_attr_conn_exp_statsn.attr, | ||
2042 | &dev_attr_conn_persistent_address.attr, | ||
2043 | &dev_attr_conn_persistent_port.attr, | ||
2044 | &dev_attr_conn_ping_tmo.attr, | ||
2045 | &dev_attr_conn_recv_tmo.attr, | ||
2046 | NULL, | ||
2047 | }; | ||
2048 | |||
2049 | static mode_t iscsi_conn_attr_is_visible(struct kobject *kobj, | ||
2050 | struct attribute *attr, int i) | ||
2051 | { | ||
2052 | struct device *cdev = container_of(kobj, struct device, kobj); | ||
2053 | struct iscsi_cls_conn *conn = transport_class_to_conn(cdev); | ||
2054 | struct iscsi_transport *t = conn->transport; | ||
2055 | int param; | ||
2056 | |||
2057 | if (attr == &dev_attr_conn_max_recv_dlength.attr) | ||
2058 | param = ISCSI_PARAM_MAX_RECV_DLENGTH; | ||
2059 | else if (attr == &dev_attr_conn_max_xmit_dlength.attr) | ||
2060 | param = ISCSI_PARAM_MAX_XMIT_DLENGTH; | ||
2061 | else if (attr == &dev_attr_conn_header_digest.attr) | ||
2062 | param = ISCSI_PARAM_HDRDGST_EN; | ||
2063 | else if (attr == &dev_attr_conn_data_digest.attr) | ||
2064 | param = ISCSI_PARAM_DATADGST_EN; | ||
2065 | else if (attr == &dev_attr_conn_ifmarker.attr) | ||
2066 | param = ISCSI_PARAM_IFMARKER_EN; | ||
2067 | else if (attr == &dev_attr_conn_ofmarker.attr) | ||
2068 | param = ISCSI_PARAM_OFMARKER_EN; | ||
2069 | else if (attr == &dev_attr_conn_address.attr) | ||
2070 | param = ISCSI_PARAM_CONN_ADDRESS; | ||
2071 | else if (attr == &dev_attr_conn_port.attr) | ||
2072 | param = ISCSI_PARAM_CONN_PORT; | ||
2073 | else if (attr == &dev_attr_conn_exp_statsn.attr) | ||
2074 | param = ISCSI_PARAM_EXP_STATSN; | ||
2075 | else if (attr == &dev_attr_conn_persistent_address.attr) | ||
2076 | param = ISCSI_PARAM_PERSISTENT_ADDRESS; | ||
2077 | else if (attr == &dev_attr_conn_persistent_port.attr) | ||
2078 | param = ISCSI_PARAM_PERSISTENT_PORT; | ||
2079 | else if (attr == &dev_attr_conn_ping_tmo.attr) | ||
2080 | param = ISCSI_PARAM_PING_TMO; | ||
2081 | else if (attr == &dev_attr_conn_recv_tmo.attr) | ||
2082 | param = ISCSI_PARAM_RECV_TMO; | ||
2083 | else { | ||
2084 | WARN_ONCE(1, "Invalid conn attr"); | ||
2085 | return 0; | ||
2086 | } | ||
2087 | |||
2088 | return t->attr_is_visible(ISCSI_PARAM, param); | ||
2089 | } | ||
2090 | |||
2091 | static struct attribute_group iscsi_conn_group = { | ||
2092 | .attrs = iscsi_conn_attrs, | ||
2093 | .is_visible = iscsi_conn_attr_is_visible, | ||
2094 | }; | ||
2095 | |||
2033 | /* | 2096 | /* |
2034 | * iSCSI session attrs | 2097 | * iSCSI session attrs |
2035 | */ | 2098 | */ |
@@ -2171,14 +2234,6 @@ do { \ | |||
2171 | } \ | 2234 | } \ |
2172 | } while (0) | 2235 | } while (0) |
2173 | 2236 | ||
2174 | #define SETUP_CONN_RD_ATTR(field, param_flag) \ | ||
2175 | do { \ | ||
2176 | if (tt->param_mask & param_flag) { \ | ||
2177 | priv->conn_attrs[count] = &dev_attr_conn_##field; \ | ||
2178 | count++; \ | ||
2179 | } \ | ||
2180 | } while (0) | ||
2181 | |||
2182 | #define SETUP_HOST_RD_ATTR(field, param_flag) \ | 2237 | #define SETUP_HOST_RD_ATTR(field, param_flag) \ |
2183 | do { \ | 2238 | do { \ |
2184 | if (tt->host_param_mask & param_flag) { \ | 2239 | if (tt->host_param_mask & param_flag) { \ |
@@ -2299,29 +2354,11 @@ iscsi_register_transport(struct iscsi_transport *tt) | |||
2299 | count = 0; | 2354 | count = 0; |
2300 | 2355 | ||
2301 | /* connection parameters */ | 2356 | /* connection parameters */ |
2302 | priv->conn_cont.ac.attrs = &priv->conn_attrs[0]; | ||
2303 | priv->conn_cont.ac.class = &iscsi_connection_class.class; | 2357 | priv->conn_cont.ac.class = &iscsi_connection_class.class; |
2304 | priv->conn_cont.ac.match = iscsi_conn_match; | 2358 | priv->conn_cont.ac.match = iscsi_conn_match; |
2359 | priv->conn_cont.ac.grp = &iscsi_conn_group; | ||
2305 | transport_container_register(&priv->conn_cont); | 2360 | transport_container_register(&priv->conn_cont); |
2306 | 2361 | ||
2307 | SETUP_CONN_RD_ATTR(max_recv_dlength, ISCSI_MAX_RECV_DLENGTH); | ||
2308 | SETUP_CONN_RD_ATTR(max_xmit_dlength, ISCSI_MAX_XMIT_DLENGTH); | ||
2309 | SETUP_CONN_RD_ATTR(header_digest, ISCSI_HDRDGST_EN); | ||
2310 | SETUP_CONN_RD_ATTR(data_digest, ISCSI_DATADGST_EN); | ||
2311 | SETUP_CONN_RD_ATTR(ifmarker, ISCSI_IFMARKER_EN); | ||
2312 | SETUP_CONN_RD_ATTR(ofmarker, ISCSI_OFMARKER_EN); | ||
2313 | SETUP_CONN_RD_ATTR(address, ISCSI_CONN_ADDRESS); | ||
2314 | SETUP_CONN_RD_ATTR(port, ISCSI_CONN_PORT); | ||
2315 | SETUP_CONN_RD_ATTR(exp_statsn, ISCSI_EXP_STATSN); | ||
2316 | SETUP_CONN_RD_ATTR(persistent_address, ISCSI_PERSISTENT_ADDRESS); | ||
2317 | SETUP_CONN_RD_ATTR(persistent_port, ISCSI_PERSISTENT_PORT); | ||
2318 | SETUP_CONN_RD_ATTR(ping_tmo, ISCSI_PING_TMO); | ||
2319 | SETUP_CONN_RD_ATTR(recv_tmo, ISCSI_RECV_TMO); | ||
2320 | |||
2321 | BUG_ON(count > ISCSI_CONN_ATTRS); | ||
2322 | priv->conn_attrs[count] = NULL; | ||
2323 | count = 0; | ||
2324 | |||
2325 | /* session parameters */ | 2362 | /* session parameters */ |
2326 | priv->session_cont.ac.attrs = &priv->session_attrs[0]; | 2363 | priv->session_cont.ac.attrs = &priv->session_attrs[0]; |
2327 | priv->session_cont.ac.class = &iscsi_session_class.class; | 2364 | priv->session_cont.ac.class = &iscsi_session_class.class; |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index e1f210a173a5..8918329feaac 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
@@ -144,8 +144,10 @@ struct iscsi_transport { | |||
144 | int (*get_iface_param) (struct iscsi_iface *iface, | 144 | int (*get_iface_param) (struct iscsi_iface *iface, |
145 | enum iscsi_param_type param_type, | 145 | enum iscsi_param_type param_type, |
146 | int param, char *buf); | 146 | int param, char *buf); |
147 | mode_t (*attr_is_visible)(int param_type, int param); | ||
147 | }; | 148 | }; |
148 | 149 | ||
150 | |||
149 | /* | 151 | /* |
150 | * transport registration upcalls | 152 | * transport registration upcalls |
151 | */ | 153 | */ |
@@ -178,6 +180,9 @@ struct iscsi_cls_conn { | |||
178 | #define iscsi_dev_to_conn(_dev) \ | 180 | #define iscsi_dev_to_conn(_dev) \ |
179 | container_of(_dev, struct iscsi_cls_conn, dev) | 181 | container_of(_dev, struct iscsi_cls_conn, dev) |
180 | 182 | ||
183 | #define transport_class_to_conn(_cdev) \ | ||
184 | iscsi_dev_to_conn(_cdev->parent) | ||
185 | |||
181 | #define iscsi_conn_to_session(_conn) \ | 186 | #define iscsi_conn_to_session(_conn) \ |
182 | iscsi_dev_to_session(_conn->dev.parent) | 187 | iscsi_dev_to_session(_conn->dev.parent) |
183 | 188 | ||