diff options
author | David Howells <dhowells@redhat.com> | 2006-10-20 02:28:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-20 13:26:38 -0400 |
commit | 0e7d73824e6b0024100701da246fec769dd8f087 (patch) | |
tree | 43fd5dd81dd39cb06253bd53aed2d91daaf13763 /fs/autofs | |
parent | f2fbc6c2dad7bbcbf226c094749534f1e84d3be2 (diff) |
[PATCH] autofs3: Make sure all dentries refs are released before calling kill_anon_super()
Make sure all dentries refs are released before calling kill_anon_super()
so that the assumption that generic_shutdown_super() can completely destroy
the dentry tree for there will be no external references holds true.
What was being done in the put_super() superblock op, is now done in the
kill_sb() filesystem op instead, prior to calling kill_anon_super().
The call to shrink_dcache_sb() is removed as it is redundant since
shrink_dcache_for_umount() will now be called after the cleanup routine.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Ian Kent <raven@themaw.net>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/autofs')
-rw-r--r-- | fs/autofs/autofs_i.h | 1 | ||||
-rw-r--r-- | fs/autofs/dirhash.c | 1 | ||||
-rw-r--r-- | fs/autofs/init.c | 2 | ||||
-rw-r--r-- | fs/autofs/inode.c | 4 |
4 files changed, 4 insertions, 4 deletions
diff --git a/fs/autofs/autofs_i.h b/fs/autofs/autofs_i.h index c7700d9b3f96..906ba5ce2261 100644 --- a/fs/autofs/autofs_i.h +++ b/fs/autofs/autofs_i.h | |||
@@ -149,6 +149,7 @@ extern const struct file_operations autofs_root_operations; | |||
149 | /* Initializing function */ | 149 | /* Initializing function */ |
150 | 150 | ||
151 | int autofs_fill_super(struct super_block *, void *, int); | 151 | int autofs_fill_super(struct super_block *, void *, int); |
152 | void autofs_kill_sb(struct super_block *sb); | ||
152 | 153 | ||
153 | /* Queue management functions */ | 154 | /* Queue management functions */ |
154 | 155 | ||
diff --git a/fs/autofs/dirhash.c b/fs/autofs/dirhash.c index 3fded389d06b..bf8c8af98004 100644 --- a/fs/autofs/dirhash.c +++ b/fs/autofs/dirhash.c | |||
@@ -246,5 +246,4 @@ void autofs_hash_nuke(struct autofs_sb_info *sbi) | |||
246 | kfree(ent); | 246 | kfree(ent); |
247 | } | 247 | } |
248 | } | 248 | } |
249 | shrink_dcache_sb(sbi->sb); | ||
250 | } | 249 | } |
diff --git a/fs/autofs/init.c b/fs/autofs/init.c index aca123752406..cea5219b4f37 100644 --- a/fs/autofs/init.c +++ b/fs/autofs/init.c | |||
@@ -24,7 +24,7 @@ static struct file_system_type autofs_fs_type = { | |||
24 | .owner = THIS_MODULE, | 24 | .owner = THIS_MODULE, |
25 | .name = "autofs", | 25 | .name = "autofs", |
26 | .get_sb = autofs_get_sb, | 26 | .get_sb = autofs_get_sb, |
27 | .kill_sb = kill_anon_super, | 27 | .kill_sb = autofs_kill_sb, |
28 | }; | 28 | }; |
29 | 29 | ||
30 | static int __init init_autofs_fs(void) | 30 | static int __init init_autofs_fs(void) |
diff --git a/fs/autofs/inode.c b/fs/autofs/inode.c index 2c9759baad61..54c518c89e4c 100644 --- a/fs/autofs/inode.c +++ b/fs/autofs/inode.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include "autofs_i.h" | 20 | #include "autofs_i.h" |
21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
22 | 22 | ||
23 | static void autofs_put_super(struct super_block *sb) | 23 | void autofs_kill_sb(struct super_block *sb) |
24 | { | 24 | { |
25 | struct autofs_sb_info *sbi = autofs_sbi(sb); | 25 | struct autofs_sb_info *sbi = autofs_sbi(sb); |
26 | unsigned int n; | 26 | unsigned int n; |
@@ -37,13 +37,13 @@ static void autofs_put_super(struct super_block *sb) | |||
37 | kfree(sb->s_fs_info); | 37 | kfree(sb->s_fs_info); |
38 | 38 | ||
39 | DPRINTK(("autofs: shutting down\n")); | 39 | DPRINTK(("autofs: shutting down\n")); |
40 | kill_anon_super(sb); | ||
40 | } | 41 | } |
41 | 42 | ||
42 | static void autofs_read_inode(struct inode *inode); | 43 | static void autofs_read_inode(struct inode *inode); |
43 | 44 | ||
44 | static struct super_operations autofs_sops = { | 45 | static struct super_operations autofs_sops = { |
45 | .read_inode = autofs_read_inode, | 46 | .read_inode = autofs_read_inode, |
46 | .put_super = autofs_put_super, | ||
47 | .statfs = simple_statfs, | 47 | .statfs = simple_statfs, |
48 | }; | 48 | }; |
49 | 49 | ||