[PATCH] drivers/block/swim3.c: replace interruptible_sleep_on() From: irwan.djajadi@iname.com Fix interruptible_sleep_on() with wait_event_interruptible() or wait_event(), and fix waiting while interrupt is disabled. Signed-off-by: Irwan Djajadi Signed-off-by: Alexey Dobriyan Index: linux-kj/drivers/block/swim3.c =================================================================== --- linux-kj.orig/drivers/block/swim3.c 2005-10-28 16:26:19.000000000 +0400 +++ linux-kj/drivers/block/swim3.c 2005-10-28 16:39:56.000000000 +0400 @@ -789,24 +789,29 @@ static int grab_drive(struct floppy_stat int interruptible) { unsigned long flags; + int err = 0; save_flags(flags); cli(); - if (fs->state != idle) { + while ((fs->state != idle) && !err) { ++fs->wanted; - while (fs->state != available) { - if (interruptible && signal_pending(current)) { - --fs->wanted; - restore_flags(flags); - return -EINTR; - } - interruptible_sleep_on(&fs->wait); + restore_flags(flags); + if (interruptible) { + err = wait_event_interruptible(fs->wait, + fs->state == available); + if (err) + err = -EINTR; + } else { + wait_event(fs->wait, fs->state == available); } + save_flags(flags); + cli(); --fs->wanted; } - fs->state = state; + if (!err) + fs->state = state; restore_flags(flags); - return 0; + return err; } static void release_drive(struct floppy_state *fs)