Commit 68d75ed4b84a0806ecd4bc14da4759713b23a532

Authored by Eric W. Biederman
Committed by Greg Kroah-Hartman
1 parent 27eabc7cb4

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

... ... @@ -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;