* [PATCH] ata: libata: Introduce ata_port_eh_scheduled()
@ 2025-07-04 10:46 Damien Le Moal
2025-07-04 11:30 ` Niklas Cassel
2025-07-07 10:43 ` Niklas Cassel
0 siblings, 2 replies; 3+ messages in thread
From: Damien Le Moal @ 2025-07-04 10:46 UTC (permalink / raw)
To: linux-ide, Niklas Cassel
Introduce the inline helper function ata_port_eh_scheduled() to test if
EH is pending (ATA_PFLAG_EH_PENDING port flag is set) or running
(ATA_PFLAG_EH_IN_PROGRESS port flag is set) for a port. Use this helper
in ata_port_wait_eh() and __ata_scsi_queuecmd() to replace the hardcoded
port flag tests.
No functional changes.
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
drivers/ata/libata-eh.c | 2 +-
drivers/ata/libata-scsi.c | 5 +++--
drivers/ata/libata.h | 5 +++++
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 1f8a6b930f5d..42aafb1ddb5a 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -823,7 +823,7 @@ void ata_port_wait_eh(struct ata_port *ap)
retry:
spin_lock_irqsave(ap->lock, flags);
- while (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS)) {
+ while (ata_port_eh_scheduled(ap)) {
prepare_to_wait(&ap->eh_wait_q, &wait, TASK_UNINTERRUPTIBLE);
spin_unlock_irqrestore(ap->lock, flags);
schedule();
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index b502b123008a..27b15176db56 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -4316,9 +4316,10 @@ int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev)
* scsi_queue_rq() will defer commands if scsi_host_in_recovery().
* However, this check is done without holding the ap->lock (a libata
* specific lock), so we can have received an error irq since then,
- * therefore we must check if EH is pending, while holding ap->lock.
+ * therefore we must check if EH is pending or running, while holding
+ * ap->lock.
*/
- if (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS))
+ if (ata_port_eh_scheduled(ap))
return SCSI_MLQUEUE_DEVICE_BUSY;
if (unlikely(!scmd->cmd_len))
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index 135e1e5ee44e..ca44fb792aeb 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -51,6 +51,11 @@ static inline bool ata_dev_is_zac(struct ata_device *dev)
ata_id_zoned_cap(dev->id) == 0x01;
}
+static inline bool ata_port_eh_scheduled(struct ata_port *ap)
+{
+ return ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS);
+}
+
#ifdef CONFIG_ATA_FORCE
extern void ata_force_cbl(struct ata_port *ap);
#else
--
2.50.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] ata: libata: Introduce ata_port_eh_scheduled()
2025-07-04 10:46 [PATCH] ata: libata: Introduce ata_port_eh_scheduled() Damien Le Moal
@ 2025-07-04 11:30 ` Niklas Cassel
2025-07-07 10:43 ` Niklas Cassel
1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-07-04 11:30 UTC (permalink / raw)
To: Damien Le Moal; +Cc: linux-ide
On Fri, Jul 04, 2025 at 07:46:00PM +0900, Damien Le Moal wrote:
> Introduce the inline helper function ata_port_eh_scheduled() to test if
> EH is pending (ATA_PFLAG_EH_PENDING port flag is set) or running
> (ATA_PFLAG_EH_IN_PROGRESS port flag is set) for a port. Use this helper
> in ata_port_wait_eh() and __ata_scsi_queuecmd() to replace the hardcoded
> port flag tests.
>
> No functional changes.
>
> Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ata: libata: Introduce ata_port_eh_scheduled()
2025-07-04 10:46 [PATCH] ata: libata: Introduce ata_port_eh_scheduled() Damien Le Moal
2025-07-04 11:30 ` Niklas Cassel
@ 2025-07-07 10:43 ` Niklas Cassel
1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-07-07 10:43 UTC (permalink / raw)
To: linux-ide, Damien Le Moal
On Fri, 04 Jul 2025 19:46:00 +0900, Damien Le Moal wrote:
> Introduce the inline helper function ata_port_eh_scheduled() to test if
> EH is pending (ATA_PFLAG_EH_PENDING port flag is set) or running
> (ATA_PFLAG_EH_IN_PROGRESS port flag is set) for a port. Use this helper
> in ata_port_wait_eh() and __ata_scsi_queuecmd() to replace the hardcoded
> port flag tests.
>
> No functional changes.
>
> [...]
Applied to libata/linux.git (for-6.17), thanks!
[1/1] ata: libata: Introduce ata_port_eh_scheduled()
https://git.kernel.org/libata/linux/c/7aae547b
Kind regards,
Niklas
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-07-07 10:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-04 10:46 [PATCH] ata: libata: Introduce ata_port_eh_scheduled() Damien Le Moal
2025-07-04 11:30 ` Niklas Cassel
2025-07-07 10:43 ` Niklas Cassel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.