statx: add mount_root
authorMiklos Szeredi <mszeredi@redhat.com>
Thu, 14 May 2020 14:44:24 +0000 (16:44 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 14 May 2020 14:44:24 +0000 (16:44 +0200)
Determining whether a path or file descriptor refers to a mountpoint (or
more precisely a mount root) is not trivial using current tools.

Add a flag to statx that indicates whether the path or fd refers to the
root of a mount or not.

Cc: linux-api@vger.kernel.org
Cc: linux-man@vger.kernel.org
Reported-by: Lennart Poettering <mzxreary@0pointer.de>
Reported-by: J. Bruce Fields <bfields@fieldses.org>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/stat.c
include/uapi/linux/stat.h

index 3d88c99..b9faa6c 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -202,6 +202,9 @@ retry:
        error = vfs_getattr(&path, stat, request_mask, flags);
        stat->mnt_id = real_mount(path.mnt)->mnt_id;
        stat->result_mask |= STATX_MNT_ID;
+       if (path.mnt->mnt_root == path.dentry)
+               stat->attributes |= STATX_ATTR_MOUNT_ROOT;
+       stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
        path_put(&path);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
index d814562..6df9348 100644 (file)
@@ -181,6 +181,7 @@ struct statx {
 #define STATX_ATTR_NODUMP              0x00000040 /* [I] File is not to be dumped */
 #define STATX_ATTR_ENCRYPTED           0x00000800 /* [I] File requires key to decrypt in fs */
 #define STATX_ATTR_AUTOMOUNT           0x00001000 /* Dir: Automount trigger */
+#define STATX_ATTR_MOUNT_ROOT          0x00002000 /* Root of a mount */
 #define STATX_ATTR_VERITY              0x00100000 /* [I] Verity protected file */