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: Miklos Szeredi <mszeredi@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
		
							parent
							
								
									761e28fa27
								
							
						
					
					
						commit
						fa2fcf4f1d
					
				| @ -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 @@ retry: | |||||||
| 		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) | |||||||
| 	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 { | |||||||
| 	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 { | |||||||
| 	__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 { | |||||||
| #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 */ | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user