diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2015-07-01 16:26:03 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2015-07-01 16:26:03 +0200 |
commit | 5250921bb0b25e7fc77ba732e569224410743a05 (patch) | |
tree | 29b0b47aa7dc3dcef3ce31acb59375716f2a41b5 /fs/fuse | |
parent | fd22d62ed0c36e260ac3e13167bc073f28407c70 (diff) |
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/fuse')
-rw-r--r-- | fs/fuse/dev.c | 30 |
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, |