[CRIU] [PATCH] IPC: message dumping updated due to mainstream STEAL
logic changes
Kinsbursky Stanislav
skinsbursky at openvz.org
Wed Feb 22 08:18:24 EST 2012
Signed-off-by: Stanislav Kinsbursky <skinsbursky at openvz.org>
---
ipc_ns.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/ipc_ns.c b/ipc_ns.c
index ecc3084..61bedec 100644
--- a/ipc_ns.c
+++ b/ipc_ns.c
@@ -38,7 +38,7 @@
/* message buffer for msgrcv in case of array calls */
struct msgbuf_a {
long mtype; /* type of message */
- size_t msize; /* size of message */
+ int msize; /* size of message */
char mtext[0]; /* message text */
};
#endif
@@ -184,7 +184,11 @@ static int dump_ipc_msg_queue_messages(int fd, const struct ipc_msg_entry *entry
size_t array_size;
int ret, msg_nr = 0;
- array_size = entry->qnum * sizeof(struct msgbuf_a) + cbytes;
+ /*
+ * Here we allocate memory for struct msgbuf_a twice becase messages in
+ * array will be aligned by struct msgbuf_a.
+ */
+ array_size = entry->qnum * sizeof(struct msgbuf_a) * 2 + cbytes;
msg_array = ptr = xmalloc(array_size);
if (msg_array == NULL) {
pr_err("Failed to allocate memory for IPC messages\n");
@@ -217,7 +221,7 @@ static int dump_ipc_msg_queue_messages(int fd, const struct ipc_msg_entry *entry
break;
}
msg_nr++;
- ptr += sizeof(struct msgbuf_a) + data->msize;
+ ptr += round_up(data->msize + sizeof(struct msgbuf_a), sizeof(struct msgbuf_a));
}
ret = 0;
err:
More information about the CRIU
mailing list