From: "K. Y. Srinivasan" <kys@microsoft.com>
To: hare@suse.de, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, ohering@suse.com,
jbottomley@parallels.com, hch@infradead.org,
linux-scsi@vger.kernel.org
Subject: [PATCH 2/2] Drivers: scsi: storvsc: Force discovery of LUNs that may have been removed.
Date: Sat, 16 Aug 2014 20:09:48 -0700 [thread overview]
Message-ID: <1408244988-27456-2-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1408244988-27456-1-git-send-email-kys@microsoft.com>
The host asks the guest to scan when a LUN is removed or added.
The only way a guest can identify the removed LUN is when an I/O is
attempted on a removed LUN - the SRB status code indicates that the LUN
is invalid. We currently handle this SRB status and remove the device.
Rather than waiting for an I/O to remove the device, force the discovery of
LUNs that may have been removed prior to discovering LUNs that may have
been added.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
drivers/scsi/storvsc_drv.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 02d1db6..fb38ca9 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -430,10 +430,36 @@ static void storvsc_host_scan(struct work_struct *work)
{
struct storvsc_scan_work *wrk;
struct Scsi_Host *host;
+ struct scsi_device *sdev;
+ unsigned long flags;
wrk = container_of(work, struct storvsc_scan_work, work);
host = wrk->host;
+ /*
+ * Before scanning the host, first check to see if any of the
+ * currrently known devices have been hot removed. We issue a
+ * "unit ready" command against all currently known devices.
+ * This I/O will result in an error for devices that have been
+ * removed. As part of handling the I/O error, we remove the device.
+ *
+ * When a LUN is added or removed, the host sends us a signal to
+ * scan the host. Thus we are forced to discover the LUNs that
+ * may have been removed this way.
+ */
+ mutex_lock(&host->scan_mutex);
+ spin_lock_irqsave(host->host_lock, flags);
+ list_for_each_entry(sdev, &host->__devices, siblings) {
+ spin_unlock_irqrestore(host->host_lock, flags);
+ scsi_test_unit_ready(sdev, 1, 1, NULL);
+ spin_lock_irqsave(host->host_lock, flags);
+ continue;
+ }
+ spin_unlock_irqrestore(host->host_lock, flags);
+ mutex_unlock(&host->scan_mutex);
+ /*
+ * Now scan the host to discover LUNs that may have been added.
+ */
scsi_scan_host(host);
kfree(wrk);
--
1.7.4.1
WARNING: multiple messages have this Message-ID (diff)
From: "K. Y. Srinivasan" <kys@microsoft.com>
To: hare@suse.de, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, ohering@suse.com,
jbottomley@parallels.com, hch@infradead.org,
linux-scsi@vger.kernel.org
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Subject: [PATCH 2/2] Drivers: scsi: storvsc: Force discovery of LUNs that may have been removed.
Date: Sat, 16 Aug 2014 20:09:48 -0700 [thread overview]
Message-ID: <1408244988-27456-2-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1408244988-27456-1-git-send-email-kys@microsoft.com>
The host asks the guest to scan when a LUN is removed or added.
The only way a guest can identify the removed LUN is when an I/O is
attempted on a removed LUN - the SRB status code indicates that the LUN
is invalid. We currently handle this SRB status and remove the device.
Rather than waiting for an I/O to remove the device, force the discovery of
LUNs that may have been removed prior to discovering LUNs that may have
been added.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
drivers/scsi/storvsc_drv.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 02d1db6..fb38ca9 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -430,10 +430,36 @@ static void storvsc_host_scan(struct work_struct *work)
{
struct storvsc_scan_work *wrk;
struct Scsi_Host *host;
+ struct scsi_device *sdev;
+ unsigned long flags;
wrk = container_of(work, struct storvsc_scan_work, work);
host = wrk->host;
+ /*
+ * Before scanning the host, first check to see if any of the
+ * currrently known devices have been hot removed. We issue a
+ * "unit ready" command against all currently known devices.
+ * This I/O will result in an error for devices that have been
+ * removed. As part of handling the I/O error, we remove the device.
+ *
+ * When a LUN is added or removed, the host sends us a signal to
+ * scan the host. Thus we are forced to discover the LUNs that
+ * may have been removed this way.
+ */
+ mutex_lock(&host->scan_mutex);
+ spin_lock_irqsave(host->host_lock, flags);
+ list_for_each_entry(sdev, &host->__devices, siblings) {
+ spin_unlock_irqrestore(host->host_lock, flags);
+ scsi_test_unit_ready(sdev, 1, 1, NULL);
+ spin_lock_irqsave(host->host_lock, flags);
+ continue;
+ }
+ spin_unlock_irqrestore(host->host_lock, flags);
+ mutex_unlock(&host->scan_mutex);
+ /*
+ * Now scan the host to discover LUNs that may have been added.
+ */
scsi_scan_host(host);
kfree(wrk);
--
1.7.4.1
next prev parent reply other threads:[~2014-08-17 3:09 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-17 3:09 [PATCH 0/2] Drivers: scsi: storvsc: Fix issues with hot-add/remove of LUNs K. Y. Srinivasan
2014-08-17 3:09 ` K. Y. Srinivasan
2014-08-17 3:09 ` [PATCH 1/2] Drivers: scsi: storvsc: In responce to a scan event, scan the host K. Y. Srinivasan
2014-08-17 3:09 ` K. Y. Srinivasan
2014-08-17 3:09 ` K. Y. Srinivasan [this message]
2014-08-17 3:09 ` [PATCH 2/2] Drivers: scsi: storvsc: Force discovery of LUNs that may have been removed K. Y. Srinivasan
2014-08-19 17:54 ` Christoph Hellwig
2014-08-19 17:54 ` Christoph Hellwig
2014-08-26 22:54 ` KY Srinivasan
2014-08-26 22:54 ` KY Srinivasan
2014-08-29 1:11 ` Christoph Hellwig
2014-08-29 1:11 ` Christoph Hellwig
2014-08-27 14:31 ` Hannes Reinecke
2014-08-27 14:31 ` Hannes Reinecke
2014-08-29 2:42 ` Mike Christie
2014-08-29 6:19 ` Hannes Reinecke
2014-08-29 6:19 ` Hannes Reinecke
2014-08-29 7:39 ` Bart Van Assche
2014-08-29 8:13 ` Hannes Reinecke
2014-08-29 8:13 ` Hannes Reinecke
2014-08-29 13:53 ` James Bottomley
2014-08-29 13:53 ` James Bottomley
2014-08-29 15:01 ` Ewan Milne
2014-08-29 15:01 ` Ewan Milne
2014-09-25 13:47 ` [PATCH 0/2] Drivers: scsi: storvsc: Fix issues with hot-add/remove of LUNs Christoph Hellwig
2014-09-29 1:47 ` KY Srinivasan
2014-09-29 1:47 ` KY Srinivasan
2014-10-07 17:44 ` KY Srinivasan
2014-10-07 17:44 ` KY Srinivasan
2014-10-17 13:22 ` Christoph Hellwig
2014-10-17 13:22 ` 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=1408244988-27456-2-git-send-email-kys@microsoft.com \
--to=kys@microsoft.com \
--cc=devel@linuxdriverproject.org \
--cc=hare@suse.de \
--cc=hch@infradead.org \
--cc=jbottomley@parallels.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=ohering@suse.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.