Skip to content

Commit

Permalink
RDMA/ucma: Simplify ucma_get_event()
Browse files Browse the repository at this point in the history
Use wait_event_interruptible() instead of a more complicated
open-coded equivalent.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
  • Loading branch information
Sean Hefty authored and Roland Dreier committed Apr 24, 2007
1 parent 30c0098 commit d92f764
Showing 1 changed file with 7 additions and 15 deletions.
22 changes: 7 additions & 15 deletions drivers/infiniband/core/ucma.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,26 +306,18 @@ static ssize_t ucma_get_event(struct ucma_file *file, const char __user *inbuf,

mutex_lock(&file->mut);
while (list_empty(&file->event_list)) {
if (file->filp->f_flags & O_NONBLOCK) {
ret = -EAGAIN;
break;
}
mutex_unlock(&file->mut);

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

if (wait_event_interruptible(file->poll_wait,
!list_empty(&file->event_list)))
return -ERESTARTSYS;

prepare_to_wait(&file->poll_wait, &wait, TASK_INTERRUPTIBLE);
mutex_unlock(&file->mut);
schedule();
mutex_lock(&file->mut);
finish_wait(&file->poll_wait, &wait);
}

if (ret)
goto done;

uevent = list_entry(file->event_list.next, struct ucma_event, list);

if (uevent->resp.event == RDMA_CM_EVENT_CONNECT_REQUEST) {
Expand Down

0 comments on commit d92f764

Please sign in to comment.