Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp3438267imm; Fri, 25 May 2018 05:50:58 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqLtcG/Q3cshzTIR0Wyo7D7H9mWjgxU823AWOarYH0s5GtLKti8meH/6k4lsta11d7AkCK/ X-Received: by 2002:a62:1656:: with SMTP id 83-v6mr2441787pfw.61.1527252658081; Fri, 25 May 2018 05:50:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527252658; cv=none; d=google.com; s=arc-20160816; b=wZaSTLr/mOsn1AUnqfJF27GxDJ06gQ5kjwn+RVw7RM3j5sL0utu5ESBObihFtaQ1f5 bI8FF+hR+0kX9/N8bBBzORLCEiLoxl4Dpiak7sfAIkLBrsoSdNNT8xSkpuuAcUlmscx5 orz1K7QxtWQLtE2bB6AYRpmpFFVh/rAL7kIT00xUerdwzGSIHFpl3bwYOpiM9r7/2JnT ZLvY0OvvPqpoUs9HbDLuwjeDlMEf9Jc/o0W4qPUW42cGnCoMrEl7FD7qAXc/WRkfwVeU jw4AbHv3f61ljME1LbnWgY1ht62P1ol4C2V+SweLkXzupTOnNwBSGiq8t1qJWalRRCQ+ g26w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=U8n+9ksDkSOn/ocD9wVDEcW10l07HVfv8UIHci5d28c=; b=rwawVwBothNZz6Cnl4eHHCjqx+QgN4qQ4IfG0QBbP2Qc22NDTiv9ZMsOG8zSDUpVtF cwU0DdWKCUjy4lPaBVuxBHdHnUeeTJRrSYISdN6BEYPMzfg4mVuhHUehJR8BvsrA57G3 Lxufrit3vIMaTGCngAwFK7aleelL/FgAWH1vWK71BsZHUvxDJZViQIysM3j2+e9YRqD0 hBbRLMIPbDIaPr0Uvue0mniDFpnp2ZQKxHp6uAeYyC2FCJNsmPmtU/vbkdSBuNAQKTti WbEU9qaEL/mxdWWhmydrYNz0u2BUw+6hNncbFB0t7l/3XbEndphaK7GzGiEhQFqKp0sR 9I+w== 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 b34-v6si23832475pld.272.2018.05.25.05.50.43; Fri, 25 May 2018 05:50:58 -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 S935268AbeEYMuO (ORCPT + 99 others); Fri, 25 May 2018 08:50:14 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:53771 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934059AbeEYMtt (ORCPT ); Fri, 25 May 2018 08:49:49 -0400 Received: by mail-wm0-f68.google.com with SMTP id a67-v6so14036423wmf.3; Fri, 25 May 2018 05:49:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=U8n+9ksDkSOn/ocD9wVDEcW10l07HVfv8UIHci5d28c=; b=blqvFUNuyXSo3OVbo4dZ9O6anam6XtMu3FUR2WCBwaBLyynkJOrDRrH3s8XNsnUpoe hmwjSWQmr+5LBHrkxOKxBMRPrkpXFB/D4EcsFaYwUJl61O6E3s3fAedB8Y0rrlB42MB8 d/OQZfqz+8bi8X0NoeDXi0pYA+XniPAal3zyI0icmeiXCm7GCQFbqkeBXo8atd/Pc2HX nNKSO3dqxEEq4MoJD5taVynK5rzylY3J+zhy9WX8M2G7OTZn7Rqy7Ml/Lc1TQ+OwctTE DyebXoD5K0XkYo9sj8RZcweOV1KZwoiOQV0GaHVbZQ8r7id86AyBZ0Z5agddziJRUYNO 3wDw== X-Gm-Message-State: ALKqPwdd3L0IGoZ95ZCzCuVcVmctRCoBmw2iHHXamc5jIViLPUbbngPK 82enQs7Gp3K4o5XcHt9bzEhEKjAPGbc= X-Received: by 2002:a1c:e696:: with SMTP id e22-v6mr1640949wmi.118.1527252587338; Fri, 25 May 2018 05:49:47 -0700 (PDT) Received: from localhost.localdomain ([2a02:8070:8895:9700:c80a:973d:8254:7f55]) by smtp.gmail.com with ESMTPSA id u8-v6sm6053292wmc.40.2018.05.25.05.49.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 May 2018 05:49:46 -0700 (PDT) From: Christian Brauner To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: torvalds@linux-foundation.org, tglx@linutronix.de, kstewart@linuxfoundation.org, gregkh@linuxfoundation.org, pombredanne@nexb.com, linux-api@vger.kernel.org, ebiederm@xmission.com, seth.forshee@canonical.com, viro@zeniv.linux.org.uk, Christian Brauner Subject: [PATCH 5/6 v1 resend] statfs: add ST_SLAVE Date: Fri, 25 May 2018 14:48:24 +0200 Message-Id: <20180525124825.23875-6-christian@brauner.io> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180525124825.23875-1-christian@brauner.io> References: <20180525124825.23875-1-christian@brauner.io> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently userspace can only determine whether a mountpoint is slave by parsing /proc//mountinfo. It would be convenient to simply retrieve this property with a statvfs() call. This let's userspace avoid costly parsing, supports cases where /proc is not mounted, and supports usecases where file descriptors to mountpoints are passed between processes that are inspected via fstatvfs(). This is especially helpful in all cases where userspace is not interested in specific propagation properties our peer group layouts but rather just wants to either turn on or turn off propagation for specific mountpoints. Signed-off-by: Christian Brauner --- v0->v1: * non-functional changes: extend commit message --- fs/statfs.c | 10 +++++++++- include/linux/statfs.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/statfs.c b/fs/statfs.c index 2fc6f9c3793c..35ad0402c9a3 100644 --- a/fs/statfs.c +++ b/fs/statfs.c @@ -10,6 +10,7 @@ #include #include #include "internal.h" +#include "pnode.h" static int flags_by_mnt(int mnt_flags) { @@ -50,8 +51,15 @@ static int flags_by_sb(int s_flags) static int calculate_f_flags(struct vfsmount *mnt) { - return ST_VALID | flags_by_mnt(mnt->mnt_flags) | + int flags = 0; + + flags = ST_VALID | flags_by_mnt(mnt->mnt_flags) | flags_by_sb(mnt->mnt_sb->s_flags); + + if (IS_MNT_SLAVE(real_mount(mnt))) + flags |= ST_SLAVE; + + return flags; } static int statfs_by_dentry(struct dentry *dentry, struct kstatfs *buf) diff --git a/include/linux/statfs.h b/include/linux/statfs.h index 5416b2936dd9..048127effaad 100644 --- a/include/linux/statfs.h +++ b/include/linux/statfs.h @@ -41,6 +41,7 @@ struct kstatfs { #define ST_NODIRATIME (1<<11) /* do not update directory access times */ #define ST_RELATIME (1<<12) /* update atime relative to mtime/ctime */ #define ST_UNBINDABLE (1<<17) /* change to unbindable */ +#define ST_SLAVE (1<<19) /* change to slave */ #define ST_SHARED (1<<20) /* change to shared */ #endif -- 2.17.0