| From foo@baz Wed Feb 28 16:16:23 CET 2018 |
| From: Cathy Avery <cavery@redhat.com> |
| Date: Tue, 19 Dec 2017 13:32:48 -0500 |
| Subject: scsi: storvsc: Fix scsi_cmd error assignments in storvsc_handle_error |
| |
| From: Cathy Avery <cavery@redhat.com> |
| |
| |
| [ Upstream commit d1b8b2391c24751e44f618fcf86fb55d9a9247fd ] |
| |
| When an I/O is returned with an srb_status of SRB_STATUS_INVALID_LUN |
| which has zero good_bytes it must be assigned an error. Otherwise the |
| I/O will be continuously requeued and will cause a deadlock in the case |
| where disks are being hot added and removed. sd_probe_async will wait |
| forever for its I/O to complete while holding scsi_sd_probe_domain. |
| |
| Also returning the default error of DID_TARGET_FAILURE causes multipath |
| to not retry the I/O resulting in applications receiving I/O errors |
| before a failover can occur. |
| |
| Signed-off-by: Cathy Avery <cavery@redhat.com> |
| Signed-off-by: Long Li <longli@microsoft.com> |
| Reviewed-by: Stephen Hemminger <stephen@networkplumber.org> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/scsi/storvsc_drv.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/scsi/storvsc_drv.c |
| +++ b/drivers/scsi/storvsc_drv.c |
| @@ -1029,10 +1029,11 @@ static void storvsc_handle_error(struct |
| case TEST_UNIT_READY: |
| break; |
| default: |
| - set_host_byte(scmnd, DID_TARGET_FAILURE); |
| + set_host_byte(scmnd, DID_ERROR); |
| } |
| break; |
| case SRB_STATUS_INVALID_LUN: |
| + set_host_byte(scmnd, DID_NO_CONNECT); |
| do_work = true; |
| process_err_fn = storvsc_remove_lun; |
| break; |