Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp5003463ybb; Tue, 24 Mar 2020 09:10:56 -0700 (PDT) X-Google-Smtp-Source: ADFU+vu3/KkXsHkTV2iAWgJf9MiCYLNJAu97ZhITK30zWh9t6/tBmBsGPJMfJg6PGPByypQbGYfi X-Received: by 2002:aca:8ce:: with SMTP id 197mr3802992oii.35.1585066256382; Tue, 24 Mar 2020 09:10:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585066256; cv=none; d=google.com; s=arc-20160816; b=ReGnZXB9F+koNCiHnrf1Tk9ZDw25lhOj66H78LTpF0ermyoaiaKMyveqkCSnG0HVUC Dov342+gRQVdinpN4GMUZvyCpaVOculE19BPfw4TNvMPM7ZeV8DVlr4GZNLDeYjupzY1 ZFCn4iCinwPacCga7Ltnt6AxeGDNEw1LnM/AageMsA4noH8Kmqr/ZSBzOBeJI6YfOR16 bt0Tbc0+0opOcz6Gn3ZT7oRY/nSt4MJy9iRvH365KYwaESOmwyc00gI5fRh3fcpxi+3C qkyQHtQt6k47tbZOmh5zlkgPhFY4l9bZWdf/enGu7UmZq9lk1Hznk9Ad2EqRRJmzdrHZ BeFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=3i81n7uuyCaHCWE8eeyLMu1mS1oOhzha/80UmYgEg5E=; b=0LQe2OCobRmwmuBE7DxeqGM8moEhPDpDDAwgV4aq+aICD7V7qwJEeVgYSO5/UKN+uD ZpBy0PTunCCill8xZ7qLUGgE/STvpYWTjpn4pWI6c1RtqKhEKHgVo6ERRG+RzTgk0Pwg JaGbcj/DkEbEXVpZHbtGAQ45WmA6Dkntvw1mjnoS9BEkPJvptA/qkTfOmZaZZBeWncc/ KvHhbwv5hL1zLx6P0BcgezRgLyNhffo5XnLH2KC+7efWI4q7h/eYB/9AV0VbLQX2d7RY e9WW86jaVR4a2vCApcODgS+K6nYJZvby3AZZtZ3cdtFCRXkWh2clsJNYKS4n1KrihMe8 YpAA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h10si8762403oih.231.2020.03.24.09.10.36; Tue, 24 Mar 2020 09:10:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727865AbgCXQKD (ORCPT + 99 others); Tue, 24 Mar 2020 12:10:03 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:47999 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727545AbgCXQKD (ORCPT ); Tue, 24 Mar 2020 12:10:03 -0400 Received: from ip5f5bf7ec.dynamic.kabel-deutschland.de ([95.91.247.236] helo=wittgenstein) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jGm7e-0003gz-Ic; Tue, 24 Mar 2020 16:09:46 +0000 Date: Tue, 24 Mar 2020 17:09:45 +0100 From: Christian Brauner To: Andrei Vagin , Arnd Bergmann , Adrian Reber Cc: Eric Biederman , Pavel Emelyanov , Oleg Nesterov , Dmitry Safonov <0x7f454c46@gmail.com>, "linux-kernel@vger.kernel.org" , Mike Rapoport , Radostin Stoyanov , Michael Kerrisk , Cyrill Gorcunov , Thomas Gleixner , Aleksa Sarai , Linux API Subject: Re: clone3: allow creation of time namespace with offset Message-ID: <20200324160945.orcm75avj2ol3eop@wittgenstein> References: <20200317083043.226593-1-areber@redhat.com> <20200319081137.GC223854@dcbz.redhat.com> <20200319102955.i7slokibkkysz6g6@wittgenstein> <20200320183355.GA118769@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20200320183355.GA118769@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 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? Christian