Commit 4101487f authored by Kinsbursky Stanislav's avatar Kinsbursky Stanislav Committed by Cyrill Gorcunov

IPC: show semaphores set

Signed-off-by: 's avatarStanislav Kinsbursky <skinsbursky@parallels.com>
Acked-by: 's avatarPavel Emelyanov <xemul@parallels.com>
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
parent 4141296e
...@@ -520,6 +520,9 @@ static int cr_parse_file(struct cr_options *opts) ...@@ -520,6 +520,9 @@ static int cr_parse_file(struct cr_options *opts)
case IPCNS_MSG_MAGIC: case IPCNS_MSG_MAGIC:
show_ipc_msg(fd); show_ipc_msg(fd);
break; break;
case IPCNS_SEM_MAGIC:
show_ipc_sem(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;
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,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 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 dump_ipc_ns(int ns_pid, struct cr_fdset *fdset);
extern int prepare_ipc_ns(int pid); extern int prepare_ipc_ns(int pid);
......
...@@ -440,6 +440,34 @@ static void show_var_entry(struct ipc_var_entry *entry) ...@@ -440,6 +440,34 @@ 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_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_array(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) static void show_ipc_msg_entries(int fd)
{ {
pr_info("\nMessage queues:\n"); pr_info("\nMessage queues:\n");
......
...@@ -134,6 +134,9 @@ int try_show_namespaces(int ns_pid) ...@@ -134,6 +134,9 @@ int try_show_namespaces(int ns_pid)
if (fdset->fds[CR_FD_IPCNS_MSG] != -1) if (fdset->fds[CR_FD_IPCNS_MSG] != -1)
show_ipc_msg(fdset->fds[CR_FD_IPCNS_MSG]); 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); close_cr_fdset(&fdset);
return 0; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment