aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2007-05-30 13:57:16 -0400
committerJames Bottomley <jejb@mulgrave.(none)>2007-06-01 12:58:58 -0400
commitb2c6416736b847b91950bd43cc5153e11a1f83ee (patch)
tree7d7642d9b62b22aceedf8e86570783364ecd99d1 /drivers/scsi
parent857ae0bdb72999936a28ce621e38e2e288c485da (diff)
[SCSI] iscsi class, iscsi_tcp, ib_iser: add sysfs chap file
The attached patches add sysfs files for the chap settings to the iscsi transport class, iscsi_tcp and ib_iser. This is needed for software iscsi because there are times when iscsid can die and it will need to reread the values it was using. And it is needed by qla4xxx for basic management opertaions. This patch does not hook in qla4xxx yet, because I am not sure the mbx command to use. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Cc: Roland Dreier <rdreier@cisco.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/iscsi_tcp.c5
-rw-r--r--drivers/scsi/libiscsi.c40
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c39
3 files changed, 68 insertions, 16 deletions
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index b2827d112cb0..1e722f5aabd4 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -2186,8 +2186,9 @@ static struct iscsi_transport iscsi_tcp_transport = {
2186 ISCSI_EXP_STATSN | 2186 ISCSI_EXP_STATSN |
2187 ISCSI_PERSISTENT_PORT | 2187 ISCSI_PERSISTENT_PORT |
2188 ISCSI_PERSISTENT_ADDRESS | 2188 ISCSI_PERSISTENT_ADDRESS |
2189 ISCSI_TARGET_NAME | 2189 ISCSI_TARGET_NAME | ISCSI_TPGT |
2190 ISCSI_TPGT, 2190 ISCSI_USERNAME | ISCSI_PASSWORD |
2191 ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN,
2191 .host_param_mask = ISCSI_HOST_HWADDRESS | 2192 .host_param_mask = ISCSI_HOST_HWADDRESS |
2192 ISCSI_HOST_INITIATOR_NAME, 2193 ISCSI_HOST_INITIATOR_NAME,
2193 .host_template = &iscsi_sht, 2194 .host_template = &iscsi_sht,
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 0a9c64e9ce8b..63981edf9ab9 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1461,6 +1461,10 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
1461 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds); 1461 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
1462 iscsi_pool_free(&session->cmdpool, (void**)session->cmds); 1462 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
1463 1463
1464 kfree(session->password);
1465 kfree(session->password_in);
1466 kfree(session->username);
1467 kfree(session->username_in);
1464 kfree(session->targetname); 1468 kfree(session->targetname);
1465 kfree(session->hwaddress); 1469 kfree(session->hwaddress);
1466 kfree(session->initiatorname); 1470 kfree(session->initiatorname);
@@ -1869,6 +1873,30 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn,
1869 case ISCSI_PARAM_EXP_STATSN: 1873 case ISCSI_PARAM_EXP_STATSN:
1870 sscanf(buf, "%u", &conn->exp_statsn); 1874 sscanf(buf, "%u", &conn->exp_statsn);
1871 break; 1875 break;
1876 case ISCSI_PARAM_USERNAME:
1877 kfree(session->username);
1878 session->username = kstrdup(buf, GFP_KERNEL);
1879 if (!session->username)
1880 return -ENOMEM;
1881 break;
1882 case ISCSI_PARAM_USERNAME_IN:
1883 kfree(session->username_in);
1884 session->username_in = kstrdup(buf, GFP_KERNEL);
1885 if (!session->username_in)
1886 return -ENOMEM;
1887 break;
1888 case ISCSI_PARAM_PASSWORD:
1889 kfree(session->password);
1890 session->password = kstrdup(buf, GFP_KERNEL);
1891 if (!session->password)
1892 return -ENOMEM;
1893 break;
1894 case ISCSI_PARAM_PASSWORD_IN:
1895 kfree(session->password_in);
1896 session->password_in = kstrdup(buf, GFP_KERNEL);
1897 if (!session->password_in)
1898 return -ENOMEM;
1899 break;
1872 case ISCSI_PARAM_TARGET_NAME: 1900 case ISCSI_PARAM_TARGET_NAME:
1873 /* this should not change between logins */ 1901 /* this should not change between logins */
1874 if (session->targetname) 1902 if (session->targetname)
@@ -1942,6 +1970,18 @@ int iscsi_session_get_param(struct iscsi_cls_session *cls_session,
1942 case ISCSI_PARAM_TPGT: 1970 case ISCSI_PARAM_TPGT:
1943 len = sprintf(buf, "%d\n", session->tpgt); 1971 len = sprintf(buf, "%d\n", session->tpgt);
1944 break; 1972 break;
1973 case ISCSI_PARAM_USERNAME:
1974 len = sprintf(buf, "%s\n", session->username);
1975 break;
1976 case ISCSI_PARAM_USERNAME_IN:
1977 len = sprintf(buf, "%s\n", session->username_in);
1978 break;
1979 case ISCSI_PARAM_PASSWORD:
1980 len = sprintf(buf, "%s\n", session->password);
1981 break;
1982 case ISCSI_PARAM_PASSWORD_IN:
1983 len = sprintf(buf, "%s\n", session->password_in);
1984 break;
1945 default: 1985 default:
1946 return -ENOSYS; 1986 return -ENOSYS;
1947 } 1987 }
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index 5ec2fbea8937..341d4fb5c6f8 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -30,7 +30,7 @@
30#include <scsi/scsi_transport_iscsi.h> 30#include <scsi/scsi_transport_iscsi.h>
31#include <scsi/iscsi_if.h> 31#include <scsi/iscsi_if.h>
32 32
33#define ISCSI_SESSION_ATTRS 11 33#define ISCSI_SESSION_ATTRS 15
34#define ISCSI_CONN_ATTRS 11 34#define ISCSI_CONN_ATTRS 11
35#define ISCSI_HOST_ATTRS 2 35#define ISCSI_HOST_ATTRS 2
36#define ISCSI_TRANSPORT_VERSION "2.0-724" 36#define ISCSI_TRANSPORT_VERSION "2.0-724"
@@ -1196,30 +1196,37 @@ iscsi_conn_attr(address, ISCSI_PARAM_CONN_ADDRESS);
1196/* 1196/*
1197 * iSCSI session attrs 1197 * iSCSI session attrs
1198 */ 1198 */
1199#define iscsi_session_attr_show(param) \ 1199#define iscsi_session_attr_show(param, perm) \
1200static ssize_t \ 1200static ssize_t \
1201show_session_param_##param(struct class_device *cdev, char *buf) \ 1201show_session_param_##param(struct class_device *cdev, char *buf) \
1202{ \ 1202{ \
1203 struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ 1203 struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \
1204 struct iscsi_transport *t = session->transport; \ 1204 struct iscsi_transport *t = session->transport; \
1205 \
1206 if (perm && !capable(CAP_SYS_ADMIN)) \
1207 return -EACCES; \
1205 return t->get_session_param(session, param, buf); \ 1208 return t->get_session_param(session, param, buf); \
1206} 1209}
1207 1210
1208#define iscsi_session_attr(field, param) \ 1211#define iscsi_session_attr(field, param, perm) \
1209 iscsi_session_attr_show(param) \ 1212 iscsi_session_attr_show(param, perm) \
1210static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_param_##param, \ 1213static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_param_##param, \
1211 NULL); 1214 NULL);
1212 1215
1213iscsi_session_attr(targetname, ISCSI_PARAM_TARGET_NAME); 1216iscsi_session_attr(targetname, ISCSI_PARAM_TARGET_NAME, 0);
1214iscsi_session_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN); 1217iscsi_session_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN, 0);
1215iscsi_session_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T); 1218iscsi_session_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T, 0);
1216iscsi_session_attr(immediate_data, ISCSI_PARAM_IMM_DATA_EN); 1219iscsi_session_attr(immediate_data, ISCSI_PARAM_IMM_DATA_EN, 0);
1217iscsi_session_attr(first_burst_len, ISCSI_PARAM_FIRST_BURST); 1220iscsi_session_attr(first_burst_len, ISCSI_PARAM_FIRST_BURST, 0);
1218iscsi_session_attr(max_burst_len, ISCSI_PARAM_MAX_BURST); 1221iscsi_session_attr(max_burst_len, ISCSI_PARAM_MAX_BURST, 0);
1219iscsi_session_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN); 1222iscsi_session_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN, 0);
1220iscsi_session_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN); 1223iscsi_session_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN, 0);
1221iscsi_session_attr(erl, ISCSI_PARAM_ERL); 1224iscsi_session_attr(erl, ISCSI_PARAM_ERL, 0);
1222iscsi_session_attr(tpgt, ISCSI_PARAM_TPGT); 1225iscsi_session_attr(tpgt, ISCSI_PARAM_TPGT, 0);
1226iscsi_session_attr(username, ISCSI_PARAM_USERNAME, 1);
1227iscsi_session_attr(username_in, ISCSI_PARAM_USERNAME_IN, 1);
1228iscsi_session_attr(password, ISCSI_PARAM_PASSWORD, 1);
1229iscsi_session_attr(password_in, ISCSI_PARAM_PASSWORD_IN, 1);
1223 1230
1224#define iscsi_priv_session_attr_show(field, format) \ 1231#define iscsi_priv_session_attr_show(field, format) \
1225static ssize_t \ 1232static ssize_t \
@@ -1433,6 +1440,10 @@ iscsi_register_transport(struct iscsi_transport *tt)
1433 SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL); 1440 SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL);
1434 SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME); 1441 SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME);
1435 SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT); 1442 SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT);
1443 SETUP_SESSION_RD_ATTR(password, ISCSI_USERNAME);
1444 SETUP_SESSION_RD_ATTR(password_in, ISCSI_USERNAME_IN);
1445 SETUP_SESSION_RD_ATTR(username, ISCSI_PASSWORD);
1446 SETUP_SESSION_RD_ATTR(username_in, ISCSI_PASSWORD_IN);
1436 SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo); 1447 SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo);
1437 1448
1438 BUG_ON(count > ISCSI_SESSION_ATTRS); 1449 BUG_ON(count > ISCSI_SESSION_ATTRS);