]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/target/target_core_fabric_configfs.c
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[karo-tx-linux.git] / drivers / target / target_core_fabric_configfs.c
index bca737bb813ddc1682fe6d0f9cd8ab27c618471b..810263dfa4a1d9d272e16a492c5fb44365967a6c 100644 (file)
@@ -4,10 +4,9 @@
  * This file contains generic fabric module configfs infrastructure for
  * TCM v4.x code
  *
- * Copyright (c) 2010,2011 Rising Tide Systems
- * Copyright (c) 2010,2011 Linux-iSCSI.org
+ * (c) Copyright 2010-2012 RisingTide Systems LLC.
  *
- * Copyright (c) Nicholas A. Bellinger <nab@linux-iscsi.org>
+ * Nicholas A. Bellinger <nab@linux-iscsi.org>
 *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -71,6 +70,12 @@ static int target_fabric_mappedlun_link(
        struct se_portal_group *se_tpg;
        struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci, *wwn_ci_s;
        int ret = 0, lun_access;
+
+       if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) {
+               pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:"
+                       " %p to struct lun: %p\n", lun_ci, lun);
+               return -EFAULT;
+       }
        /*
         * Ensure that the source port exists
         */
@@ -358,7 +363,7 @@ static struct config_group *target_fabric_make_mappedlun(
        }
 
        lacl_cg = &lacl->se_lun_group;
-       lacl_cg->default_groups = kzalloc(sizeof(struct config_group) * 2,
+       lacl_cg->default_groups = kmalloc(sizeof(struct config_group *) * 2,
                                GFP_KERNEL);
        if (!lacl_cg->default_groups) {
                pr_err("Unable to allocate lacl_cg->default_groups\n");
@@ -374,7 +379,7 @@ static struct config_group *target_fabric_make_mappedlun(
        lacl_cg->default_groups[1] = NULL;
 
        ml_stat_grp = &lacl->ml_stat_grps.stat_group;
-       ml_stat_grp->default_groups = kzalloc(sizeof(struct config_group) * 3,
+       ml_stat_grp->default_groups = kmalloc(sizeof(struct config_group *) * 3,
                                GFP_KERNEL);
        if (!ml_stat_grp->default_groups) {
                pr_err("Unable to allocate ml_stat_grp->default_groups\n");
@@ -734,17 +739,21 @@ static int target_fabric_port_link(
        struct config_item *se_dev_ci)
 {
        struct config_item *tpg_ci;
-       struct se_device *dev;
        struct se_lun *lun = container_of(to_config_group(lun_ci),
                                struct se_lun, lun_group);
        struct se_lun *lun_p;
        struct se_portal_group *se_tpg;
-       struct se_subsystem_dev *se_dev = container_of(
-                               to_config_group(se_dev_ci), struct se_subsystem_dev,
-                               se_dev_group);
+       struct se_device *dev =
+               container_of(to_config_group(se_dev_ci), struct se_device, dev_group);
        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);
+               return -EFAULT;
+       }
+
        tpg_ci = &lun_ci->ci_parent->ci_group->cg_item;
        se_tpg = container_of(to_config_group(tpg_ci),
                                struct se_portal_group, tpg_group);
@@ -755,14 +764,6 @@ static int target_fabric_port_link(
                return -EEXIST;
        }
 
-       dev = se_dev->se_dev_ptr;
-       if (!dev) {
-               pr_err("Unable to locate struct se_device pointer from"
-                       " %s\n", config_item_name(se_dev_ci));
-               ret = -ENODEV;
-               goto out;
-       }
-
        lun_p = core_dev_add_lun(se_tpg, dev, lun->unpacked_lun);
        if (IS_ERR(lun_p)) {
                pr_err("core_dev_add_lun() failed\n");
@@ -869,7 +870,7 @@ static struct config_group *target_fabric_make_lun(
                return ERR_PTR(-EINVAL);
 
        lun_cg = &lun->lun_group;
-       lun_cg->default_groups = kzalloc(sizeof(struct config_group) * 2,
+       lun_cg->default_groups = kmalloc(sizeof(struct config_group *) * 2,
                                GFP_KERNEL);
        if (!lun_cg->default_groups) {
                pr_err("Unable to allocate lun_cg->default_groups\n");