From ccd0a0bd16ff01bb27bacbeb2e0e4983dc299502 Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <mszeredi@suse.cz>
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 <mszeredi@suse.cz>
Reviewed-by: Ashish Samant <ashish.samant@oracle.com>
---
 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.34.1