diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2015-07-01 16:25:57 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2015-07-01 16:25:57 +0200 |
commit | ccd0a0bd16ff01bb27bacbeb2e0e4983dc299502 (patch) | |
tree | 618dbfdcf8db542c8c2ec4a75a5beaa0e752e7dd /fs/fuse | |
parent | f0139aa819dfc8e80f664bd08800fc48233cb94e (diff) | |
download | linux-next-ccd0a0bd16ff01bb27bacbeb2e0e4983dc299502.tar.gz |
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.c | 11 |
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); } |