diff -urNX dontdiff linux-2.5.24/drivers/block/floppy.c linux-2.5.24-imm/drivers/block/floppy.c
--- linux-2.5.24/drivers/block/floppy.c	Wed Jun 19 06:15:46 2002
+++ linux-2.5.24-imm/drivers/block/floppy.c	Fri Jun 21 12:41:52 2002
@@ -150,7 +150,6 @@
 #include <linux/fs.h>
 #include <linux/kernel.h>
 #include <linux/timer.h>
-#include <linux/tqueue.h>
 #define FDPATCHES
 #include <linux/fdreg.h>
 
@@ -997,13 +996,12 @@
 {
 }
 
-static struct tq_struct floppy_tq;
+static DECLARE_TASKLET(floppy_tasklet, NULL, 0);
 
-static void schedule_bh( void (*handler)(void*) )
+static void schedule_bh(void (*handler)(void))
 {
-	floppy_tq.routine = (void *)(void *) handler;
-	queue_task(&floppy_tq, &tq_immediate);
-	mark_bh(IMMEDIATE_BH);
+	floppy_tasklet.func = (void *) handler;
+	tasklet_schedule(&floppy_tasklet);
 }
 
 static struct timer_list fd_timer;
@@ -1011,7 +1009,7 @@
 static void cancel_activity(void)
 {
 	do_floppy = NULL;
-	floppy_tq.routine = (void *)(void *) empty;
+	floppy_tasklet.func = (void *) empty;
 	del_timer(&fd_timer);
 }
 
@@ -1789,7 +1787,7 @@
 		} while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2 && max_sensei);
 	}
 	if (handler) {
-		schedule_bh( (void *)(void *) handler);
+		schedule_bh(handler);
 	} else
 		FDCS->reset = 1;
 	is_alive("normal interrupt end");
@@ -1880,8 +1878,8 @@
 	printk("fdc_busy=%lu\n", fdc_busy);
 	if (do_floppy)
 		printk("do_floppy=%p\n", do_floppy);
-	if (floppy_tq.sync)
-		printk("floppy_tq.routine=%p\n", floppy_tq.routine);
+	if (test_bit(TASKLET_STATE_SCHED, &floppy_tasklet.state))
+		printk("floppy_tasklet.func=%p\n", floppy_tasklet.func);
 	if (timer_pending(&fd_timer))
 		printk("fd_timer.function=%p\n", fd_timer.function);
 	if (timer_pending(&fd_timeout)){
@@ -2049,7 +2047,7 @@
 {
 	int ret;
 
-	schedule_bh((void *)(void *)handler);
+	schedule_bh(handler);
 
 	if (command_status < 2 && NO_SIGNAL) {
 		DECLARE_WAITQUEUE(wait, current);
@@ -2968,7 +2966,7 @@
 
 		if (TESTF(FD_NEED_TWADDLE))
 			twaddle();
-		schedule_bh( (void *)(void *) floppy_start);
+		schedule_bh(floppy_start);
 #ifdef DEBUGT
 		debugt("queue fd request");
 #endif
@@ -2986,7 +2984,7 @@
 static void process_fd_request(void)
 {
 	cont = &rw_cont;
-	schedule_bh( (void *)(void *) redo_fd_request);
+	schedule_bh(redo_fd_request);
 }
 
 static void do_fd_request(request_queue_t * q)
@@ -4341,7 +4339,7 @@
 	if (have_no_fdc) 
 	{
 		DPRINT("no floppy controllers found\n");
-		run_task_queue(&tq_immediate);
+		tasklet_kill(&floppy_tasklet);
 		if (usage_count)
 			floppy_release_irq_and_dma();
 		blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
@@ -4495,8 +4493,8 @@
 		printk("floppy timer still active:%s\n", timeout_message);
 	if (timer_pending(&fd_timer))
 		printk("auxiliary floppy timer still active\n");
-	if (floppy_tq.sync)
-		printk("task queue still active\n");
+	if (test_bit(TASKLET_STATE_SCHED, &floppy_tasklet.state))
+		printk("floppy tasklet still active\n");
 #endif
 	old_fdc = fdc;
 	for (fdc = 0; fdc < N_FDC; fdc++)
