The commit is pushed to "branch-rh7-3.10.0-229.7.2.vz7.9.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rebase ------> commit 0644d0fb4d20c8c0af9e8b31ab4034216407afbe Author: Cyrill Gorcunov <gorcu...@odin.com> Date: Wed Dec 2 19:30:41 2015 +0400
ve/vtty: Register devices in sysfs In pcs6 we explicitly create /sys/devices/virtual/ttyX in init_ve_vtty, but in pcs7 the code has been reworked: now all device matching is done via common tty_class and dev_match_devt helper. https://jira.sw.ru/browse/PSBM-41628 Signed-off-by: Cyrill Gorcunov <gorcu...@virtuozzo.com> Reviewed-by: Vladimir Davydov <vdavy...@virtuozzo.com> This fix is going to be a temporary one, later, in the scope of https://jira.sw.ru/browse/PSBM-41804 we'll do the following: - revert all our tty device-namespace code leaving with native code instead - setup proper rules (such as sys/devices/virtual/tty[0-12] rx in default CT permissions) - drop legacy pty support (in kernel config) --- drivers/tty/pty.c | 1 - drivers/tty/tty_io.c | 29 +++++++++++++++++++++++++++-- include/linux/ve.h | 1 + 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c index b312635..93ab642 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c @@ -950,7 +950,6 @@ static DEFINE_IDR(vtty_idr); static struct file_operations vtty_fops; -#define MAX_NR_VTTY_CONSOLES (12) #define vtty_match_index(idx) ((idx) >= 0 && (idx) < MAX_NR_VTTY_CONSOLES) typedef struct { diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 8ce0a5f..fc80ccb 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -3653,17 +3653,25 @@ void console_sysfs_notify(void) void ve_tty_console_fini(struct ve_struct *ve) { struct device *consdev = ve->consdev; + int i; ve->consdev = NULL; device_remove_file(consdev, &dev_attr_active); device_destroy_namespace(tty_class, MKDEV(TTYAUX_MAJOR, 1), ve); device_destroy_namespace(tty_class, MKDEV(TTYAUX_MAJOR, 0), ve); + + if (!ve_is_super(ve)) { + for (i = 0; i <= MAX_NR_VTTY_CONSOLES; i++) { + device_destroy_namespace(tty_class, + MKDEV(TTY_MAJOR, i), ve); + } + } } int ve_tty_console_init(struct ve_struct *ve) { - struct device *dev; - int err; + struct device *dev, *d; + int err, i; dev = device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), ve, "tty"); if (IS_ERR(dev)) @@ -3679,6 +3687,23 @@ int ve_tty_console_init(struct ve_struct *ve) if (err) goto err_consfile; + if (!ve_is_super(ve)) { + for (i = 0; i <= MAX_NR_VTTY_CONSOLES; i++) { + d = device_create(tty_class, NULL, MKDEV(TTY_MAJOR, i), + ve, "tty%d", i); + if (IS_ERR(d)) { + err = PTR_ERR(dev); + + while (i-- > 0) + device_destroy_namespace(tty_class, + MKDEV(TTY_MAJOR, i), + ve); + device_remove_file(dev, &dev_attr_active); + goto err_consfile; + } + } + } + ve->consdev = dev; return 0; diff --git a/include/linux/ve.h b/include/linux/ve.h index 2554337..87450c1 100644 --- a/include/linux/ve.h +++ b/include/linux/ve.h @@ -220,6 +220,7 @@ extern bool current_user_ns_initial(void); struct user_namespace *ve_init_user_ns(void); #ifdef CONFIG_TTY +#define MAX_NR_VTTY_CONSOLES (12) extern struct tty_driver *vtty_driver(dev_t dev, int *index); extern struct tty_driver *vtty_console_driver(int *index); extern int vtty_open_master(envid_t veid, int idx); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel