Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0e7d7382 authored by David Howells's avatar David Howells Committed by Linus Torvalds
Browse files

[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: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarIan Kent <raven@themaw.net>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent f2fbc6c2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ extern const struct file_operations autofs_root_operations;
/* Initializing function */

int autofs_fill_super(struct super_block *, void *, int);
void autofs_kill_sb(struct super_block *sb);

/* Queue management functions */

+0 −1
Original line number Diff line number Diff line
@@ -246,5 +246,4 @@ void autofs_hash_nuke(struct autofs_sb_info *sbi)
			kfree(ent);
		}
	}
	shrink_dcache_sb(sbi->sb);
}
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ static struct file_system_type autofs_fs_type = {
	.owner		= THIS_MODULE,
	.name		= "autofs",
	.get_sb		= autofs_get_sb,
	.kill_sb	= kill_anon_super,
	.kill_sb	= autofs_kill_sb,
};

static int __init init_autofs_fs(void)
+2 −2
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
#include "autofs_i.h"
#include <linux/module.h>

static void autofs_put_super(struct super_block *sb)
void autofs_kill_sb(struct super_block *sb)
{
	struct autofs_sb_info *sbi = autofs_sbi(sb);
	unsigned int n;
@@ -37,13 +37,13 @@ static void autofs_put_super(struct super_block *sb)
	kfree(sb->s_fs_info);

	DPRINTK(("autofs: shutting down\n"));
	kill_anon_super(sb);
}

static void autofs_read_inode(struct inode *inode);

static struct super_operations autofs_sops = {
	.read_inode	= autofs_read_inode,
	.put_super	= autofs_put_super,
	.statfs		= simple_statfs,
};