From: Pavel Emelyanov <xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
To: "Serge E. Hallyn" <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: Containers <containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>
Subject: Re: [Devel] [RFC][PATCH 4/4]: Enable cloning PTY namespaces
Date: Wed, 06 Feb 2008 20:06:15 +0300 [thread overview]
Message-ID: <47A9E907.5040102@openvz.org> (raw)
In-Reply-To: <20080206170402.GA17288-6s5zFf/epYLPQpwDFJZrxKsjOiXwFzmk@public.gmane.org>
Serge E. Hallyn wrote:
> Quoting Pavel Emelyanov (xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org):
>> Serge E. Hallyn wrote:
>>> Quoting Pavel Emelyanov (xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org):
>>>> Serge E. Hallyn wrote:
>>>>> Quoting Pavel Emelyanov (xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org):
>>>>>> sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org wrote:
>>>>>>> From: Sukadev Bhattiprolu <sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>>>>>>> Subject: [RFC][PATCH 4/4]: Enable cloning PTY namespaces
>>>>>>>
>>>>>>> Enable cloning PTY namespaces.
>>>>>>>
>>>>>>> TODO:
>>>>>>> This version temporarily uses the clone flag '0x80000000' which
>>>>>>> is unused in mainline atm, but used for CLONE_IO in -mm.
>>>>>>> While we must extend clone() (urgently) to solve this, it hopefully
>>>>>>> does not affect review of the rest of this patchset.
>>>>>>>
>>>>>>> Changelog:
>>>>>>> - Version 0: Based on earlier versions from Serge Hallyn and
>>>>>>> Matt Helsley.
>>>>>>>
>>>>>>> Signed-off-by: Sukadev Bhattiprolu <sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>>>>>>> ---
>>>>>>> fs/devpts/inode.c | 84 +++++++++++++++++++++++++++++++++++++++-------
>>>>>>> include/linux/devpts_fs.h | 52 ++++++++++++++++++++++++++++
>>>>>>> include/linux/init_task.h | 1
>>>>>>> include/linux/nsproxy.h | 2 +
>>>>>>> include/linux/sched.h | 2 +
>>>>>>> kernel/fork.c | 2 -
>>>>>>> kernel/nsproxy.c | 17 ++++++++-
>>>>>>> 7 files changed, 146 insertions(+), 14 deletions(-)
>>>>>>>
>>>>>>> Index: linux-2.6.24/fs/devpts/inode.c
>>>>>>> ===================================================================
>>>>>>> --- linux-2.6.24.orig/fs/devpts/inode.c 2008-02-05 19:16:39.000000000 -0800
>>>>>>> +++ linux-2.6.24/fs/devpts/inode.c 2008-02-05 20:27:41.000000000 -0800
>>>>>>> @@ -25,18 +25,25 @@
>>>>>>> #define DEVPTS_SUPER_MAGIC 0x1cd1
>>>>>>>
>>>>>>> extern int pty_limit; /* Config limit on Unix98 ptys */
>>>>>>> -static DEFINE_IDR(allocated_ptys);
>>>>>>> static DECLARE_MUTEX(allocated_ptys_lock);
>>>>>>> +static struct file_system_type devpts_fs_type;
>>>>>>> +
>>>>>>> +struct pts_namespace init_pts_ns = {
>>>>>>> + .kref = {
>>>>>>> + .refcount = ATOMIC_INIT(2),
>>>>>>> + },
>>>>>>> + .allocated_ptys = IDR_INIT(init_pts_ns.allocated_ptys),
>>>>>>> + .mnt = NULL,
>>>>>>> +};
>>>>>>>
>>>>>>> static inline struct idr *current_pts_ns_allocated_ptys(void)
>>>>>>> {
>>>>>>> - return &allocated_ptys;
>>>>>>> + return ¤t->nsproxy->pts_ns->allocated_ptys;
>>>>>>> }
>>>>>>>
>>>>>>> -static struct vfsmount *devpts_mnt;
>>>>>>> static inline struct vfsmount *current_pts_ns_mnt(void)
>>>>>>> {
>>>>>>> - return devpts_mnt;
>>>>>>> + return current->nsproxy->pts_ns->mnt;
>>>>>>> }
>>>>>>>
>>>>>>> static struct {
>>>>>>> @@ -59,6 +66,42 @@ static match_table_t tokens = {
>>>>>>> {Opt_err, NULL}
>>>>>>> };
>>>>>>>
>>>>>>> +struct pts_namespace *new_pts_ns(void)
>>>>>>> +{
>>>>>>> + struct pts_namespace *ns;
>>>>>>> +
>>>>>>> + ns = kmalloc(sizeof(*ns), GFP_KERNEL);
>>>>>>> + if (!ns)
>>>>>>> + return ERR_PTR(-ENOMEM);
>>>>>>> +
>>>>>>> + ns->mnt = kern_mount_data(&devpts_fs_type, ns);
>>>>>> You create a circular references here - the namespace
>>>>>> holds the vfsmnt, the vfsmnt holds a superblock, a superblock
>>>>>> holds the namespace.
>>>>> Hmm, yeah, good point. That was probably in my original version last
>>>>> year, so my fault not Suka's. Suka, would it work to have the
>>>>> sb->s_info point to the namespace but not grab a reference, than have
>>>> If you don't then you may be in situation, when this devpts
>>>> is mounted from userspace and in case the namespace is dead
>>>> superblock will point to garbage... Superblock MUST hold the
>>>> namespace :)
>>> But when the ns is freed sb->s_info would be NULL. Surely the helpers
>>> can be made to handle that safely?
>> Hm... How do we find the proper superblock? Have a reference on
>> it from the namespace? I'm afraid it will be easy to resolve the
>> locking issues here.
>>
>> I propose another scheme - we simply don't have ANY references
>> from namespace to superblock/vfsmount, but get the current
>> namespace in devpts_get_sb() and put in devpts_free_sb().
>
> But then it really does become impossible to use a /dev/pts from another
> namespace, right?
Right. I already see this from another thread :) Let's drop this one.
>>>>> free_pts_ns() null out its sb->s_info, i.e. something like
>>>>>
>>>>> void free_pts_ns(struct kref *ns_kref)
>>>>> {
>>>>> struct pts_namespace *ns;
>>>>> struct super_block *sb;
>>>>>
>>>>> ns = container_of(ns_kref, struct pts_namespace, kref);
>>>>> BUG_ON(ns == &init_pts_ns);
>>>>> sb = ns->mnt->mnt_sb;
>>>>>
>>>>> mntput(ns->mnt);
>>>>> sb->s_info = NULL;
>>>>>
>>>>> /*
>>>>> * TODO:
>>>>> * idr_remove_all(&ns->allocated_ptys); introduced in
>>>>> .6.23
>>>>> */
>>>>> idr_destroy(&ns->allocated_ptys);
>>>>> kfree(ns);
>>>>> }
>>>>>
>>>>>
>
next prev parent reply other threads:[~2008-02-06 17:06 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
[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 [this message]
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=47A9E907.5040102@openvz.org \
--to=xemul-gefaqzzx7r8dnm+yrofe0a@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=serue-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.