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> CC: Vladimir Davydov <vdavy...@virtuozzo.com> CC: Konstantin Khorenko <khore...@virtuozzo.com> CC: Igor Sukhih <i...@parallels.com> --- drivers/tty/pty.c | 1 - drivers/tty/tty_io.c | 29 +++++++++++++++++++++++++++-- include/linux/ve.h | 1 + 3 files changed, 28 insertions(+), 3 deletions(-) Index: linux-pcs7.git/drivers/tty/pty.c =================================================================== --- linux-pcs7.git.orig/drivers/tty/pty.c +++ linux-pcs7.git/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 { Index: linux-pcs7.git/drivers/tty/tty_io.c =================================================================== --- linux-pcs7.git.orig/drivers/tty/tty_io.c +++ linux-pcs7.git/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 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; Index: linux-pcs7.git/include/linux/ve.h =================================================================== --- linux-pcs7.git.orig/include/linux/ve.h +++ linux-pcs7.git/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