[CRIU] [PATCH 2/4] IPC: show semaphores set

Kinsbursky Stanislav skinsbursky at openvz.org
Thu Feb 9 10:57:56 EST 2012



Signed-off-by: Stanislav Kinsbursky <skinsbursky at parallels.com>

---
 cr-show.c        |    3 +++
 include/ipc_ns.h |    1 +
 ipc_ns.c         |   28 ++++++++++++++++++++++++++++
 namespaces.c     |    3 +++
 4 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/cr-show.c b/cr-show.c
index c3ecd83..84943fb 100644
--- a/cr-show.c
+++ b/cr-show.c
@@ -523,6 +523,9 @@ static int cr_parse_file(struct cr_options *opts)
 	case IPCNS_MSG_MAGIC:
 		show_ipc_msg(fd);
 		break;
+	case IPCNS_SEM_MAGIC:
+		show_ipc_sem(fd);
+		break;
 	default:
 		pr_err("Unknown magic %x on %s\n", magic, opts->show_dump_file);
 		goto err;
diff --git a/include/ipc_ns.h b/include/ipc_ns.h
index 981e2fa..41a7d9a 100644
--- a/include/ipc_ns.h
+++ b/include/ipc_ns.h
@@ -6,6 +6,7 @@
 extern void show_ipc_var(int fd);
 extern void show_ipc_shm(int fd);
 extern void show_ipc_msg(int fd);
+extern void show_ipc_sem(int fd);
 extern int dump_ipc_ns(int ns_pid, struct cr_fdset *fdset);
 extern int prepare_ipc_ns(int pid);
 
diff --git a/ipc_ns.c b/ipc_ns.c
index d6b575f..0e7e521 100644
--- a/ipc_ns.c
+++ b/ipc_ns.c
@@ -422,6 +422,34 @@ static void show_var_entry(struct ipc_var_entry *entry)
 	ipc_sysctl_req(entry, CTL_PRINT);
 }
 
+static void show_ipc_sem_entries(int fd)
+{
+	pr_info("\nSemaphores sets:\n");
+	while (1) {
+		int size;
+		struct ipc_sem_entry entry;
+		u16 *values;
+
+		if (read_img_eof(fd, &entry) <= 0)
+			return;
+		print_ipc_sem_entry(&entry);
+		size = sizeof(u16) * entry.nsems;
+		values = xmalloc(size);
+		if (values == NULL)
+			return;
+		if (read_img_buf(fd, values, round_up(size, sizeof(u64))) <= 0)
+			return;
+		print_ipc_sem(entry.nsems, values);
+	}
+}
+
+void show_ipc_sem(int fd)
+{
+	pr_img_head(CR_FD_IPCNS);
+	show_ipc_sem_entries(fd);
+	pr_img_tail(CR_FD_IPCNS);
+}
+
 static void show_ipc_msg_entries(int fd)
 {
 	pr_info("\nMessage queue segments:\n");
diff --git a/namespaces.c b/namespaces.c
index aa0b572..b64f9b0 100644
--- a/namespaces.c
+++ b/namespaces.c
@@ -134,6 +134,9 @@ int try_show_namespaces(int ns_pid)
 	if (fdset->fds[CR_FD_IPCNS_MSG] != -1)
 		show_ipc_msg(fdset->fds[CR_FD_IPCNS_MSG]);
 
+	if (fdset->fds[CR_FD_IPCNS_SEM] != -1)
+		show_ipc_sem(fdset->fds[CR_FD_IPCNS_SEM]);
+
 	close_cr_fdset(&fdset);
 	return 0;
 }



More information about the CRIU mailing list