I have a small hope this patch is correct (compile tested). At least, the code was not correct before this patch. "Cancel and flush" should do "Cancel", and then "flush".
Signed-off-by: Oleg Nesterov <[EMAIL PROTECTED]> --- WQ/drivers/ata/libata-core.c~4_ata 2007-02-18 22:56:47.000000000 +0300 +++ WQ/drivers/ata/libata-core.c 2007-02-19 02:02:06.000000000 +0300 @@ -1071,8 +1071,6 @@ void ata_port_flush_task(struct ata_port spin_unlock_irqrestore(ap->lock, flags); DPRINTK("flush #1\n"); - cancel_work_sync(&ap->port_task.work); /* akpm: seems unneeded */ - /* * At this point, if a task is running, it's guaranteed to see * the FLUSH flag; thus, it will never queue pio tasks again. @@ -1082,8 +1080,8 @@ void ata_port_flush_task(struct ata_port if (ata_msg_ctl(ap)) ata_port_printk(ap, KERN_DEBUG, "%s: flush #2\n", __FUNCTION__); - cancel_work_sync(&ap->port_task.work); } + cancel_work_sync(&ap->port_task.work); spin_lock_irqsave(ap->lock, flags); ap->pflags &= ~ATA_PFLAG_FLUSH_PORT_TASK; @@ -5889,7 +5887,6 @@ void ata_port_detach(struct ata_port *ap /* Flush hotplug task. The sequence is similar to * ata_port_flush_task(). */ - cancel_work_sync(&ap->hotplug_task.work); /* akpm: why? */ cancel_delayed_work(&ap->hotplug_task); cancel_work_sync(&ap->hotplug_task.work); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/