From ccd0a0bd16ff01bb27bacbeb2e0e4983dc299502 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Wed, 1 Jul 2015 16:25:57 +0200 Subject: [PATCH] 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 Reviewed-by: Ashish Samant --- fs/fuse/dev.c | 11 +++-------- 1 file 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); } -- 2.20.1