]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ata: libata-eh: queue hotplug work on the system_dfl_long_wq workqueue
authorNiklas Cassel <cassel@kernel.org>
Wed, 13 May 2026 08:10:01 +0000 (10:10 +0200)
committerNiklas Cassel <cassel@kernel.org>
Mon, 1 Jun 2026 17:07:37 +0000 (19:07 +0200)
ata_scsi_port_error_handler() uses schedule_delayed_work() to queue
the ap->hotplug_task work.

schedule_delayed_work() always uses the system_percpu_wq per-cpu
workqueue.

ata_scsi_scan_host() queues the ap->hotplug_task work on the unbound
system_dfl_long_wq workqueue.

It seems counter-intuitive to queue the same work on two different
workqueues. Thus, change ata_scsi_port_error_handler() to also queue
the ap->hotplug_task work on the system_dfl_long_wq workqueue, such
that the work is always queued on the same workqueue.

Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
drivers/ata/libata-eh.c

index d623eb32ed8b7b2fb141e0adbd2cdeb53cd5d115..715bc525b38ff71e601440a417faa50db93bea19 100644 (file)
@@ -819,7 +819,7 @@ void ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap)
                ap->pflags &= ~ATA_PFLAG_LOADING;
        else if ((ap->pflags & ATA_PFLAG_SCSI_HOTPLUG) &&
                !(ap->flags & ATA_FLAG_SAS_HOST))
-               schedule_delayed_work(&ap->hotplug_task, 0);
+               queue_delayed_work(system_dfl_long_wq, &ap->hotplug_task, 0);
 
        if (ap->pflags & ATA_PFLAG_RECOVERED)
                ata_port_info(ap, "EH complete\n");