forked from Minki/linux
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>
This commit is contained in:
parent
27eabc7cb4
commit
68d75ed4b8
@ -138,6 +138,9 @@ static void sysfs_kill_sb(struct super_block *sb)
|
|||||||
{
|
{
|
||||||
struct sysfs_super_info *info = sysfs_info(sb);
|
struct sysfs_super_info *info = sysfs_info(sb);
|
||||||
|
|
||||||
|
/* Remove the superblock from fs_supers/s_instances
|
||||||
|
* so we can't find it, before freeing sysfs_super_info.
|
||||||
|
*/
|
||||||
kill_anon_super(sb);
|
kill_anon_super(sb);
|
||||||
kfree(info);
|
kfree(info);
|
||||||
}
|
}
|
||||||
@ -156,9 +159,11 @@ void sysfs_exit_ns(enum kobj_ns_type type, const void *ns)
|
|||||||
spin_lock(&sb_lock);
|
spin_lock(&sb_lock);
|
||||||
list_for_each_entry(sb, &sysfs_fs_type.fs_supers, s_instances) {
|
list_for_each_entry(sb, &sysfs_fs_type.fs_supers, s_instances) {
|
||||||
struct sysfs_super_info *info = sysfs_info(sb);
|
struct sysfs_super_info *info = sysfs_info(sb);
|
||||||
/* Ignore superblocks that are in the process of unmounting */
|
/*
|
||||||
if (sb->s_count <= S_BIAS)
|
* If we see a superblock on the fs_supers/s_instances
|
||||||
continue;
|
* list the unmount has not completed and sb->s_fs_info
|
||||||
|
* points to a valid struct sysfs_super_info.
|
||||||
|
*/
|
||||||
/* Ignore superblocks with the wrong ns */
|
/* Ignore superblocks with the wrong ns */
|
||||||
if (info->ns[type] != ns)
|
if (info->ns[type] != ns)
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user