diff options
author | Tim Chen <tim.c.chen@linux.intel.com> | 2011-07-19 09:32:38 -0700 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-24 10:08:32 -0400 |
commit | 423e0ab086ad8b33626e45fa94ac7613146b7ffa (patch) | |
tree | 249c9337a02254fe5dbede7436f78dfcc1ec508f /security | |
parent | bbd9d6f7fbb0305c9a592bf05a32e87eb364a4ff (diff) | |
download | linux-423e0ab086ad8b33626e45fa94ac7613146b7ffa.tar.gz linux-423e0ab086ad8b33626e45fa94ac7613146b7ffa.tar.bz2 linux-423e0ab086ad8b33626e45fa94ac7613146b7ffa.zip |
VFS : mount lock scalability for internal mounts
For a number of file systems that don't have a mount point (e.g. sockfs
and pipefs), they are not marked as long term. Therefore in
mntput_no_expire, all locks in vfs_mount lock are taken instead of just
local cpu's lock to aggregate reference counts when we release
reference to file objects. In fact, only local lock need to have been
taken to update ref counts as these file systems are in no danger of
going away until we are ready to unregister them.
The attached patch marks file systems using kern_mount without
mount point as long term. The contentions of vfs_mount lock
is now eliminated. Before un-registering such file system,
kern_unmount should be called to remove the long term flag and
make the mount point ready to be freed.
Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'security')
-rw-r--r-- | security/selinux/selinuxfs.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 35459340019e..de7900ef53da 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -1984,6 +1984,7 @@ __initcall(init_sel_fs); void exit_sel_fs(void) { kobject_put(selinuxfs_kobj); + kern_unmount(selinuxfs_mount); unregister_filesystem(&sel_fs_type); } #endif |