All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Emelyanov <xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
To: sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org
Cc: Containers <containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>,
	Cedric Le Goater <clg-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
Subject: Re: [Devel] [RFC][PATCH 3/4]: Enable multiple mounts of /dev/pts
Date: Fri, 15 Feb 2008 10:57:38 +0300	[thread overview]
Message-ID: <47B545F2.2050202@openvz.org> (raw)
In-Reply-To: <20080214235027.GA18708-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
> Pavel Emelianov [xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org] wrote:
> | Serge E. Hallyn wrote:
> | > Quoting Pavel Emelyanov (xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org):
> | >> [snip]
> | >>
> | >>>> Mmm. I wanted to send one small objection to Cedric's patches with mqns,
> | >>>> but the thread was abandoned by the time I decided to do-it-right-now.
> | >>>>
> | >>>> So I can put it here: forcing the CLONE_NEWNS is not very good, since
> | >>>> this makes impossible to push a bind mount inside a new namespace, which
> | >>>> may operate in some chroot environment. But this ability is heavily
> | >>> Which direction do you want to go?  I'm wondering whether mounts
> | >>> propagation can address it.
> | >> Hardly. AFAIS there's no way to let the chroot-ed tasks see parts of
> | >> vfs tree, that left behind them after chroot, unless they are in the 
> | >> same mntns as you, and you bind mount this parts to their tree. No?
> | > 
> | > Well no, but I suspect I'm just not understanding what you want to do.
> | > But if the chroot is under /jail1, and you've done, say,
> | > 
> | > 	mkdir -p /share/pts
> | > 	mkdir -p /jail1/share
> | > 	mount --bind /share /share
> | > 	mount --make-shared /share
> | > 	mount --bind /share /jail1/share
> | > 	mount --make-slave /jail1/share
> | > 
> | > before the chroot-ed tasks were cloned with CLONE_NEWNS, then when you
> | > do
> | > 
> | > 	mount --bind /dev/pts /share/pts
> | > 
> | > from the parent mntns (not that I know why you'd want to do *that* :)
> | > then the chroot'ed tasks will see the original mntns's /dev/pts under
> | > /jail1/share.
> | 
> | I haven't yet tried that, but :( this function
> | 
> | 	static inline int check_mnt(struct vfsmount *mnt)
> | 	{
> | 	        return mnt->mnt_ns == current->nsproxy->mnt_ns;
> | 	}
> | 
> | and this code in do_loopback
> | 
> |         if (!check_mnt(nd->mnt) || !check_mnt(old_nd.mnt))
> |                 goto out;
> | 
> | makes me think that trying to bind a mount from another mntns
> | ot _to_ another is prohibited... Do I miss something?
> | 
> | >>> Though really, I think you're right - we shouldn't break the kernel
> | >>> doing CLONE_NEWMQ or CLONE_NEWPTS without CLONE_NEWNS, so we shouldn't
> | >>> force the combination.
> | >>>
> | >>>> exploited in OpenVZ, so if we can somehow avoid forcing the NEWNS flag
> | >>>> that would be very very good :) See my next comment about this issue.
> | >>>>
> | >>>>> Pavel, not long ago you said you were starting to look at tty and pty
> | >>>>> stuff - did you have any different ideas on devpts virtualization, or
> | >>>>> are you ok with this minus your comments thus far?
> | >>>> I have a similar idea of how to implement this, but I didn't thought
> | >>>> about the details. As far as this issue is concerned, I see no reasons
> | >>>> why we need a kern_mount-ed devtpsfs instance. If we don't make such,
> | >>>> we may safely hold the ptsns from the superblock and be happy. The
> | >>>> same seems applicable to the mqns, no?
> | >>> But the current->nsproxy->devpts->mnt is used in several functions in
> | >>> patch 3.
> | >> Indeed. I overlooked this. Then we're in a deep ... problem here.
> | >>
> | >> Breaking this circle was not that easy with pid namespaces, so
> | >> I put the strut in proc_flush_task - when the last task from the
> | >> namespace exits the kern-mount-ed vfsmnt is dropped, but we can't
> | >> do the same stuff with devpts.
> | > 
> | > But I still don't see what the problem is with my proposal?  So long as
> | > you agree that if there are no tasks remaining in the devptsns,
> | > then any task which has its devpts mounted should see an empty directory
> | > (due to sb->s_info being NULL), I think it works.
> | 
> | Well, if we _do_ can handle the races with ns->devpts_mnt switch
> | from not NULL to NULL, then I'm fine with this approach.
> | 
> | I just remember, that with pid namespaces this caused a complicated
> | locking and performance degradation. This is the problem I couldn't
> | remember yesterday.
> 
> Well, iirc, one problem with pid namespaces was that we need to keep
> the task and pid_namespace association until the task was waited on
> (for instance the wait() call from parent needs the pid_t of the
> child which is tied to the pid ns in struct upid).
> 
> For this reason, we don't drop the mnt reference in free_pid_ns() but
> hold the reference till proc_flush_task().
> 
> With devpts, can't we simply drop the reference in free_pts_ns() so
> that when the last task using the pts_ns exits, we can unmount and
> release the mnt ?

