summary refs log tree commit diff
path: root/fs
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2015-07-01 16:26:03 +0200
committerMiklos Szeredi <mszeredi@suse.cz>2015-07-01 16:26:03 +0200
commit5250921bb0b25e7fc77ba732e569224410743a05 (patch)
tree29b0b47aa7dc3dcef3ce31acb59375716f2a41b5 /fs
parentfd22d62ed0c36e260ac3e13167bc073f28407c70 (diff)
downloadlinux-5250921bb0b25e7fc77ba732e569224410743a05.tar.gz
fuse: simplify request_wait()
wait_event_interruptible_exclusive_locked() will do everything
request_wait() does, so replace it.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Reviewed-by: Ashish Samant <ashish.samant@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/fuse/dev.c30
1 files changed, 5 insertions, 25 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 35453f229ef3..b6f901a0dbdd 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -1072,27 +1072,6 @@ static int request_pending(struct fuse_iqueue *fiq)
 		forget_pending(fiq);
 }
 
-/* Wait until a request is available on the pending list */
-static void request_wait(struct fuse_iqueue *fiq)
-__releases(fiq->waitq.lock)
-__acquires(fiq->waitq.lock)
-{
-	DECLARE_WAITQUEUE(wait, current);
-
-	add_wait_queue_exclusive(&fiq->waitq, &wait);
-	while (fiq->connected && !request_pending(fiq)) {
-		set_current_state(TASK_INTERRUPTIBLE);
-		if (signal_pending(current))
-			break;
-
-		spin_unlock(&fiq->waitq.lock);
-		schedule();
-		spin_lock(&fiq->waitq.lock);
-	}
-	set_current_state(TASK_RUNNING);
-	remove_wait_queue(&fiq->waitq, &wait);
-}
-
 /*
  * Transfer an interrupt request to userspace
  *
@@ -1272,13 +1251,14 @@ static ssize_t fuse_dev_do_read(struct fuse_conn *fc, struct file *file,
 	    !request_pending(fiq))
 		goto err_unlock;
 
-	request_wait(fiq);
+	err = wait_event_interruptible_exclusive_locked(fiq->waitq,
+				!fiq->connected || request_pending(fiq));
+	if (err)
+		goto err_unlock;
+
 	err = -ENODEV;
 	if (!fiq->connected)
 		goto err_unlock;
-	err = -ERESTARTSYS;
-	if (!request_pending(fiq))
-		goto err_unlock;
 
 	if (!list_empty(&fiq->interrupts)) {
 		req = list_entry(fiq->interrupts.next, struct fuse_req,