[CRIU] [PATCH 3/7] unux: postpone dumping sockets v2

Andrey Vagin avagin at openvz.org
Fri Dec 20 03:09:40 PST 2013


Unix sockets are dumped, when a peer socket is found.
We are going to dump external sockets with help plugins. For the we need
to set the USK_CALLBACK flags in unix entry. Currently a socket is
dumped immediately when it's transfered, but we can be sure that a
socket is not external, only when we have its peer.

v2: add comments in code
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 sk-unix.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/sk-unix.c b/sk-unix.c
index 9fe3ef3..60abc99 100644
--- a/sk-unix.c
+++ b/sk-unix.c
@@ -324,7 +324,13 @@ dump:
 	pr_info("Dumping unix socket at %d\n", p->fd);
 	show_one_unix("Dumping", sk);
 
-	if (write_unix_entry(sk))
+	/*
+	 *  Postpone writing the entry if a peer isn't found yet.
+	 *  It's required, because we may need to modify the entry.
+	 *  For example if a socket is external and is dumped by callback,
+	 *  the USK_CALLBACK must be set.
+	 */
+	if (list_empty(&sk->peer_node) && write_unix_entry(sk))
 		goto err;
 
 	list_del_init(&sk->list);
@@ -335,6 +341,9 @@ dump:
 		psk = list_first_entry(&sk->peer_list, struct unix_sk_desc, peer_node);
 		close_safe(&psk->fd);
 		list_del_init(&psk->peer_node);
+
+		if (write_unix_entry(psk))
+			goto err;
 	}
 
 	return 0;
@@ -559,6 +568,9 @@ int fix_external_unix_sockets(void)
 			psk = list_first_entry(&sk->peer_list, struct unix_sk_desc, peer_node);
 			close_safe(&psk->fd);
 			list_del_init(&psk->peer_node);
+
+			if (write_unix_entry(psk))
+				goto err;
 		}
 	}
 
-- 
1.8.3.1



More information about the CRIU mailing list