]> rtime.felk.cvut.cz Git - linux-imx.git/blobdiff - fs/super.c
Fix sget() race with failing mount
[linux-imx.git] / fs / super.c
index 938119ab8dcbc28f3f9853bc0808d6d70cd51d55..c7765bd38ee20fa99a2a5735c5fd305307a0756d 100644 (file)
@@ -305,8 +305,13 @@ retry:
                        if (s) {
                                up_write(&s->s_umount);
                                destroy_super(s);
+                               s = NULL;
                        }
                        down_write(&old->s_umount);
+                       if (unlikely(!(old->s_flags & MS_BORN))) {
+                               deactivate_locked_super(old);
+                               goto retry;
+                       }
                        return old;
                }
        }
@@ -909,6 +914,7 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
                goto out_free_secdata;
        BUG_ON(!mnt->mnt_sb);
        WARN_ON(!mnt->mnt_sb->s_bdi);
+       mnt->mnt_sb->s_flags |= MS_BORN;
 
        error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);
        if (error)