Commit ddb588be authored by Sreekanth Reddy's avatar Sreekanth Reddy Committed by Christoph Hellwig

mpt2sas, mpt3sas: Fail the host reset initiated due to discovery related I/O...

mpt2sas, mpt3sas: Fail the host reset initiated due to discovery related I/O timeouts at driver load time

When a flaky disk is there in a topology then during driver load,
discovery related I/O times out; which results in SCSI error recovery
initiating host reset and then the controller won't see any disk.

In this patch, The driver would return FAILED status to the host reset
initiated due to discovery related I/O timeout if ioc->is_driver_loading
is set. This flag would be set until we exit out of scsih_scan_finished().
i.e.
During device discovery if one of the disk is flaky
(which responds to some discovery commands and doesn't respond to some)
the driver wouldn't perform host reset for discovery related I/O timeout.
Instead it would return Failure for the host reset resulting in the
flaky disk getting removed by the SCSI Mid layer,
so other disks would be added correctly.
Signed-off-by: default avatarSreekanth Reddy <Sreekanth.Reddy@avagotech.com>
Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 2d8ce8c9
...@@ -2729,9 +2729,18 @@ _scsih_host_reset(struct scsi_cmnd *scmd) ...@@ -2729,9 +2729,18 @@ _scsih_host_reset(struct scsi_cmnd *scmd)
ioc->name, scmd); ioc->name, scmd);
scsi_print_command(scmd); scsi_print_command(scmd);
if (ioc->is_driver_loading) {
printk(MPT2SAS_INFO_FMT "Blocking the host reset\n",
ioc->name);
r = FAILED;
goto out;
}
retval = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, retval = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
FORCE_BIG_HAMMER); FORCE_BIG_HAMMER);
r = (retval < 0) ? FAILED : SUCCESS; r = (retval < 0) ? FAILED : SUCCESS;
out:
printk(MPT2SAS_INFO_FMT "host reset: %s scmd(%p)\n", printk(MPT2SAS_INFO_FMT "host reset: %s scmd(%p)\n",
ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
......
...@@ -2392,9 +2392,17 @@ _scsih_host_reset(struct scsi_cmnd *scmd) ...@@ -2392,9 +2392,17 @@ _scsih_host_reset(struct scsi_cmnd *scmd)
ioc->name, scmd); ioc->name, scmd);
scsi_print_command(scmd); scsi_print_command(scmd);
if (ioc->is_driver_loading) {
pr_info(MPT3SAS_FMT "Blocking the host reset\n",
ioc->name);
r = FAILED;
goto out;
}
retval = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, retval = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP,
FORCE_BIG_HAMMER); FORCE_BIG_HAMMER);
r = (retval < 0) ? FAILED : SUCCESS; r = (retval < 0) ? FAILED : SUCCESS;
out:
pr_info(MPT3SAS_FMT "host reset: %s scmd(%p)\n", pr_info(MPT3SAS_FMT "host reset: %s scmd(%p)\n",
ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment