The commit is pushed to "branch-rh7-3.10.0-229.7.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-229.7.2.vz7.6.3 ------> commit 99a71c6ceb41b6c8256620c4db844f7395f2a2c9 Author: Cyrill Gorcunov <gorcu...@gmail.com> Date: Fri Aug 28 14:14:08 2015 +0400
ve/devpts: Revert 2c27d20125f5 Here we revert 2c27d20125f5 (ve/devpts: cleanup per-VE creation) making code close to the vanilla one. We've tune devpts code a bit though in next patch but less intrusive. https://jira.sw.ru/browse/PSBM-34931 Signed-off-by: Cyrill Gorcunov <gorcu...@virtuozzo.com> CC: Vladimir Davydov <vdavy...@virtuozzo.com> CC: Andrey Vagin <ava...@virtuozzo.com> CC: Konstantin Khorenko <khore...@virtuozzo.com> CC: Pavel Emelyanov <xe...@virtuozzo.com> --- fs/devpts/inode.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 3dcd4da..be0fb74 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c @@ -402,6 +402,20 @@ fail: } #ifdef CONFIG_DEVPTS_MULTIPLE_INSTANCES +static int test_devpts_sb(struct super_block *s, void *p) +{ + return get_exec_env()->devpts_sb == s; +} + +static int set_devpts_sb(struct super_block *s, void *p) +{ + int error = set_anon_super(s, p); + if (!error) { + atomic_inc(&s->s_active); + get_exec_env()->devpts_sb = s; + } + return error; +} /* * devpts_mount() @@ -436,7 +450,6 @@ static struct dentry *devpts_mount(struct file_system_type *fs_type, int error; struct pts_mount_opts opts; struct super_block *s; - struct dentry *root; error = parse_mount_options(data, PARSE_MOUNT, &opts); if (error) @@ -450,29 +463,29 @@ static struct dentry *devpts_mount(struct file_system_type *fs_type, return ERR_PTR(-EINVAL); if (opts.newinstance) - root = mount_nodev(fs_type, flags, data, devpts_fill_super); + s = sget(fs_type, NULL, set_anon_super, flags, NULL); else - root = mount_ns(fs_type, flags, data, get_exec_env(), devpts_fill_super); + s = sget(fs_type, test_devpts_sb, set_devpts_sb, flags, NULL); + + if (IS_ERR(s)) + return ERR_CAST(s); - if (IS_ERR(root)) - return ERR_CAST(root); + if (!s->s_root) { + error = devpts_fill_super(s, data, flags & MS_SILENT ? 1 : 0); + if (error) + goto out_undo_sget; + s->s_flags |= MS_ACTIVE; + } - s = root->d_sb; memcpy(&(DEVPTS_SB(s))->mount_opts, &opts, sizeof(opts)); error = mknod_ptmx(s); if (error) goto out_undo_sget; - if (!opts.newinstance) { - atomic_inc(&s->s_active); - get_exec_env()->devpts_sb = s; - } - - return root; + return dget(s->s_root); out_undo_sget: - dput(root); deactivate_locked_super(s); return ERR_PTR(error); } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel