struct path *path, struct path *parent_path)
{
LIST_HEAD(tree_list);
- struct vfsmount *dest_mnt = path->mnt;
+ struct mount *dest_mnt = real_mount(path->mnt);
struct dentry *dest_dentry = path->dentry;
struct mount *child, *p;
int err;
- if (IS_MNT_SHARED(dest_mnt)) {
+ if (IS_MNT_SHARED(&dest_mnt->mnt)) {
err = invent_group_ids(source_mnt, true);
if (err)
goto out;
}
- err = propagate_mnt(dest_mnt, dest_dentry, &source_mnt->mnt, &tree_list);
+ err = propagate_mnt(dest_mnt, dest_dentry, source_mnt, &tree_list);
if (err)
goto out_cleanup_ids;
br_write_lock(vfsmount_lock);
- if (IS_MNT_SHARED(dest_mnt)) {
+ if (IS_MNT_SHARED(&dest_mnt->mnt)) {
for (p = source_mnt; p; p = next_mnt(p, &source_mnt->mnt))
set_mnt_shared(p);
}
attach_mnt(source_mnt, path);
touch_mnt_namespace(parent_path->mnt->mnt_ns);
} else {
- mnt_set_mountpoint(dest_mnt, dest_dentry, source_mnt);
+ mnt_set_mountpoint(&dest_mnt->mnt, dest_dentry, source_mnt);
commit_tree(source_mnt);
}
return 0;
out_cleanup_ids:
- if (IS_MNT_SHARED(dest_mnt))
+ if (IS_MNT_SHARED(&dest_mnt->mnt))
cleanup_group_ids(source_mnt, NULL);
out:
return err;
* @source_mnt: source mount.
* @tree_list : list of heads of trees to be attached.
*/
-int propagate_mnt(struct vfsmount *dest_mnt, struct dentry *dest_dentry,
- struct vfsmount *source_mnt, struct list_head *tree_list)
+int propagate_mnt(struct mount *dest_mnt, struct dentry *dest_dentry,
+ struct mount *source_mnt, struct list_head *tree_list)
{
struct mount *m, *child;
int ret = 0;
- struct mount *prev_dest_mnt = real_mount(dest_mnt);
- struct mount *prev_src_mnt = real_mount(source_mnt);
+ struct mount *prev_dest_mnt = dest_mnt;
+ struct mount *prev_src_mnt = source_mnt;
LIST_HEAD(tmp_list);
LIST_HEAD(umount_list);
- for (m = propagation_next(real_mount(dest_mnt), real_mount(dest_mnt)); m;
- m = propagation_next(m, real_mount(dest_mnt))) {
+ for (m = propagation_next(dest_mnt, dest_mnt); m;
+ m = propagation_next(m, dest_mnt)) {
int type;
struct mount *source;
}
void change_mnt_propagation(struct mount *, int);
-int propagate_mnt(struct vfsmount *, struct dentry *, struct vfsmount *,
+int propagate_mnt(struct mount *, struct dentry *, struct mount *,
struct list_head *);
int propagate_umount(struct list_head *);
int propagate_mount_busy(struct mount *, int);