Commit 68d75ed4b84a0806ecd4bc14da4759713b23a532
Committed by
Greg Kroah-Hartman
1 parent
27eabc7cb4
Exists in
master
and in
39 other branches
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>
Showing 1 changed file with 8 additions and 3 deletions Side-by-side Diff
fs/sysfs/mount.c
... | ... | @@ -138,6 +138,9 @@ |
138 | 138 | { |
139 | 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 | 144 | kill_anon_super(sb); |
142 | 145 | kfree(info); |
143 | 146 | } |
... | ... | @@ -156,9 +159,11 @@ |
156 | 159 | spin_lock(&sb_lock); |
157 | 160 | list_for_each_entry(sb, &sysfs_fs_type.fs_supers, s_instances) { |
158 | 161 | struct sysfs_super_info *info = sysfs_info(sb); |
159 | - /* Ignore superblocks that are in the process of unmounting */ | |
160 | - if (sb->s_count <= S_BIAS) | |
161 | - continue; | |
162 | + /* | |
163 | + * If we see a superblock on the fs_supers/s_instances | |
164 | + * list the unmount has not completed and sb->s_fs_info | |
165 | + * points to a valid struct sysfs_super_info. | |
166 | + */ | |
162 | 167 | /* Ignore superblocks with the wrong ns */ |
163 | 168 | if (info->ns[type] != ns) |
164 | 169 | continue; |