From: Karl Mehltretter <kmehltretter@gmail.com>
To: Denis Efremov <efremov@linux.com>, Jens Axboe <axboe@kernel.dk>
Cc: Karl Mehltretter <kmehltretter@gmail.com>,
Jiri Kosina <jikos@kernel.org>,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] floppy: flush pending work before releasing resources on init failure
Date: Wed, 22 Jul 2026 05:44:35 +0200 [thread overview]
Message-ID: <20260722034435.13432-1-kmehltretter@gmail.com> (raw)
do_floppy_init() probes each FDC with user_reset_fdc(), which queues a
redo_fd_request() work item on floppy_wq that may still be pending when
the probe finishes. When no controller is found, the error path calls
floppy_release_irq_and_dma() to free the IRQ and DMA channel, and only
later destroys the workqueue. destroy_workqueue() drains the queued work
last, so it can run after the IRQ and DMA are already gone:
floppy0: no floppy controllers found
work still pending
The flush used to be here. Commit 070ad7e793dc ("floppy: convert to
delayed work and single-thread wq") renamed the label out_flush_work to
out_release_dma and dropped it. Restore it so the work drains before the
IRQ and DMA are released, as floppy_module_exit() already does.
Fixes: 070ad7e793dc ("floppy: convert to delayed work and single-thread wq")
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
---
Noticed while running mainline on an emulated Acorn RiscPC, a custom
personal QEMU machine. It has no floppy controller and rpc_defconfig
sets CONFIG_BLK_DEV_FD=y, so every boot takes the no-controller error
path. No disk is registered there, so the drained work takes the
empty-request fast path and just unlocks the FDC, leaving only the
spurious message.
Verified with 100 QEMU boots per platform on v7.2-rc4, no controller
present. "work still pending" appeared on an unfixed kernel vs with this
patch:
Acorn RiscPC, rpc_defconfig: 100/100 -> 0/100
x86_64 defconfig, qemu -M q35: 6/100 -> 0/100
With a controller present on qemu -M pc, reading and writing a 1.44M
floppy image still works.
drivers/block/floppy.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index f04397b8e381..6cfd114d27df 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -4744,6 +4744,8 @@ static int __init do_floppy_init(void)
}
}
out_release_dma:
+ /* Drain the queued redo_fd_request() before releasing IRQ and DMA. */
+ flush_workqueue(floppy_wq);
if (atomic_read(&usage_count))
floppy_release_irq_and_dma();
out_unreg_driver:
--
2.53.0
next reply other threads:[~2026-07-22 3:44 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-22 3:44 Karl Mehltretter [this message]
2026-07-24 14:02 ` [PATCH] floppy: flush pending work before releasing resources on init failure Denis Efremov (Oracle)
2026-09-12 9:33 ` Karl Mehltretter
2026-09-12 21:37 ` Denis Efremov (Oracle)
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=20260722034435.13432-1-kmehltretter@gmail.com \
--to=kmehltretter@gmail.com \
--cc=axboe@kernel.dk \
--cc=efremov@linux.com \
--cc=jikos@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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 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.