2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-09-02 15:25:21 +00:00

IPC: show message queue dump content

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Acked-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
This commit is contained in:
Kinsbursky Stanislav
2012-02-13 20:27:42 +03:00
committed by Cyrill Gorcunov
parent fa2ff60680
commit 24c4381644
4 changed files with 45 additions and 0 deletions

View File

@@ -517,6 +517,9 @@ static int cr_parse_file(struct cr_options *opts)
case IPCNS_SHM_MAGIC: case IPCNS_SHM_MAGIC:
show_ipc_shm(fd); show_ipc_shm(fd);
break; break;
case IPCNS_MSG_MAGIC:
show_ipc_msg(fd);
break;
default: default:
pr_err("Unknown magic %x on %s\n", magic, opts->show_dump_file); pr_err("Unknown magic %x on %s\n", magic, opts->show_dump_file);
goto err; goto err;

View File

@@ -5,6 +5,7 @@
extern void show_ipc_var(int fd); extern void show_ipc_var(int fd);
extern void show_ipc_shm(int fd); extern void show_ipc_shm(int fd);
extern void show_ipc_msg(int fd);
extern int dump_ipc_ns(int ns_pid, struct cr_fdset *fdset); extern int dump_ipc_ns(int ns_pid, struct cr_fdset *fdset);
extern int prepare_ipc_ns(int pid); extern int prepare_ipc_ns(int pid);

View File

@@ -365,6 +365,44 @@ static void show_var_entry(struct ipc_var_entry *entry)
ipc_sysctl_req(entry, CTL_PRINT); ipc_sysctl_req(entry, CTL_PRINT);
} }
static void show_ipc_msg_entries(int fd)
{
pr_info("\nMessage queues:\n");
while (1) {
int ret;
struct ipc_msg_entry entry;
int msg_nr = 0;
ret = read_img_eof(fd, &entry);
if (ret <= 0)
return;
print_ipc_msg_entry(&entry);
while (msg_nr < entry.qnum) {
struct ipc_msg msg;
ret = read_img(fd, &msg);
if (ret <= 0)
return;
print_ipc_msg(msg_nr, &msg);
if (lseek(fd, round_up(msg.msize, sizeof(u64)),
SEEK_CUR) == (off_t) -1)
return;
msg_nr++;
}
}
}
void show_ipc_msg(int fd)
{
pr_img_head(CR_FD_IPCNS);
show_ipc_msg_entries(fd);
pr_img_tail(CR_FD_IPCNS);
}
static void show_ipc_shm_entries(int fd) static void show_ipc_shm_entries(int fd)
{ {
pr_info("\nShared memory segments:\n"); pr_info("\nShared memory segments:\n");

View File

@@ -131,6 +131,9 @@ int try_show_namespaces(int ns_pid)
if (fdset->fds[CR_FD_IPCNS_SHM] != -1) if (fdset->fds[CR_FD_IPCNS_SHM] != -1)
show_ipc_shm(fdset->fds[CR_FD_IPCNS_SHM]); show_ipc_shm(fdset->fds[CR_FD_IPCNS_SHM]);
if (fdset->fds[CR_FD_IPCNS_MSG] != -1)
show_ipc_msg(fdset->fds[CR_FD_IPCNS_MSG]);
close_cr_fdset(&fdset); close_cr_fdset(&fdset);
return 0; return 0;
} }