diff options
Diffstat (limited to 'drivers/scsi/scsi_transport_iscsi.c')
| -rw-r--r-- | drivers/scsi/scsi_transport_iscsi.c | 210 |
1 files changed, 44 insertions, 166 deletions
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index 99e76d458290..147c854e1d4d 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c | |||
| @@ -233,7 +233,6 @@ static void iscsi_session_release(struct device *dev) | |||
| 233 | 233 | ||
| 234 | shost = iscsi_session_to_shost(session); | 234 | shost = iscsi_session_to_shost(session); |
| 235 | scsi_host_put(shost); | 235 | scsi_host_put(shost); |
| 236 | kfree(session->targetname); | ||
| 237 | kfree(session); | 236 | kfree(session); |
| 238 | module_put(transport->owner); | 237 | module_put(transport->owner); |
| 239 | } | 238 | } |
| @@ -388,7 +387,6 @@ static void iscsi_conn_release(struct device *dev) | |||
| 388 | struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev); | 387 | struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev); |
| 389 | struct device *parent = conn->dev.parent; | 388 | struct device *parent = conn->dev.parent; |
| 390 | 389 | ||
| 391 | kfree(conn->persistent_address); | ||
| 392 | kfree(conn); | 390 | kfree(conn); |
| 393 | put_device(parent); | 391 | put_device(parent); |
| 394 | } | 392 | } |
| @@ -877,23 +875,13 @@ iscsi_if_destroy_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev | |||
| 877 | return 0; | 875 | return 0; |
| 878 | } | 876 | } |
| 879 | 877 | ||
| 880 | static void | ||
| 881 | iscsi_copy_param(struct iscsi_uevent *ev, uint32_t *value, char *data) | ||
| 882 | { | ||
| 883 | if (ev->u.set_param.len != sizeof(uint32_t)) | ||
| 884 | BUG(); | ||
| 885 | memcpy(value, data, min_t(uint32_t, sizeof(uint32_t), | ||
| 886 | ev->u.set_param.len)); | ||
| 887 | } | ||
| 888 | |||
| 889 | static int | 878 | static int |
| 890 | iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev) | 879 | iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev) |
| 891 | { | 880 | { |
| 892 | char *data = (char*)ev + sizeof(*ev); | 881 | char *data = (char*)ev + sizeof(*ev); |
| 893 | struct iscsi_cls_conn *conn; | 882 | struct iscsi_cls_conn *conn; |
| 894 | struct iscsi_cls_session *session; | 883 | struct iscsi_cls_session *session; |
| 895 | int err = 0; | 884 | int err = 0, value = 0; |
| 896 | uint32_t value = 0; | ||
| 897 | 885 | ||
| 898 | session = iscsi_session_lookup(ev->u.set_param.sid); | 886 | session = iscsi_session_lookup(ev->u.set_param.sid); |
| 899 | conn = iscsi_conn_lookup(ev->u.set_param.sid, ev->u.set_param.cid); | 887 | conn = iscsi_conn_lookup(ev->u.set_param.sid, ev->u.set_param.cid); |
| @@ -902,42 +890,13 @@ iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev) | |||
| 902 | 890 | ||
| 903 | switch (ev->u.set_param.param) { | 891 | switch (ev->u.set_param.param) { |
| 904 | case ISCSI_PARAM_SESS_RECOVERY_TMO: | 892 | case ISCSI_PARAM_SESS_RECOVERY_TMO: |
| 905 | iscsi_copy_param(ev, &value, data); | 893 | sscanf(data, "%d", &value); |
| 906 | if (value != 0) | 894 | if (value != 0) |
| 907 | session->recovery_tmo = value; | 895 | session->recovery_tmo = value; |
| 908 | break; | 896 | break; |
| 909 | case ISCSI_PARAM_TARGET_NAME: | ||
| 910 | /* this should not change between logins */ | ||
| 911 | if (session->targetname) | ||
| 912 | return 0; | ||
| 913 | |||
| 914 | session->targetname = kstrdup(data, GFP_KERNEL); | ||
| 915 | if (!session->targetname) | ||
| 916 | return -ENOMEM; | ||
| 917 | break; | ||
| 918 | case ISCSI_PARAM_TPGT: | ||
| 919 | iscsi_copy_param(ev, &value, data); | ||
| 920 | session->tpgt = value; | ||
| 921 | break; | ||
| 922 | case ISCSI_PARAM_PERSISTENT_PORT: | ||
| 923 | iscsi_copy_param(ev, &value, data); | ||
| 924 | conn->persistent_port = value; | ||
| 925 | break; | ||
| 926 | case ISCSI_PARAM_PERSISTENT_ADDRESS: | ||
| 927 | /* | ||
| 928 | * this is the address returned in discovery so it should | ||
| 929 | * not change between logins. | ||
| 930 | */ | ||
| 931 | if (conn->persistent_address) | ||
| 932 | return 0; | ||
| 933 | |||
| 934 | conn->persistent_address = kstrdup(data, GFP_KERNEL); | ||
| 935 | if (!conn->persistent_address) | ||
| 936 | return -ENOMEM; | ||
| 937 | break; | ||
| 938 | default: | 897 | default: |
| 939 | iscsi_copy_param(ev, &value, data); | 898 | err = transport->set_param(conn, ev->u.set_param.param, |
| 940 | err = transport->set_param(conn, ev->u.set_param.param, value); | 899 | data, ev->u.set_param.len); |
| 941 | } | 900 | } |
| 942 | 901 | ||
| 943 | return err; | 902 | return err; |
| @@ -1165,49 +1124,31 @@ struct class_device_attribute class_device_attr_##_prefix##_##_name = \ | |||
| 1165 | /* | 1124 | /* |
| 1166 | * iSCSI connection attrs | 1125 | * iSCSI connection attrs |
| 1167 | */ | 1126 | */ |
| 1168 | #define iscsi_conn_int_attr_show(param, format) \ | 1127 | #define iscsi_conn_attr_show(param) \ |
| 1169 | static ssize_t \ | 1128 | static ssize_t \ |
| 1170 | show_conn_int_param_##param(struct class_device *cdev, char *buf) \ | 1129 | show_conn_param_##param(struct class_device *cdev, char *buf) \ |
| 1171 | { \ | 1130 | { \ |
| 1172 | uint32_t value = 0; \ | ||
| 1173 | struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \ | 1131 | struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \ |
| 1174 | struct iscsi_transport *t = conn->transport; \ | 1132 | struct iscsi_transport *t = conn->transport; \ |
| 1175 | \ | 1133 | return t->get_conn_param(conn, param, buf); \ |
| 1176 | t->get_conn_param(conn, param, &value); \ | ||
| 1177 | return snprintf(buf, 20, format"\n", value); \ | ||
| 1178 | } | 1134 | } |
| 1179 | 1135 | ||
| 1180 | #define iscsi_conn_int_attr(field, param, format) \ | 1136 | #define iscsi_conn_attr(field, param) \ |
| 1181 | iscsi_conn_int_attr_show(param, format) \ | 1137 | iscsi_conn_attr_show(param) \ |
| 1182 | static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, show_conn_int_param_##param, \ | 1138 | static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, show_conn_param_##param, \ |
| 1183 | NULL); | 1139 | NULL); |
| 1184 | 1140 | ||
| 1185 | iscsi_conn_int_attr(max_recv_dlength, ISCSI_PARAM_MAX_RECV_DLENGTH, "%u"); | 1141 | iscsi_conn_attr(max_recv_dlength, ISCSI_PARAM_MAX_RECV_DLENGTH); |
| 1186 | iscsi_conn_int_attr(max_xmit_dlength, ISCSI_PARAM_MAX_XMIT_DLENGTH, "%u"); | 1142 | iscsi_conn_attr(max_xmit_dlength, ISCSI_PARAM_MAX_XMIT_DLENGTH); |
| 1187 | iscsi_conn_int_attr(header_digest, ISCSI_PARAM_HDRDGST_EN, "%d"); | 1143 | iscsi_conn_attr(header_digest, ISCSI_PARAM_HDRDGST_EN); |
| 1188 | iscsi_conn_int_attr(data_digest, ISCSI_PARAM_DATADGST_EN, "%d"); | 1144 | iscsi_conn_attr(data_digest, ISCSI_PARAM_DATADGST_EN); |
| 1189 | iscsi_conn_int_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN, "%d"); | 1145 | iscsi_conn_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN); |
| 1190 | iscsi_conn_int_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN, "%d"); | 1146 | iscsi_conn_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN); |
| 1191 | iscsi_conn_int_attr(persistent_port, ISCSI_PARAM_PERSISTENT_PORT, "%d"); | 1147 | iscsi_conn_attr(persistent_port, ISCSI_PARAM_PERSISTENT_PORT); |
| 1192 | iscsi_conn_int_attr(port, ISCSI_PARAM_CONN_PORT, "%d"); | 1148 | iscsi_conn_attr(port, ISCSI_PARAM_CONN_PORT); |
| 1193 | iscsi_conn_int_attr(exp_statsn, ISCSI_PARAM_EXP_STATSN, "%u"); | 1149 | iscsi_conn_attr(exp_statsn, ISCSI_PARAM_EXP_STATSN); |
| 1194 | 1150 | iscsi_conn_attr(persistent_address, ISCSI_PARAM_PERSISTENT_ADDRESS); | |
| 1195 | #define iscsi_conn_str_attr_show(param) \ | 1151 | iscsi_conn_attr(address, ISCSI_PARAM_CONN_ADDRESS); |
| 1196 | static ssize_t \ | ||
| 1197 | show_conn_str_param_##param(struct class_device *cdev, char *buf) \ | ||
| 1198 | { \ | ||
| 1199 | struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \ | ||
| 1200 | struct iscsi_transport *t = conn->transport; \ | ||
| 1201 | return t->get_conn_str_param(conn, param, buf); \ | ||
| 1202 | } | ||
| 1203 | |||
| 1204 | #define iscsi_conn_str_attr(field, param) \ | ||
| 1205 | iscsi_conn_str_attr_show(param) \ | ||
| 1206 | static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, show_conn_str_param_##param, \ | ||
| 1207 | NULL); | ||
| 1208 | |||
| 1209 | iscsi_conn_str_attr(persistent_address, ISCSI_PARAM_PERSISTENT_ADDRESS); | ||
| 1210 | iscsi_conn_str_attr(address, ISCSI_PARAM_CONN_ADDRESS); | ||
| 1211 | 1152 | ||
| 1212 | #define iscsi_cdev_to_session(_cdev) \ | 1153 | #define iscsi_cdev_to_session(_cdev) \ |
| 1213 | iscsi_dev_to_session(_cdev->dev) | 1154 | iscsi_dev_to_session(_cdev->dev) |
| @@ -1215,61 +1156,36 @@ iscsi_conn_str_attr(address, ISCSI_PARAM_CONN_ADDRESS); | |||
| 1215 | /* | 1156 | /* |
| 1216 | * iSCSI session attrs | 1157 | * iSCSI session attrs |
| 1217 | */ | 1158 | */ |
| 1218 | #define iscsi_session_int_attr_show(param, format) \ | 1159 | #define iscsi_session_attr_show(param) \ |
| 1219 | static ssize_t \ | ||
| 1220 | show_session_int_param_##param(struct class_device *cdev, char *buf) \ | ||
| 1221 | { \ | ||
| 1222 | uint32_t value = 0; \ | ||
| 1223 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ | ||
| 1224 | struct iscsi_transport *t = session->transport; \ | ||
| 1225 | \ | ||
| 1226 | t->get_session_param(session, param, &value); \ | ||
| 1227 | return snprintf(buf, 20, format"\n", value); \ | ||
| 1228 | } | ||
| 1229 | |||
| 1230 | #define iscsi_session_int_attr(field, param, format) \ | ||
| 1231 | iscsi_session_int_attr_show(param, format) \ | ||
| 1232 | static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_int_param_##param, \ | ||
| 1233 | NULL); | ||
| 1234 | |||
| 1235 | iscsi_session_int_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN, "%d"); | ||
| 1236 | iscsi_session_int_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T, "%hu"); | ||
| 1237 | iscsi_session_int_attr(immediate_data, ISCSI_PARAM_IMM_DATA_EN, "%d"); | ||
| 1238 | iscsi_session_int_attr(first_burst_len, ISCSI_PARAM_FIRST_BURST, "%u"); | ||
| 1239 | iscsi_session_int_attr(max_burst_len, ISCSI_PARAM_MAX_BURST, "%u"); | ||
| 1240 | iscsi_session_int_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN, "%d"); | ||
| 1241 | iscsi_session_int_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN, "%d"); | ||
| 1242 | iscsi_session_int_attr(erl, ISCSI_PARAM_ERL, "%d"); | ||
| 1243 | iscsi_session_int_attr(tpgt, ISCSI_PARAM_TPGT, "%d"); | ||
| 1244 | |||
| 1245 | #define iscsi_session_str_attr_show(param) \ | ||
| 1246 | static ssize_t \ | 1160 | static ssize_t \ |
| 1247 | show_session_str_param_##param(struct class_device *cdev, char *buf) \ | 1161 | show_session_param_##param(struct class_device *cdev, char *buf) \ |
| 1248 | { \ | 1162 | { \ |
| 1249 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ | 1163 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ |
| 1250 | struct iscsi_transport *t = session->transport; \ | 1164 | struct iscsi_transport *t = session->transport; \ |
| 1251 | return t->get_session_str_param(session, param, buf); \ | 1165 | return t->get_session_param(session, param, buf); \ |
| 1252 | } | 1166 | } |
| 1253 | 1167 | ||
| 1254 | #define iscsi_session_str_attr(field, param) \ | 1168 | #define iscsi_session_attr(field, param) \ |
| 1255 | iscsi_session_str_attr_show(param) \ | 1169 | iscsi_session_attr_show(param) \ |
| 1256 | static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_str_param_##param, \ | 1170 | static ISCSI_CLASS_ATTR(sess, field, S_IRUGO, show_session_param_##param, \ |
| 1257 | NULL); | 1171 | NULL); |
| 1258 | 1172 | ||
| 1259 | iscsi_session_str_attr(targetname, ISCSI_PARAM_TARGET_NAME); | 1173 | iscsi_session_attr(targetname, ISCSI_PARAM_TARGET_NAME); |
| 1174 | iscsi_session_attr(initial_r2t, ISCSI_PARAM_INITIAL_R2T_EN); | ||
| 1175 | iscsi_session_attr(max_outstanding_r2t, ISCSI_PARAM_MAX_R2T); | ||
| 1176 | iscsi_session_attr(immediate_data, ISCSI_PARAM_IMM_DATA_EN); | ||
| 1177 | iscsi_session_attr(first_burst_len, ISCSI_PARAM_FIRST_BURST); | ||
| 1178 | iscsi_session_attr(max_burst_len, ISCSI_PARAM_MAX_BURST); | ||
| 1179 | iscsi_session_attr(data_pdu_in_order, ISCSI_PARAM_PDU_INORDER_EN); | ||
| 1180 | iscsi_session_attr(data_seq_in_order, ISCSI_PARAM_DATASEQ_INORDER_EN); | ||
| 1181 | iscsi_session_attr(erl, ISCSI_PARAM_ERL); | ||
| 1182 | iscsi_session_attr(tpgt, ISCSI_PARAM_TPGT); | ||
| 1260 | 1183 | ||
| 1261 | /* | ||
| 1262 | * Private session and conn attrs. userspace uses several iscsi values | ||
| 1263 | * to identify each session between reboots. Some of these values may not | ||
| 1264 | * be present in the iscsi_transport/LLD driver becuase userspace handles | ||
| 1265 | * login (and failback for login redirect) so for these type of drivers | ||
| 1266 | * the class manages the attrs and values for the iscsi_transport/LLD | ||
| 1267 | */ | ||
| 1268 | #define iscsi_priv_session_attr_show(field, format) \ | 1184 | #define iscsi_priv_session_attr_show(field, format) \ |
| 1269 | static ssize_t \ | 1185 | static ssize_t \ |
| 1270 | show_priv_session_##field(struct class_device *cdev, char *buf) \ | 1186 | show_priv_session_##field(struct class_device *cdev, char *buf) \ |
| 1271 | { \ | 1187 | { \ |
| 1272 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ | 1188 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev);\ |
| 1273 | return sprintf(buf, format"\n", session->field); \ | 1189 | return sprintf(buf, format"\n", session->field); \ |
| 1274 | } | 1190 | } |
| 1275 | 1191 | ||
| @@ -1277,31 +1193,15 @@ show_priv_session_##field(struct class_device *cdev, char *buf) \ | |||
| 1277 | iscsi_priv_session_attr_show(field, format) \ | 1193 | iscsi_priv_session_attr_show(field, format) \ |
| 1278 | static ISCSI_CLASS_ATTR(priv_sess, field, S_IRUGO, show_priv_session_##field, \ | 1194 | static ISCSI_CLASS_ATTR(priv_sess, field, S_IRUGO, show_priv_session_##field, \ |
| 1279 | NULL) | 1195 | NULL) |
| 1280 | iscsi_priv_session_attr(targetname, "%s"); | ||
| 1281 | iscsi_priv_session_attr(tpgt, "%d"); | ||
| 1282 | iscsi_priv_session_attr(recovery_tmo, "%d"); | 1196 | iscsi_priv_session_attr(recovery_tmo, "%d"); |
| 1283 | 1197 | ||
| 1284 | #define iscsi_priv_conn_attr_show(field, format) \ | ||
| 1285 | static ssize_t \ | ||
| 1286 | show_priv_conn_##field(struct class_device *cdev, char *buf) \ | ||
| 1287 | { \ | ||
| 1288 | struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \ | ||
| 1289 | return sprintf(buf, format"\n", conn->field); \ | ||
| 1290 | } | ||
| 1291 | |||
| 1292 | #define iscsi_priv_conn_attr(field, format) \ | ||
| 1293 | iscsi_priv_conn_attr_show(field, format) \ | ||
| 1294 | static ISCSI_CLASS_ATTR(priv_conn, field, S_IRUGO, show_priv_conn_##field, \ | ||
| 1295 | NULL) | ||
| 1296 | iscsi_priv_conn_attr(persistent_address, "%s"); | ||
| 1297 | iscsi_priv_conn_attr(persistent_port, "%d"); | ||
| 1298 | |||
| 1299 | #define SETUP_PRIV_SESSION_RD_ATTR(field) \ | 1198 | #define SETUP_PRIV_SESSION_RD_ATTR(field) \ |
| 1300 | do { \ | 1199 | do { \ |
| 1301 | priv->session_attrs[count] = &class_device_attr_priv_sess_##field; \ | 1200 | priv->session_attrs[count] = &class_device_attr_priv_sess_##field; \ |
| 1302 | count++; \ | 1201 | count++; \ |
| 1303 | } while (0) | 1202 | } while (0) |
| 1304 | 1203 | ||
| 1204 | |||
| 1305 | #define SETUP_SESSION_RD_ATTR(field, param_flag) \ | 1205 | #define SETUP_SESSION_RD_ATTR(field, param_flag) \ |
| 1306 | do { \ | 1206 | do { \ |
| 1307 | if (tt->param_mask & param_flag) { \ | 1207 | if (tt->param_mask & param_flag) { \ |
| @@ -1310,12 +1210,6 @@ do { \ | |||
| 1310 | } \ | 1210 | } \ |
| 1311 | } while (0) | 1211 | } while (0) |
| 1312 | 1212 | ||
| 1313 | #define SETUP_PRIV_CONN_RD_ATTR(field) \ | ||
| 1314 | do { \ | ||
| 1315 | priv->conn_attrs[count] = &class_device_attr_priv_conn_##field; \ | ||
| 1316 | count++; \ | ||
| 1317 | } while (0) | ||
| 1318 | |||
| 1319 | #define SETUP_CONN_RD_ATTR(field, param_flag) \ | 1213 | #define SETUP_CONN_RD_ATTR(field, param_flag) \ |
| 1320 | do { \ | 1214 | do { \ |
| 1321 | if (tt->param_mask & param_flag) { \ | 1215 | if (tt->param_mask & param_flag) { \ |
| @@ -1442,16 +1336,8 @@ iscsi_register_transport(struct iscsi_transport *tt) | |||
| 1442 | SETUP_CONN_RD_ATTR(address, ISCSI_CONN_ADDRESS); | 1336 | SETUP_CONN_RD_ATTR(address, ISCSI_CONN_ADDRESS); |
| 1443 | SETUP_CONN_RD_ATTR(port, ISCSI_CONN_PORT); | 1337 | SETUP_CONN_RD_ATTR(port, ISCSI_CONN_PORT); |
| 1444 | SETUP_CONN_RD_ATTR(exp_statsn, ISCSI_EXP_STATSN); | 1338 | SETUP_CONN_RD_ATTR(exp_statsn, ISCSI_EXP_STATSN); |
| 1445 | 1339 | SETUP_CONN_RD_ATTR(persistent_address, ISCSI_PERSISTENT_ADDRESS); | |
| 1446 | if (tt->param_mask & ISCSI_PERSISTENT_ADDRESS) | 1340 | SETUP_CONN_RD_ATTR(persistent_port, ISCSI_PERSISTENT_PORT); |
| 1447 | SETUP_CONN_RD_ATTR(persistent_address, ISCSI_PERSISTENT_ADDRESS); | ||
| 1448 | else | ||
| 1449 | SETUP_PRIV_CONN_RD_ATTR(persistent_address); | ||
| 1450 | |||
| 1451 | if (tt->param_mask & ISCSI_PERSISTENT_PORT) | ||
| 1452 | SETUP_CONN_RD_ATTR(persistent_port, ISCSI_PERSISTENT_PORT); | ||
| 1453 | else | ||
| 1454 | SETUP_PRIV_CONN_RD_ATTR(persistent_port); | ||
| 1455 | 1341 | ||
| 1456 | BUG_ON(count > ISCSI_CONN_ATTRS); | 1342 | BUG_ON(count > ISCSI_CONN_ATTRS); |
| 1457 | priv->conn_attrs[count] = NULL; | 1343 | priv->conn_attrs[count] = NULL; |
| @@ -1471,18 +1357,10 @@ iscsi_register_transport(struct iscsi_transport *tt) | |||
| 1471 | SETUP_SESSION_RD_ATTR(data_pdu_in_order, ISCSI_PDU_INORDER_EN); | 1357 | SETUP_SESSION_RD_ATTR(data_pdu_in_order, ISCSI_PDU_INORDER_EN); |
| 1472 | SETUP_SESSION_RD_ATTR(data_seq_in_order, ISCSI_DATASEQ_INORDER_EN); | 1358 | SETUP_SESSION_RD_ATTR(data_seq_in_order, ISCSI_DATASEQ_INORDER_EN); |
| 1473 | SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL); | 1359 | SETUP_SESSION_RD_ATTR(erl, ISCSI_ERL); |
| 1360 | SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME); | ||
| 1361 | SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT); | ||
| 1474 | SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo); | 1362 | SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo); |
| 1475 | 1363 | ||
| 1476 | if (tt->param_mask & ISCSI_TARGET_NAME) | ||
| 1477 | SETUP_SESSION_RD_ATTR(targetname, ISCSI_TARGET_NAME); | ||
| 1478 | else | ||
| 1479 | SETUP_PRIV_SESSION_RD_ATTR(targetname); | ||
| 1480 | |||
| 1481 | if (tt->param_mask & ISCSI_TPGT) | ||
| 1482 | SETUP_SESSION_RD_ATTR(tpgt, ISCSI_TPGT); | ||
| 1483 | else | ||
| 1484 | SETUP_PRIV_SESSION_RD_ATTR(tpgt); | ||
| 1485 | |||
| 1486 | BUG_ON(count > ISCSI_SESSION_ATTRS); | 1364 | BUG_ON(count > ISCSI_SESSION_ATTRS); |
| 1487 | priv->session_attrs[count] = NULL; | 1365 | priv->session_attrs[count] = NULL; |
| 1488 | 1366 | ||
