aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_configfs.c
diff options
context:
space:
mode:
authorAndy Grover <agrover@redhat.com>2011-07-19 04:55:10 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2011-07-22 05:37:43 -0400
commite3d6f909ed803d92a5ac9b4a2c087e0eae9b90d0 (patch)
tree2eb65e958a2cc35c896a0e184ec09edcb9076b3b /drivers/target/target_core_configfs.c
parenta8c6da90b823fb94ca76ca0df6bb44e6e205dc87 (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.c162
1 files changed, 84 insertions, 78 deletions
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index c6140004307..64418efa671 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
56extern struct t10_alua_lu_gp *default_lu_gp;
57
55static struct list_head g_tf_list; 58static struct list_head g_tf_list;
56static struct mutex g_tf_lock; 59static 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
67static struct config_group target_core_hbagroup;
68static struct config_group alua_group;
69static struct config_group alua_lu_gps_group;
70
71static DEFINE_SPINLOCK(se_device_lock);
72static LIST_HEAD(se_dev_list);
73
64static inline struct se_hba * 74static inline struct se_hba *
65item_to_hba(struct config_item *item) 75item_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}
596EXPORT_SYMBOL(target_fabric_configfs_deregister); 605EXPORT_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
1199SE_DEV_PR_ATTR_RO(res_pr_generation); 1209SE_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
1387SE_DEV_PR_ATTR_RO(res_aptpl_active); 1397SE_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);
1600out: 1610out:
@@ -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;
2848out: 2858out:
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();
3231out_global: 3240out_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
3247static void __exit target_core_exit_configfs(void) 3256static 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
3303MODULE_DESCRIPTION("Target_Core_Mod/ConfigFS"); 3309MODULE_DESCRIPTION("Target_Core_Mod/ConfigFS");