[PATCH] [Target_Core_Mod/ConfigFS]: Updates for target_core_cit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>From 1bfa0c16284c97121229e82d2be1838873b1178e Mon Sep 17 00:00:00 2001
From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
Date: Thu, 30 Oct 2008 16:10:49 -0700
Subject: [PATCH] [Target_Core_Mod/ConfigFS]: Updates for target_core_cit

Remove last remaining IOCTL bits from /sys/kernel/config/target/core/$PLUGIN_HBA
in target_core_ops->make_group() and target_core_ops->drop_item().

Also, updated some ERR_PTR() return values in target_core_call_freedev(),
and removed incorrect FIXME: from early devel days before it was understood
that ConfigFS protects se_hba_t->hba_id, but we still want to block when
when access se_hba_t across different $STORAGE_OBJECTS.

Signed-off-by: Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx>
---
 drivers/lio-core/target_core_configfs.c |   71 ++++--------------------------
 1 files changed, 10 insertions(+), 61 deletions(-)

diff --git a/drivers/lio-core/target_core_configfs.c b/drivers/lio-core/target_core_configfs.c
index a5792e3..77950c1 100644
--- a/drivers/lio-core/target_core_configfs.c
+++ b/drivers/lio-core/target_core_configfs.c
@@ -41,8 +41,6 @@
 #include <iscsi_target_core.h>
 #include <target_core_base.h>
 #include <iscsi_target_error.h>
-#include <iscsi_target_ioctl.h>
-#include <iscsi_target_ioctl_defs.h>
 #include <target_core_device.h>
 #include <iscsi_target_device.h>
 #include <target_core_hba.h>
@@ -831,7 +829,6 @@ static struct config_item_type target_core_dev_cit = {
 
 // Start functions for struct config_item_type target_core_hba_cit
 
-#warning Fix unprotected reference to hba_p
 static struct config_group *target_core_call_createdev (
 	struct config_group *group,
 	const char *name)
@@ -907,7 +904,6 @@ out:
 	return(NULL);
 }
 
-#warning Fix unprotected reference to hba_p
 static void target_core_call_freedev (
 	struct config_group *group,
 	struct config_item *item)
@@ -1009,9 +1005,7 @@ static struct config_group *target_core_call_addhbatotarget (
 {
 	char *se_plugin_str, *str, *str2, *endptr;
 	se_hba_t *hba;
-	se_hbainfo_t hba_info;
 	se_plugin_t *se_plugin;
-	struct iscsi_target *tg;
 	char buf[TARGET_CORE_NAME_MAX_LEN];
 	u32 plugin_dep_id;
 	int hba_type = 0, ret;
@@ -1021,13 +1015,13 @@ static struct config_group *target_core_call_addhbatotarget (
 		printk(KERN_ERR "Passed *name strlen(): %d exceeds"
 			" TARGET_CORE_NAME_MAX_LEN: %d\n", (int)strlen(name),
 			TARGET_CORE_NAME_MAX_LEN);
-		return(NULL);
+		return(ERR_PTR(-ENAMETOOLONG));
 	}
 	snprintf(buf, TARGET_CORE_NAME_MAX_LEN, "%s", name);
 
 	if (!(str = strstr(buf, "_"))) {
 		printk(KERN_ERR "Unable to locate \"_\" for $SUBSYSTEM_PLUGIN_$HOST_ID\n");
-		return(NULL);
+		return(ERR_PTR(-EINVAL));
 	}
 	se_plugin_str = buf;
 
@@ -1044,7 +1038,7 @@ static struct config_group *target_core_call_addhbatotarget (
 	}
 
 	if (!(se_plugin = transport_core_get_plugin_by_name(se_plugin_str)))
-		return(NULL);
+		return(ERR_PTR(-EINVAL));
 
 	hba_type = se_plugin->plugin_type;
 	plugin_dep_id = simple_strtoul(str, &endptr, 0);
@@ -1053,70 +1047,30 @@ static struct config_group *target_core_call_addhbatotarget (
 		se_plugin->plugin_name, hba_type, plugin_dep_id);
 
 	if (!(hba = core_get_next_free_hba()))
-		return(NULL);
-	
-	if (!(tg = kzalloc(sizeof(struct iscsi_target), GFP_KERNEL)))
-		return(ERR_PTR(-ENOMEM));
+		return(ERR_PTR(-EINVAL));
 	
-#warning This should go into se_subsystem_api_t API
-	switch (hba_type) {
-	case PSCSI:
-		tg->scsi_host_id = plugin_dep_id;
-		tg->hba_params_set |= PARAM_HBA_SCSI_HOST_ID;	
-		break;
-	case IBLOCK:
-		tg->iblock_host_id = plugin_dep_id;
-		tg->hba_params_set |= PARAM_HBA_IBLOCK_HOST_ID;
-		break;
-	case FILEIO:
-		tg->fd_host_id = plugin_dep_id;
-		tg->hba_params_set |= PARAM_HBA_FD_HOST_ID;
-		break;
-	case RAMDISK_DR:
-	case RAMDISK_MCP:
-		tg->rd_host_id = plugin_dep_id;
-		tg->hba_params_set |= PARAM_HBA_RD_HOST_ID;
-		break;
-	default:
-		printk(KERN_ERR "Unable to setup hba_type: %d name: %s\n",
-			hba_type, se_plugin_str);
-		goto out;
-	}
-	tg->hba_type = hba_type;
-	tg->params_set |= PARAM_HBA_TYPE;
-	tg->hba_id = hba->hba_id;
-	tg->params_set |= PARAM_HBA_ID;
-
-	memset(&hba_info, 0, sizeof(se_hbainfo_t));
-	hba_info.hba_id = hba->hba_id;
-	hba_info.hba_type = hba_type;
+	hba->type = hba_type;
 
-	if ((ret = iscsi_hba_check_addhba_params(tg, &hba_info)) < 0)
-		goto out;
-
-	if ((ret = iscsi_hba_add_hba(hba, &hba_info, tg)) < 0)
+	if ((ret = se_core_add_hba(hba, plugin_dep_id)) < 0)
 		goto out;
 
 	config_group_init_type_name(&hba->hba_group, name, &target_core_hba_cit);
 
-	kfree(tg);
 	core_put_hba(hba);
 	return(&hba->hba_group);
 out:
-	kfree(tg);
+	hba->type = 0;
 	core_put_hba(hba);
-	return(NULL);
+	return(ERR_PTR(ret));
 }
 
 
-#warning Fix unprotected reference to hba_p
 static void target_core_call_delhbafromtarget (
 	struct config_group *group,
 	struct config_item *item)
 {
 	se_hba_t *hba_p = container_of(to_config_group(item), se_hba_t, hba_group);
 	se_hba_t *hba = NULL;
-	struct iscsi_target *tg;
 	int ret;
 
 	if (!(hba_p)) {
@@ -1124,18 +1078,13 @@ static void target_core_call_delhbafromtarget (
 		return;
 	}
 
-	if (!(tg = kzalloc(sizeof(struct iscsi_target), GFP_KERNEL)))
-		return;
-
 	if (!(hba = core_get_hba_from_id(hba_p->hba_id, 0)))
-		goto out;
+		return;
 	
 	config_item_put(item);
 
-	ret = iscsi_hba_del_hba(hba);
+	ret = se_core_del_hba(hba);
 	core_put_hba(hba);
-out:
-	kfree(tg);
 	return;
 
 }
-- 
1.5.4.1



--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux