]> git.karo-electronics.de Git - linux-beck.git/commitdiff
fuse: flush requests on umount
authorMiklos Szeredi <mszeredi@suse.cz>
Fri, 12 Dec 2014 08:49:04 +0000 (09:49 +0100)
committerMiklos Szeredi <mszeredi@suse.cz>
Fri, 12 Dec 2014 08:49:04 +0000 (09:49 +0100)
Use fuse_abort_conn() instead of fuse_conn_kill() in fuse_put_super().
This flushes and aborts requests still on any queues.  But since we've
already reset fc->connected, those requests would not be useful anyway and
would be flushed when the fuse device is closed.

Next patches will rely on requests being flushed before the superblock is
destroyed.

Use fuse_abort_conn() in cuse_process_init_reply() too, since it makes no
difference there, and we can get rid of fuse_conn_kill().

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
fs/fuse/cuse.c
fs/fuse/fuse_i.h
fs/fuse/inode.c

index 966ace8b243fa39796fbdd788c4d83ebd6024217..28d0c7abba1c2fa7748d3b1c2874b855427b3897 100644 (file)
@@ -415,7 +415,7 @@ err_unlock:
 err_region:
        unregister_chrdev_region(devt, 1);
 err:
-       fuse_conn_kill(fc);
+       fuse_abort_conn(fc);
        goto out;
 }
 
index e8e47a6ab5186be8df5889d65df28bc92bf8c97d..fbc63ab149b64c3eb2bb1a9ea8aa92913206ffbf 100644 (file)
@@ -804,8 +804,6 @@ void fuse_invalidate_atime(struct inode *inode);
  */
 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc);
 
-void fuse_conn_kill(struct fuse_conn *fc);
-
 /**
  * Initialize fuse_conn
  */
index 15653a073d69f3cade1b8b5135774175ef87bc30..616a791270b78ee022f1e4e38d07904d4c908e28 100644 (file)
@@ -376,27 +376,13 @@ static void fuse_bdi_destroy(struct fuse_conn *fc)
                bdi_destroy(&fc->bdi);
 }
 
-void fuse_conn_kill(struct fuse_conn *fc)
-{
-       spin_lock(&fc->lock);
-       fc->connected = 0;
-       fc->blocked = 0;
-       fc->initialized = 1;
-       spin_unlock(&fc->lock);
-       /* Flush all readers on this fs */
-       kill_fasync(&fc->fasync, SIGIO, POLL_IN);
-       wake_up_all(&fc->waitq);
-       wake_up_all(&fc->blocked_waitq);
-}
-EXPORT_SYMBOL_GPL(fuse_conn_kill);
-
 static void fuse_put_super(struct super_block *sb)
 {
        struct fuse_conn *fc = get_fuse_conn_super(sb);
 
        fuse_send_destroy(fc);
 
-       fuse_conn_kill(fc);
+       fuse_abort_conn(fc);
        mutex_lock(&fuse_mutex);
        list_del(&fc->entry);
        fuse_ctl_remove_conn(fc);