[CRIU] [PATCH v2 07/30] ns: Rename root_user_ns to top_user_ns

Kirill Tkhai ktkhai at virtuozzo.com
Wed Jun 7 14:26:27 MSK 2017


I'm going to use this in !(root_ns_mask & CLONE_NEWUSER) case,
so choose a better name to fit everything.

Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
 criu/cr-restore.c         |    2 +-
 criu/include/namespaces.h |    2 +-
 criu/namespaces.c         |   36 ++++++++++++++++++++----------------
 criu/net.c                |    2 +-
 4 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/criu/cr-restore.c b/criu/cr-restore.c
index c4146869a..220450b43 100644
--- a/criu/cr-restore.c
+++ b/criu/cr-restore.c
@@ -479,7 +479,7 @@ static int setup_child_task_namespaces(struct pstree_item *item, struct ns_id **
 		else
 			item->user_ns = current->user_ns;
 	} else
-		item->user_ns = root_user_ns;
+		item->user_ns = top_user_ns;
 
 	wait_pid_ns_helper_prepared(pid_ns, item->pid);
 
diff --git a/criu/include/namespaces.h b/criu/include/namespaces.h
index 4e06ebc0f..3cfa9a9bf 100644
--- a/criu/include/namespaces.h
+++ b/criu/include/namespaces.h
@@ -162,7 +162,7 @@ struct ns_id {
 };
 extern struct ns_id *ns_ids;
 extern struct ns_id *top_pid_ns;
-extern struct ns_id *root_user_ns;
+extern struct ns_id *top_user_ns;
 extern struct ns_id *top_net_ns;
 
 #define NS_DESC_ENTRY(_cflag, _str, _alt_str)		\
diff --git a/criu/namespaces.c b/criu/namespaces.c
index 5ab64ccc6..811e02bb9 100644
--- a/criu/namespaces.c
+++ b/criu/namespaces.c
@@ -897,10 +897,14 @@ static int set_ns_hookups(struct ns_id *ns)
  * top_xxx_ns -- top namespaces of the dumped/restored tasks.
  * For not-hierarchical types this means namespace of root_item.
  * For hierarchical types this means the grand parent namespace,
- * which is ancestor of all others.
+ * which is ancestor of all others. That is, root_item may have
+ * a namespace different to top_user_ns, but currently it's not
+ * supported.
+ * top_xxx_ns may differ to NS_ROOT(i.e., to be NS_CRIU on dump),
+ * so the prefix "top" is used.
  */
 struct ns_id *top_pid_ns = NULL;
-struct ns_id *root_user_ns = NULL;
+struct ns_id *top_user_ns = NULL;
 struct ns_id *top_net_ns = NULL;
 /* Mapping NS_ROOT to NS_CRIU */
 UsernsEntry *userns_entry;
