Commit fa2fcf4f authored by Miklos Szeredi's avatar Miklos Szeredi

statx: add mount ID

Systemd is hacking around to get it and it's trivial to add to statx, so...

Cc: linux-api@vger.kernel.org
Cc: linux-man@vger.kernel.org
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 761e28fa
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <asm/unistd.h> #include <asm/unistd.h>
#include "internal.h" #include "internal.h"
#include "mount.h"
/** /**
* generic_fillattr - Fill in the basic attributes from the inode struct * generic_fillattr - Fill in the basic attributes from the inode struct
...@@ -199,6 +200,8 @@ int vfs_statx(int dfd, const char __user *filename, int flags, ...@@ -199,6 +200,8 @@ int vfs_statx(int dfd, const char __user *filename, int flags,
goto out; goto out;
error = vfs_getattr(&path, stat, request_mask, flags); error = vfs_getattr(&path, stat, request_mask, flags);
stat->mnt_id = real_mount(path.mnt)->mnt_id;
stat->result_mask |= STATX_MNT_ID;
path_put(&path); path_put(&path);
if (retry_estale(error, lookup_flags)) { if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL; lookup_flags |= LOOKUP_REVAL;
...@@ -563,6 +566,7 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer) ...@@ -563,6 +566,7 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer)
tmp.stx_rdev_minor = MINOR(stat->rdev); tmp.stx_rdev_minor = MINOR(stat->rdev);
tmp.stx_dev_major = MAJOR(stat->dev); tmp.stx_dev_major = MAJOR(stat->dev);
tmp.stx_dev_minor = MINOR(stat->dev); tmp.stx_dev_minor = MINOR(stat->dev);
tmp.stx_mnt_id = stat->mnt_id;
return copy_to_user(buffer, &tmp, sizeof(tmp)) ? -EFAULT : 0; return copy_to_user(buffer, &tmp, sizeof(tmp)) ? -EFAULT : 0;
} }
......
...@@ -47,6 +47,7 @@ struct kstat { ...@@ -47,6 +47,7 @@ struct kstat {
struct timespec64 ctime; struct timespec64 ctime;
struct timespec64 btime; /* File creation time */ struct timespec64 btime; /* File creation time */
u64 blocks; u64 blocks;
u64 mnt_id;
}; };
#endif #endif
...@@ -123,7 +123,10 @@ struct statx { ...@@ -123,7 +123,10 @@ struct statx {
__u32 stx_dev_major; /* ID of device containing file [uncond] */ __u32 stx_dev_major; /* ID of device containing file [uncond] */
__u32 stx_dev_minor; __u32 stx_dev_minor;
/* 0x90 */ /* 0x90 */
__u64 __spare2[14]; /* Spare space for future expansion */ __u64 stx_mnt_id;
__u64 __spare2;
/* 0xa0 */
__u64 __spare3[12]; /* Spare space for future expansion */
/* 0x100 */ /* 0x100 */
}; };
...@@ -148,6 +151,7 @@ struct statx { ...@@ -148,6 +151,7 @@ struct statx {
#define STATX_BLOCKS 0x00000400U /* Want/got stx_blocks */ #define STATX_BLOCKS 0x00000400U /* Want/got stx_blocks */
#define STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */ #define STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */
#define STATX_BTIME 0x00000800U /* Want/got stx_btime */ #define STATX_BTIME 0x00000800U /* Want/got stx_btime */
#define STATX_MNT_ID 0x00001000U /* Got stx_mnt_id */
#define STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */ #define STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment