]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
target/configfs: Kill se_device->dev_link_magic
authorNicholas Bellinger <nab@linux-iscsi.org>
Thu, 1 Jun 2017 10:10:53 +0000 (03:10 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Fri, 9 Jun 2017 06:26:38 +0000 (23:26 -0700)
Instead of using a hardcoded magic value in se_device when verifying
a target config_item symlink source during target_fabric_port_link(),
go ahead and use target_core_dev_item_ops directly instead.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Mike Christie <mchristi@redhat.com>
Cc: Hannes Reinecke <hare@suse.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_configfs.c
drivers/target/target_core_device.c
drivers/target/target_core_fabric_configfs.c
include/target/target_core_base.h

index 0326607e5ab82fc2208ad4e416f426d92ee89c4a..9b8abd55c21cc7f243eb634ae980700a061451d0 100644 (file)
@@ -2236,7 +2236,11 @@ static void target_core_dev_release(struct config_item *item)
        target_free_device(dev);
 }
 
-static struct configfs_item_operations target_core_dev_item_ops = {
+/*
+ * Used in target_core_fabric_configfs.c to verify valid se_device symlink
+ * within target_fabric_port_link()
+ */
+struct configfs_item_operations target_core_dev_item_ops = {
        .release                = target_core_dev_release,
 };
 
index a5762e601fa19b50424f45374926132e8084c244..e4771cec108ccd21c50ecc4792ae7b84c50d045b 100644 (file)
@@ -756,7 +756,6 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
        if (!dev)
                return NULL;
 
-       dev->dev_link_magic = SE_DEV_LINK_MAGIC;
        dev->se_hba = hba;
        dev->transport = hba->backend->ops;
        dev->prot_length = sizeof(struct t10_pi_tuple);
index d1e6cab8e3d3f0a95cb801f2680c2b8e2474de1d..2cbaecd1669d8f58655000aa5bebdd955ce4b293 100644 (file)
@@ -620,6 +620,8 @@ static struct configfs_attribute *target_fabric_port_attrs[] = {
        NULL,
 };
 
+extern struct configfs_item_operations target_core_dev_item_ops;
+
 static int target_fabric_port_link(
        struct config_item *lun_ci,
        struct config_item *se_dev_ci)
@@ -628,16 +630,16 @@ static int target_fabric_port_link(
        struct se_lun *lun = container_of(to_config_group(lun_ci),
                                struct se_lun, lun_group);
        struct se_portal_group *se_tpg;
-       struct se_device *dev =
-               container_of(to_config_group(se_dev_ci), struct se_device, dev_group);
+       struct se_device *dev;
        struct target_fabric_configfs *tf;
        int ret;
 
-       if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) {
-               pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci pointer:"
-                       " %p to struct se_device: %p\n", se_dev_ci, dev);
+       if (!se_dev_ci->ci_type ||
+           se_dev_ci->ci_type->ct_item_ops != &target_core_dev_item_ops) {
+               pr_err("Bad se_dev_ci, not a valid se_dev_ci pointer: %p\n", se_dev_ci);
                return -EFAULT;
        }
+       dev = container_of(to_config_group(se_dev_ci), struct se_device, dev_group);
 
        if (!(dev->dev_flags & DF_CONFIGURED)) {
                pr_err("se_device not configured yet, cannot port link\n");
index 0c1dce2ac6f0239a90d3e86bff2afd3b0f318128..c3c14d053122d60e63673ee4e338d3fd2a045183 100644 (file)
@@ -746,8 +746,6 @@ struct se_dev_stat_grps {
 };
 
 struct se_device {
-#define SE_DEV_LINK_MAGIC                      0xfeeddeef
-       u32                     dev_link_magic;
        /* RELATIVE TARGET PORT IDENTIFER Counter */
        u16                     dev_rpti_counter;
        /* Used for SAM Task Attribute ordering */