summaryrefslogtreecommitdiff
path: root/fs/pnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/pnode.c')
-rw-r--r--fs/pnode.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/fs/pnode.c b/fs/pnode.c
index ef048f008bdd..ffd429b760d5 100644
--- a/fs/pnode.c
+++ b/fs/pnode.c
@@ -228,9 +228,13 @@ static int propagate_one(struct mount *m, struct mountpoint *dest_mp)
/* skip ones added by this propagate_mnt() */
if (IS_MNT_NEW(m))
return 0;
- /* skip if mountpoint isn't covered by it */
+ /* skip if mountpoint isn't visible in m */
if (!is_subdir(dest_mp->m_dentry, m->mnt.mnt_root))
return 0;
+ /* skip if m is in the anon_ns */
+ if (is_anon_ns(m->mnt_ns))
+ return 0;
+
if (peers(m, last_dest)) {
type = CL_MAKE_SHARED;
} else {
@@ -380,9 +384,6 @@ bool propagation_would_overmount(const struct mount *from,
if (!IS_MNT_SHARED(from))
return false;
- if (IS_MNT_NEW(to))
- return false;
-
if (to->mnt.mnt_root != mp->m_dentry)
return false;
@@ -549,8 +550,10 @@ static void restore_mounts(struct list_head *to_restore)
mp = parent->mnt_mp;
parent = parent->mnt_parent;
}
- if (parent != mnt->mnt_parent)
+ if (parent != mnt->mnt_parent) {
mnt_change_mountpoint(parent, mp, mnt);
+ mnt_notify_add(mnt);
+ }
}
}