aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namespace.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2011-11-21 06:11:30 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2012-01-06 23:20:12 -0500
commit39f7c4db1d2d9e2e2a90abdf34811783089d217d (patch)
treecbc3496ce21e26b5891bb4c4d4155853317ddfb3 /fs/namespace.c
parent34c80b1d93e6e20ca9dea0baf583a5b5510d92d4 (diff)
vfs: keep list of mounts for each superblock
Keep track of vfsmounts belonging to a superblock. List is protected by vfsmount_lock. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Tested-by: Toshiyuki Okajima <toshi.okajima@jp.fujitsu.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r--fs/namespace.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index db65e2e4921f..145217b088d1 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -671,6 +671,9 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
671 mnt->mnt.mnt_sb = root->d_sb; 671 mnt->mnt.mnt_sb = root->d_sb;
672 mnt->mnt_mountpoint = mnt->mnt.mnt_root; 672 mnt->mnt_mountpoint = mnt->mnt.mnt_root;
673 mnt->mnt_parent = mnt; 673 mnt->mnt_parent = mnt;
674 br_write_lock(vfsmount_lock);
675 list_add_tail(&mnt->mnt_instance, &root->d_sb->s_mounts);
676 br_write_unlock(vfsmount_lock);
674 return &mnt->mnt; 677 return &mnt->mnt;
675} 678}
676EXPORT_SYMBOL_GPL(vfs_kern_mount); 679EXPORT_SYMBOL_GPL(vfs_kern_mount);
@@ -699,6 +702,9 @@ static struct mount *clone_mnt(struct mount *old, struct dentry *root,
699 mnt->mnt.mnt_root = dget(root); 702 mnt->mnt.mnt_root = dget(root);
700 mnt->mnt_mountpoint = mnt->mnt.mnt_root; 703 mnt->mnt_mountpoint = mnt->mnt.mnt_root;
701 mnt->mnt_parent = mnt; 704 mnt->mnt_parent = mnt;
705 br_write_lock(vfsmount_lock);
706 list_add_tail(&mnt->mnt_instance, &sb->s_mounts);
707 br_write_unlock(vfsmount_lock);
702 708
703 if (flag & CL_SLAVE) { 709 if (flag & CL_SLAVE) {
704 list_add(&mnt->mnt_slave, &old->mnt_slave_list); 710 list_add(&mnt->mnt_slave, &old->mnt_slave_list);
@@ -781,6 +787,7 @@ put_again:
781 acct_auto_close_mnt(&mnt->mnt); 787 acct_auto_close_mnt(&mnt->mnt);
782 goto put_again; 788 goto put_again;
783 } 789 }
790 list_del(&mnt->mnt_instance);
784 br_write_unlock(vfsmount_lock); 791 br_write_unlock(vfsmount_lock);
785 mntfree(mnt); 792 mntfree(mnt);
786} 793}