From: Adrian Reber <areber@redhat.com>
To: Christian Brauner <christian.brauner@ubuntu.com>
Cc: Andrei Vagin <avagin@gmail.com>, Arnd Bergmann <arnd@arndb.de>,
Eric Biederman <ebiederm@xmission.com>,
Pavel Emelyanov <ovzxemul@gmail.com>,
Oleg Nesterov <oleg@redhat.com>,
Dmitry Safonov <0x7f454c46@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Mike Rapoport <rppt@linux.ibm.com>,
Radostin Stoyanov <rstoyanov1@gmail.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Cyrill Gorcunov <gorcunov@openvz.org>,
Thomas Gleixner <tglx@linutronix.de>,
Aleksa Sarai <cyphar@cyphar.com>,
Linux API <linux-api@vger.kernel.org>
Subject: Re: clone3: allow creation of time namespace with offset
Date: Tue, 24 Mar 2020 17:25:46 +0100 [thread overview]
Message-ID: <20200324162546.GG358599@dcbz.redhat.com> (raw)
In-Reply-To: <20200324160945.orcm75avj2ol3eop@wittgenstein>
On Tue, Mar 24, 2020 at 05:09:45PM +0100, Christian Brauner wrote:
> On Fri, Mar 20, 2020 at 11:33:55AM -0700, Andrei Vagin wrote:
> > On Thu, Mar 19, 2020 at 11:29:55AM +0100, Christian Brauner wrote:
> > > On Thu, Mar 19, 2020 at 09:16:43AM +0100, Arnd Bergmann wrote:
> > > > On Thu, Mar 19, 2020 at 9:11 AM Adrian Reber <areber@redhat.com> wrote:
> > > >
> > > > > With Arnd's idea of only using nanoseconds, timens_offset would then
> > > > > contain something like this:
> > > > >
> > > > > struct timens_offset {
> > > > > __aligned_s64 monotonic_offset_ns;
> > > > > __aligned_s64 boottime_offset_ns;
> > > > > };
> > > > >
> > > > > I kind of prefer adding boottime and monotonic directly to struct clone_args
> > > > >
> > > > > __aligned_u64 tls;
> > > > > __aligned_u64 set_tid;
> > > > > __aligned_u64 set_tid_size;
> > > > > + __aligned_s64 monotonic_offset_ns;
> > > > > + __aligned_s64 boottime_offset_ns;
> > > > > };
> > > >
> > > > I would also prefer the second approach using two 64-bit integers
> > > > instead of a pointer, as it keeps the interface simpler to implement
> > > > and simpler to interpret by other tools.
> > >
> > > Why I don't like has two reasons. There's the scenario where we have
> > > added new extensions after the new boottime member and then we introduce
> > > another offset. Then you'd be looking at:
> > >
> > > __aligned_u64 tls;
> > > __aligned_u64 set_tid;
> > > __aligned_u64 set_tid_size;
> > > + __aligned_s64 monotonic_offset_ns;
> > > + __aligned_s64 boottime_offset_ns;
> > > __aligned_s64 something_1
> > > __aligned_s64 anything_2
> > > + __aligned_s64 sometime_offset_ns
> > >
> > > which bothers me just by looking at it. That's in addition to adding two
> > > new members to the struct when most people will never set CLONE_NEWTIME.
> > > We'll also likely have more features in the future that will want to
> > > pass down more info than we want to directly expose in struct
> > > clone_args, e.g. for a long time I have been thinking about adding a
> > > struct for CLONE_NEWUSER that allows you to specify the id mappings you
> > > want the new user namespace to get. We surely don't want to force all
> > > new info into the uppermost struct. So I'm not convinced we should here.
> >
> > I think here we can start thinking about a netlink-like interface.
>
> I think netlink is just not a great model for an API and I would not
> want us to go down that route.
>
> I kept thinking about this for a bit and I think that we will end up
> growing more namespace-related functionality. So one thing that came to
> my mind is the following layout:
>
> struct {
> struct {
> __s64 monotonic;
> __s64 boot;
> } time;
> } namespaces;
>
> struct _clone_args {
> __aligned_u64 flags;
> __aligned_u64 pidfd;
> __aligned_u64 child_tid;
> __aligned_u64 parent_tid;
> __aligned_u64 exit_signal;
> __aligned_u64 stack;
> __aligned_u64 stack_size;
> __aligned_u64 tls;
> __aligned_u64 set_tid;
> __aligned_u64 set_tid_size;
> __aligned_u64 namespaces;
> __aligned_u64 namespaces_size;
> };
>
> Then when we end up adding id mapping support for CLONE_NEWUSER we can
> extend this with:
>
> struct {
> struct {
> __aligned_u64 monotonic;
> __aligned_u64 boot;
> } time;
>
> struct {
> /* id mapping members */
> } user;
> } namespaces;
>
> Thoughts? Other ideas?
Works for me.
If we add the user namespace id mappings and then at some point a third
element for the time namespace appears it would also start to be mixed.
Just as you mentioned that a few mails ago.
> > > __aligned_u64 set_tid_size;
> > > + __aligned_s64 monotonic_offset_ns;
> > > + __aligned_s64 boottime_offset_ns;
> > > __aligned_s64 something_1
> > > __aligned_s64 anything_2
> > > + __aligned_s64 sometime_offset_ns
If we can live with something like this in the namespaces struct you
proposed, it works for me.
Adrian
next prev parent reply other threads:[~2020-03-24 16:26 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-17 8:30 clone3: allow creation of time namespace with offset Adrian Reber
2020-03-17 8:30 ` [PATCH 1/4] ns: prepare time namespace for clone3() Adrian Reber
2020-03-18 10:57 ` Cyrill Gorcunov
2020-03-18 11:17 ` Christian Brauner
2020-03-18 11:28 ` Cyrill Gorcunov
2020-03-18 11:57 ` Christian Brauner
2020-03-18 11:58 ` Christian Brauner
2020-03-18 12:07 ` Cyrill Gorcunov
2020-03-17 8:30 ` [PATCH 2/4] clone3: allow creation of time namespace with offset Adrian Reber
2020-03-18 12:13 ` Christian Brauner
2020-03-17 8:30 ` [PATCH 3/4] clone3: align structs and comments Adrian Reber
2020-03-17 8:30 ` [PATCH 4/4] selftests: add clone3() in time namespace test Adrian Reber
2020-03-17 8:41 ` clone3: allow creation of time namespace with offset Christian Brauner
2020-03-17 8:43 ` Christian Brauner
2020-03-17 9:40 ` Michael Kerrisk (man-pages)
2020-03-17 14:23 ` Aleksa Sarai
2020-03-17 16:09 ` Christian Brauner
2020-03-18 10:18 ` Arnd Bergmann
2020-03-19 8:11 ` Adrian Reber
2020-03-19 8:16 ` Arnd Bergmann
2020-03-19 10:29 ` Christian Brauner
2020-03-20 18:33 ` Andrei Vagin
2020-03-24 16:09 ` Christian Brauner
2020-03-24 16:25 ` Adrian Reber [this message]
2020-03-24 17:56 ` Christian Brauner
2020-03-25 7:58 ` Adrian Reber
2020-03-25 11:26 ` Christian Brauner
2020-04-01 11:40 ` Michael Kerrisk (man-pages)
2020-04-01 11:46 ` Christian Brauner
2020-04-01 12:15 ` Michael Kerrisk (man-pages)
2020-05-29 12:26 ` Michael Kerrisk (man-pages)
2020-05-29 15:10 ` Adrian Reber
2020-05-29 15:13 ` Christian Brauner
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=20200324162546.GG358599@dcbz.redhat.com \
--to=areber@redhat.com \
--cc=0x7f454c46@gmail.com \
--cc=arnd@arndb.de \
--cc=avagin@gmail.com \
--cc=christian.brauner@ubuntu.com \
--cc=cyphar@cyphar.com \
--cc=ebiederm@xmission.com \
--cc=gorcunov@openvz.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=oleg@redhat.com \
--cc=ovzxemul@gmail.com \
--cc=rppt@linux.ibm.com \
--cc=rstoyanov1@gmail.com \
--cc=tglx@linutronix.de \
/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.