vfs: spread struct mount - propagate_mnt()
Al Viro [Fri, 25 Nov 2011 04:59:29 +0000 (23:59 -0500)]
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

fs/namespace.c
fs/pnode.c
fs/pnode.h

index 65d011f..8432344 100644 (file)
@@ -1595,23 +1595,23 @@ static int attach_recursive_mnt(struct mount *source_mnt,
                        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);
        }
@@ -1620,7 +1620,7 @@ static int attach_recursive_mnt(struct mount *source_mnt,
                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);
        }
 
@@ -1633,7 +1633,7 @@ static int attach_recursive_mnt(struct mount *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;
index f86cd4b..6519b3b 100644 (file)
@@ -217,18 +217,18 @@ static struct mount *get_source(struct mount *dest,
  * @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;
 
index 33f1e3c..55546a2 100644 (file)
@@ -30,7 +30,7 @@ static inline void set_mnt_shared(struct mount *mnt)
 }
 
 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);