scsi: fix sense code for EREMOTEIO
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>
This commit is contained in:
parent
26dbec410e
commit
dc293f60b0
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user