[CRIU] [PATCH 1/2] ipc/sysctl: c/r fs.mqueue.msg_default fs.mqueue.msgsize_default
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Fri Jun 24 04:40:24 PDT 2016
we already have 3/5 fs.mqueue.xxx sysctls so why not have all:
/proc/sys/fs/mqueue/msg_default is a read/write file for
setting/getting the default number of messages in a queue value
if attr parameter of mq_open(2) is NULL. If it exceed msg_max,
the default value is initialized msg_max.
/proc/sys/fs/mqueue/msgsize_default is a read/write file for
setting/getting the default message size value if attr parameter
of mq_open(2) is NULL. If it exceed msgsize_max, the default
value is initialized msgsize_max.
*We have these sysctls writable in VZ7 CT.
https://jira.sw.ru/browse/PSBM-48397
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
criu/ipc_ns.c | 13 ++++++++++++-
images/ipc-var.proto | 2 ++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/criu/ipc_ns.c b/criu/ipc_ns.c
index 19dfb72..002b39a 100644
--- a/criu/ipc_ns.c
+++ b/criu/ipc_ns.c
@@ -309,6 +309,8 @@ static int ipc_sysctl_req(IpcVarEntry *e, int op)
{ "fs/mqueue/queues_max", &e->mq_queues_max, CTL_U32 },
{ "fs/mqueue/msg_max", &e->mq_msg_max, CTL_U32 },
{ "fs/mqueue/msgsize_max", &e->mq_msgsize_max, CTL_U32 },
+ { "fs/mqueue/msg_default", &e->mq_msg_default, CTL_U32 },
+ { "fs/mqueue/msgsize_default", &e->mq_msgsize_default, CTL_U32 },
};
int ret;
@@ -322,7 +324,14 @@ static int ipc_sysctl_req(IpcVarEntry *e, int op)
return 0;
}
- return sysctl_op(req_mq, ARRAY_SIZE(req_mq), op, CLONE_NEWIPC);
+ if (access("/proc/sys/fs/mqueue/msg_default", F_OK)) {
+ /* In case the kernel is < v3.5 */
+ pr_info("Mqueue msg_default and msgsize_default sysctls are missing\n");
+ e->has_mq_msg_default = e->has_mq_msgsize_default = false;
+ }
+
+ return sysctl_op(req_mq, ARRAY_SIZE(req_mq) - (e->has_mq_msg_default ? 0 : 2),
+ op, CLONE_NEWIPC);
}
/*
@@ -416,6 +425,8 @@ static int dump_ipc_var(struct cr_img *img)
var.sem_ctls = xmalloc(pb_repeated_size(&var, sem_ctls));
if (!var.sem_ctls)
goto err;
+ var.has_mq_msg_default = true;
+ var.has_mq_msgsize_default = true;
ret = ipc_sysctl_req(&var, CTL_READ);
if (ret < 0) {
diff --git a/images/ipc-var.proto b/images/ipc-var.proto
index 4acda69..153b167 100644
--- a/images/ipc-var.proto
+++ b/images/ipc-var.proto
@@ -11,4 +11,6 @@ message ipc_var_entry {
required uint32 mq_queues_max = 10;
required uint32 mq_msg_max = 11;
required uint32 mq_msgsize_max = 12;
+ optional uint32 mq_msg_default = 13;
+ optional uint32 mq_msgsize_default = 14;
}
--
2.5.5
More information about the CRIU
mailing list