I hope we can. The thing I'm worried about is whether we can correctly
handle race with this pointer switch from NULL to not-NULL.

> IOW, do you suspect that the circular reference leads to leaking vfsmnts ?
> 

Of course! If the namespace holds the vfsmnt, vfsmnt holds the superblock
and the superblock holds the namespace we won't drop this chain ever,
unless some other object breaks this chain.

  parent reply	other threads:[~2008-02-15  7:57 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-06  5:04 [RFC][PATCH 0/4] Devpts namespace sukadev-r/Jw6+rmf7HQT0dZR+AlfA
     [not found] ` <20080206050428.GA19461-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-02-06  5:09   ` [RFC][PATCH 1/4]: Factor out PTY index allocation sukadev-r/Jw6+rmf7HQT0dZR+AlfA
2008-02-06  5:10   ` [RFC][PATCH 2/4]: Use interface to access allocated_ptys sukadev-r/Jw6+rmf7HQT0dZR+AlfA
2008-02-06  5:10   ` [RFC][PATCH 3/4]: Enable multiple mounts of /dev/pts sukadev-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]     ` <20080206051055.GC19764-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-02-06 15:42       ` Serge E. Hallyn
2008-02-06 15:57       ` [Devel] " Pavel Emelyanov
     [not found]         ` <47A9D8D4.6030404-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-06 16:16           ` Serge E. Hallyn
     [not found]             ` <20080206161608.GA16278-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-06 16:24               ` Pavel Emelyanov
     [not found]                 ` <47A9DF31.2040302-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-06 16:43                   ` Serge E. Hallyn
     [not found]                     ` <20080206164328.GA16726-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-06 16:56                       ` Pavel Emelyanov
     [not found]                         ` <47A9E6C5.7030209-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-06 17:32                           ` Serge E. Hallyn
     [not found]                             ` <20080206173211.GA17655-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-07  9:43                               ` Pavel Emelyanov
     [not found]                                 ` <47AAD2C8.9090106-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-07 10:17                                   ` Cedric Le Goater
2008-02-07 14:22                                   ` Serge E. Hallyn
2008-02-14 23:50                                   ` sukadev-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]                                     ` <20080214235027.GA18708-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-02-15  7:57                                       ` Pavel Emelyanov [this message]
     [not found]                                         ` <47B545F2.2050202-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-15 17:52                                           ` sukadev-r/Jw6+rmf7HQT0dZR+AlfA
2008-02-07 10:25                               ` Cedric Le Goater
     [not found]                                 ` <47AADC85.1080206-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-02-07 10:50                                   ` Pavel Emelyanov
2008-02-06 19:25                       ` Oren Laadan
     [not found]                         ` <47AA0995.9020003-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2008-02-06 19:37                           ` Serge E. Hallyn
     [not found]                             ` <20080206193724.GB19349-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-06 19:47                               ` Oren Laadan
     [not found]                                 ` <47AA0EBB.3020806-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2008-02-06 19:58                                   ` Serge E. Hallyn
     [not found]                                     ` <20080206195855.GE19349-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-12  0:34                                       ` Oren Laadan
2008-02-14 18:16                       ` sukadev-r/Jw6+rmf7HQT0dZR+AlfA
2008-02-06 18:05               ` Cedric Le Goater
2008-02-06  5:11   ` [RFC][PATCH 4/4]: Enable cloning PTY namespaces sukadev-r/Jw6+rmf7HQT0dZR+AlfA
     [not found]     ` <20080206051117.GD19764-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-02-06  9:04       ` [Devel] " Pavel Emelyanov
     [not found]         ` <47A9780F.1070803-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-06 15:37           ` Serge E. Hallyn
     [not found]             ` <20080206153750.GA15351-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-06 15:44               ` Pavel Emelyanov
     [not found]                 ` <47A9D5FA.2000205-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-06 16:25                   ` Serge E. Hallyn
     [not found]                     ` <20080206162557.GA16518-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-06 16:35                       ` Pavel Emelyanov
     [not found]                         ` <47A9E1C6.2020607-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2008-02-06 17:04                           ` Serge E. Hallyn
     [not found]                             ` <20080206170402.GA17288-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
2008-02-06 17:06                               ` Pavel Emelyanov
2008-02-06 18:00                           ` Cedric Le Goater
     [not found]                             ` <47A9F5B6.7010902-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-02-06 19:45                               ` Serge E. Hallyn
2008-02-06 16:03       ` Serge E. Hallyn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47B545F2.2050202@openvz.org \
    --to=xemul-gefaqzzx7r8dnm+yrofe0a@public.gmane.org \
    --cc=clg-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org \
    --cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
    --cc=sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.