Message ID | 20210309135752.187916-1-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | scsi: fix sense code for EREMOTEIO | expand |
On 3/9/21 2:57 PM, Paolo Bonzini wrote: > SENSE_CODE(LUN_COMM_FAILURE) has an ABORTED COMMAND sense key, > so it results in a retry in Linux. To ensure that EREMOTEIO > is forwarded to the guest, use a HARDWARE ERROR sense key > instead. Note that the code before commit d7a84021d was incorrect > because it used HARDWARE_ERROR as a SCSI status, not as a sense > key. It is not clear whether if it deserves a 'Fixes: d7a84021db8 ("scsi: introduce scsi_sense_from_errno()")' or not... > Reported-by: Marc-André Lureau <marcandre.lureau@redhat.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > scsi/utils.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/scsi/utils.c b/scsi/utils.c > index 873e05aeaf..357b036671 100644 > --- a/scsi/utils.c > +++ b/scsi/utils.c > @@ -589,7 +589,7 @@ int scsi_sense_from_errno(int errno_value, SCSISense *sense) > return TASK_SET_FULL; > #ifdef CONFIG_LINUX > /* These errno mapping are specific to Linux. For more information: > - * - scsi_decide_disposition in drivers/scsi/scsi_error.c > + * - scsi_check_sense and scsi_decide_disposition in drivers/scsi/scsi_error.c > * - scsi_result_to_blk_status in drivers/scsi/scsi_lib.c > * - blk_errors[] in block/blk-core.c > */ > @@ -599,7 +599,7 @@ int scsi_sense_from_errno(int errno_value, SCSISense *sense) > *sense = SENSE_CODE(READ_ERROR); > return CHECK_CONDITION; > case EREMOTEIO: > - *sense = SENSE_CODE(LUN_COMM_FAILURE); > + *sense = SENSE_CODE(TARGET_FAILURE); > return CHECK_CONDITION; > #endif > case ENOMEDIUM: >
On 09/03/21 15:14, Philippe Mathieu-Daudé wrote: >> SENSE_CODE(LUN_COMM_FAILURE) has an ABORTED COMMAND sense key, >> so it results in a retry in Linux. To ensure that EREMOTEIO >> is forwarded to the guest, use a HARDWARE ERROR sense key >> instead. Note that the code before commit d7a84021d was incorrect >> because it used HARDWARE_ERROR as a SCSI status, not as a sense >> key. > > It is not clear whether if it deserves a 'Fixes: d7a84021db8 ("scsi: > introduce scsi_sense_from_errno()")' or not... Yes, why not. That was in turn a bugfix but not the best. Paolo >> Reported-by: Marc-André Lureau<marcandre.lureau@redhat.com> >> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com> > Reviewed-by: Philippe Mathieu-Daudé<philmd@redhat.com> >
diff --git a/scsi/utils.c b/scsi/utils.c index 873e05aeaf..357b036671 100644 --- a/scsi/utils.c +++ b/scsi/utils.c @@ -589,7 +589,7 @@ int scsi_sense_from_errno(int errno_value, SCSISense *sense) return TASK_SET_FULL; #ifdef CONFIG_LINUX /* These errno mapping are specific to Linux. For more information: - * - scsi_decide_disposition in drivers/scsi/scsi_error.c + * - scsi_check_sense and scsi_decide_disposition in drivers/scsi/scsi_error.c * - scsi_result_to_blk_status in drivers/scsi/scsi_lib.c * - blk_errors[] in block/blk-core.c */ @@ -599,7 +599,7 @@ int scsi_sense_from_errno(int errno_value, SCSISense *sense) *sense = SENSE_CODE(READ_ERROR); return CHECK_CONDITION; case EREMOTEIO: - *sense = SENSE_CODE(LUN_COMM_FAILURE); + *sense = SENSE_CODE(TARGET_FAILURE); return CHECK_CONDITION; #endif case ENOMEDIUM:
SENSE_CODE(LUN_COMM_FAILURE) has an ABORTED COMMAND sense key, so it results in a retry in Linux. To ensure that EREMOTEIO is forwarded to the guest, use a HARDWARE ERROR sense key instead. Note that the code before commit d7a84021d was incorrect because it used HARDWARE_ERROR as a SCSI status, not as a sense key. Reported-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- scsi/utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)