aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/core/ucma.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index c859134c1daa..53b4c94a7eb5 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -306,26 +306,18 @@ static ssize_t ucma_get_event(struct ucma_file *file, const char __user *inbuf,
306 306
307 mutex_lock(&file->mut); 307 mutex_lock(&file->mut);
308 while (list_empty(&file->event_list)) { 308 while (list_empty(&file->event_list)) {
309 if (file->filp->f_flags & O_NONBLOCK) { 309 mutex_unlock(&file->mut);
310 ret = -EAGAIN;
311 break;
312 }
313 310
314 if (signal_pending(current)) { 311 if (file->filp->f_flags & O_NONBLOCK)
315 ret = -ERESTARTSYS; 312 return -EAGAIN;
316 break; 313
317 } 314 if (wait_event_interruptible(file->poll_wait,
315 !list_empty(&file->event_list)))
316 return -ERESTARTSYS;
318 317
319 prepare_to_wait(&file->poll_wait, &wait, TASK_INTERRUPTIBLE);
320 mutex_unlock(&file->mut);
321 schedule();
322 mutex_lock(&file->mut); 318 mutex_lock(&file->mut);
323 finish_wait(&file->poll_wait, &wait);
324 } 319 }
325 320
326 if (ret)
327 goto done;
328
329 uevent = list_entry(file->event_list.next, struct ucma_event, list); 321 uevent = list_entry(file->event_list.next, struct ucma_event, list);
330 322
331 if (uevent->resp.event == RDMA_CM_EVENT_CONNECT_REQUEST) { 323 if (uevent->resp.event == RDMA_CM_EVENT_CONNECT_REQUEST) {