public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: nab@linux-iscsi.org
Cc: linux-scsi@vger.kernel.org
Subject: [PATCH 5/9] target: clean up transport_subsystem_register
Date: Mon, 08 Nov 2010 10:56:06 -0500	[thread overview]
Message-ID: <20101108155647.982654567@canuck.infradead.org> (raw)
In-Reply-To: 20101108155601.872926000@canuck.infradead.org

[-- Attachment #1: lio-simplify-transport_subsystem_register --]
[-- Type: text/plain, Size: 11843 bytes --]

Move initialization of the list into transport_subsystem_register, set the
owner field in the operations vector like for most others, remove the
external_submod field and replace it by not having an owner pointer.
Remove unessecary initializations to zero for se_subsystem_api fields.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: lio-core-2.6/drivers/target/target_core_file.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_file.c	2010-11-08 15:37:15.944863013 +0100
+++ lio-core-2.6/drivers/target/target_core_file.c	2010-11-08 15:49:05.428196347 +0100
@@ -953,9 +953,9 @@ static sector_t fd_get_blocks(struct se_
 
 static struct se_subsystem_api fileio_template = {
 	.name			= "fileio",
+	.owner			= THIS_MODULE,
 	.type			= FILEIO,
 	.transport_type		= TRANSPORT_PLUGIN_VHBA_PDEV,
-	.external_submod	= 1,
 	.attach_hba		= fd_attach_hba,
 	.detach_hba		= fd_detach_hba,
 	.cdb_none		= fd_CDB_none,
@@ -973,7 +973,6 @@ static struct se_subsystem_api fileio_te
 	.transport_complete	= fd_transport_complete,
 	.allocate_request	= fd_allocate_request,
 	.do_task		= fd_do_task,
-	.do_discard		= NULL,
 	.do_sync_cache		= fd_emulate_sync_cache,
 	.free_task		= fd_free_task,
 	.check_configfs_dev_params = fd_check_configfs_dev_params,
@@ -989,23 +988,14 @@ static struct se_subsystem_api fileio_te
 	.get_device_type	= fd_get_device_type,
 	.get_dma_length		= fd_get_dma_length,
 	.get_blocks		= fd_get_blocks,
-	.write_pending		= NULL,
 };
 
-int __init fileio_module_init(void)
+static int __init fileio_module_init(void)
 {
-	int ret;
-
-	INIT_LIST_HEAD(&fileio_template.sub_api_list);
-
-	ret = transport_subsystem_register(&fileio_template, THIS_MODULE);
-	if (ret < 0)
-		return ret;
-
-	return 0;
+	return transport_subsystem_register(&fileio_template);
 }
 
-void fileio_module_exit(void)
+static void fileio_module_exit(void)
 {
 	transport_subsystem_release(&fileio_template);
 }
Index: lio-core-2.6/drivers/target/target_core_hba.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_hba.c	2010-11-08 15:41:43.444863012 +0100
+++ lio-core-2.6/drivers/target/target_core_hba.c	2010-11-08 15:48:43.508196346 +0100
@@ -100,23 +100,17 @@ int se_core_add_hba(
 		return -EINVAL;
 
 	hba->transport = t;
+
 	/*
 	 * Get TCM subsystem api struct module reference to struct se_hba
 	 */
-	if (t->external_submod) {
-		if (!(t->sub_owner)) {
-			printk(KERN_ERR "Pointer to struct module does not"
-				" exist for %s\n", t->name);
-			hba->transport = NULL;
-			transport_core_put_sub(t);
-			return -EINVAL;
-		}
+	if (t->owner) {
 		/*
 		 * Grab a struct module reference count for subsystem plugin
 		 */
-		if (!(try_module_get(t->sub_owner))) {
-			printk(KERN_ERR "try_module_get() failed for"
-				" t->sub_owner\n");
+		if (!try_module_get(t->owner)) {
+			printk(KERN_ERR "try_module_get() failed for %s\n",
+				t->owner->name);
 			hba->transport = NULL;
 			transport_core_put_sub(t);
 			return -EINVAL;
@@ -126,8 +120,8 @@ int se_core_add_hba(
 	ret = t->attach_hba(hba, plugin_dep_id);
 	if (ret < 0) {
 		hba->transport = NULL;
-		if (t->external_submod)
-			module_put(t->sub_owner);
+		if (t->owner)
+			module_put(t->owner);
 		transport_core_put_sub(t);
 		return ret;
 	}
@@ -157,8 +151,8 @@ static int se_core_shutdown_hba(
 	/*
 	 * Release TCM subsystem api struct module reference from struct se_hba
 	 */
-	if (t->external_submod)
-		module_put(t->sub_owner);
+	if (t->owner)
+		module_put(t->owner);
 
 	return 0;
 }
Index: lio-core-2.6/drivers/target/target_core_iblock.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_iblock.c	2010-11-08 15:38:27.891529681 +0100
+++ lio-core-2.6/drivers/target/target_core_iblock.c	2010-11-08 15:48:47.868196356 +0100
@@ -921,9 +921,9 @@ static void iblock_bio_done(struct bio *
 
 static struct se_subsystem_api iblock_template = {
 	.name			= "iblock",
+	.owner			= THIS_MODULE,
 	.type			= IBLOCK,
 	.transport_type		= TRANSPORT_PLUGIN_VHBA_PDEV,
-	.external_submod	= 1,
 	.cdb_none		= iblock_CDB_none,
 	.cdb_read_non_SG	= iblock_CDB_read_non_SG,
 	.cdb_read_SG		= iblock_CDB_read_SG,
@@ -957,23 +957,14 @@ static struct se_subsystem_api iblock_te
 	.get_device_type	= iblock_get_device_type,
 	.get_dma_length		= iblock_get_dma_length,
 	.get_blocks		= iblock_get_blocks,
-	.write_pending		= NULL,
 };
 
-int __init iblock_module_init(void)
+static int __init iblock_module_init(void)
 {
-	int ret;
-
-	INIT_LIST_HEAD(&iblock_template.sub_api_list);
-
-	ret = transport_subsystem_register(&iblock_template, THIS_MODULE);
-	if (ret < 0)
-		return ret;
-
-	return 0;
+	return transport_subsystem_register(&iblock_template);
 }
 
-void iblock_module_exit(void)
+static void iblock_module_exit(void)
 {
 	transport_subsystem_release(&iblock_template);
 }
Index: lio-core-2.6/drivers/target/target_core_pscsi.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_pscsi.c	2010-11-08 15:38:27.901529680 +0100
+++ lio-core-2.6/drivers/target/target_core_pscsi.c	2010-11-08 15:48:49.844863013 +0100
@@ -1485,9 +1485,9 @@ static void pscsi_req_done(struct reques
 
 static struct se_subsystem_api pscsi_template = {
 	.name			= "pscsi",
+	.owner			= THIS_MODULE,
 	.type			= PSCSI,
 	.transport_type		= TRANSPORT_PLUGIN_PHBA_PDEV,
-	.external_submod	= 1,
 	.cdb_none		= pscsi_CDB_none,
 	.cdb_read_non_SG	= pscsi_CDB_read_non_SG,
 	.cdb_read_SG		= pscsi_CDB_read_SG,
@@ -1516,23 +1516,14 @@ static struct se_subsystem_api pscsi_tem
 	.get_device_rev		= pscsi_get_device_rev,
 	.get_device_type	= pscsi_get_device_type,
 	.get_dma_length		= pscsi_get_dma_length,
-	.write_pending		= NULL,
 };
 
-int __init pscsi_module_init(void)
+static int __init pscsi_module_init(void)
 {
-	int ret;
-
-	INIT_LIST_HEAD(&pscsi_template.sub_api_list);
-
-	ret = transport_subsystem_register(&pscsi_template, THIS_MODULE);
-	if (ret < 0)
-		return ret;
-
-	return 0;
+	return transport_subsystem_register(&pscsi_template);
 }
 
-void pscsi_module_exit(void)
+static void pscsi_module_exit(void)
 {
 	transport_subsystem_release(&pscsi_template);
 }
Index: lio-core-2.6/drivers/target/target_core_rd.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_rd.c	2010-11-08 15:38:27.911529679 +0100
+++ lio-core-2.6/drivers/target/target_core_rd.c	2010-11-08 15:49:00.321529680 +0100
@@ -1283,7 +1283,6 @@ static struct se_subsystem_api rd_dr_tem
 	.name			= "rd_dr",
 	.type			= RAMDISK_DR,
 	.transport_type		= TRANSPORT_PLUGIN_VHBA_VDEV,
-	.external_submod	= 0,
 	.cdb_none		= rd_CDB_none,
 	.cdb_read_non_SG	= rd_CDB_read_non_SG,
 	.cdb_read_SG		= rd_CDB_read_SG,
@@ -1314,14 +1313,12 @@ static struct se_subsystem_api rd_dr_tem
 	.get_dma_length		= rd_get_dma_length,
 	.get_blocks		= rd_get_blocks,
 	.do_se_mem_map		= rd_DIRECT_do_se_mem_map,
-	.write_pending		= NULL,
 };
 
 static struct se_subsystem_api rd_mcp_template = {
 	.name			= "rd_mcp",
 	.type			= RAMDISK_MCP,
 	.transport_type		= TRANSPORT_PLUGIN_VHBA_VDEV,
-	.external_submod	= 0,
 	.cdb_none		= rd_CDB_none,
 	.cdb_read_non_SG	= rd_CDB_read_non_SG,
 	.cdb_read_SG		= rd_CDB_read_SG,
@@ -1348,21 +1345,17 @@ static struct se_subsystem_api rd_mcp_te
 	.get_device_rev		= rd_get_device_rev,
 	.get_device_type	= rd_get_device_type,
 	.get_dma_length		= rd_get_dma_length,
-	.write_pending		= NULL,
 };
 
 int __init rd_module_init(void)
 {
 	int ret;
 
-	INIT_LIST_HEAD(&rd_dr_template.sub_api_list);
-	INIT_LIST_HEAD(&rd_mcp_template.sub_api_list);
-
-	ret = transport_subsystem_register(&rd_dr_template, NULL);
+	ret = transport_subsystem_register(&rd_dr_template);
 	if (ret < 0)
 		return ret;
 
-	ret = transport_subsystem_register(&rd_mcp_template, NULL);
+	ret = transport_subsystem_register(&rd_mcp_template);
 	if (ret < 0) {
 		transport_subsystem_release(&rd_dr_template);
 		return ret;
Index: lio-core-2.6/drivers/target/target_core_stgt.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_stgt.c	2010-11-08 15:38:27.924863014 +0100
+++ lio-core-2.6/drivers/target/target_core_stgt.c	2010-11-08 15:49:02.761529680 +0100
@@ -833,9 +833,9 @@ static int stgt_transfer_response(struct
 
 static struct se_subsystem_api stgt_template = {
 	.name			= "stgt",
+	.owner			= THIS_MODULE,
 	.type			= STGT,
 	.transport_type		= TRANSPORT_PLUGIN_VHBA_PDEV,
-	.external_submod	= 1,
 	.cdb_none		= stgt_CDB_none,
 	.cdb_read_non_SG	= stgt_CDB_read_non_SG,
 	.cdb_read_SG		= stgt_CDB_read_SG,
@@ -865,23 +865,14 @@ static struct se_subsystem_api stgt_temp
 	.get_device_rev		= stgt_get_device_rev,
 	.get_device_type	= stgt_get_device_type,
 	.get_dma_length		= stgt_get_dma_length,
-	.write_pending		= NULL,
 };
 
-int __init stgt_module_init(void)
+static int __init stgt_module_init(void)
 {
-	int ret;
-
-	INIT_LIST_HEAD(&stgt_template.sub_api_list);
-
-	ret = transport_subsystem_register(&stgt_template, THIS_MODULE);
-	if (ret < 0)
-		return ret;
-
-	return 0;
+	return transport_subsystem_register(&stgt_template);
 }
 
-void stgt_module_exit(void)
+static void stgt_module_exit(void)
 {
 	transport_subsystem_release(&stgt_template);
 }
Index: lio-core-2.6/drivers/target/target_core_transport.c
===================================================================
--- lio-core-2.6.orig/drivers/target/target_core_transport.c	2010-11-08 15:37:15.928196347 +0100
+++ lio-core-2.6/drivers/target/target_core_transport.c	2010-11-08 15:44:43.708196346 +0100
@@ -545,18 +545,11 @@ int transport_subsystem_check_init(void)
 }
 
 int transport_subsystem_register(
-	struct se_subsystem_api *sub_api,
-	struct module *sub_owner)
+	struct se_subsystem_api *sub_api)
 {
 	struct se_subsystem_api *s;
-	/*
-	 * Save struct module * for TFO [attach,detach]_hba() reference
-	 * in se_core_add_hba()
-	 */
-	if (sub_api->external_submod && (sub_owner != NULL))
-		sub_api->sub_owner = sub_owner;
-	else
-		sub_api->sub_owner = NULL;
+
+	INIT_LIST_HEAD(&sub_api->sub_api_list);
 
 	mutex_lock(&se_global->g_sub_api_mutex);
 	list_for_each_entry(s, &se_global->g_sub_api_list, sub_api_list) {
@@ -572,7 +565,7 @@ int transport_subsystem_register(
 	mutex_unlock(&se_global->g_sub_api_mutex);
 
 	printk(KERN_INFO "TCM: Registered subsystem plugin: %s struct module:"
-			" %p\n", sub_api->name, sub_api->sub_owner);
+			" %p\n", sub_api->name, sub_api->owner);
 	return 0;
 }
 EXPORT_SYMBOL(transport_subsystem_register);
Index: lio-core-2.6/include/target/target_core_transport.h
===================================================================
--- lio-core-2.6.orig/include/target/target_core_transport.h	2010-11-08 15:42:48.694863012 +0100
+++ lio-core-2.6/include/target/target_core_transport.h	2010-11-08 15:49:30.924863014 +0100
@@ -138,8 +138,7 @@ extern int __iscsi_debug_dev(struct se_d
 extern unsigned char *transport_get_iqn_sn(void);
 extern void transport_init_queue_obj(struct se_queue_obj *);
 extern int transport_subsystem_check_init(void);
-extern int transport_subsystem_register(struct se_subsystem_api *,
-				struct module *);
+extern int transport_subsystem_register(struct se_subsystem_api *);
 extern void transport_subsystem_release(struct se_subsystem_api *);
 extern void transport_load_plugins(void);
 extern struct se_subsystem_api *transport_core_get_sub_by_name(const char *);
@@ -323,13 +322,9 @@ struct se_subsystem_api {
 	 */
 	u8 transport_type;
 	/*
-	 * For target_core_rd.c internal usage
-	 */
-	int external_submod;
-	/*
 	 * struct module for struct se_hba references
 	 */
-	struct module *sub_owner;
+	struct module *owner;
 	/*
 	 * Counter for struct se_hba reference
 	 */


  parent reply	other threads:[~2010-11-08 15:56 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-08 15:56 [PATCH 0/9] target core review feedback Christoph Hellwig
2010-11-08 15:56 ` [PATCH 1/9] target: remove never changing indirections in se_cmd Christoph Hellwig
2010-11-08 21:57   ` Nicholas A. Bellinger
2010-11-08 15:56 ` [PATCH 2/9] target: remove activate_device/deactivate_device methods Christoph Hellwig
2010-11-08 22:00   ` Nicholas A. Bellinger
2010-11-08 15:56 ` [PATCH 3/9] From: Christoph Hellwig <hch@lst.de> Sujbect: target: remove SHUTDOWN_SIGS Christoph Hellwig
2010-11-08 22:21   ` [PATCH 3/9] " Nicholas A. Bellinger
2010-11-08 22:31     ` Christoph Hellwig
2010-11-08 15:56 ` [PATCH 4/9] target: remove transport_generic_map_buffers_to_tasks Christoph Hellwig
2010-11-08 22:29   ` Nicholas A. Bellinger
2010-11-08 15:56 ` Christoph Hellwig [this message]
2010-11-08 22:32   ` [PATCH 5/9] target: clean up transport_subsystem_register Nicholas A. Bellinger
2010-11-08 15:56 ` [PATCH 6/9] target: remove dead blockdevice claim/release code Christoph Hellwig
2010-11-08 22:35   ` Nicholas A. Bellinger
2010-11-08 15:56 ` [PATCH 7/9] target: remove transport_generic_free_device Christoph Hellwig
2010-11-08 22:40   ` Nicholas A. Bellinger
2010-11-08 15:56 ` [PATCH 8/9] target: remove unused split_cdb_RW_* handlers Christoph Hellwig
2010-11-08 22:41   ` Nicholas A. Bellinger
2010-11-08 15:56 ` [PATCH 9/9] target: remove dead call to transport_emulate_control_cdb in rd driver Christoph Hellwig
2010-11-08 22:44   ` Nicholas A. Bellinger
2010-11-08 17:19 ` [PATCH 10/9] target: split CDB emulation out of target_core_transport.c Christoph Hellwig
2010-11-08 22:48   ` Nicholas A. Bellinger
2010-11-08 22:57     ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101108155647.982654567@canuck.infradead.org \
    --to=hch@infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=nab@linux-iscsi.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox