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

Commit 9d41b7fd authored by Sean Hefty's avatar Sean Hefty Committed by Roland Dreier
Browse files

IB/ucm: Simplify ib_ucm_event()



Use wait_event_interruptible() instead of a more complicated
open-coded equivalent.

Signed-off-by: default avatarSean Hefty <sean.hefty@intel.com>
parent d92f7644
Loading
Loading
Loading
Loading
+6 −17
Original line number Diff line number Diff line
@@ -407,29 +407,18 @@ static ssize_t ib_ucm_event(struct ib_ucm_file *file,

	mutex_lock(&file->file_mutex);
	while (list_empty(&file->events)) {
		mutex_unlock(&file->file_mutex);

		if (file->filp->f_flags & O_NONBLOCK) {
			result = -EAGAIN;
			break;
		}

		if (signal_pending(current)) {
			result = -ERESTARTSYS;
			break;
		}
		if (file->filp->f_flags & O_NONBLOCK)
			return -EAGAIN;

		prepare_to_wait(&file->poll_wait, &wait, TASK_INTERRUPTIBLE);
		if (wait_event_interruptible(file->poll_wait,
					     !list_empty(&file->events)))
			return -ERESTARTSYS;

		mutex_unlock(&file->file_mutex);
		schedule();
		mutex_lock(&file->file_mutex);

		finish_wait(&file->poll_wait, &wait);
	}

	if (result)
		goto done;

	uevent = list_entry(file->events.next, struct ib_ucm_event, file_list);

	if (ib_ucm_new_cm_id(uevent->resp.event)) {