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