[CRIU] [PATCH cr 6/8] cr-dump: lock network before dump and unlock in case of errors

Andrey Vagin avagin at openvz.org
Fri Sep 14 06:25:30 EDT 2012


Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 cr-dump.c |   39 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/cr-dump.c b/cr-dump.c
index a41fab1..c508cb6 100644
--- a/cr-dump.c
+++ b/cr-dump.c
@@ -1576,6 +1576,40 @@ err_cure_fdset:
 	goto err;
 }
 
+static int network_lock()
+{
+	pr_info("Lock network\n");
+
+	/* Each connection will be locked on dump */
+	if  (!(opts.namespaces_flags & CLONE_NEWNET))
+		return 0;
+
+	if (opts.lock_network == NULL)
+		return 0;
+
+	if (system(opts.lock_network))
+		return -1;
+
+	return 0;
+
+}
+
+static void network_unlock()
+{
+	pr_info("Unlock network\n");
+
+	if  (!(opts.namespaces_flags & CLONE_NEWNET)) {
+		tcp_unlock_all();
+		return;
+	}
+
+	if (opts.unlock_network == NULL)
+		return;
+
+	if (system(opts.unlock_network))
+		pr_err("Unlock of network failed\n");
+}
+
 int cr_dump_tasks(pid_t pid, const struct cr_options *opts)
 {
 	struct pstree_item *item;
@@ -1585,6 +1619,9 @@ int cr_dump_tasks(pid_t pid, const struct cr_options *opts)
 	pr_info("Dumping processes (pid: %d)\n", pid);
 	pr_info("========================================\n");
 
+	if (network_lock())
+		goto err;
+
 	if (write_img_inventory())
 		goto err;
 
@@ -1642,7 +1679,7 @@ err:
 	 * don't, just close them silently.
 	 */
 	if (ret)
-		tcp_unlock_all();
+		network_unlock();
 	pstree_switch_state(root_item,
 			ret ? TASK_ALIVE : opts->final_state);
 	free_pstree(root_item);
-- 
1.7.1



More information about the CRIU mailing list