@@ -987,7 +991,7 @@ unsigned int target_userns_uid(struct ns_id *ns, unsigned int uid)
 {
 	if (!(root_ns_mask & CLONE_NEWUSER))
 		return uid;
-	if (ns == root_user_ns)
+	if (ns == top_user_ns)
 		return uid;
 	/* User ns max nesting level is only 32 */
 	uid = target_userns_uid(ns->parent, uid);
@@ -999,7 +1003,7 @@ unsigned int target_userns_gid(struct ns_id *ns, unsigned int gid)
 {
 	if (!(root_ns_mask & CLONE_NEWUSER))
 		return gid;
-	if (ns == root_user_ns)
+	if (ns == top_user_ns)
 		return gid;
 	/* User ns max nesting level is only 32 */
 	gid = target_userns_gid(ns->parent, gid);
@@ -1011,7 +1015,7 @@ unsigned int root_userns_uid(struct ns_id *ns, unsigned int uid)
 {
 	if (!(root_ns_mask & CLONE_NEWUSER))
 		return uid;
-	while (ns != root_user_ns) {
+	while (ns != top_user_ns) {
 		uid = parent_userns_uid(ns->user.e, uid);
 		ns = ns->parent;
 	}
@@ -1023,7 +1027,7 @@ unsigned int root_userns_gid(struct ns_id *ns, unsigned int gid)
 {
 	if (!(root_ns_mask & CLONE_NEWUSER))
 		return gid;
-	while (ns != root_user_ns) {
+	while (ns != top_user_ns) {
 		gid = parent_userns_gid(ns->user.e, gid);
 		ns = ns->parent;
 	}
@@ -1122,7 +1126,7 @@ int collect_user_ns(struct ns_id *ns, void *oarg)
 	ns->user.e = e;
 	if (ns->type == NS_ROOT) {
 		userns_entry = e;
-		root_user_ns = ns;
+		top_user_ns = ns;
 	}
 	/*
 	 * User namespace is dumped before files to get uid and gid
@@ -1933,7 +1937,7 @@ static int do_read_old_user_ns_img(struct ns_id *ns, void *arg)
 	ns->user.e = e;
 	userns_entry = e;
 	ns->type = NS_ROOT;
-	root_user_ns = ns;
+	top_user_ns = ns;
 	return 0;
 }
 
@@ -1945,16 +1949,16 @@ static int read_old_user_ns_img(void)
 	if (!(root_ns_mask & CLONE_NEWUSER))
 		return 0;
 	/* If new format img has already been read */
-	if (root_user_ns)
+	if (top_user_ns)
 		return 0;
-	/* Old format img is only for root_user_ns. More or less is error */
+	/* Old format img is only for top_user_ns. More or less is error */
 	ret = walk_namespaces(&user_ns_desc, do_read_old_user_ns_img, &count);
 	if (ret < 0)
 		return -1;
 
 	for (ns = ns_ids; ns != NULL; ns = ns->next)
 		if (ns->nd != &user_ns_desc)
-			ns->user_ns = root_user_ns;
+			ns->user_ns = top_user_ns;
 	return 0;
 }
 
@@ -2093,12 +2097,12 @@ int read_ns_with_hookups(void)
 				list_add(&ns->siblings, &p_ns->children);
 			}
 		} else if (e->ns_cflag == CLONE_NEWUSER) {
-			if (root_user_ns) {
-				pr_err("root_user_ns already set\n");
+			if (top_user_ns) {
+				pr_err("top_user_ns already set\n");
 				goto close;
 			}
 			ns->type = NS_ROOT;
-			root_user_ns = ns;
+			top_user_ns = ns;
 			userns_entry = ns->user.e;
 		} else if (e->ns_cflag == CLONE_NEWPID) {
 			if (top_pid_ns) {
@@ -2391,7 +2395,7 @@ static int create_user_ns_hierarhy_fn(void *in_arg)
 	struct ns_id *me, *child;
 	pid_t pid = -1;
 
-	if (p_arg->me != root_user_ns)
+	if (p_arg->me != top_user_ns)
 		p_futex = &p_arg->futex;
 	me = p_arg->me;
 
@@ -2459,7 +2463,7 @@ static int create_user_ns_hierarhy_fn(void *in_arg)
 
 static int create_user_ns_hierarhy(void)
 {
-	struct ns_arg arg = { .me = root_user_ns };
+	struct ns_arg arg = { .me = top_user_ns };
 	return create_user_ns_hierarhy_fn(&arg);
 }
 
diff --git a/criu/net.c b/criu/net.c
index 6849cd2a7..410a3d2a7 100644
--- a/criu/net.c
+++ b/criu/net.c
@@ -2108,7 +2108,7 @@ static int __prepare_net_namespaces(void *unused)
 		if (nsid->nd != &net_ns_desc)
 			continue;
 
-		if (root_user_ns && nsid->user_ns != root_user_ns) {
+		if (top_user_ns && nsid->user_ns != top_user_ns) {
 			if (call_in_child_process(create_net_ns, nsid) < 0)
 				goto err;
 		} else if (nsid->type == NS_ROOT) {



More information about the CRIU mailing list