From: Damien Le Moal <dlemoal@kernel.org>
To: linux-ide@vger.kernel.org, Niklas Cassel <cassel@kernel.org>
Cc: Igor Pylypiv <ipylypiv@google.com>, Xingui Yang <yangxingui@huawei.com>
Subject: [PATCH 0/2] Prevent non-NCQ command starvation
Date: Thu, 18 Dec 2025 08:17:10 +0900 [thread overview]
Message-ID: <20251217231712.490765-1-dlemoal@kernel.org> (raw)
This small patch series addresses potential command starvation issues
with non-NCQ passthrough commands issued to a device accessed through
a multi-queue libsas HBA. In such setup, a non-NCQ passthrough command
issued by an application may suffer long delays and even complete
starvation if the device is under constant NCQ read/write workload.
This issue is avoided by limiting the requeing through the block layer
and instead explicitly waiting for the device command queue to drain
before issuing the non-NCQ command. This is done reliably by not trying
to second guess ata EH in case of error or device reset, by always
requeuing a deferred command whenever EH is scheduled for the device
port.
When a non-ncq command is deferred waiting for the device queue to
drain, all new incoming commands are always requeued through the regular
busy mechanism, thus avoiding the need to manage an internal command
queue.
With this, the long latencies observed when executing non-NCQ
passthrough commands under a heavy NCQ read/write workload at high queue
depth is resolved: the non-NCQ command latency only depends on how long
it takes for all in-flight commands to complete.
Damien Le Moal (2):
ata: libata-scsi: refactor ata_scsi_translate()
ata: libata-scsi: avoid passthrough command starvation
drivers/ata/libata-core.c | 1 +
drivers/ata/libata-eh.c | 6 ++
drivers/ata/libata-scsi.c | 155 ++++++++++++++++++++++++++++++++------
drivers/ata/libata.h | 2 +
include/linux/libata.h | 3 +
5 files changed, 142 insertions(+), 25 deletions(-)
--
2.52.0
next reply other threads:[~2025-12-17 23:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-17 23:17 Damien Le Moal [this message]
2025-12-17 23:17 ` [PATCH 1/2] ata: libata-scsi: refactor ata_scsi_translate() Damien Le Moal
2025-12-18 9:23 ` Hannes Reinecke
2025-12-17 23:17 ` [PATCH 2/2] ata: libata-scsi: avoid passthrough command starvation Damien Le Moal
2025-12-18 9:26 ` Hannes Reinecke
2025-12-19 0:08 ` Igor Pylypiv
2025-12-19 7:47 ` Damien Le Moal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251217231712.490765-1-dlemoal@kernel.org \
--to=dlemoal@kernel.org \
--cc=cassel@kernel.org \
--cc=ipylypiv@google.com \
--cc=linux-ide@vger.kernel.org \
--cc=yangxingui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox