aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2011-07-25 14:48:42 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-08-27 10:36:03 -0400
commit3128c6c73cdf3df92c3165bfb785ae50114d18bf (patch)
tree49af7993064b0140bda96c795a47fa336525d02c
parented1086e041b4870313dd0c0755f4bbc3b62d0d08 (diff)
[SCSI] iscsi cls: sysfs group is_visible callout for conn attrs
The iscsi class currently does not support writable sysfs attrs for LLD sysfs settings. This patch converts the iscsi class and drivers to use the attribute container sysfs group and the sysfs group's is_visible callout to be able to support readable or writable sysfs attrs. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.c38
-rw-r--r--drivers/scsi/be2iscsi/be_iscsi.c25
-rw-r--r--drivers/scsi/be2iscsi/be_iscsi.h2
-rw-r--r--drivers/scsi/be2iscsi/be_main.c12
-rw-r--r--drivers/scsi/bnx2i/bnx2i_iscsi.c37
-rw-r--r--drivers/scsi/cxgbi/cxgb3i/cxgb3i.c8
-rw-r--r--drivers/scsi/cxgbi/cxgb4i/cxgb4i.c8
-rw-r--r--drivers/scsi/cxgbi/libcxgbi.c26
-rw-r--r--drivers/scsi/cxgbi/libcxgbi.h1
-rw-r--r--drivers/scsi/iscsi_tcp.c38
-rw-r--r--drivers/scsi/qla4xxx/ql4_os.c21
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c93
-rw-r--r--include/scsi/scsi_transport_iscsi.h5
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
635static 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
635static struct scsi_host_template iscsi_iser_sht = { 660static 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
737mode_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
29mode_t be2iscsi_attr_is_visible(int param_type, int param);
30
29void beiscsi_offload_connection(struct beiscsi_conn *beiscsi_conn, 31void 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
2180static 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}
2567EXPORT_SYMBOL_GPL(cxgbi_iscsi_cleanup); 2567EXPORT_SYMBOL_GPL(cxgbi_iscsi_cleanup);
2568 2568
2569mode_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}
2593EXPORT_SYMBOL_GPL(cxgbi_attr_is_visible);
2594
2569static int __init libcxgbi_init_module(void) 2595static 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
710void cxgbi_cleanup_task(struct iscsi_task *task); 710void cxgbi_cleanup_task(struct iscsi_task *task);
711 711
712mode_t cxgbi_attr_is_visible(int param_type, int param);
712void cxgbi_get_conn_stats(struct iscsi_cls_conn *, struct iscsi_stats *); 713void cxgbi_get_conn_stats(struct iscsi_cls_conn *, struct iscsi_stats *);
713int cxgbi_set_conn_param(struct iscsi_cls_conn *, 714int 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
875static 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
875static int iscsi_sw_tcp_slave_alloc(struct scsi_device *sdev) 900static 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);
100static int qla4xxx_slave_configure(struct scsi_device *device); 100static int qla4xxx_slave_configure(struct scsi_device *device);
101static void qla4xxx_slave_destroy(struct scsi_device *sdev); 101static void qla4xxx_slave_destroy(struct scsi_device *sdev);
102static void qla4xxx_scan_start(struct Scsi_Host *shost); 102static void qla4xxx_scan_start(struct Scsi_Host *shost);
103static mode_t ql4_attr_is_visible(int param_type, int param);
103 104
104static struct qla4_8xxx_legacy_intr_set legacy_intr[] = 105static 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
166static struct scsi_transport_template *qla4xxx_scsi_transport; 167static struct scsi_transport_template *qla4xxx_scsi_transport;
167 168
169static 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
168static int qla4xxx_get_iface_param(struct iscsi_iface *iface, 185static 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, \
2030iscsi_conn_ep_attr(address, ISCSI_PARAM_CONN_ADDRESS); 2029iscsi_conn_ep_attr(address, ISCSI_PARAM_CONN_ADDRESS);
2031iscsi_conn_ep_attr(port, ISCSI_PARAM_CONN_PORT); 2030iscsi_conn_ep_attr(port, ISCSI_PARAM_CONN_PORT);
2032 2031
2032static 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
2049static 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
2091static 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) \
2175do { \
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) \
2183do { \ 2238do { \
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