linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
To: linux-scsi <linux-scsi@vger.kernel.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Christoph Hellwig <hch@lst.de>,
	Mike Christie <michaelc@cs.wisc.edu>,
	Hannes Reinecke <hare@suse.de>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
	Boaz Harrosh <bharrosh@panasas.com>,
	Joel Becker <jlbec@evilplan.org>,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Douglas Gilbert <dgilbert@interlog.com>,
	Fubo Chen <fubo.chen@gmail.com>,
	"Nicholas A. Bellinger" <nab@linux-iscsi.org>
Subject: [PATCH 06/21] target: Remove unnecessary hba_dev_list walk and se_clear_dev_ports legacy code
Date: Mon, 14 Mar 2011 04:06:00 -0700	[thread overview]
Message-ID: <1300100775-10012-7-git-send-email-nab@linux-iscsi.org> (raw)
In-Reply-To: <1300100775-10012-1-git-send-email-nab@linux-iscsi.org>

From: Fubo Chen <fubo.chen@gmail.com>

This patch removes a legacy struct se_hba->hba_dev_list -> se_release_device_for_hba()
list walk in core_delete_hba(), which is no longer required while using configfs
VFS level parent/child struct config_group dependency referencing.  The reason
is because any struct se_hba->hba_dev_list-> struct se_device members are going
to have to be released via:

	rmdir /sys/kernel/config/target/core/$HBA/*

before rmdir release of struct se_hba via target_core_configfs.c:
target_core_call_delhbafromtarget() -> core_delete_hba()

	rmdir /sys/kernel/config/target/core/$HBA

to release struct se_hba in core_delete_hba().

This patch also removes the legacy se_clear_dev_ports() function, which is
left-over pre-configfs shutdown logic for when se_free_virtual_device()
was responsible for walking struct se_device->dev_sep_list and calling
core_dev_del_lun() for each individual active struct se_port->se_lun.

The reason this can be removed is because all struct se_device->dev_sep_list
-> struct se_port communication is done via configfs symlinks, which
means that an target fabric module's endpoints containg active struct
se_port(s) will have to be released via target_core_fabric_configfs.c:
target_fabric_port_unlink() via:

	unlink /sys/kernel/config/target/$FABRIC_MOD/$ENDPOINT/tpgt_$TPGT/lun/lun_$LUN_ID/<symlink>

before rmdir release of struct se_device in target_core_configfs.c:
target_core_drop_subdev() -> se_free_virtual_device() can happen via:

	rmdir /sys/kernel/config/target/core/$HBA/*

to release struct se_subsystem_dev in target_core_drop_subdev()

Reported-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Reported-by: Fubo Chen <fubo.chen@gmail.com>
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
---
 drivers/target/target_core_device.c |   39 +---------------------------------
 drivers/target/target_core_hba.c    |   15 +-----------
 2 files changed, 4 insertions(+), 50 deletions(-)

diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index 5da051a..c9085e3 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -780,49 +780,14 @@ void se_release_vpd_for_dev(struct se_device *dev)
 	return;
 }
 
-/*
- * Called with struct se_hba->device_lock held.
- */
-void se_clear_dev_ports(struct se_device *dev)
-{
-	struct se_hba *hba = dev->se_hba;
-	struct se_lun *lun;
-	struct se_portal_group *tpg;
-	struct se_port *sep, *sep_tmp;
-
-	spin_lock(&dev->se_port_lock);
-	list_for_each_entry_safe(sep, sep_tmp, &dev->dev_sep_list, sep_list) {
-		spin_unlock(&dev->se_port_lock);
-		spin_unlock(&hba->device_lock);
-
-		lun = sep->sep_lun;
-		tpg = sep->sep_tpg;
-		spin_lock(&lun->lun_sep_lock);
-		if (lun->lun_se_dev == NULL) {
-			spin_unlock(&lun->lun_sep_lock);
-			continue;
-		}
-		spin_unlock(&lun->lun_sep_lock);
-
-		core_dev_del_lun(tpg, lun->unpacked_lun);
-
-		spin_lock(&hba->device_lock);
-		spin_lock(&dev->se_port_lock);
-	}
-	spin_unlock(&dev->se_port_lock);
-
-	return;
-}
-
 /*	se_free_virtual_device():
  *
  *	Used for IBLOCK, RAMDISK, and FILEIO Transport Drivers.
  */
 int se_free_virtual_device(struct se_device *dev, struct se_hba *hba)
 {
-	spin_lock(&hba->device_lock);
-	se_clear_dev_ports(dev);
-	spin_unlock(&hba->device_lock);
+	if (!list_empty(&dev->dev_sep_list))
+		dump_stack();
 
 	core_alua_free_lu_gp_mem(dev);
 	se_release_device_for_hba(dev);
diff --git a/drivers/target/target_core_hba.c b/drivers/target/target_core_hba.c
index 4bbe820..d0d2ecc 100644
--- a/drivers/target/target_core_hba.c
+++ b/drivers/target/target_core_hba.c
@@ -153,19 +153,8 @@ out_free_hba:
 int
 core_delete_hba(struct se_hba *hba)
 {
-	struct se_device *dev, *dev_tmp;
-
-	spin_lock(&hba->device_lock);
-	list_for_each_entry_safe(dev, dev_tmp, &hba->hba_dev_list, dev_list) {
-
-		se_clear_dev_ports(dev);
-		spin_unlock(&hba->device_lock);
-
-		se_release_device_for_hba(dev);
-
-		spin_lock(&hba->device_lock);
-	}
-	spin_unlock(&hba->device_lock);
+	if (!list_empty(&hba->hba_dev_list))
+		dump_stack();
 
 	hba->transport->detach_hba(hba);
 
-- 
1.7.4.1


  parent reply	other threads:[~2011-03-14 11:06 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-14 11:05 [PATCH 00/21] target patches for .39 scsi-misc (v3) Nicholas A. Bellinger
2011-03-14 11:05 ` [PATCH 01/21] target: Fix memory leak on error path in pscsi_alloc_task Nicholas A. Bellinger
2011-03-14 11:05 ` [PATCH 02/21] target: Fix match_strdup() memory leaks Nicholas A. Bellinger
2011-03-14 11:05 ` [PATCH 03/21] target: tcm_mod_builder.py generated Makefile cleanups Nicholas A. Bellinger
2011-03-14 11:05 ` [PATCH 04/21] target: remove EXTRA_CFLAGS Nicholas A. Bellinger
2011-03-14 11:05 ` [PATCH 05/21] target: Convert backend ->create_virtdevice() call to return ERR_PTR Nicholas A. Bellinger
2011-03-14 11:06 ` Nicholas A. Bellinger [this message]
2011-03-14 11:06 ` [PATCH 07/21] target: Minor sparse warning fixes and annotations Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 08/21] target: Remove spurious double cast from structure macro accessors Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 09/21] target: Convert rd_build_device_space() to use errno Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 10/21] target: Convert TMR REQ/RSP definitions to target namespace Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 11/21] target: Avoid mem leak and needless work in transport_generic_get_mem Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 12/21] target: Fix bogus return in transport_add_device_to_core_hba failure path Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 13/21] target: Fix generated *_drop_nodeacl() handler in tcm_mod_builder.py Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 14/21] target: Fix FILEIO fd_buffered_io= token typo Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 15/21] target: Add __init/__exit annotation for target_core_[init,exit]_configfs Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 16/21] target core v4.0.0-rc7-ml Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 17/21] target: add initial device backend context target_core_stat.c code Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 18/21] target: add initial fabric port " Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 19/21] target: add initial fabric MappedLUN " Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 20/21] target: Add fabric_stat_group for fabric module statistics default_group Nicholas A. Bellinger
2011-03-14 11:06 ` [PATCH 21/21] tcm_loop: Add multi-fabric Linux/SCSI LLD fabric module Nicholas A. Bellinger
2011-03-14 14:58   ` Christoph Hellwig
2011-03-14 22:02     ` Nicholas A. Bellinger
2011-03-15 10:18       ` Christoph Hellwig
2011-03-17  0:50         ` Nicholas A. Bellinger

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=1300100775-10012-7-git-send-email-nab@linux-iscsi.org \
    --to=nab@linux-iscsi.org \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=bharrosh@panasas.com \
    --cc=dgilbert@interlog.com \
    --cc=fubo.chen@gmail.com \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=jlbec@evilplan.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=sfr@canb.auug.org.au \
    /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;
as well as URLs for NNTP newsgroup(s).