[CRIU] [PATCH] net: Move node's net fd reference into service fd

Cyrill Gorcunov gorcunov at openvz.org
Tue Nov 17 05:44:51 PST 2015


So we keep it and dont close inside close_old_fds()
helper but pass into veth creation so the kernel
can fetch the net namespace of the veth peer.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 include/servicefd.h |  1 +
 net.c               | 12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/include/servicefd.h b/include/servicefd.h
index 3c6e08a7472e..a9e35a223420 100644
--- a/include/servicefd.h
+++ b/include/servicefd.h
@@ -18,6 +18,7 @@ enum sfd_type {
 	ROOT_FD_OFF,	/* Root of the namespace we dump/restore */
 	CGROUP_YARD,
 	USERNSD_SK,	/* Socket for usernsd */
+	NS_FD_OFF,	/* Node's net namespace fd */
 
 	SERVICE_FD_MAX
 };
diff --git a/net.c b/net.c
index cca5ef884a1c..b1d58984623b 100644
--- a/net.c
+++ b/net.c
@@ -28,7 +28,6 @@
 #include "protobuf.h"
 #include "protobuf/netdev.pb-c.h"
 
-static int ns_fd = -1;
 static int ns_sysfs_fd = -1;
 
 int read_ns_sys_file(char *path, char *buf, int len)
@@ -461,6 +460,7 @@ enum {
 
 static int veth_link_info(NetDeviceEntry *nde, struct newlink_req *req)
 {
+	int ns_fd = get_service_fd(NS_FD_OFF);
 	struct rtattr *veth_data, *peer_data;
 	struct ifinfomsg ifm;
 	struct veth_pair *n;
@@ -489,6 +489,7 @@ static int veth_link_info(NetDeviceEntry *nde, struct newlink_req *req)
 
 static int venet_link_info(NetDeviceEntry *nde, struct newlink_req *req)
 {
+	int ns_fd = get_service_fd(NS_FD_OFF);
 	struct rtattr *venet_data;
 
 	BUG_ON(ns_fd < 0);
@@ -906,13 +907,15 @@ int prepare_net_ns(int pid)
 	if (!ret)
 		ret = restore_iptables(pid);
 
-	close(ns_fd);
+	close_service_fd(NS_FD_OFF);
 
 	return ret;
 }
 
 int netns_keep_nsfd(void)
 {
+	int ns_fd;
+
 	if (!(root_ns_mask & CLONE_NEWNET))
 		return 0;
 
@@ -928,6 +931,11 @@ int netns_keep_nsfd(void)
 		return -1;
 	}
 
+	if (install_service_fd(NS_FD_OFF, ns_fd) < 0) {
+		pr_err("Can't install ns net reference\n");
+		return -1;
+	}
+
 	pr_info("Saved netns fd for links restore\n");
 	return 0;
 }
-- 
2.5.0



More information about the CRIU mailing list