From: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
To: linux-scsi <linux-scsi@vger.kernel.org>,
James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Fubo Chen <fubo.chen@gmail.com>,
"Nicholas A. Bellinger" <nab@linux-iscsi.org>
Subject: [PATCH 06/14] target: Remove unnecessary hba_dev_list walk and se_clear_dev_ports legacy code
Date: Fri, 25 Feb 2011 11:49:58 -0800 [thread overview]
Message-ID: <1298663406-5118-7-git-send-email-nab@linux-iscsi.org> (raw)
In-Reply-To: <1298663406-5118-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
next prev parent reply other threads:[~2011-02-25 19:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-25 19:49 [PATCH 00/14] target patches for .39 scsi-misc (v2) Nicholas A. Bellinger
2011-02-25 19:49 ` [PATCH 01/14] target: Fix memory leak on error path in pscsi_alloc_task Nicholas A. Bellinger
2011-02-25 19:49 ` [PATCH 02/14] target: Fix match_strdup() memory leaks Nicholas A. Bellinger
2011-02-25 19:49 ` [PATCH 03/14] target: tcm_mod_builder.py generated Makefile cleanups Nicholas A. Bellinger
2011-02-25 19:49 ` [PATCH 04/14] target: remove EXTRA_CFLAGS Nicholas A. Bellinger
2011-02-25 19:49 ` [PATCH 05/14] target: Convert backend ->create_virtdevice() call to return ERR_PTR Nicholas A. Bellinger
2011-02-25 19:49 ` Nicholas A. Bellinger [this message]
2011-02-25 19:49 ` [PATCH 07/14] target: Minor sparse warning fixes and annotations Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 08/14] target: Remove spurious double cast from structure macro accessors Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 09/14] target: Convert rd_build_device_space() to use errno Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 10/14] target: Convert TMR REQ/RSP definitions to target namespace Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 11/14] target: Avoid mem leak and needless work in transport_generic_get_mem Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 12/14] target: Fix bogus return in transport_add_device_to_core_hba failure path Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 13/14] target: Fix generated *_drop_nodeacl() handler in tcm_mod_builder.py Nicholas A. Bellinger
2011-02-25 19:50 ` [PATCH 14/14] target core v4.0.0-rc7-ml 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=1298663406-5118-7-git-send-email-nab@linux-iscsi.org \
--to=nab@linux-iscsi.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=fubo.chen@gmail.com \
--cc=linux-scsi@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).