Commit b862f26f authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Jens Axboe

floppy: use wait_event_interruptible

Convert wait loops to use wait_event_ macros.
Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent 21af5448
...@@ -514,8 +514,6 @@ static unsigned long fdc_busy; ...@@ -514,8 +514,6 @@ static unsigned long fdc_busy;
static DECLARE_WAIT_QUEUE_HEAD(fdc_wait); static DECLARE_WAIT_QUEUE_HEAD(fdc_wait);
static DECLARE_WAIT_QUEUE_HEAD(command_done); static DECLARE_WAIT_QUEUE_HEAD(command_done);
#define NO_SIGNAL (!interruptible || !signal_pending(current))
/* Errors during formatting are counted here. */ /* Errors during formatting are counted here. */
static int format_errors; static int format_errors;
...@@ -858,36 +856,15 @@ static void set_fdc(int drive) ...@@ -858,36 +856,15 @@ static void set_fdc(int drive)
} }
/* locks the driver */ /* locks the driver */
static int _lock_fdc(int drive, bool interruptible, int line) static int lock_fdc(int drive, bool interruptible)
{ {
if (atomic_read(&usage_count) == 0) { if (WARN(atomic_read(&usage_count) == 0,
pr_err("Trying to lock fdc while usage count=0 at line %d\n", "Trying to lock fdc while usage count=0\n"))
line);
return -1; return -1;
}
if (test_and_set_bit(0, &fdc_busy)) { if (wait_event_interruptible(fdc_wait, !test_and_set_bit(0, &fdc_busy)))
DECLARE_WAITQUEUE(wait, current); return -EINTR;
add_wait_queue(&fdc_wait, &wait);
for (;;) {
set_current_state(TASK_INTERRUPTIBLE);
if (!test_and_set_bit(0, &fdc_busy))
break;
schedule();
if (!NO_SIGNAL) {
remove_wait_queue(&fdc_wait, &wait);
return -EINTR;
}
}
set_current_state(TASK_RUNNING);
remove_wait_queue(&fdc_wait, &wait);
flush_scheduled_work();
}
command_status = FD_COMMAND_NONE; command_status = FD_COMMAND_NONE;
__reschedule_timeout(drive, "lock fdc"); __reschedule_timeout(drive, "lock fdc");
...@@ -895,9 +872,6 @@ static int _lock_fdc(int drive, bool interruptible, int line) ...@@ -895,9 +872,6 @@ static int _lock_fdc(int drive, bool interruptible, int line)
return 0; return 0;
} }
#define lock_fdc(drive, interruptible) \
_lock_fdc(drive, interruptible, __LINE__)
/* unlocks the driver */ /* unlocks the driver */
static void unlock_fdc(void) static void unlock_fdc(void)
{ {
...@@ -2015,25 +1989,10 @@ static int wait_til_done(void (*handler)(void), bool interruptible) ...@@ -2015,25 +1989,10 @@ static int wait_til_done(void (*handler)(void), bool interruptible)
schedule_bh(handler); schedule_bh(handler);
if (command_status < 2 && NO_SIGNAL) { if (interruptible)
DECLARE_WAITQUEUE(wait, current); wait_event_interruptible(command_done, command_status >= 2);
else
add_wait_queue(&command_done, &wait); wait_event(command_done, command_status >= 2);
for (;;) {
set_current_state(interruptible ?
TASK_INTERRUPTIBLE :
TASK_UNINTERRUPTIBLE);
if (command_status >= 2 || !NO_SIGNAL)
break;
is_alive(__func__, "");
schedule();
}
set_current_state(TASK_RUNNING);
remove_wait_queue(&command_done, &wait);
}
if (command_status < 2) { if (command_status < 2) {
cancel_activity(); cancel_activity();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment