Linux ATA/IDE development
 help / color / mirror / Atom feed
* [PATCH v7 0/2] fixup handling of timeouts with deferred QCs
@ 2026-07-21  6:40 Damien Le Moal
  2026-07-21  6:40 ` [PATCH v7 1/2] ata: libata-scsi: terminate deferred commands on time out Damien Le Moal
  2026-07-21  6:40 ` [PATCH v7 2/2] scsi: libsas: " Damien Le Moal
  0 siblings, 2 replies; 5+ messages in thread
From: Damien Le Moal @ 2026-07-21  6:40 UTC (permalink / raw)
  To: linux-ide, Niklas Cassel, linux-scsi, Martin K . Petersen
  Cc: Igor Pylypiv, John Garry, Jason Yan

This patch series fixes libata and libsas to correctly handles deferred
queued commands in case of a timeout error, to avoid excessive delays in
waking up the scsi EH task.

Igor,

My apologies for the churn, but please retest!
Also, I added your Signed-off-by on patch 2 since half of it is yours.

Martin,

Once reviewed, I or you can take both patches ?

Changes from v6:
 - In patch 1, go back to using direct command completion for retrying
   deferred QCs, but adds libata EH trigger to avoid problems with the
   block layer immediately re-issuing the retried commands. This same
   method also allows directly handling timed out deferred QCs, which
   simplifies libata EH.

Changes from v5:
 - Reworked patch 1 to have deferred command retries all go through libata
   EH to ensure that we do not run into issues with the block layer
   immediately re-issuing retried deffered commands (which would create
   again the problem we are trying to solve). This change necessitate the
   introduction of a new QC flag and changes to the completion path for
   commands to ATAPI devices.

Changes from v4:
 - Simplified sas_eh_timed_out() code in patch 2

Changes from v3:
 - Reimplement ata_scsi_requeue_deferred_qc() in patch 1 as
   ata_eh_retry_deferred_qc() so that all requeue pathes use the same
   function.

Changes from v2:
 - Modified patch 1 to avoid the problem reported by Sashiko that requeued
   deferred QCs may be re-ssued immediately by the block layer, thus
   potentially keeping the device busy. The modification now relies on
   libata-EH to perform the requeue instead of immediately doing it from
   the eh_timed_out operation.
 - Modified patch 2 to use the new helper function defined in patch 1.

Changes from v1:
 - Modified patch 1 to ignore timed out deferred QCs in
   ata_scsi_requeue_deferred_qc() to let ata_scsi_cmd_error_handler()
   correctly handle this case.

Damien Le Moal (2):
  ata: libata-scsi: terminate deferred commands on time out
  scsi: libsas: terminate deferred commands on time out

 drivers/ata/libata-eh.c             |  29 ++------
 drivers/ata/libata-scsi.c           | 109 +++++++++++++++++++++++++---
 drivers/ata/libata.h                |   3 +-
 drivers/scsi/libsas/sas_scsi_host.c |  15 ++++
 include/linux/libata.h              |   4 +
 include/scsi/libsas.h               |   2 +
 6 files changed, 127 insertions(+), 35 deletions(-)

-- 
2.55.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-07-21  7:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-21  6:40 [PATCH v7 0/2] fixup handling of timeouts with deferred QCs Damien Le Moal
2026-07-21  6:40 ` [PATCH v7 1/2] ata: libata-scsi: terminate deferred commands on time out Damien Le Moal
2026-07-21  7:00   ` sashiko-bot
2026-07-21  7:43     ` Damien Le Moal
2026-07-21  6:40 ` [PATCH v7 2/2] scsi: libsas: " Damien Le Moal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox