diff options
author | Andy Grover <agrover@redhat.com> | 2011-07-19 04:55:10 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-07-22 05:37:43 -0400 |
commit | e3d6f909ed803d92a5ac9b4a2c087e0eae9b90d0 (patch) | |
tree | 2eb65e958a2cc35c896a0e184ec09edcb9076b3b /drivers/target/target_core_configfs.c | |
parent | a8c6da90b823fb94ca76ca0df6bb44e6e205dc87 (diff) |
target: Core cleanups from AGrover (round 1)
This patch contains the squashed version of a number of cleanups and
minor fixes from Andy's initial series (round 1) for target core this
past spring. The condensed log looks like:
target: use errno values instead of returning -1 for everything
target: Rename transport_calc_sg_num to transport_init_task_sg
target: Fix leak in error path in transport_init_task_sg
target/pscsi: Remove pscsi_get_sh() usage
target: Make two runtime checks into WARN_ONs
target: Remove hba queue depth and convert to spin_lock_irq usage
target: dev->dev_status_queue_obj is unused
target: Make struct se_queue_req.cmd type struct se_cmd *
target: Remove __transport_get_qr_from_queue()
target: Rename se_dev->g_se_dev_list to se_dev_node
target: Remove struct se_global
target: Simplify scsi mib index table code
target: Make dev_queue_obj a member of se_device instead of a pointer
target: remove extraneous returns at end of void functions
target: Ensure transport_dump_vpd_ident_type returns null-terminated str
target: Function pointers don't need to use '&' to be assigned
target: Fix comment in __transport_execute_tasks()
target: Misc style cleanups
target: rename struct pr_reservation_template to pr_reservation
target: Remove #defines that just perform indirection
target: Inline transport_get_task_from_execute_queue()
target: Minor header comment fixes
Signed-off-by: Andy Grover <agrover@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_configfs.c')
-rw-r--r-- | drivers/target/target_core_configfs.c | 162 |
1 files changed, 84 insertions, 78 deletions
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index c6140004307b..64418efa671b 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/parser.h> | 37 | #include <linux/parser.h> |
38 | #include <linux/syscalls.h> | 38 | #include <linux/syscalls.h> |
39 | #include <linux/configfs.h> | 39 | #include <linux/configfs.h> |
40 | #include <linux/spinlock.h> | ||
40 | 41 | ||
41 | #include <target/target_core_base.h> | 42 | #include <target/target_core_base.h> |
42 | #include <target/target_core_device.h> | 43 | #include <target/target_core_device.h> |
@@ -52,6 +53,8 @@ | |||
52 | #include "target_core_rd.h" | 53 | #include "target_core_rd.h" |
53 | #include "target_core_stat.h" | 54 | #include "target_core_stat.h" |
54 | 55 | ||
56 | extern struct t10_alua_lu_gp *default_lu_gp; | ||
57 | |||
55 | static struct list_head g_tf_list; | 58 | static struct list_head g_tf_list; |
56 | static struct mutex g_tf_lock; | 59 | static struct mutex g_tf_lock; |
57 | 60 | ||
@@ -61,6 +64,13 @@ struct target_core_configfs_attribute { | |||
61 | ssize_t (*store)(void *, const char *, size_t); | 64 | ssize_t (*store)(void *, const char *, size_t); |
62 | }; | 65 | }; |
63 | 66 | ||
67 | static struct config_group target_core_hbagroup; | ||
68 | static struct config_group alua_group; | ||
69 | static struct config_group alua_lu_gps_group; | ||
70 | |||
71 | static DEFINE_SPINLOCK(se_device_lock); | ||
72 | static LIST_HEAD(se_dev_list); | ||
73 | |||
64 | static inline struct se_hba * | 74 | static inline struct se_hba * |
65 | item_to_hba(struct config_item *item) | 75 | item_to_hba(struct config_item *item) |
66 | { | 76 | { |
@@ -298,21 +308,21 @@ struct target_fabric_configfs *target_fabric_configfs_init( | |||
298 | 308 | ||
299 | if (!(fabric_mod)) { | 309 | if (!(fabric_mod)) { |
300 | printk(KERN_ERR "Missing struct module *fabric_mod pointer\n"); | 310 | printk(KERN_ERR "Missing struct module *fabric_mod pointer\n"); |
301 | return NULL; | 311 | return ERR_PTR(-EINVAL); |
302 | } | 312 | } |
303 | if (!(name)) { | 313 | if (!(name)) { |
304 | printk(KERN_ERR "Unable to locate passed fabric name\n"); | 314 | printk(KERN_ERR "Unable to locate passed fabric name\n"); |
305 | return NULL; | 315 | return ERR_PTR(-EINVAL); |
306 | } | 316 | } |
307 | if (strlen(name) >= TARGET_FABRIC_NAME_SIZE) { | 317 | if (strlen(name) >= TARGET_FABRIC_NAME_SIZE) { |
308 | printk(KERN_ERR "Passed name: %s exceeds TARGET_FABRIC" | 318 | printk(KERN_ERR "Passed name: %s exceeds TARGET_FABRIC" |
309 | "_NAME_SIZE\n", name); | 319 | "_NAME_SIZE\n", name); |
310 | return NULL; | 320 | return ERR_PTR(-EINVAL); |
311 | } | 321 | } |
312 | 322 | ||
313 | tf = kzalloc(sizeof(struct target_fabric_configfs), GFP_KERNEL); | 323 | tf = kzalloc(sizeof(struct target_fabric_configfs), GFP_KERNEL); |
314 | if (!(tf)) | 324 | if (!(tf)) |
315 | return NULL; | 325 | return ERR_PTR(-ENOMEM); |
316 | 326 | ||
317 | INIT_LIST_HEAD(&tf->tf_list); | 327 | INIT_LIST_HEAD(&tf->tf_list); |
318 | atomic_set(&tf->tf_access_cnt, 0); | 328 | atomic_set(&tf->tf_access_cnt, 0); |
@@ -591,7 +601,6 @@ void target_fabric_configfs_deregister( | |||
591 | 601 | ||
592 | printk("<<<<<<<<<<<<<<<<<<<<<< END FABRIC API >>>>>>>>>>>>>>>>>" | 602 | printk("<<<<<<<<<<<<<<<<<<<<<< END FABRIC API >>>>>>>>>>>>>>>>>" |
593 | ">>>>>\n"); | 603 | ">>>>>\n"); |
594 | return; | ||
595 | } | 604 | } |
596 | EXPORT_SYMBOL(target_fabric_configfs_deregister); | 605 | EXPORT_SYMBOL(target_fabric_configfs_deregister); |
597 | 606 | ||
@@ -616,7 +625,8 @@ static ssize_t target_core_dev_show_attr_##_name( \ | |||
616 | spin_unlock(&se_dev->se_dev_lock); \ | 625 | spin_unlock(&se_dev->se_dev_lock); \ |
617 | return -ENODEV; \ | 626 | return -ENODEV; \ |
618 | } \ | 627 | } \ |
619 | rb = snprintf(page, PAGE_SIZE, "%u\n", (u32)DEV_ATTRIB(dev)->_name); \ | 628 | rb = snprintf(page, PAGE_SIZE, "%u\n", \ |
629 | (u32)dev->se_sub_dev->se_dev_attrib._name); \ | ||
620 | spin_unlock(&se_dev->se_dev_lock); \ | 630 | spin_unlock(&se_dev->se_dev_lock); \ |
621 | \ | 631 | \ |
622 | return rb; \ | 632 | return rb; \ |
@@ -1078,7 +1088,7 @@ static ssize_t target_core_dev_pr_show_spc3_res( | |||
1078 | PR_REG_ISID_ID_LEN); | 1088 | PR_REG_ISID_ID_LEN); |
1079 | 1089 | ||
1080 | *len += sprintf(page + *len, "SPC-3 Reservation: %s Initiator: %s%s\n", | 1090 | *len += sprintf(page + *len, "SPC-3 Reservation: %s Initiator: %s%s\n", |
1081 | TPG_TFO(se_nacl->se_tpg)->get_fabric_name(), | 1091 | se_nacl->se_tpg->se_tpg_tfo->get_fabric_name(), |
1082 | se_nacl->initiatorname, (prf_isid) ? &i_buf[0] : ""); | 1092 | se_nacl->initiatorname, (prf_isid) ? &i_buf[0] : ""); |
1083 | spin_unlock(&dev->dev_reservation_lock); | 1093 | spin_unlock(&dev->dev_reservation_lock); |
1084 | 1094 | ||
@@ -1100,7 +1110,7 @@ static ssize_t target_core_dev_pr_show_spc2_res( | |||
1100 | return *len; | 1110 | return *len; |
1101 | } | 1111 | } |
1102 | *len += sprintf(page + *len, "SPC-2 Reservation: %s Initiator: %s\n", | 1112 | *len += sprintf(page + *len, "SPC-2 Reservation: %s Initiator: %s\n", |
1103 | TPG_TFO(se_nacl->se_tpg)->get_fabric_name(), | 1113 | se_nacl->se_tpg->se_tpg_tfo->get_fabric_name(), |
1104 | se_nacl->initiatorname); | 1114 | se_nacl->initiatorname); |
1105 | spin_unlock(&dev->dev_reservation_lock); | 1115 | spin_unlock(&dev->dev_reservation_lock); |
1106 | 1116 | ||
@@ -1116,7 +1126,7 @@ static ssize_t target_core_dev_pr_show_attr_res_holder( | |||
1116 | if (!(su_dev->se_dev_ptr)) | 1126 | if (!(su_dev->se_dev_ptr)) |
1117 | return -ENODEV; | 1127 | return -ENODEV; |
1118 | 1128 | ||
1119 | switch (T10_RES(su_dev)->res_type) { | 1129 | switch (su_dev->t10_pr.res_type) { |
1120 | case SPC3_PERSISTENT_RESERVATIONS: | 1130 | case SPC3_PERSISTENT_RESERVATIONS: |
1121 | target_core_dev_pr_show_spc3_res(su_dev->se_dev_ptr, | 1131 | target_core_dev_pr_show_spc3_res(su_dev->se_dev_ptr, |
1122 | page, &len); | 1132 | page, &len); |
@@ -1153,7 +1163,7 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts( | |||
1153 | if (!(dev)) | 1163 | if (!(dev)) |
1154 | return -ENODEV; | 1164 | return -ENODEV; |
1155 | 1165 | ||
1156 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1166 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1157 | return len; | 1167 | return len; |
1158 | 1168 | ||
1159 | spin_lock(&dev->dev_reservation_lock); | 1169 | spin_lock(&dev->dev_reservation_lock); |
@@ -1190,10 +1200,10 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_generation( | |||
1190 | if (!(su_dev->se_dev_ptr)) | 1200 | if (!(su_dev->se_dev_ptr)) |
1191 | return -ENODEV; | 1201 | return -ENODEV; |
1192 | 1202 | ||
1193 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1203 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1194 | return 0; | 1204 | return 0; |
1195 | 1205 | ||
1196 | return sprintf(page, "0x%08x\n", T10_RES(su_dev)->pr_generation); | 1206 | return sprintf(page, "0x%08x\n", su_dev->t10_pr.pr_generation); |
1197 | } | 1207 | } |
1198 | 1208 | ||
1199 | SE_DEV_PR_ATTR_RO(res_pr_generation); | 1209 | SE_DEV_PR_ATTR_RO(res_pr_generation); |
@@ -1217,7 +1227,7 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port( | |||
1217 | if (!(dev)) | 1227 | if (!(dev)) |
1218 | return -ENODEV; | 1228 | return -ENODEV; |
1219 | 1229 | ||
1220 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1230 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1221 | return len; | 1231 | return len; |
1222 | 1232 | ||
1223 | spin_lock(&dev->dev_reservation_lock); | 1233 | spin_lock(&dev->dev_reservation_lock); |
@@ -1230,7 +1240,7 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port( | |||
1230 | se_nacl = pr_reg->pr_reg_nacl; | 1240 | se_nacl = pr_reg->pr_reg_nacl; |
1231 | se_tpg = se_nacl->se_tpg; | 1241 | se_tpg = se_nacl->se_tpg; |
1232 | lun = pr_reg->pr_reg_tg_pt_lun; | 1242 | lun = pr_reg->pr_reg_tg_pt_lun; |
1233 | tfo = TPG_TFO(se_tpg); | 1243 | tfo = se_tpg->se_tpg_tfo; |
1234 | 1244 | ||
1235 | len += sprintf(page+len, "SPC-3 Reservation: %s" | 1245 | len += sprintf(page+len, "SPC-3 Reservation: %s" |
1236 | " Target Node Endpoint: %s\n", tfo->get_fabric_name(), | 1246 | " Target Node Endpoint: %s\n", tfo->get_fabric_name(), |
@@ -1264,13 +1274,13 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts( | |||
1264 | if (!(su_dev->se_dev_ptr)) | 1274 | if (!(su_dev->se_dev_ptr)) |
1265 | return -ENODEV; | 1275 | return -ENODEV; |
1266 | 1276 | ||
1267 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1277 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1268 | return len; | 1278 | return len; |
1269 | 1279 | ||
1270 | len += sprintf(page+len, "SPC-3 PR Registrations:\n"); | 1280 | len += sprintf(page+len, "SPC-3 PR Registrations:\n"); |
1271 | 1281 | ||
1272 | spin_lock(&T10_RES(su_dev)->registration_lock); | 1282 | spin_lock(&su_dev->t10_pr.registration_lock); |
1273 | list_for_each_entry(pr_reg, &T10_RES(su_dev)->registration_list, | 1283 | list_for_each_entry(pr_reg, &su_dev->t10_pr.registration_list, |
1274 | pr_reg_list) { | 1284 | pr_reg_list) { |
1275 | 1285 | ||
1276 | memset(buf, 0, 384); | 1286 | memset(buf, 0, 384); |
@@ -1290,7 +1300,7 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts( | |||
1290 | len += sprintf(page+len, "%s", buf); | 1300 | len += sprintf(page+len, "%s", buf); |
1291 | reg_count++; | 1301 | reg_count++; |
1292 | } | 1302 | } |
1293 | spin_unlock(&T10_RES(su_dev)->registration_lock); | 1303 | spin_unlock(&su_dev->t10_pr.registration_lock); |
1294 | 1304 | ||
1295 | if (!(reg_count)) | 1305 | if (!(reg_count)) |
1296 | len += sprintf(page+len, "None\n"); | 1306 | len += sprintf(page+len, "None\n"); |
@@ -1315,7 +1325,7 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_type( | |||
1315 | if (!(dev)) | 1325 | if (!(dev)) |
1316 | return -ENODEV; | 1326 | return -ENODEV; |
1317 | 1327 | ||
1318 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1328 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1319 | return len; | 1329 | return len; |
1320 | 1330 | ||
1321 | spin_lock(&dev->dev_reservation_lock); | 1331 | spin_lock(&dev->dev_reservation_lock); |
@@ -1346,7 +1356,7 @@ static ssize_t target_core_dev_pr_show_attr_res_type( | |||
1346 | if (!(su_dev->se_dev_ptr)) | 1356 | if (!(su_dev->se_dev_ptr)) |
1347 | return -ENODEV; | 1357 | return -ENODEV; |
1348 | 1358 | ||
1349 | switch (T10_RES(su_dev)->res_type) { | 1359 | switch (su_dev->t10_pr.res_type) { |
1350 | case SPC3_PERSISTENT_RESERVATIONS: | 1360 | case SPC3_PERSISTENT_RESERVATIONS: |
1351 | len = sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n"); | 1361 | len = sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n"); |
1352 | break; | 1362 | break; |
@@ -1377,11 +1387,11 @@ static ssize_t target_core_dev_pr_show_attr_res_aptpl_active( | |||
1377 | if (!(su_dev->se_dev_ptr)) | 1387 | if (!(su_dev->se_dev_ptr)) |
1378 | return -ENODEV; | 1388 | return -ENODEV; |
1379 | 1389 | ||
1380 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1390 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1381 | return 0; | 1391 | return 0; |
1382 | 1392 | ||
1383 | return sprintf(page, "APTPL Bit Status: %s\n", | 1393 | return sprintf(page, "APTPL Bit Status: %s\n", |
1384 | (T10_RES(su_dev)->pr_aptpl_active) ? "Activated" : "Disabled"); | 1394 | (su_dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled"); |
1385 | } | 1395 | } |
1386 | 1396 | ||
1387 | SE_DEV_PR_ATTR_RO(res_aptpl_active); | 1397 | SE_DEV_PR_ATTR_RO(res_aptpl_active); |
@@ -1396,7 +1406,7 @@ static ssize_t target_core_dev_pr_show_attr_res_aptpl_metadata( | |||
1396 | if (!(su_dev->se_dev_ptr)) | 1406 | if (!(su_dev->se_dev_ptr)) |
1397 | return -ENODEV; | 1407 | return -ENODEV; |
1398 | 1408 | ||
1399 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1409 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1400 | return 0; | 1410 | return 0; |
1401 | 1411 | ||
1402 | return sprintf(page, "Ready to process PR APTPL metadata..\n"); | 1412 | return sprintf(page, "Ready to process PR APTPL metadata..\n"); |
@@ -1448,7 +1458,7 @@ static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata( | |||
1448 | if (!(dev)) | 1458 | if (!(dev)) |
1449 | return -ENODEV; | 1459 | return -ENODEV; |
1450 | 1460 | ||
1451 | if (T10_RES(su_dev)->res_type != SPC3_PERSISTENT_RESERVATIONS) | 1461 | if (su_dev->t10_pr.res_type != SPC3_PERSISTENT_RESERVATIONS) |
1452 | return 0; | 1462 | return 0; |
1453 | 1463 | ||
1454 | if (atomic_read(&dev->dev_export_obj.obj_access_count)) { | 1464 | if (atomic_read(&dev->dev_export_obj.obj_access_count)) { |
@@ -1594,7 +1604,7 @@ static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata( | |||
1594 | goto out; | 1604 | goto out; |
1595 | } | 1605 | } |
1596 | 1606 | ||
1597 | ret = core_scsi3_alloc_aptpl_registration(T10_RES(su_dev), sa_res_key, | 1607 | ret = core_scsi3_alloc_aptpl_registration(&su_dev->t10_pr, sa_res_key, |
1598 | i_port, isid, mapped_lun, t_port, tpgt, target_lun, | 1608 | i_port, isid, mapped_lun, t_port, tpgt, target_lun, |
1599 | res_holder, all_tg_pt, type); | 1609 | res_holder, all_tg_pt, type); |
1600 | out: | 1610 | out: |
@@ -1842,7 +1852,7 @@ static ssize_t target_core_show_alua_lu_gp(void *p, char *page) | |||
1842 | if (!(dev)) | 1852 | if (!(dev)) |
1843 | return -ENODEV; | 1853 | return -ENODEV; |
1844 | 1854 | ||
1845 | if (T10_ALUA(su_dev)->alua_type != SPC3_ALUA_EMULATED) | 1855 | if (su_dev->t10_alua.alua_type != SPC3_ALUA_EMULATED) |
1846 | return len; | 1856 | return len; |
1847 | 1857 | ||
1848 | lu_gp_mem = dev->dev_alua_lu_gp_mem; | 1858 | lu_gp_mem = dev->dev_alua_lu_gp_mem; |
@@ -1881,7 +1891,7 @@ static ssize_t target_core_store_alua_lu_gp( | |||
1881 | if (!(dev)) | 1891 | if (!(dev)) |
1882 | return -ENODEV; | 1892 | return -ENODEV; |
1883 | 1893 | ||
1884 | if (T10_ALUA(su_dev)->alua_type != SPC3_ALUA_EMULATED) { | 1894 | if (su_dev->t10_alua.alua_type != SPC3_ALUA_EMULATED) { |
1885 | printk(KERN_WARNING "SPC3_ALUA_EMULATED not enabled for %s/%s\n", | 1895 | printk(KERN_WARNING "SPC3_ALUA_EMULATED not enabled for %s/%s\n", |
1886 | config_item_name(&hba->hba_group.cg_item), | 1896 | config_item_name(&hba->hba_group.cg_item), |
1887 | config_item_name(&su_dev->se_dev_group.cg_item)); | 1897 | config_item_name(&su_dev->se_dev_group.cg_item)); |
@@ -2557,9 +2567,9 @@ static ssize_t target_core_alua_tg_pt_gp_show_attr_members( | |||
2557 | lun = port->sep_lun; | 2567 | lun = port->sep_lun; |
2558 | 2568 | ||
2559 | cur_len = snprintf(buf, TG_PT_GROUP_NAME_BUF, "%s/%s/tpgt_%hu" | 2569 | cur_len = snprintf(buf, TG_PT_GROUP_NAME_BUF, "%s/%s/tpgt_%hu" |
2560 | "/%s\n", TPG_TFO(tpg)->get_fabric_name(), | 2570 | "/%s\n", tpg->se_tpg_tfo->get_fabric_name(), |
2561 | TPG_TFO(tpg)->tpg_get_wwn(tpg), | 2571 | tpg->se_tpg_tfo->tpg_get_wwn(tpg), |
2562 | TPG_TFO(tpg)->tpg_get_tag(tpg), | 2572 | tpg->se_tpg_tfo->tpg_get_tag(tpg), |
2563 | config_item_name(&lun->lun_group.cg_item)); | 2573 | config_item_name(&lun->lun_group.cg_item)); |
2564 | cur_len++; /* Extra byte for NULL terminator */ | 2574 | cur_len++; /* Extra byte for NULL terminator */ |
2565 | 2575 | ||
@@ -2748,17 +2758,17 @@ static struct config_group *target_core_make_subdev( | |||
2748 | " struct se_subsystem_dev\n"); | 2758 | " struct se_subsystem_dev\n"); |
2749 | goto unlock; | 2759 | goto unlock; |
2750 | } | 2760 | } |
2751 | INIT_LIST_HEAD(&se_dev->g_se_dev_list); | 2761 | INIT_LIST_HEAD(&se_dev->se_dev_node); |
2752 | INIT_LIST_HEAD(&se_dev->t10_wwn.t10_vpd_list); | 2762 | INIT_LIST_HEAD(&se_dev->t10_wwn.t10_vpd_list); |
2753 | spin_lock_init(&se_dev->t10_wwn.t10_vpd_lock); | 2763 | spin_lock_init(&se_dev->t10_wwn.t10_vpd_lock); |
2754 | INIT_LIST_HEAD(&se_dev->t10_reservation.registration_list); | 2764 | INIT_LIST_HEAD(&se_dev->t10_pr.registration_list); |
2755 | INIT_LIST_HEAD(&se_dev->t10_reservation.aptpl_reg_list); | 2765 | INIT_LIST_HEAD(&se_dev->t10_pr.aptpl_reg_list); |
2756 | spin_lock_init(&se_dev->t10_reservation.registration_lock); | 2766 | spin_lock_init(&se_dev->t10_pr.registration_lock); |
2757 | spin_lock_init(&se_dev->t10_reservation.aptpl_reg_lock); | 2767 | spin_lock_init(&se_dev->t10_pr.aptpl_reg_lock); |
2758 | INIT_LIST_HEAD(&se_dev->t10_alua.tg_pt_gps_list); | 2768 | INIT_LIST_HEAD(&se_dev->t10_alua.tg_pt_gps_list); |
2759 | spin_lock_init(&se_dev->t10_alua.tg_pt_gps_lock); | 2769 | spin_lock_init(&se_dev->t10_alua.tg_pt_gps_lock); |
2760 | spin_lock_init(&se_dev->se_dev_lock); | 2770 | spin_lock_init(&se_dev->se_dev_lock); |
2761 | se_dev->t10_reservation.pr_aptpl_buf_len = PR_APTPL_BUF_LEN; | 2771 | se_dev->t10_pr.pr_aptpl_buf_len = PR_APTPL_BUF_LEN; |
2762 | se_dev->t10_wwn.t10_sub_dev = se_dev; | 2772 | se_dev->t10_wwn.t10_sub_dev = se_dev; |
2763 | se_dev->t10_alua.t10_sub_dev = se_dev; | 2773 | se_dev->t10_alua.t10_sub_dev = se_dev; |
2764 | se_dev->se_dev_attrib.da_sub_dev = se_dev; | 2774 | se_dev->se_dev_attrib.da_sub_dev = se_dev; |
@@ -2784,9 +2794,9 @@ static struct config_group *target_core_make_subdev( | |||
2784 | " from allocate_virtdevice()\n"); | 2794 | " from allocate_virtdevice()\n"); |
2785 | goto out; | 2795 | goto out; |
2786 | } | 2796 | } |
2787 | spin_lock(&se_global->g_device_lock); | 2797 | spin_lock(&se_device_lock); |
2788 | list_add_tail(&se_dev->g_se_dev_list, &se_global->g_se_dev_list); | 2798 | list_add_tail(&se_dev->se_dev_node, &se_dev_list); |
2789 | spin_unlock(&se_global->g_device_lock); | 2799 | spin_unlock(&se_device_lock); |
2790 | 2800 | ||
2791 | config_group_init_type_name(&se_dev->se_dev_group, name, | 2801 | config_group_init_type_name(&se_dev->se_dev_group, name, |
2792 | &target_core_dev_cit); | 2802 | &target_core_dev_cit); |
@@ -2814,7 +2824,7 @@ static struct config_group *target_core_make_subdev( | |||
2814 | if (!(tg_pt_gp)) | 2824 | if (!(tg_pt_gp)) |
2815 | goto out; | 2825 | goto out; |
2816 | 2826 | ||
2817 | tg_pt_gp_cg = &T10_ALUA(se_dev)->alua_tg_pt_gps_group; | 2827 | tg_pt_gp_cg = &se_dev->t10_alua.alua_tg_pt_gps_group; |
2818 | tg_pt_gp_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, | 2828 | tg_pt_gp_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, |
2819 | GFP_KERNEL); | 2829 | GFP_KERNEL); |
2820 | if (!(tg_pt_gp_cg->default_groups)) { | 2830 | if (!(tg_pt_gp_cg->default_groups)) { |
@@ -2827,11 +2837,11 @@ static struct config_group *target_core_make_subdev( | |||
2827 | "default_tg_pt_gp", &target_core_alua_tg_pt_gp_cit); | 2837 | "default_tg_pt_gp", &target_core_alua_tg_pt_gp_cit); |
2828 | tg_pt_gp_cg->default_groups[0] = &tg_pt_gp->tg_pt_gp_group; | 2838 | tg_pt_gp_cg->default_groups[0] = &tg_pt_gp->tg_pt_gp_group; |
2829 | tg_pt_gp_cg->default_groups[1] = NULL; | 2839 | tg_pt_gp_cg->default_groups[1] = NULL; |
2830 | T10_ALUA(se_dev)->default_tg_pt_gp = tg_pt_gp; | 2840 | se_dev->t10_alua.default_tg_pt_gp = tg_pt_gp; |
2831 | /* | 2841 | /* |
2832 | * Add core/$HBA/$DEV/statistics/ default groups | 2842 | * Add core/$HBA/$DEV/statistics/ default groups |
2833 | */ | 2843 | */ |
2834 | dev_stat_grp = &DEV_STAT_GRP(se_dev)->stat_group; | 2844 | dev_stat_grp = &se_dev->dev_stat_grps.stat_group; |
2835 | dev_stat_grp->default_groups = kzalloc(sizeof(struct config_group) * 4, | 2845 | dev_stat_grp->default_groups = kzalloc(sizeof(struct config_group) * 4, |
2836 | GFP_KERNEL); | 2846 | GFP_KERNEL); |
2837 | if (!dev_stat_grp->default_groups) { | 2847 | if (!dev_stat_grp->default_groups) { |
@@ -2846,9 +2856,9 @@ static struct config_group *target_core_make_subdev( | |||
2846 | mutex_unlock(&hba->hba_access_mutex); | 2856 | mutex_unlock(&hba->hba_access_mutex); |
2847 | return &se_dev->se_dev_group; | 2857 | return &se_dev->se_dev_group; |
2848 | out: | 2858 | out: |
2849 | if (T10_ALUA(se_dev)->default_tg_pt_gp) { | 2859 | if (se_dev->t10_alua.default_tg_pt_gp) { |
2850 | core_alua_free_tg_pt_gp(T10_ALUA(se_dev)->default_tg_pt_gp); | 2860 | core_alua_free_tg_pt_gp(se_dev->t10_alua.default_tg_pt_gp); |
2851 | T10_ALUA(se_dev)->default_tg_pt_gp = NULL; | 2861 | se_dev->t10_alua.default_tg_pt_gp = NULL; |
2852 | } | 2862 | } |
2853 | if (dev_stat_grp) | 2863 | if (dev_stat_grp) |
2854 | kfree(dev_stat_grp->default_groups); | 2864 | kfree(dev_stat_grp->default_groups); |
@@ -2881,11 +2891,11 @@ static void target_core_drop_subdev( | |||
2881 | mutex_lock(&hba->hba_access_mutex); | 2891 | mutex_lock(&hba->hba_access_mutex); |
2882 | t = hba->transport; | 2892 | t = hba->transport; |
2883 | 2893 | ||
2884 | spin_lock(&se_global->g_device_lock); | 2894 | spin_lock(&se_device_lock); |
2885 | list_del(&se_dev->g_se_dev_list); | 2895 | list_del(&se_dev->se_dev_node); |
2886 | spin_unlock(&se_global->g_device_lock); | 2896 | spin_unlock(&se_device_lock); |
2887 | 2897 | ||
2888 | dev_stat_grp = &DEV_STAT_GRP(se_dev)->stat_group; | 2898 | dev_stat_grp = &se_dev->dev_stat_grps.stat_group; |
2889 | for (i = 0; dev_stat_grp->default_groups[i]; i++) { | 2899 | for (i = 0; dev_stat_grp->default_groups[i]; i++) { |
2890 | df_item = &dev_stat_grp->default_groups[i]->cg_item; | 2900 | df_item = &dev_stat_grp->default_groups[i]->cg_item; |
2891 | dev_stat_grp->default_groups[i] = NULL; | 2901 | dev_stat_grp->default_groups[i] = NULL; |
@@ -2893,7 +2903,7 @@ static void target_core_drop_subdev( | |||
2893 | } | 2903 | } |
2894 | kfree(dev_stat_grp->default_groups); | 2904 | kfree(dev_stat_grp->default_groups); |
2895 | 2905 | ||
2896 | tg_pt_gp_cg = &T10_ALUA(se_dev)->alua_tg_pt_gps_group; | 2906 | tg_pt_gp_cg = &se_dev->t10_alua.alua_tg_pt_gps_group; |
2897 | for (i = 0; tg_pt_gp_cg->default_groups[i]; i++) { | 2907 | for (i = 0; tg_pt_gp_cg->default_groups[i]; i++) { |
2898 | df_item = &tg_pt_gp_cg->default_groups[i]->cg_item; | 2908 | df_item = &tg_pt_gp_cg->default_groups[i]->cg_item; |
2899 | tg_pt_gp_cg->default_groups[i] = NULL; | 2909 | tg_pt_gp_cg->default_groups[i] = NULL; |
@@ -2904,7 +2914,7 @@ static void target_core_drop_subdev( | |||
2904 | * core_alua_free_tg_pt_gp() is called from ->default_tg_pt_gp | 2914 | * core_alua_free_tg_pt_gp() is called from ->default_tg_pt_gp |
2905 | * directly from target_core_alua_tg_pt_gp_release(). | 2915 | * directly from target_core_alua_tg_pt_gp_release(). |
2906 | */ | 2916 | */ |
2907 | T10_ALUA(se_dev)->default_tg_pt_gp = NULL; | 2917 | se_dev->t10_alua.default_tg_pt_gp = NULL; |
2908 | 2918 | ||
2909 | dev_cg = &se_dev->se_dev_group; | 2919 | dev_cg = &se_dev->se_dev_group; |
2910 | for (i = 0; dev_cg->default_groups[i]; i++) { | 2920 | for (i = 0; dev_cg->default_groups[i]; i++) { |
@@ -3130,10 +3140,9 @@ static int __init target_core_init_configfs(void) | |||
3130 | 3140 | ||
3131 | INIT_LIST_HEAD(&g_tf_list); | 3141 | INIT_LIST_HEAD(&g_tf_list); |
3132 | mutex_init(&g_tf_lock); | 3142 | mutex_init(&g_tf_lock); |
3133 | init_scsi_index_table(); | 3143 | ret = init_se_kmem_caches(); |
3134 | ret = init_se_global(); | ||
3135 | if (ret < 0) | 3144 | if (ret < 0) |
3136 | return -1; | 3145 | return ret; |
3137 | /* | 3146 | /* |
3138 | * Create $CONFIGFS/target/core default group for HBA <-> Storage Object | 3147 | * Create $CONFIGFS/target/core default group for HBA <-> Storage Object |
3139 | * and ALUA Logical Unit Group and Target Port Group infrastructure. | 3148 | * and ALUA Logical Unit Group and Target Port Group infrastructure. |
@@ -3146,29 +3155,29 @@ static int __init target_core_init_configfs(void) | |||
3146 | goto out_global; | 3155 | goto out_global; |
3147 | } | 3156 | } |
3148 | 3157 | ||
3149 | config_group_init_type_name(&se_global->target_core_hbagroup, | 3158 | config_group_init_type_name(&target_core_hbagroup, |
3150 | "core", &target_core_cit); | 3159 | "core", &target_core_cit); |
3151 | target_cg->default_groups[0] = &se_global->target_core_hbagroup; | 3160 | target_cg->default_groups[0] = &target_core_hbagroup; |
3152 | target_cg->default_groups[1] = NULL; | 3161 | target_cg->default_groups[1] = NULL; |
3153 | /* | 3162 | /* |
3154 | * Create ALUA infrastructure under /sys/kernel/config/target/core/alua/ | 3163 | * Create ALUA infrastructure under /sys/kernel/config/target/core/alua/ |
3155 | */ | 3164 | */ |
3156 | hba_cg = &se_global->target_core_hbagroup; | 3165 | hba_cg = &target_core_hbagroup; |
3157 | hba_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, | 3166 | hba_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, |
3158 | GFP_KERNEL); | 3167 | GFP_KERNEL); |
3159 | if (!(hba_cg->default_groups)) { | 3168 | if (!(hba_cg->default_groups)) { |
3160 | printk(KERN_ERR "Unable to allocate hba_cg->default_groups\n"); | 3169 | printk(KERN_ERR "Unable to allocate hba_cg->default_groups\n"); |
3161 | goto out_global; | 3170 | goto out_global; |
3162 | } | 3171 | } |
3163 | config_group_init_type_name(&se_global->alua_group, | 3172 | config_group_init_type_name(&alua_group, |
3164 | "alua", &target_core_alua_cit); | 3173 | "alua", &target_core_alua_cit); |
3165 | hba_cg->default_groups[0] = &se_global->alua_group; | 3174 | hba_cg->default_groups[0] = &alua_group; |
3166 | hba_cg->default_groups[1] = NULL; | 3175 | hba_cg->default_groups[1] = NULL; |
3167 | /* | 3176 | /* |
3168 | * Add ALUA Logical Unit Group and Target Port Group ConfigFS | 3177 | * Add ALUA Logical Unit Group and Target Port Group ConfigFS |
3169 | * groups under /sys/kernel/config/target/core/alua/ | 3178 | * groups under /sys/kernel/config/target/core/alua/ |
3170 | */ | 3179 | */ |
3171 | alua_cg = &se_global->alua_group; | 3180 | alua_cg = &alua_group; |
3172 | alua_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, | 3181 | alua_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, |
3173 | GFP_KERNEL); | 3182 | GFP_KERNEL); |
3174 | if (!(alua_cg->default_groups)) { | 3183 | if (!(alua_cg->default_groups)) { |
@@ -3176,9 +3185,9 @@ static int __init target_core_init_configfs(void) | |||
3176 | goto out_global; | 3185 | goto out_global; |
3177 | } | 3186 | } |
3178 | 3187 | ||
3179 | config_group_init_type_name(&se_global->alua_lu_gps_group, | 3188 | config_group_init_type_name(&alua_lu_gps_group, |
3180 | "lu_gps", &target_core_alua_lu_gps_cit); | 3189 | "lu_gps", &target_core_alua_lu_gps_cit); |
3181 | alua_cg->default_groups[0] = &se_global->alua_lu_gps_group; | 3190 | alua_cg->default_groups[0] = &alua_lu_gps_group; |
3182 | alua_cg->default_groups[1] = NULL; | 3191 | alua_cg->default_groups[1] = NULL; |
3183 | /* | 3192 | /* |
3184 | * Add core/alua/lu_gps/default_lu_gp | 3193 | * Add core/alua/lu_gps/default_lu_gp |
@@ -3187,7 +3196,7 @@ static int __init target_core_init_configfs(void) | |||
3187 | if (IS_ERR(lu_gp)) | 3196 | if (IS_ERR(lu_gp)) |
3188 | goto out_global; | 3197 | goto out_global; |
3189 | 3198 | ||
3190 | lu_gp_cg = &se_global->alua_lu_gps_group; | 3199 | lu_gp_cg = &alua_lu_gps_group; |
3191 | lu_gp_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, | 3200 | lu_gp_cg->default_groups = kzalloc(sizeof(struct config_group) * 2, |
3192 | GFP_KERNEL); | 3201 | GFP_KERNEL); |
3193 | if (!(lu_gp_cg->default_groups)) { | 3202 | if (!(lu_gp_cg->default_groups)) { |
@@ -3199,7 +3208,7 @@ static int __init target_core_init_configfs(void) | |||
3199 | &target_core_alua_lu_gp_cit); | 3208 | &target_core_alua_lu_gp_cit); |
3200 | lu_gp_cg->default_groups[0] = &lu_gp->lu_gp_group; | 3209 | lu_gp_cg->default_groups[0] = &lu_gp->lu_gp_group; |
3201 | lu_gp_cg->default_groups[1] = NULL; | 3210 | lu_gp_cg->default_groups[1] = NULL; |
3202 | se_global->default_lu_gp = lu_gp; | 3211 | default_lu_gp = lu_gp; |
3203 | /* | 3212 | /* |
3204 | * Register the target_core_mod subsystem with configfs. | 3213 | * Register the target_core_mod subsystem with configfs. |
3205 | */ | 3214 | */ |
@@ -3229,9 +3238,9 @@ out: | |||
3229 | core_dev_release_virtual_lun0(); | 3238 | core_dev_release_virtual_lun0(); |
3230 | rd_module_exit(); | 3239 | rd_module_exit(); |
3231 | out_global: | 3240 | out_global: |
3232 | if (se_global->default_lu_gp) { | 3241 | if (default_lu_gp) { |
3233 | core_alua_free_lu_gp(se_global->default_lu_gp); | 3242 | core_alua_free_lu_gp(default_lu_gp); |
3234 | se_global->default_lu_gp = NULL; | 3243 | default_lu_gp = NULL; |
3235 | } | 3244 | } |
3236 | if (lu_gp_cg) | 3245 | if (lu_gp_cg) |
3237 | kfree(lu_gp_cg->default_groups); | 3246 | kfree(lu_gp_cg->default_groups); |
@@ -3240,8 +3249,8 @@ out_global: | |||
3240 | if (hba_cg) | 3249 | if (hba_cg) |
3241 | kfree(hba_cg->default_groups); | 3250 | kfree(hba_cg->default_groups); |
3242 | kfree(target_cg->default_groups); | 3251 | kfree(target_cg->default_groups); |
3243 | release_se_global(); | 3252 | release_se_kmem_caches(); |
3244 | return -1; | 3253 | return ret; |
3245 | } | 3254 | } |
3246 | 3255 | ||
3247 | static void __exit target_core_exit_configfs(void) | 3256 | static void __exit target_core_exit_configfs(void) |
@@ -3251,10 +3260,9 @@ static void __exit target_core_exit_configfs(void) | |||
3251 | struct config_item *item; | 3260 | struct config_item *item; |
3252 | int i; | 3261 | int i; |
3253 | 3262 | ||
3254 | se_global->in_shutdown = 1; | ||
3255 | subsys = target_core_subsystem[0]; | 3263 | subsys = target_core_subsystem[0]; |
3256 | 3264 | ||
3257 | lu_gp_cg = &se_global->alua_lu_gps_group; | 3265 | lu_gp_cg = &alua_lu_gps_group; |
3258 | for (i = 0; lu_gp_cg->default_groups[i]; i++) { | 3266 | for (i = 0; lu_gp_cg->default_groups[i]; i++) { |
3259 | item = &lu_gp_cg->default_groups[i]->cg_item; | 3267 | item = &lu_gp_cg->default_groups[i]->cg_item; |
3260 | lu_gp_cg->default_groups[i] = NULL; | 3268 | lu_gp_cg->default_groups[i] = NULL; |
@@ -3263,7 +3271,7 @@ static void __exit target_core_exit_configfs(void) | |||
3263 | kfree(lu_gp_cg->default_groups); | 3271 | kfree(lu_gp_cg->default_groups); |
3264 | lu_gp_cg->default_groups = NULL; | 3272 | lu_gp_cg->default_groups = NULL; |
3265 | 3273 | ||
3266 | alua_cg = &se_global->alua_group; | 3274 | alua_cg = &alua_group; |
3267 | for (i = 0; alua_cg->default_groups[i]; i++) { | 3275 | for (i = 0; alua_cg->default_groups[i]; i++) { |
3268 | item = &alua_cg->default_groups[i]->cg_item; | 3276 | item = &alua_cg->default_groups[i]->cg_item; |
3269 | alua_cg->default_groups[i] = NULL; | 3277 | alua_cg->default_groups[i] = NULL; |
@@ -3272,7 +3280,7 @@ static void __exit target_core_exit_configfs(void) | |||
3272 | kfree(alua_cg->default_groups); | 3280 | kfree(alua_cg->default_groups); |
3273 | alua_cg->default_groups = NULL; | 3281 | alua_cg->default_groups = NULL; |
3274 | 3282 | ||
3275 | hba_cg = &se_global->target_core_hbagroup; | 3283 | hba_cg = &target_core_hbagroup; |
3276 | for (i = 0; hba_cg->default_groups[i]; i++) { | 3284 | for (i = 0; hba_cg->default_groups[i]; i++) { |
3277 | item = &hba_cg->default_groups[i]->cg_item; | 3285 | item = &hba_cg->default_groups[i]->cg_item; |
3278 | hba_cg->default_groups[i] = NULL; | 3286 | hba_cg->default_groups[i] = NULL; |
@@ -3287,17 +3295,15 @@ static void __exit target_core_exit_configfs(void) | |||
3287 | configfs_unregister_subsystem(subsys); | 3295 | configfs_unregister_subsystem(subsys); |
3288 | kfree(subsys->su_group.default_groups); | 3296 | kfree(subsys->su_group.default_groups); |
3289 | 3297 | ||
3290 | core_alua_free_lu_gp(se_global->default_lu_gp); | 3298 | core_alua_free_lu_gp(default_lu_gp); |
3291 | se_global->default_lu_gp = NULL; | 3299 | default_lu_gp = NULL; |
3292 | 3300 | ||
3293 | printk(KERN_INFO "TARGET_CORE[0]: Released ConfigFS Fabric" | 3301 | printk(KERN_INFO "TARGET_CORE[0]: Released ConfigFS Fabric" |
3294 | " Infrastructure\n"); | 3302 | " Infrastructure\n"); |
3295 | 3303 | ||
3296 | core_dev_release_virtual_lun0(); | 3304 | core_dev_release_virtual_lun0(); |
3297 | rd_module_exit(); | 3305 | rd_module_exit(); |
3298 | release_se_global(); | 3306 | release_se_kmem_caches(); |
3299 | |||
3300 | return; | ||
3301 | } | 3307 | } |
3302 | 3308 | ||
3303 | MODULE_DESCRIPTION("Target_Core_Mod/ConfigFS"); | 3309 | MODULE_DESCRIPTION("Target_Core_Mod/ConfigFS"); |