Commit a8d56d8e authored by Al Viro's avatar Al Viro

vfs: spread struct mount - propagate_mnt()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c937135d
...@@ -1595,23 +1595,23 @@ static int attach_recursive_mnt(struct mount *source_mnt, ...@@ -1595,23 +1595,23 @@ static int attach_recursive_mnt(struct mount *source_mnt,
struct path *path, struct path *parent_path) struct path *path, struct path *parent_path)
{ {
LIST_HEAD(tree_list); 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 dentry *dest_dentry = path->dentry;
struct mount *child, *p; struct mount *child, *p;
int err; int err;
if (IS_MNT_SHARED(dest_mnt)) { if (IS_MNT_SHARED(&dest_mnt->mnt)) {
err = invent_group_ids(source_mnt, true); err = invent_group_ids(source_mnt, true);
if (err) if (err)
goto out; 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) if (err)
goto out_cleanup_ids; goto out_cleanup_ids;
br_write_lock(vfsmount_lock); 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)) for (p = source_mnt; p; p = next_mnt(p, &source_mnt->mnt))
set_mnt_shared(p); set_mnt_shared(p);
} }
...@@ -1620,7 +1620,7 @@ static int attach_recursive_mnt(struct mount *source_mnt, ...@@ -1620,7 +1620,7 @@ static int attach_recursive_mnt(struct mount *source_mnt,
attach_mnt(source_mnt, path); attach_mnt(source_mnt, path);
touch_mnt_namespace(parent_path->mnt->mnt_ns); touch_mnt_namespace(parent_path->mnt->mnt_ns);
} else { } else {
mnt_set_mountpoint(dest_mnt, dest_dentry, source_mnt); mnt_set_mountpoint(&dest_mnt->mnt, dest_dentry, source_mnt);
commit_tree(source_mnt); commit_tree(source_mnt);
} }
...@@ -1633,7 +1633,7 @@ static int attach_recursive_mnt(struct mount *source_mnt, ...@@ -1633,7 +1633,7 @@ static int attach_recursive_mnt(struct mount *source_mnt,
return 0; return 0;
out_cleanup_ids: out_cleanup_ids:
if (IS_MNT_SHARED(dest_mnt)) if (IS_MNT_SHARED(&dest_mnt->mnt))
cleanup_group_ids(source_mnt, NULL); cleanup_group_ids(source_mnt, NULL);
out: out:
return err; return err;
......
...@@ -217,18 +217,18 @@ static struct mount *get_source(struct mount *dest, ...@@ -217,18 +217,18 @@ static struct mount *get_source(struct mount *dest,
* @source_mnt: source mount. * @source_mnt: source mount.
* @tree_list : list of heads of trees to be attached. * @tree_list : list of heads of trees to be attached.
*/ */
int propagate_mnt(struct vfsmount *dest_mnt, struct dentry *dest_dentry, int propagate_mnt(struct mount *dest_mnt, struct dentry *dest_dentry,
struct vfsmount *source_mnt, struct list_head *tree_list) struct mount *source_mnt, struct list_head *tree_list)
{ {
struct mount *m, *child; struct mount *m, *child;
int ret = 0; int ret = 0;
struct mount *prev_dest_mnt = real_mount(dest_mnt); struct mount *prev_dest_mnt = dest_mnt;
struct mount *prev_src_mnt = real_mount(source_mnt); struct mount *prev_src_mnt = source_mnt;
LIST_HEAD(tmp_list); LIST_HEAD(tmp_list);
LIST_HEAD(umount_list); LIST_HEAD(umount_list);
for (m = propagation_next(real_mount(dest_mnt), real_mount(dest_mnt)); m; for (m = propagation_next(dest_mnt, dest_mnt); m;
m = propagation_next(m, real_mount(dest_mnt))) { m = propagation_next(m, dest_mnt)) {
int type; int type;
struct mount *source; struct mount *source;
......
...@@ -30,7 +30,7 @@ static inline void set_mnt_shared(struct mount *mnt) ...@@ -30,7 +30,7 @@ static inline void set_mnt_shared(struct mount *mnt)
} }
void change_mnt_propagation(struct mount *, int); 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 *); struct list_head *);
int propagate_umount(struct list_head *); int propagate_umount(struct list_head *);
int propagate_mount_busy(struct mount *, int); int propagate_mount_busy(struct mount *, int);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment