summaryrefslogtreecommitdiffstats
path: root/fs/fuse
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2015-07-01 16:25:57 +0200
committerMiklos Szeredi <mszeredi@suse.cz>2015-07-01 16:25:57 +0200
commitccd0a0bd16ff01bb27bacbeb2e0e4983dc299502 (patch)
tree618dbfdcf8db542c8c2ec4a75a5beaa0e752e7dd /fs/fuse
parentfuse: fold fuse_request_send_nowait() into single caller (diff)
downloadlinux-ccd0a0bd16ff01bb27bacbeb2e0e4983dc299502.tar.xz
linux-ccd0a0bd16ff01bb27bacbeb2e0e4983dc299502.zip
fuse: call fuse_abort_conn() in dev release
fuse_abort_conn() does all the work done by fuse_dev_release() and more. "More" consists of: end_io_requests(fc); wake_up_all(&fc->waitq); kill_fasync(&fc->fasync, SIGIO, POLL_IN); All of which should be no-op (WARN_ON's added). 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.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index de110de881f7..e5901bf8d600 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -2199,14 +2199,9 @@ int fuse_dev_release(struct inode *inode, struct file *file)
{
struct fuse_conn *fc = fuse_get_conn(file);
if (fc) {
- spin_lock(&fc->lock);
- fc->connected = 0;
- fc->blocked = 0;
- fuse_set_initialized(fc);
- end_queued_requests(fc);
- end_polls(fc);
- wake_up_all(&fc->blocked_waitq);
- spin_unlock(&fc->lock);
+ WARN_ON(!list_empty(&fc->io));
+ WARN_ON(fc->fasync != NULL);
+ fuse_abort_conn(fc);
fuse_conn_put(fc);
}