Commit b5bd856a authored by Vladimir Davydov's avatar Vladimir Davydov Committed by Linus Torvalds

fs/super.c: fix WARN on alloc_super() fail path

On fail path alloc_super() calls destroy_super(), which issues a warning
if the sb's s_mounts list is not empty, in particular if it has not been
initialized.  That said s_mounts must be initialized in alloc_super()
before any possible failure, but currently it is initialized close to
the end of the function leading to a useless warning dumped to log if
either percpu_counter_init() or list_lru_init() fails.  Let's fix this.
Signed-off-by: default avatarVladimir Davydov <vdavydov@parallels.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4e4f9e66
...@@ -166,6 +166,8 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags) ...@@ -166,6 +166,8 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
if (!s) if (!s)
return NULL; return NULL;
INIT_LIST_HEAD(&s->s_mounts);
if (security_sb_alloc(s)) if (security_sb_alloc(s))
goto fail; goto fail;
...@@ -188,7 +190,6 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags) ...@@ -188,7 +190,6 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
if (list_lru_init(&s->s_inode_lru)) if (list_lru_init(&s->s_inode_lru))
goto fail; goto fail;
INIT_LIST_HEAD(&s->s_mounts);
init_rwsem(&s->s_umount); init_rwsem(&s->s_umount);
lockdep_set_class(&s->s_umount, &type->s_umount_key); lockdep_set_class(&s->s_umount, &type->s_umount_key);
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment