* [PATCH] floppy: remove is_alive()
@ 2026-10-09 10:47 Denis Efremov (Oracle)
0 siblings, 0 replies; only message in thread
From: Denis Efremov (Oracle) @ 2026-10-09 10:47 UTC (permalink / raw)
To: linux-block; +Cc: linux-kernel, Denis Efremov (Oracle)
is_alive() prints "timeout handler died" when fdc_busy is set,
command_status is below 2 and fd_timeout is not pending. The driver
passes through that state on every FDC handover:
- lock_fdc() and floppy_queue_rq() set fdc_busy before they arm
fd_timeout, with set_fdc() in between since "floppy: select FDC before
arming timeout work";
- unlock_fdc() cancels fd_timeout before it clears fdc_busy;
- fd_timeout is not pending while floppy_shutdown() runs, and without a
cont floppy_shutdown() only queues redo_fd_request(), which arms
fd_timeout or releases the FDC later.
None of the callers excludes these windows, so each of them can report a
dead timeout handler while the driver works normally:
- floppy_queue_rq() returns BLK_STS_RESOURCE while the FDC is busy, and
blk-mq re-runs the queue every 3 ms, so it samples other contexts'
handovers hundreds of times per second;
- floppy_interrupt() checks after schedule_bh(), when the next step may
already run on another CPU, and also when the interrupt arrives while
floppy_shutdown() runs;
- floppy_shutdown() checks right after it queued redo_fd_request() in
the "no cont in shutdown!" case.
The check also cannot report the hang it describes. With the FDC held and
no timeout armed, floppy_shutdown() never runs, and floppy_interrupt()
runs only if the controller interrupts. Only the blk-mq retries in
floppy_queue_rq() would keep checking, among their false reports. When
fd_timeout does fire, show_floppy() already prints fdc_busy,
command_status and whether fd_timeout is pending.
Remove is_alive() and its callers.
Signed-off-by: Denis Efremov (Oracle) <efremov@linux.com>
---
drivers/block/floppy.c | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index f04397b8e381..e354ea61f23d 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -635,15 +635,6 @@ static inline void debugt(const char *func, const char *msg) { }
static DECLARE_DELAYED_WORK(fd_timeout, floppy_shutdown);
static const char *timeout_message;
-static void is_alive(const char *func, const char *message)
-{
- /* this routine checks whether the floppy driver is "alive" */
- if (test_bit(0, &fdc_busy) && command_status < 2 &&
- !delayed_work_pending(&fd_timeout)) {
- DPRINT("%s: timeout handler died. %s\n", func, message);
- }
-}
-
static void (*do_floppy)(void) = NULL;
#define OLOGSIZE 20
@@ -1727,7 +1718,6 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
pr_info("DOR0=%x\n", fdc_state[0].dor);
pr_info("floppy interrupt on bizarre fdc %d\n", current_fdc);
pr_info("handler=%ps\n", handler);
- is_alive(__func__, "bizarre fdc");
return IRQ_NONE;
}
@@ -1762,7 +1752,6 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
return IRQ_NONE;
}
schedule_bh(handler);
- is_alive(__func__, "normal interrupt end");
/* FIXME! Was it really for us? */
return IRQ_HANDLED;
@@ -1890,7 +1879,6 @@ static void floppy_shutdown(struct work_struct *arg)
pr_info("no cont in shutdown!\n");
process_fd_request();
}
- is_alive(__func__, "");
}
/* start motor, check media-changed condition and write protection */
@@ -2863,7 +2851,6 @@ static blk_status_t floppy_queue_rq(struct blk_mq_hw_ctx *hctx,
if (test_and_set_bit(0, &fdc_busy)) {
/* fdc busy, this new request will be treated when the
current one is done */
- is_alive(__func__, "old request running");
return BLK_STS_RESOURCE;
}
@@ -2875,7 +2862,6 @@ static blk_status_t floppy_queue_rq(struct blk_mq_hw_ctx *hctx,
__reschedule_timeout(MAXTIMEOUT, "fd_request");
set_fdc(0);
process_fd_request();
- is_alive(__func__, "");
return BLK_STS_OK;
}
base-commit: af32da41b0327b9c6a37856ba82b6760d6c8d10e
--
2.56.0
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-09 10:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-09 10:47 [PATCH] floppy: remove is_alive() Denis Efremov (Oracle)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®