Loading
ata: libata-scsi: fix requeue of deferred ATA PASS-THROUGH commands
Commit 0ea84089 ("ata: libata-scsi: avoid Non-NCQ command starvation") introduced ata_scsi_requeue_deferred_qc() to handle commands deferred during resets or NCQ failures. This deferral logic completed commands with DID_SOFT_ERROR to trigger a retry in the SCSI mid-layer. However, DID_SOFT_ERROR is subject to scsi_cmd_retry_allowed() checks. ATA PASS-THROUGH commands sent via SG_IO ioctl have scmd->allowed set to zero. This causes the mid-layer to fail the command immediately instead of retrying, even though the command was never actually issued to the hardware. Switch to DID_REQUEUE to ensure these commands are inserted back into the request queue regardless of retry limits. Fixes: 0ea84089 ("ata: libata-scsi: avoid Non-NCQ command starvation") Reviewed-by:Damien Le Moal <dlemoal@kernel.org> Signed-off-by:
Igor Pylypiv <ipylypiv@google.com> Signed-off-by:
Niklas Cassel <cassel@kernel.org>