aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/mount.c
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@aristanetworks.com>2010-05-18 15:58:33 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-21 12:37:31 -0400
commit68d75ed4b84a0806ecd4bc14da4759713b23a532 (patch)
tree025c85987d1d553ed014903ad8f6395250b44fa8 /fs/sysfs/mount.c
parent27eabc7cb4b357c68e4ce77d0b014f7a23add752 (diff)
sysfs: Remove usage of S_BIAS to avoid merge conflict with the vfs tree
In Al's latest vfs tree the code is reworked and S_BIAS has been removed. It turns out that checking to see if a super block is in the middle of an unmount in sysfs_exit_ns is unnecessary because we remove the super_block from the s_supers/s_instances list before struct sysfs_super_info pointed to by sb->s_fs_info is freed. For now just delete the unnecessary check to see if a superblock is in the middle of an unmount, it isn't necessary with or without Al's changes and it just causes a needless conflict. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/sysfs/mount.c')
-rw-r--r--fs/sysfs/mount.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/sysfs/mount.c b/fs/sysfs/mount.c
index 1afa32ba242c..281c0c9bc39f 100644
--- a/fs/sysfs/mount.c
+++ b/fs/sysfs/mount.c
@@ -138,6 +138,9 @@ static void sysfs_kill_sb(struct super_block *sb)
138{ 138{
139 struct sysfs_super_info *info = sysfs_info(sb); 139 struct sysfs_super_info *info = sysfs_info(sb);
140 140
141 /* Remove the superblock from fs_supers/s_instances
142 * so we can't find it, before freeing sysfs_super_info.
143 */
141 kill_anon_super(sb); 144 kill_anon_super(sb);
142 kfree(info); 145 kfree(info);
143} 146}
@@ -156,9 +159,11 @@ void sysfs_exit_ns(enum kobj_ns_type type, const void *ns)
156 spin_lock(&sb_lock); 159 spin_lock(&sb_lock);
157 list_for_each_entry(sb, &sysfs_fs_type.fs_supers, s_instances) { 160 list_for_each_entry(sb, &sysfs_fs_type.fs_supers, s_instances) {
158 struct sysfs_super_info *info = sysfs_info(sb); 161 struct sysfs_super_info *info = sysfs_info(sb);
159 /* Ignore superblocks that are in the process of unmounting */ 162 /*
160 if (sb->s_count <= S_BIAS) 163 * If we see a superblock on the fs_supers/s_instances
161 continue; 164 * list the unmount has not completed and sb->s_fs_info
165 * points to a valid struct sysfs_super_info.
166 */
162 /* Ignore superblocks with the wrong ns */ 167 /* Ignore superblocks with the wrong ns */
163 if (info->ns[type] != ns) 168 if (info->ns[type] != ns)
164 continue; 169 continue;