diff options
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 4d31f73e2561..7bdf7907413f 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -1886,8 +1886,14 @@ static int do_add_mount(struct mount *newmnt, struct path *path, int mnt_flags) | |||
1886 | return err; | 1886 | return err; |
1887 | 1887 | ||
1888 | err = -EINVAL; | 1888 | err = -EINVAL; |
1889 | if (!(mnt_flags & MNT_SHRINKABLE) && !check_mnt(real_mount(path->mnt))) | 1889 | if (unlikely(!check_mnt(real_mount(path->mnt)))) { |
1890 | goto unlock; | 1890 | /* that's acceptable only for automounts done in private ns */ |
1891 | if (!(mnt_flags & MNT_SHRINKABLE)) | ||
1892 | goto unlock; | ||
1893 | /* ... and for those we'd better have mountpoint still alive */ | ||
1894 | if (!real_mount(path->mnt)->mnt_ns) | ||
1895 | goto unlock; | ||
1896 | } | ||
1891 | 1897 | ||
1892 | /* Refuse the same filesystem on the same mount point */ | 1898 | /* Refuse the same filesystem on the same mount point */ |
1893 | err = -EBUSY; | 1899 | err = -EBUSY; |