diff options
Diffstat (limited to 'fs/fuse/inode.c')
-rw-r--r-- | fs/fuse/inode.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index a13c0f529058..0225729977c4 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -11,7 +11,6 @@ | |||
11 | #include <linux/pagemap.h> | 11 | #include <linux/pagemap.h> |
12 | #include <linux/slab.h> | 12 | #include <linux/slab.h> |
13 | #include <linux/file.h> | 13 | #include <linux/file.h> |
14 | #include <linux/mount.h> | ||
15 | #include <linux/seq_file.h> | 14 | #include <linux/seq_file.h> |
16 | #include <linux/init.h> | 15 | #include <linux/init.h> |
17 | #include <linux/module.h> | 16 | #include <linux/module.h> |
@@ -204,20 +203,14 @@ static void fuse_put_super(struct super_block *sb) | |||
204 | { | 203 | { |
205 | struct fuse_conn *fc = get_fuse_conn_super(sb); | 204 | struct fuse_conn *fc = get_fuse_conn_super(sb); |
206 | 205 | ||
207 | down_write(&fc->sbput_sem); | ||
208 | while (!list_empty(&fc->background)) | ||
209 | fuse_release_background(fc, | ||
210 | list_entry(fc->background.next, | ||
211 | struct fuse_req, bg_entry)); | ||
212 | |||
213 | spin_lock(&fc->lock); | 206 | spin_lock(&fc->lock); |
214 | fc->mounted = 0; | ||
215 | fc->connected = 0; | 207 | fc->connected = 0; |
208 | fc->blocked = 0; | ||
216 | spin_unlock(&fc->lock); | 209 | spin_unlock(&fc->lock); |
217 | up_write(&fc->sbput_sem); | ||
218 | /* Flush all readers on this fs */ | 210 | /* Flush all readers on this fs */ |
219 | kill_fasync(&fc->fasync, SIGIO, POLL_IN); | 211 | kill_fasync(&fc->fasync, SIGIO, POLL_IN); |
220 | wake_up_all(&fc->waitq); | 212 | wake_up_all(&fc->waitq); |
213 | wake_up_all(&fc->blocked_waitq); | ||
221 | kobject_del(&fc->kobj); | 214 | kobject_del(&fc->kobj); |
222 | kobject_put(&fc->kobj); | 215 | kobject_put(&fc->kobj); |
223 | } | 216 | } |
@@ -386,8 +379,6 @@ static struct fuse_conn *new_conn(void) | |||
386 | INIT_LIST_HEAD(&fc->pending); | 379 | INIT_LIST_HEAD(&fc->pending); |
387 | INIT_LIST_HEAD(&fc->processing); | 380 | INIT_LIST_HEAD(&fc->processing); |
388 | INIT_LIST_HEAD(&fc->io); | 381 | INIT_LIST_HEAD(&fc->io); |
389 | INIT_LIST_HEAD(&fc->background); | ||
390 | init_rwsem(&fc->sbput_sem); | ||
391 | kobj_set_kset_s(fc, connections_subsys); | 382 | kobj_set_kset_s(fc, connections_subsys); |
392 | kobject_init(&fc->kobj); | 383 | kobject_init(&fc->kobj); |
393 | atomic_set(&fc->num_waiting, 0); | 384 | atomic_set(&fc->num_waiting, 0); |
@@ -543,7 +534,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent) | |||
543 | goto err_kobject_del; | 534 | goto err_kobject_del; |
544 | 535 | ||
545 | sb->s_root = root_dentry; | 536 | sb->s_root = root_dentry; |
546 | fc->mounted = 1; | ||
547 | fc->connected = 1; | 537 | fc->connected = 1; |
548 | kobject_get(&fc->kobj); | 538 | kobject_get(&fc->kobj); |
549 | file->private_data = fc; | 539 | file->private_data = fc; |