lkml.org 
[lkml]   [2014]   [Dec]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRE: [PATCH 2/4] Drivers: scsi: storvsc: Force discovery of LUNs that may have been removed.
Date


> -----Original Message-----
> From: devel [mailto:driverdev-devel-bounces@linuxdriverproject.org] On
> Behalf Of K. Y. Srinivasan
> Sent: Tuesday, December 16, 2014 1:22 PM
> To: gregkh@linuxfoundation.org; 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/4] Drivers: scsi: storvsc: Force discovery of LUNs that may
> have been removed.
>
> 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>
Reviewed-by: Long Li <longli@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
> 0a96fef..a7163c6 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
>
> _______________________________________________
> devel mailing list
> devel@linuxdriverproject.org
> http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


\
 
 \ /
  Last update: 2014-12-30 20:41    [W:0.306 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site