Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+9 −50
Original line number Diff line number Diff line
@@ -514,8 +514,6 @@ static unsigned long fdc_busy;
static DECLARE_WAIT_QUEUE_HEAD(fdc_wait);
static DECLARE_WAIT_QUEUE_HEAD(command_done);

#define NO_SIGNAL (!interruptible || !signal_pending(current))

/* Errors during formatting are counted here. */
static int format_errors;

@@ -858,36 +856,15 @@ static void set_fdc(int drive)
}

/* 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) {
		pr_err("Trying to lock fdc while usage count=0 at line %d\n",
		       line);
	if (WARN(atomic_read(&usage_count) == 0,
		 "Trying to lock fdc while usage count=0\n"))
		return -1;
	}

	if (test_and_set_bit(0, &fdc_busy)) {
		DECLARE_WAITQUEUE(wait, current);
		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);
	if (wait_event_interruptible(fdc_wait, !test_and_set_bit(0, &fdc_busy)))
		return -EINTR;
			}
		}

		set_current_state(TASK_RUNNING);
		remove_wait_queue(&fdc_wait, &wait);
		flush_scheduled_work();
	}
	command_status = FD_COMMAND_NONE;

	__reschedule_timeout(drive, "lock fdc");
@@ -895,9 +872,6 @@ static int _lock_fdc(int drive, bool interruptible, int line)
	return 0;
}

#define lock_fdc(drive, interruptible)			\
	_lock_fdc(drive, interruptible, __LINE__)

/* unlocks the driver */
static void unlock_fdc(void)
{
@@ -2015,25 +1989,10 @@ static int wait_til_done(void (*handler)(void), bool interruptible)

	schedule_bh(handler);

	if (command_status < 2 && NO_SIGNAL) {
		DECLARE_WAITQUEUE(wait, current);

		add_wait_queue(&command_done, &wait);
		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 (interruptible)
		wait_event_interruptible(command_done, command_status >= 2);
	else
		wait_event(command_done, command_status >= 2);

	if (command_status < 2) {
		cancel_activity();