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++)