mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-07 18:05:21 +02:00
FROMLIST: scsi: core: Retry passthrough commands if SCMD_RETRY_PASSTHROUGH is set
The SCSI core does not retry passthrough commands even if the SCSI device reports a retryable unit attention condition. Support retrying in this case by introducing the SCMD_RETRY_PASSTHROUGH flag. Cc: Damien Le Moal <dlemoal@kernel.org> Cc: Mike Christie <michael.christie@oracle.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Bart Van Assche <bvanassche@google.com> Bug: 348341595 Link: https://lore.kernel.org/linux-scsi/yq17ccp1i4b.fsf@ca-mkp.ca.oracle.com/T/#mfdb1a3a0d6d4803afe1098bdafc12fd4168e30e0 Change-Id: I44092a0d8853fd61bf619e5bae6d65eaaddad780 Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
parent
f17de5d46e
commit
d1d8ed2618
|
@ -1854,7 +1854,10 @@ check_type:
|
||||||
* assume caller has checked sense and determined
|
* assume caller has checked sense and determined
|
||||||
* the check condition was retryable.
|
* the check condition was retryable.
|
||||||
*/
|
*/
|
||||||
if (req->cmd_flags & REQ_FAILFAST_DEV || blk_rq_is_passthrough(req))
|
if (req->cmd_flags & REQ_FAILFAST_DEV)
|
||||||
|
return true;
|
||||||
|
if (blk_rq_is_passthrough(req) &&
|
||||||
|
!(scmd->flags & SCMD_RETRY_PASSTHROUGH))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -59,8 +59,11 @@ struct scsi_pointer {
|
||||||
*/
|
*/
|
||||||
#define SCMD_FORCE_EH_SUCCESS (1 << 3)
|
#define SCMD_FORCE_EH_SUCCESS (1 << 3)
|
||||||
#define SCMD_FAIL_IF_RECOVERING (1 << 4)
|
#define SCMD_FAIL_IF_RECOVERING (1 << 4)
|
||||||
|
/* If set, retry a passthrough command in case of a unit attention. */
|
||||||
|
#define SCMD_RETRY_PASSTHROUGH (1 << 5)
|
||||||
/* flags preserved across unprep / reprep */
|
/* flags preserved across unprep / reprep */
|
||||||
#define SCMD_PRESERVED_FLAGS (SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING)
|
#define SCMD_PRESERVED_FLAGS \
|
||||||
|
(SCMD_INITIALIZED | SCMD_FAIL_IF_RECOVERING | SCMD_RETRY_PASSTHROUGH)
|
||||||
|
|
||||||
/* for scmd->state */
|
/* for scmd->state */
|
||||||
#define SCMD_STATE_COMPLETE 0
|
#define SCMD_STATE_COMPLETE 0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user