The commit is pushed to "branch-rh7-3.10.0-123.1.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-123.1.2.vz7.5.1 ------> commit 3c5b30b0520f4ca33608737b25aef6c45c05fb71 Author: Kirill Tkhai <ktk...@odin.com> Date: Mon May 18 13:52:48 2015 +0400
ve/uts_ns: Implement cgroup interface to configure ve's os_release It's the similar to VZCTL_VE_CONFIGURE ioctl in PCS6. Note: max_write_len is __NEW_UTS_LEN + 1, because I want to allow echo ... > ve.os_release, which adds trailing '\n' to the string (see man echo for details). Extra symbol will be cut in ve_os_release_write(). https://jira.sw.ru/browse/PSBM-32273 Signed-off-by: Kirill Tkhai <ktk...@odin.com> Reviewed-by: Cyrill Gorcunov <gorcu...@odin.com> --- kernel/ve/ve.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c index 6ab409f..e598d15 100644 --- a/kernel/ve/ve.c +++ b/kernel/ve/ve.c @@ -1032,6 +1032,54 @@ static int ve_mount_opts_write(struct cgroup *cg, struct cftype *cft, return 0; } +static int ve_os_release_read(struct cgroup *cg, struct cftype *cft, + struct seq_file *m) +{ + struct ve_struct *ve = cgroup_ve(cg); + int ret = 0; + + down_read(&ve->op_sem); + + if (!ve->ve_ns) { + ret = -ENOENT; + goto up_opsem; + } + + down_read(&uts_sem); + seq_puts(m, ve->ve_ns->uts_ns->name.release); + seq_putc(m, '\n'); + up_read(&uts_sem); +up_opsem: + up_read(&ve->op_sem); + + return ret; +} + +static int ve_os_release_write(struct cgroup *cg, struct cftype *cft, + const char *buffer) +{ + struct ve_struct *ve = cgroup_ve(cg); + char *release; + int ret = 0; + + down_read(&ve->op_sem); + + if (!ve->ve_ns) { + ret = -ENOENT; + goto up_opsem; + } + + down_write(&uts_sem); + release = ve->ve_ns->uts_ns->name.release; + strncpy(release, buffer, __NEW_UTS_LEN); + release[__NEW_UTS_LEN] = '\0'; + up_write(&uts_sem); +up_opsem: + up_read(&ve->op_sem); + + return ret; +} + static struct cftype ve_cftypes[] = { { .name = "state", @@ -1049,6 +1097,13 @@ static struct cftype ve_cftypes[] = { .flags = CFTYPE_NOT_ON_ROOT, .write_string = ve_mount_opts_write, }, + { + .name = "os_release", + .max_write_len = __NEW_UTS_LEN + 1, + .flags = CFTYPE_NOT_ON_ROOT, + .read_seq_string = ve_os_release_read, + .write_string = ve_os_release_write, + }, { } }; _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel