Re: [PATCH 1/1] scsi scan: don't fail scans when host is in recovery

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/25/2011 07:36 AM, michaelc@xxxxxxxxxxx wrote:
> From: Mike Christie <michaelc@xxxxxxxxxxx>
> 
> The problem is that if we are doing a scsi scan then the device goes
> into recovery then we will wait for the recovery to complete. It waits
> because scsi-ml will send inquiries or report luns and the queueing code
> will have been blocked due to the host not being ready. However, if we
> are in recovery and then a scan is started the scan will silently fail
> and some devices will not be added.
> 
> It is easy to hit the problem where devices do not show up with
> FC where we are doing tests that disrupt the target controllers.
> When the controller is disruprted (reboot, or setting firmware, etc),
> and we cause the dev loss tmo to fire then devices will be removed
> Then when the problem has been fixed, the rport will be scanned and
> devices should be added back. But if we cause another disruption before
> scanning has started then devices will not get added back. If the problem
> is not started until the scan is started then the devices will be added
> back.
> 
> This patch fixes that problem by not failing scans when the host
> is in recovery. We will let scsi-ml send the IO and let the queueing
> and scsi error handling deal with it like is done if we went into
> recovery while scanning.
> 
> For recovery cases where the host is being torn down then with the
> patch we will still fail the scan since there is not point in scanning.
> 
> Patch was made and tested over scsi-misc.
> 
> 
> Signed-off-by: Mike Christie <michaelc@xxxxxxxxxxx>
> ---
>  include/scsi/scsi_host.h |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
> index f1f2644..22b7b23 100644
> --- a/include/scsi/scsi_host.h
> +++ b/include/scsi/scsi_host.h
> @@ -791,7 +791,8 @@ static inline struct device *scsi_get_device(struct Scsi_Host *shost)
>   **/
>  static inline int scsi_host_scan_allowed(struct Scsi_Host *shost)
>  {
> -	return shost->shost_state == SHOST_RUNNING;
> +	return shost->shost_state == SHOST_RUNNING ||
> +	       shost->shost_state == SHOST_RECOVERY;
>  }
>  
>  extern void scsi_unblock_requests(struct Scsi_Host *);

James, ping?
Any reason it was not included?

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@xxxxxxx			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux