On Thu, Mar 23, 2017 at 05:05:07PM +0100, Oleg Nesterov wrote: > Again, I can't really review this, I know nothing about vfs, but since > nobody else replied... Thanks anyway :) > On 03/20, Alexey Gladkov wrote: > > > > @@ -97,7 +169,23 @@ static struct dentry *proc_mount(struct file_system_type *fs_type, > > ns = task_active_pid_ns(current); > > } > > > > - return mount_ns(fs_type, flags, data, ns, ns->user_ns, proc_fill_super); > > + root = mount_ns(fs_type, flags, data, ns, ns->user_ns, proc_fill_super); > > + > > + if (!IS_ERR(root)) { > > + if (!proc_fill_options(data, &opts)) > > + return ERR_PTR(-EINVAL); > > So we have to call proc_fill_options() twice, not good... Yes, I understand > why, but perhaps we factor it out somehow, we can pack options + pid_ns into > sb->s_fs_info. Nevermind, this is minor. It happens only once, when we don't have the s_root yet. > > + if (opts.pid_only) { > > + int ret; > > + > > + if (!ns->pidfs && (ret = fill_pidfs_root(root->d_sb))) > > + return ERR_PTR(ret); > > + > > + root = ns->pidfs; > > Afaics this lacks dget(ns->pidfs) which should pair with dput(mnt.mnt_root) > in cleanup_mnt(). IIUC otherwise ns->pidfs can go away after umount, OTOH, > if we return ns->pidfs then dget(sb->s_root) in mount_ns() is not balanced. > But this all is fixeable. > > So with this change "mount -opidonly" creates another IS_ROOT() dentry which > is not equal to sb->s_root. I simply do not know if this is technically > correct or not... but, say, the "Only bind mounts can have disconnected paths" > comment in path_connected() makes me worry ;) > > And this obviously means that /path-to-pidonly-mnt/ won't share dentries with > the normal /proc mount. Not really good imo even if not really wrong... Lets > look at proc_flush_task(). The exiting task will flush its $pid dentries in > /proc/ but not in /path-to-pidonly-mnt/ iiuc. Again, not really a bug, but > still... I know that I'm cheater, but I did not start first :) -- Rgrds, legion -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html