From 3ae67d7b3a6fd8a5093cbda5d0c3db29cc8f9769 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Tue, 11 Aug 2015 17:18:07 +0300 Subject: [PATCH] mount: Move mount_info and ext_mount to mount.h It's quite unclean while this structure lives in proc_parse.h, which only have to fill this structure on procfs read, but real handling is inside mount.c. Move it as appropriate. Same time ext_mount structure should be moved into a header as well with sane @list name used instead of @l. Signed-off-by: Cyrill Gorcunov Signed-off-by: Pavel Emelyanov --- include/mount.h | 82 ++++++++++++++++++++++++++++++++++++++++++-- include/proc_parse.h | 59 +------------------------------ mount.c | 23 ++----------- 3 files changed, 83 insertions(+), 81 deletions(-) diff --git a/include/mount.h b/include/mount.h index a7fa93821..1307e2774 100644 --- a/include/mount.h +++ b/include/mount.h @@ -1,15 +1,93 @@ #ifndef __CR_MOUNT_H__ #define __CR_MOUNT_H__ +#include + +#include "asm/types.h" +#include "list.h" + struct proc_mountinfo; struct pstree_item; -struct mount_info; -struct cr_imgset; +struct fstype; struct ns_id; +/* + * Structure to keep external mount points resolving info. + * + * On dump the key is the mountpoint as seen from the mount + * namespace, the val is some name that will be put into image + * instead of the mount point's root path. + * + * On restore the key is the name from the image (the one + * mentioned above) and the val is the path in criu's mount + * namespace that will become the mount point's root, i.e. -- + * be bind mounted to the respective mountpoint. + */ +struct ext_mount { + struct list_head list; + char *key; + char *val; +}; + +struct mount_info { + int mnt_id; + int parent_mnt_id; + unsigned int s_dev; + char *root; + /* + * During dump mountpoint contains path with dot at the + * beginning. It allows to use openat, statat, etc without + * creating a temporary copy of the path. + * + * On restore mountpoint is prepended with so called ns + * root path -- it's a place in fs where the namespace + * mount tree is constructed. Check mnt_roots for details. + * The ns_mountpoint contains path w/o this prefix. + */ + char *mountpoint; + char *ns_mountpoint; + unsigned flags; + int master_id; + int shared_id; + struct fstype *fstype; + char *source; + char *options; + union { + bool mounted; + bool dumped; + }; + bool need_plugin; + int is_file; + bool is_ns_root; + struct mount_info *next; + struct ns_id *nsid; + + struct ext_mount *external; + bool internal_sharing; + + /* tree linkage */ + struct mount_info *parent; + struct mount_info *bind; + struct list_head children; + struct list_head siblings; + + struct list_head mnt_bind; /* circular list of derivatives of one real mount */ + struct list_head mnt_share; /* circular list of shared mounts */ + struct list_head mnt_slave_list; /* list of slave mounts */ + struct list_head mnt_slave; /* slave list entry */ + struct mount_info *mnt_master; /* slave is on master->mnt_slave_list */ + + struct list_head postpone; + + void *private; /* associated filesystem data */ +}; + extern struct mount_info *mntinfo; extern struct ns_desc mnt_ns_desc; +extern struct mount_info *mnt_entry_alloc(); +extern void mnt_entry_free(struct mount_info *mi); + extern int __mntns_get_root_fd(pid_t pid); extern int mntns_get_root_fd(struct ns_id *ns); extern int mntns_get_root_by_mnt_id(int mnt_id); diff --git a/include/proc_parse.h b/include/proc_parse.h index 6dc3a0947..b4fb57d11 100644 --- a/include/proc_parse.h +++ b/include/proc_parse.h @@ -6,6 +6,7 @@ #include "image.h" #include "list.h" #include "cgroup.h" +#include "mount.h" #include "protobuf/eventfd.pb-c.h" #include "protobuf/eventpoll.pb-c.h" @@ -90,7 +91,6 @@ struct proc_status_creds { bool proc_status_creds_eq(struct proc_status_creds *o1, struct proc_status_creds *o2); -struct mount_info; struct fstype { char *name; int code; @@ -99,63 +99,6 @@ struct fstype { int (*parse)(struct mount_info *pm); }; -struct ext_mount; -struct mount_info { - int mnt_id; - int parent_mnt_id; - unsigned int s_dev; - char *root; - /* - * During dump mountpoint contains path with dot at the - * beginning. It allows to use openat, statat, etc without - * creating a temporary copy of the path. - * - * On restore mountpoint is prepended with so called ns - * root path -- it's a place in fs where the namespace - * mount tree is constructed. Check mnt_roots for details. - * The ns_mountpoint contains path w/o this prefix. - */ - char *mountpoint; - char *ns_mountpoint; - unsigned flags; - int master_id; - int shared_id; - struct fstype *fstype; - char *source; - char *options; - union { - bool mounted; - bool dumped; - }; - bool need_plugin; - int is_file; - bool is_ns_root; - struct mount_info *next; - struct ns_id *nsid; - - struct ext_mount *external; - bool internal_sharing; - - /* tree linkage */ - struct mount_info *parent; - struct mount_info *bind; - struct list_head children; - struct list_head siblings; - - struct list_head mnt_bind; /* circular list of derivatives of one real mount */ - struct list_head mnt_share; /* circular list of shared mounts */ - struct list_head mnt_slave_list; /* list of slave mounts */ - struct list_head mnt_slave; /* slave list entry */ - struct mount_info *mnt_master; /* slave is on master->mnt_slave_list */ - - struct list_head postpone; - - void *private; /* associated filesystem data */ -}; - -extern struct mount_info *mnt_entry_alloc(); -extern void mnt_entry_free(struct mount_info *mi); - struct vm_area_list; extern bool add_skip_mount(const char *mountpoint); diff --git a/mount.c b/mount.c index 344d64622..f70875a72 100644 --- a/mount.c +++ b/mount.c @@ -32,25 +32,6 @@ #define AUTODETECTED_MOUNT "CRIU:AUTOGENERATED" -/* - * Structure to keep external mount points resolving info. - * - * On dump the key is the mountpoint as seen from the mount - * namespace, the val is some name that will be put into image - * instead of the mount point's root path. - * - * On restore the key is the name from the image (the one - * mentioned above) and the val is the path in criu's mount - * namespace that will become the mount point's root, i.e. -- - * be bind mounted to the respective mountpoint. - */ - -struct ext_mount { - char *key; - char *val; - struct list_head l; -}; - int ext_mount_add(char *key, char *val) { struct ext_mount *em; @@ -61,7 +42,7 @@ int ext_mount_add(char *key, char *val) em->key = key; em->val = val; - list_add_tail(&em->l, &opts.ext_mounts); + list_add_tail(&em->list, &opts.ext_mounts); pr_info("Added %s:%s ext mount mapping\n", key, val); return 0; } @@ -71,7 +52,7 @@ static struct ext_mount *ext_mount_lookup(char *key) { struct ext_mount *em; - list_for_each_entry(em, &opts.ext_mounts, l) + list_for_each_entry(em, &opts.ext_mounts, list) if (!strcmp(em->key, key)) return em;