[CRIU] [PATCH 1/3] net: Extrack ioctl() call from kerndat_socket_netns()

Kirill Tkhai ktkhai at virtuozzo.com
Mon Feb 19 15:16:02 MSK 2018


Refactoring, no functional change.

Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
 criu/include/net.h |    1 +
 criu/net.c         |   26 +++++++++++++++-----------
 2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/criu/include/net.h b/criu/include/net.h
index 796dcc415..74f0969ad 100644
--- a/criu/include/net.h
+++ b/criu/include/net.h
@@ -48,5 +48,6 @@ extern int move_veth_to_bridge(void);
 extern int kerndat_link_nsid(void);
 extern int net_get_nsid(int rtsk, int fd, int *nsid);
 extern int kerndat_nsid(void);
+extern void check_has_netns_ioc(int fd, bool *kdat_val, const char *name);
 
 #endif /* __CR_NET_H__ */
diff --git a/criu/net.c b/criu/net.c
index 0176873e0..f9114dd25 100644
--- a/criu/net.c
+++ b/criu/net.c
@@ -2720,26 +2720,30 @@ struct ns_id *get_socket_ns(int lfd)
 	return ns;
 }
 
+void check_has_netns_ioc(int fd, bool *kdat_val, const char *name)
+{
+	int ns_fd;
+
+	ns_fd = ioctl(fd, SIOCGSKNS);
+	*kdat_val = (ns_fd >= 0);
+
+	if (ns_fd < 0)
+		pr_warn("Unable to get %s network namespace\n", name);
+	else
+		close(ns_fd);
+}
+
 int kerndat_socket_netns(void)
 {
-	int sk, ns_fd;
+	int sk;
 
 	sk = socket(AF_UNIX, SOCK_DGRAM, 0);
 	if (sk < 0) {
 		pr_perror("Unable to create socket");
 		return -1;
 	}
-	ns_fd = ioctl(sk, SIOCGSKNS);
-	if (ns_fd < 0) {
-		pr_warn("Unable to get a socket network namespace\n");
-		kdat.sk_ns = false;
-		close(sk);
-		return 0;
-	}
+	check_has_netns_ioc(sk, &kdat.sk_ns, "socket");
 	close(sk);
-	close(ns_fd);
-
-	kdat.sk_ns = true;
 
 	return 0;
 }



More information about the CRIU mailing list