mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
get rid of CL_SHARE_TO_SLAVE
the only difference between it and CL_SLAVE is in this predicate in clone_mnt(): if ((flag & CL_SLAVE) || ((flag & CL_SHARED_TO_SLAVE) && IS_MNT_SHARED(old))) { However, in case of CL_SHARED_TO_SLAVE we have not allocated any mount group ids since the time we'd grabbed namespace_sem, so IS_MNT_SHARED() is equivalent to non-zero ->mnt_group_id. And in case of CL_SLAVE old has come either from the original tree, which had ->mnt_group_id allocated for all nodes or from result of sequence of CL_MAKE_SHARED or CL_MAKE_SHARED|CL_SLAVE copies, ultimately going back to the original tree. In both cases we are guaranteed that old->mnt_group_id will be non-zero. In other words, the predicate is always equal to (flags & (CL_SLAVE | CL_SHARED_TO_SLAVE)) && old->mnt_group_id and with that replacement CL_SLAVE and CL_SHARED_TO_SLAVE have exact same behaviour. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
aab771f34e
commit
725ab435ff
2 changed files with 3 additions and 5 deletions
|
@ -1309,7 +1309,7 @@ static struct mount *clone_mnt(struct mount *old, struct dentry *root,
|
|||
mnt->mnt.mnt_flags = READ_ONCE(old->mnt.mnt_flags) &
|
||||
~MNT_INTERNAL_FLAGS;
|
||||
|
||||
if (flag & (CL_SLAVE | CL_PRIVATE | CL_SHARED_TO_SLAVE))
|
||||
if (flag & (CL_SLAVE | CL_PRIVATE))
|
||||
mnt->mnt_group_id = 0; /* not a peer of original */
|
||||
else
|
||||
mnt->mnt_group_id = old->mnt_group_id;
|
||||
|
@ -1340,8 +1340,7 @@ static struct mount *clone_mnt(struct mount *old, struct dentry *root,
|
|||
if (peers(mnt, old))
|
||||
list_add(&mnt->mnt_share, &old->mnt_share);
|
||||
|
||||
if ((flag & CL_SLAVE) ||
|
||||
((flag & CL_SHARED_TO_SLAVE) && IS_MNT_SHARED(old))) {
|
||||
if ((flag & CL_SLAVE) && old->mnt_group_id) {
|
||||
hlist_add_head(&mnt->mnt_slave, &old->mnt_slave_list);
|
||||
mnt->mnt_master = old;
|
||||
} else if (IS_MNT_SLAVE(old)) {
|
||||
|
@ -4228,7 +4227,7 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,
|
|||
/* First pass: copy the tree topology */
|
||||
copy_flags = CL_COPY_UNBINDABLE | CL_EXPIRE;
|
||||
if (user_ns != ns->user_ns)
|
||||
copy_flags |= CL_SHARED_TO_SLAVE;
|
||||
copy_flags |= CL_SLAVE;
|
||||
new = copy_tree(old, old->mnt.mnt_root, copy_flags);
|
||||
if (IS_ERR(new)) {
|
||||
namespace_unlock();
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
#define CL_COPY_UNBINDABLE 0x04
|
||||
#define CL_MAKE_SHARED 0x08
|
||||
#define CL_PRIVATE 0x10
|
||||
#define CL_SHARED_TO_SLAVE 0x20
|
||||
#define CL_COPY_MNT_NS_FILE 0x40
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue