diff --git a/third_party/linux/external/0001-block-partition-expose-PARTUUID-through-uevent.patch b/third_party/linux/external/0001-block-partition-expose-PARTUUID-through-uevent.patch
index f9e14dd..ad25836 100644
--- a/third_party/linux/external/0001-block-partition-expose-PARTUUID-through-uevent.patch
+++ b/third_party/linux/external/0001-block-partition-expose-PARTUUID-through-uevent.patch
@@ -1,4 +1,4 @@
-From 360fb82dc695dbddc31be40ed86c1d3105ca8edf Mon Sep 17 00:00:00 2001
+From 114d7d050fee217ec68bf7caee9e0ae465fec732 Mon Sep 17 00:00:00 2001
 From: Mateusz Zalega <mateusz@monogon.tech>
 Date: Tue, 19 Oct 2021 18:18:14 +0200
 Subject: [PATCH] block: partition: expose PARTUUID through uevent
@@ -9,18 +9,18 @@
  1 file changed, 2 insertions(+)
 
 diff --git a/block/partitions/core.c b/block/partitions/core.c
-index a02e22411594..5c66aae379e7 100644
+index 7bea19dd9458..5a42f0b0eb8f 100644
 --- a/block/partitions/core.c
 +++ b/block/partitions/core.c
 @@ -270,6 +270,8 @@ static int part_uevent(struct device *dev, struct kobj_uevent_env *env)
- 	add_uevent_var(env, "PARTN=%u", part->partno);
- 	if (part->info && part->info->volname[0])
- 		add_uevent_var(env, "PARTNAME=%s", part->info->volname);
-+	if (part->info && part->info->uuid[0])
-+		add_uevent_var(env, "PARTUUID=%s", part->info->uuid);
+ 	add_uevent_var(env, "PARTN=%u", part->bd_partno);
+ 	if (part->bd_meta_info && part->bd_meta_info->volname[0])
+ 		add_uevent_var(env, "PARTNAME=%s", part->bd_meta_info->volname);
++	if (part->bd_meta_info && part->bd_meta_info->uuid[0])
++		add_uevent_var(env, "PARTUUID=%s", part->bd_meta_info->uuid);
  	return 0;
  }
  
 -- 
-2.31.1
+2.25.1
 
diff --git a/third_party/linux/external/0001-fsinfo-Introduce-a-non-repeating-system-unique-super.patch b/third_party/linux/external/0001-fsinfo-Introduce-a-non-repeating-system-unique-super.patch
deleted file mode 100644
index 831114e..0000000
--- a/third_party/linux/external/0001-fsinfo-Introduce-a-non-repeating-system-unique-super.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 2ed1d2a0a5bf09ab741f5c3d6d10021c0702be08 Mon Sep 17 00:00:00 2001
-From: David Howells <dhowells@redhat.com>
-Date: Fri, 5 Jul 2019 11:10:10 +0100
-Subject: [PATCH 1/3] fsinfo: Introduce a non-repeating system-unique
- superblock ID
-
-Introduce an (effectively) non-repeating system-unique superblock ID that
-can be used to determine that two objects are in the same superblock
-without needing to worry about the ID changing in the meantime (as is
-possible with device IDs).
-
-The counter could also be used to tag other features, such as mount
-objects.
-
-Signed-off-by: David Howells <dhowells@redhat.com>
----
- fs/internal.h      | 1 +
- fs/super.c         | 2 ++
- include/linux/fs.h | 3 +++
- 3 files changed, 6 insertions(+)
-
-diff --git a/fs/internal.h b/fs/internal.h
-index a7cd0f64faa4a..1b7460f055a3b 100644
---- a/fs/internal.h
-+++ b/fs/internal.h
-@@ -112,6 +112,7 @@ extern struct file *alloc_empty_file_noaccount(int, const struct cred *);
- /*
-  * super.c
-  */
-+extern atomic64_t vfs_unique_counter;
- extern int reconfigure_super(struct fs_context *);
- extern bool trylock_super(struct super_block *sb);
- extern struct super_block *user_get_super(dev_t);
-diff --git a/fs/super.c b/fs/super.c
-index 98bb0629ee108..31fadb7189d27 100644
---- a/fs/super.c
-+++ b/fs/super.c
-@@ -44,6 +44,7 @@ static int thaw_super_locked(struct super_block *sb);
- 
- static LIST_HEAD(super_blocks);
- static DEFINE_SPINLOCK(sb_lock);
-+atomic64_t vfs_unique_counter; /* Unique identifier counter */
- 
- static char *sb_writers_name[SB_FREEZE_LEVELS] = {
- 	"sb_writers",
-@@ -273,6 +274,7 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
- 		goto fail;
- 	if (list_lru_init_memcg(&s->s_inode_lru, &s->s_shrink))
- 		goto fail;
-+	s->s_unique_id = atomic64_inc_return(&vfs_unique_counter);
- 	return s;
- 
- fail:
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 8bde32cf97115..e1325dec4fa86 100644
---- a/include/linux/fs.h
-+++ b/include/linux/fs.h
-@@ -1547,6 +1547,9 @@ struct super_block {
- 
- 	spinlock_t		s_inode_wblist_lock;
- 	struct list_head	s_inodes_wb;	/* writeback inodes */
-+
-+	/* Superblock information */
-+	u64			s_unique_id;
- } __randomize_layout;
- 
- /* Helper functions so that in most cases filesystems will
--- 
-2.25.1
-
diff --git a/third_party/linux/external/0002-fsinfo-Add-fsinfo-syscall-to-query-filesystem-inform.patch b/third_party/linux/external/0002-fsinfo-Add-fsinfo-syscall-to-query-filesystem-inform.patch
deleted file mode 100644
index 7b5147f..0000000
--- a/third_party/linux/external/0002-fsinfo-Add-fsinfo-syscall-to-query-filesystem-inform.patch
+++ /dev/null
@@ -1,1953 +0,0 @@
-From 5837a1c690d51c270c8f04029530f2ce6856739a Mon Sep 17 00:00:00 2001
-From: David Howells <dhowells@redhat.com>
-Date: Fri, 6 Mar 2020 14:59:51 +0000
-Subject: [PATCH 2/3] fsinfo: Add fsinfo() syscall to query filesystem
- information
-
-Add a system call to allow filesystem information to be queried.  A request
-value can be given to indicate the desired attribute.  Support is provided
-for enumerating multi-value attributes.
-
-===============
-NEW SYSTEM CALL
-===============
-
-The new system call looks like:
-
-	int ret = fsinfo(int dfd,
-			 const char *pathname,
-			 const struct fsinfo_params *params,
-			 size_t params_size,
-			 void *result_buffer,
-			 size_t result_buf_size);
-
-The params parameter optionally points to a block of parameters:
-
-	struct fsinfo_params {
-		__u64	resolve_flags;
-		__u32	at_flags;
-		__u32	flags;
-		__u32	request;
-		__u32	Nth;
-		__u32	Mth;
-	};
-
-If params is NULL, the default is that params->request is
-FSINFO_ATTR_STATFS and all the other fields are 0.  params_size indicates
-the size of the parameter struct.  If the parameter block is short compared
-to what the kernel expects, the missing length will be set to 0; if the
-parameter block is longer, an error will be given if the excess is not all
-zeros.
-
-The object to be queried is specified as follows - part param->flags
-indicates the type of reference:
-
- (1) FSINFO_FLAGS_QUERY_PATH - dfd, pathname and at_flags indicate a
-     filesystem object to query.
-
-     There is no separate system call providing an analogue of lstat() -
-     AT_SYMLINK_NOFOLLOW should be set in at_flags instead.
-     AT_NO_AUTOMOUNT can also be used to an allow automount point to be
-     queried without triggering it.
-
-     RESOLVE_* flags can also be set in resolve_flags to further restrict
-     the patchwalk.
-
- (2) FSINFO_FLAGS_QUERY_FD - dfd indicates a file descriptor pointing to
-     the filesystem object to query.  pathname should be NULL.
-
- (3) FSINFO_FLAGS_QUERY_MOUNT - pathname indicates the numeric ID of the
-     mountpoint to query as a string.  dfd is used to constrain which
-     mounts can be accessed.  If dfd is AT_FDCWD, the mount must be within
-     the subtree rooted at chroot, otherwise the mount must be within the
-     subtree rooted at the directory specified by dfd.
-
- (4) In the future FSINFO_FLAGS_QUERY_FSCONTEXT will be added - dfd will
-     indicate a context handle fd obtained from fsopen() or fspick(),
-     allowing that to be queried before the target superblock is attached
-     to the filesystem or even created.
-
-params->request indicates the attribute/attributes to be queried.  This can
-be one of:
-
-	FSINFO_ATTR_STATFS		- statfs-style info
-	FSINFO_ATTR_IDS			- Filesystem IDs
-	FSINFO_ATTR_LIMITS		- Filesystem limits
-	FSINFO_ATTR_SUPPORTS		- Support for statx, ioctl, etc.
-	FSINFO_ATTR_TIMESTAMP_INFO	- Inode timestamp info
-	FSINFO_ATTR_VOLUME_ID		- Volume ID (string)
-	FSINFO_ATTR_VOLUME_UUID		- Volume UUID
-	FSINFO_ATTR_VOLUME_NAME		- Volume name (string)
-	FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO - Information about attr Nth
-	FSINFO_ATTR_FSINFO_ATTRIBUTES	- List of supported attrs
-
-Some attributes (such as the servers backing a network filesystem) can have
-multiple values.  These can be enumerated by setting params->Nth and
-params->Mth to 0, 1, ... until ENODATA is returned.
-
-result_buffer and result_buf_size point to the reply buffer.  The buffer is
-filled up to the specified size, even if this means truncating the reply.
-The size of the full reply is returned, irrespective of the amount data
-that was copied.  In future versions, this will allow extra fields to be
-tacked on to the end of the reply, but anyone not expecting them will only
-get the subset they're expecting.  If either buffer of result_buf_size are
-0, no copy will take place and the data size will be returned.
-
-Ported to 5.10 by Lorenz Brun <lorenz@nexantic.com>
-
-Signed-off-by: David Howells <dhowells@redhat.com>
-cc: linux-api@vger.kernel.org
----
- arch/alpha/kernel/syscalls/syscall.tbl      |   1 +
- arch/arm/tools/syscall.tbl                  |   1 +
- arch/arm64/include/asm/unistd.h             |   2 +-
- arch/arm64/include/asm/unistd32.h           |   2 +
- arch/ia64/kernel/syscalls/syscall.tbl       |   1 +
- arch/m68k/kernel/syscalls/syscall.tbl       |   1 +
- arch/microblaze/kernel/syscalls/syscall.tbl |   1 +
- arch/mips/kernel/syscalls/syscall_n32.tbl   |   1 +
- arch/mips/kernel/syscalls/syscall_n64.tbl   |   1 +
- arch/mips/kernel/syscalls/syscall_o32.tbl   |   1 +
- arch/parisc/kernel/syscalls/syscall.tbl     |   1 +
- arch/powerpc/kernel/syscalls/syscall.tbl    |   1 +
- arch/s390/kernel/syscalls/syscall.tbl       |   1 +
- arch/sh/kernel/syscalls/syscall.tbl         |   1 +
- arch/sparc/kernel/syscalls/syscall.tbl      |   1 +
- arch/x86/entry/syscalls/syscall_32.tbl      |   1 +
- arch/x86/entry/syscalls/syscall_64.tbl      |   1 +
- arch/xtensa/kernel/syscalls/syscall.tbl     |   1 +
- fs/Kconfig                                  |   7 +
- fs/Makefile                                 |   1 +
- fs/fsinfo.c                                 | 596 ++++++++++++++++++
- include/linux/fs.h                          |   4 +
- include/linux/fsinfo.h                      |  74 +++
- include/linux/syscalls.h                    |   4 +
- include/uapi/asm-generic/unistd.h           |   4 +-
- include/uapi/linux/fsinfo.h                 | 189 ++++++
- kernel/sys_ni.c                             |   1 +
- samples/vfs/Makefile                        |   2 +-
- samples/vfs/test-fsinfo.c                   | 646 ++++++++++++++++++++
- 29 files changed, 1545 insertions(+), 3 deletions(-)
- create mode 100644 fs/fsinfo.c
- create mode 100644 include/linux/fsinfo.h
- create mode 100644 include/uapi/linux/fsinfo.h
- create mode 100644 samples/vfs/test-fsinfo.c
-
-diff --git a/arch/alpha/kernel/syscalls/syscall.tbl b/arch/alpha/kernel/syscalls/syscall.tbl
-index ee7b01bb7346c..c955e31d57289 100644
---- a/arch/alpha/kernel/syscalls/syscall.tbl
-+++ b/arch/alpha/kernel/syscalls/syscall.tbl
-@@ -480,3 +480,4 @@
- 548	common	pidfd_getfd			sys_pidfd_getfd
- 549	common	faccessat2			sys_faccessat2
- 550	common	process_madvise			sys_process_madvise
-+551	common	fsinfo				sys_fsinfo
-diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl
-index d056a548358ea..308dfe68d892c 100644
---- a/arch/arm/tools/syscall.tbl
-+++ b/arch/arm/tools/syscall.tbl
-@@ -454,3 +454,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h
-index b3b2019f8d16b..86a9d7b3eabe9 100644
---- a/arch/arm64/include/asm/unistd.h
-+++ b/arch/arm64/include/asm/unistd.h
-@@ -38,7 +38,7 @@
- #define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE + 5)
- #define __ARM_NR_COMPAT_END		(__ARM_NR_COMPAT_BASE + 0x800)
- 
--#define __NR_compat_syscalls		441
-+#define __NR_compat_syscalls		442
- #endif
- 
- #define __ARCH_WANT_SYS_CLONE
-diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
-index 107f08e03b9fd..20650e0edacb2 100644
---- a/arch/arm64/include/asm/unistd32.h
-+++ b/arch/arm64/include/asm/unistd32.h
-@@ -889,6 +889,8 @@ __SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd)
- __SYSCALL(__NR_faccessat2, sys_faccessat2)
- #define __NR_process_madvise 440
- __SYSCALL(__NR_process_madvise, sys_process_madvise)
-+#define __NR_fsinfo 441
-+__SYSCALL(__NR_fsinfo, sys_fsinfo)
- 
- /*
-  * Please add new compat syscalls above this comment and update
-diff --git a/arch/ia64/kernel/syscalls/syscall.tbl b/arch/ia64/kernel/syscalls/syscall.tbl
-index b96ed8b8a5089..548428f7b76c7 100644
---- a/arch/ia64/kernel/syscalls/syscall.tbl
-+++ b/arch/ia64/kernel/syscalls/syscall.tbl
-@@ -361,3 +361,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/m68k/kernel/syscalls/syscall.tbl b/arch/m68k/kernel/syscalls/syscall.tbl
-index 625fb6d328424..3dd9c1f0815ce 100644
---- a/arch/m68k/kernel/syscalls/syscall.tbl
-+++ b/arch/m68k/kernel/syscalls/syscall.tbl
-@@ -440,3 +440,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/microblaze/kernel/syscalls/syscall.tbl b/arch/microblaze/kernel/syscalls/syscall.tbl
-index aae729c95cf99..420a6d0b01004 100644
---- a/arch/microblaze/kernel/syscalls/syscall.tbl
-+++ b/arch/microblaze/kernel/syscalls/syscall.tbl
-@@ -446,3 +446,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/mips/kernel/syscalls/syscall_n32.tbl b/arch/mips/kernel/syscalls/syscall_n32.tbl
-index 32817c954435d..01420fe120bab 100644
---- a/arch/mips/kernel/syscalls/syscall_n32.tbl
-+++ b/arch/mips/kernel/syscalls/syscall_n32.tbl
-@@ -379,3 +379,4 @@
- 438	n32	pidfd_getfd			sys_pidfd_getfd
- 439	n32	faccessat2			sys_faccessat2
- 440	n32	process_madvise			sys_process_madvise
-+441	n32	fsinfo				sys_fsinfo
-diff --git a/arch/mips/kernel/syscalls/syscall_n64.tbl b/arch/mips/kernel/syscalls/syscall_n64.tbl
-index 9e4ea3c31b1ce..6c319c38779e9 100644
---- a/arch/mips/kernel/syscalls/syscall_n64.tbl
-+++ b/arch/mips/kernel/syscalls/syscall_n64.tbl
-@@ -355,3 +355,4 @@
- 438	n64	pidfd_getfd			sys_pidfd_getfd
- 439	n64	faccessat2			sys_faccessat2
- 440	n64	process_madvise			sys_process_madvise
-+441	n64	fsinfo				sys_fsinfo
-diff --git a/arch/mips/kernel/syscalls/syscall_o32.tbl b/arch/mips/kernel/syscalls/syscall_o32.tbl
-index 29f5f28cf5cea..46d4aa7ecb306 100644
---- a/arch/mips/kernel/syscalls/syscall_o32.tbl
-+++ b/arch/mips/kernel/syscalls/syscall_o32.tbl
-@@ -428,3 +428,4 @@
- 438	o32	pidfd_getfd			sys_pidfd_getfd
- 439	o32	faccessat2			sys_faccessat2
- 440	o32	process_madvise			sys_process_madvise
-+441	o32	fsinfo				sys_fsinfo
-diff --git a/arch/parisc/kernel/syscalls/syscall.tbl b/arch/parisc/kernel/syscalls/syscall.tbl
-index f375ea528e59c..008282637f6af 100644
---- a/arch/parisc/kernel/syscalls/syscall.tbl
-+++ b/arch/parisc/kernel/syscalls/syscall.tbl
-@@ -438,3 +438,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl
-index 1275daec7fec3..85da23afb3535 100644
---- a/arch/powerpc/kernel/syscalls/syscall.tbl
-+++ b/arch/powerpc/kernel/syscalls/syscall.tbl
-@@ -530,3 +530,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/s390/kernel/syscalls/syscall.tbl b/arch/s390/kernel/syscalls/syscall.tbl
-index 28c1680004834..83fdaebbf0b08 100644
---- a/arch/s390/kernel/syscalls/syscall.tbl
-+++ b/arch/s390/kernel/syscalls/syscall.tbl
-@@ -443,3 +443,4 @@
- 438  common	pidfd_getfd		sys_pidfd_getfd			sys_pidfd_getfd
- 439  common	faccessat2		sys_faccessat2			sys_faccessat2
- 440  common	process_madvise		sys_process_madvise		sys_process_madvise
-+441	common	fsinfo			sys_fsinfo			sys_fsinfo
-diff --git a/arch/sh/kernel/syscalls/syscall.tbl b/arch/sh/kernel/syscalls/syscall.tbl
-index 783738448ff55..e1f52ffa86bb8 100644
---- a/arch/sh/kernel/syscalls/syscall.tbl
-+++ b/arch/sh/kernel/syscalls/syscall.tbl
-@@ -443,3 +443,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/sparc/kernel/syscalls/syscall.tbl b/arch/sparc/kernel/syscalls/syscall.tbl
-index 78160260991be..1f42dc9965c23 100644
---- a/arch/sparc/kernel/syscalls/syscall.tbl
-+++ b/arch/sparc/kernel/syscalls/syscall.tbl
-@@ -486,3 +486,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
-index 0d0667a9fbd70..70da9bad3f79d 100644
---- a/arch/x86/entry/syscalls/syscall_32.tbl
-+++ b/arch/x86/entry/syscalls/syscall_32.tbl
-@@ -445,3 +445,4 @@
- 438	i386	pidfd_getfd		sys_pidfd_getfd
- 439	i386	faccessat2		sys_faccessat2
- 440	i386	process_madvise		sys_process_madvise
-+441	i386	fsinfo			sys_fsinfo
-diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
-index 379819244b91d..94a51b78e85ed 100644
---- a/arch/x86/entry/syscalls/syscall_64.tbl
-+++ b/arch/x86/entry/syscalls/syscall_64.tbl
-@@ -362,6 +362,7 @@
- 438	common	pidfd_getfd		sys_pidfd_getfd
- 439	common	faccessat2		sys_faccessat2
- 440	common	process_madvise		sys_process_madvise
-+441	common	fsinfo			sys_fsinfo
- 
- #
- # Due to a historical design error, certain syscalls are numbered differently
-diff --git a/arch/xtensa/kernel/syscalls/syscall.tbl b/arch/xtensa/kernel/syscalls/syscall.tbl
-index b070f272995d6..2723c2f43c59a 100644
---- a/arch/xtensa/kernel/syscalls/syscall.tbl
-+++ b/arch/xtensa/kernel/syscalls/syscall.tbl
-@@ -411,3 +411,4 @@
- 438	common	pidfd_getfd			sys_pidfd_getfd
- 439	common	faccessat2			sys_faccessat2
- 440	common	process_madvise			sys_process_madvise
-+441	common	fsinfo				sys_fsinfo
-diff --git a/fs/Kconfig b/fs/Kconfig
-index aa4c122823018..b84156272983b 100644
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -15,6 +15,13 @@ config VALIDATE_FS_PARSER
- 	  Enable this to perform validation of the parameter description for a
- 	  filesystem when it is registered.
- 
-+config FSINFO
-+	bool "Enable the fsinfo() system call"
-+	help
-+	  Enable the file system information querying system call to allow
-+	  comprehensive information to be retrieved about a filesystem,
-+	  superblock or mount object.
-+
- if BLOCK
- 
- config FS_IOMAP
-diff --git a/fs/Makefile b/fs/Makefile
-index 999d1a23f036c..02da949de3b42 100644
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -54,6 +54,7 @@ obj-$(CONFIG_COREDUMP)		+= coredump.o
- obj-$(CONFIG_SYSCTL)		+= drop_caches.o
- 
- obj-$(CONFIG_FHANDLE)		+= fhandle.o
-+obj-$(CONFIG_FSINFO)		+= fsinfo.o
- obj-y				+= iomap/
- 
- obj-y				+= quota/
-diff --git a/fs/fsinfo.c b/fs/fsinfo.c
-new file mode 100644
-index 0000000000000..7d9c73e9cbdef
---- /dev/null
-+++ b/fs/fsinfo.c
-@@ -0,0 +1,596 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/* Filesystem information query.
-+ *
-+ * Copyright (C) 2020 Red Hat, Inc. All Rights Reserved.
-+ * Written by David Howells (dhowells@redhat.com)
-+ */
-+#include <linux/syscalls.h>
-+#include <linux/fs.h>
-+#include <linux/file.h>
-+#include <linux/mount.h>
-+#include <linux/namei.h>
-+#include <linux/statfs.h>
-+#include <linux/security.h>
-+#include <linux/uaccess.h>
-+#include <linux/fsinfo.h>
-+#include <uapi/linux/mount.h>
-+#include "internal.h"
-+
-+/**
-+ * fsinfo_opaque - Store opaque blob as an fsinfo attribute value.
-+ * @s: The blob to store (may be NULL)
-+ * @ctx: The parameter context
-+ * @len: The length of the blob
-+ */
-+int fsinfo_opaque(const void *s, struct fsinfo_context *ctx, unsigned int len)
-+{
-+	void *p = ctx->buffer;
-+	int ret = 0;
-+
-+	if (s) {
-+		if (!ctx->want_size_only)
-+			memcpy(p, s, len);
-+		ret = len;
-+	}
-+
-+	return ret;
-+}
-+EXPORT_SYMBOL(fsinfo_opaque);
-+
-+/**
-+ * fsinfo_string - Store a NUL-terminated string as an fsinfo attribute value.
-+ * @s: The string to store (may be NULL)
-+ * @ctx: The parameter context
-+ */
-+int fsinfo_string(const char *s, struct fsinfo_context *ctx)
-+{
-+	if (!s)
-+		return 1;
-+	return fsinfo_opaque(s, ctx, min_t(size_t, strlen(s) + 1, ctx->buf_size));
-+}
-+EXPORT_SYMBOL(fsinfo_string);
-+
-+/*
-+ * Get basic filesystem stats from statfs.
-+ */
-+static int fsinfo_generic_statfs(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct fsinfo_statfs *p = ctx->buffer;
-+	struct kstatfs buf;
-+	int ret;
-+
-+	ret = vfs_statfs(path, &buf);
-+	if (ret < 0)
-+		return ret;
-+
-+	p->f_blocks.lo	= buf.f_blocks;
-+	p->f_bfree.lo	= buf.f_bfree;
-+	p->f_bavail.lo	= buf.f_bavail;
-+	p->f_files.lo	= buf.f_files;
-+	p->f_ffree.lo	= buf.f_ffree;
-+	p->f_favail.lo	= buf.f_ffree;
-+	p->f_bsize	= buf.f_bsize;
-+	p->f_frsize	= buf.f_frsize;
-+	return sizeof(*p);
-+}
-+
-+static int fsinfo_generic_ids(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct fsinfo_ids *p = ctx->buffer;
-+	struct super_block *sb;
-+	struct kstatfs buf;
-+	int ret;
-+
-+	ret = vfs_statfs(path, &buf);
-+	if (ret < 0 && ret != -ENOSYS)
-+		return ret;
-+	if (ret == 0)
-+		memcpy(&p->f_fsid, &buf.f_fsid, sizeof(p->f_fsid));
-+
-+	sb = path->dentry->d_sb;
-+	p->f_fstype	= sb->s_magic;
-+	p->f_dev_major	= MAJOR(sb->s_dev);
-+	p->f_dev_minor	= MINOR(sb->s_dev);
-+	p->f_sb_id	= sb->s_unique_id;
-+	strlcpy(p->f_fs_name, sb->s_type->name, sizeof(p->f_fs_name));
-+	return sizeof(*p);
-+}
-+
-+int fsinfo_generic_limits(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct fsinfo_limits *p = ctx->buffer;
-+	struct super_block *sb = path->dentry->d_sb;
-+
-+	p->max_file_size.hi	= 0;
-+	p->max_file_size.lo	= sb->s_maxbytes;
-+	p->max_ino.hi		= 0;
-+	p->max_ino.lo		= UINT_MAX;
-+	p->max_hard_links	= sb->s_max_links;
-+	p->max_uid		= UINT_MAX;
-+	p->max_gid		= UINT_MAX;
-+	p->max_projid		= UINT_MAX;
-+	p->max_filename_len	= NAME_MAX;
-+	p->max_symlink_len	= PATH_MAX;
-+	p->max_xattr_name_len	= XATTR_NAME_MAX;
-+	p->max_xattr_body_len	= XATTR_SIZE_MAX;
-+	p->max_dev_major	= 0xffffff;
-+	p->max_dev_minor	= 0xff;
-+	return sizeof(*p);
-+}
-+EXPORT_SYMBOL(fsinfo_generic_limits);
-+
-+int fsinfo_generic_supports(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct fsinfo_supports *p = ctx->buffer;
-+	struct super_block *sb = path->dentry->d_sb;
-+
-+	p->stx_mask = STATX_BASIC_STATS;
-+	if (sb->s_d_op && sb->s_d_op->d_automount)
-+		p->stx_attributes |= STATX_ATTR_AUTOMOUNT;
-+	return sizeof(*p);
-+}
-+EXPORT_SYMBOL(fsinfo_generic_supports);
-+
-+static const struct fsinfo_timestamp_info fsinfo_default_timestamp_info = {
-+	.atime = {
-+		.minimum	= S64_MIN,
-+		.maximum	= S64_MAX,
-+		.gran_mantissa	= 1,
-+		.gran_exponent	= 0,
-+	},
-+	.mtime = {
-+		.minimum	= S64_MIN,
-+		.maximum	= S64_MAX,
-+		.gran_mantissa	= 1,
-+		.gran_exponent	= 0,
-+	},
-+	.ctime = {
-+		.minimum	= S64_MIN,
-+		.maximum	= S64_MAX,
-+		.gran_mantissa	= 1,
-+		.gran_exponent	= 0,
-+	},
-+	.btime = {
-+		.minimum	= S64_MIN,
-+		.maximum	= S64_MAX,
-+		.gran_mantissa	= 1,
-+		.gran_exponent	= 0,
-+	},
-+};
-+
-+int fsinfo_generic_timestamp_info(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct fsinfo_timestamp_info *p = ctx->buffer;
-+	struct super_block *sb = path->dentry->d_sb;
-+	s8 exponent;
-+
-+	*p = fsinfo_default_timestamp_info;
-+
-+	if (sb->s_time_gran < 1000000000) {
-+		if (sb->s_time_gran < 1000)
-+			exponent = -9;
-+		else if (sb->s_time_gran < 1000000)
-+			exponent = -6;
-+		else
-+			exponent = -3;
-+
-+		p->atime.gran_exponent = exponent;
-+		p->mtime.gran_exponent = exponent;
-+		p->ctime.gran_exponent = exponent;
-+		p->btime.gran_exponent = exponent;
-+	}
-+
-+	return sizeof(*p);
-+}
-+EXPORT_SYMBOL(fsinfo_generic_timestamp_info);
-+
-+static int fsinfo_generic_volume_uuid(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct fsinfo_volume_uuid *p = ctx->buffer;
-+	struct super_block *sb = path->dentry->d_sb;
-+
-+	memcpy(p, &sb->s_uuid, sizeof(*p));
-+	return sizeof(*p);
-+}
-+
-+static int fsinfo_generic_volume_id(struct path *path, struct fsinfo_context *ctx)
-+{
-+	return fsinfo_string(path->dentry->d_sb->s_id, ctx);
-+}
-+
-+static const struct fsinfo_attribute fsinfo_common_attributes[] = {
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_STATFS,		fsinfo_generic_statfs),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_IDS,		fsinfo_generic_ids),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_LIMITS,		fsinfo_generic_limits),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_SUPPORTS,		fsinfo_generic_supports),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_TIMESTAMP_INFO,	fsinfo_generic_timestamp_info),
-+	FSINFO_STRING	(FSINFO_ATTR_VOLUME_ID,		fsinfo_generic_volume_id),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_VOLUME_UUID,	fsinfo_generic_volume_uuid),
-+
-+	FSINFO_LIST	(FSINFO_ATTR_FSINFO_ATTRIBUTES,	(void *)123UL),
-+	FSINFO_VSTRUCT_N(FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO, (void *)123UL),
-+	{}
-+};
-+
-+/*
-+ * Determine an attribute's minimum buffer size and, if the buffer is large
-+ * enough, get the attribute value.
-+ */
-+static int fsinfo_get_this_attribute(struct path *path,
-+				     struct fsinfo_context *ctx,
-+				     const struct fsinfo_attribute *attr)
-+{
-+	int buf_size;
-+
-+	if (ctx->Nth != 0 && !(attr->flags & (FSINFO_FLAGS_N | FSINFO_FLAGS_NM)))
-+		return -ENODATA;
-+	if (ctx->Mth != 0 && !(attr->flags & FSINFO_FLAGS_NM))
-+		return -ENODATA;
-+
-+	switch (attr->type) {
-+	case FSINFO_TYPE_VSTRUCT:
-+		ctx->clear_tail = true;
-+		buf_size = attr->size;
-+		break;
-+	case FSINFO_TYPE_STRING:
-+	case FSINFO_TYPE_OPAQUE:
-+	case FSINFO_TYPE_LIST:
-+		buf_size = 4096;
-+		break;
-+	default:
-+		return -ENOPKG;
-+	}
-+
-+	if (ctx->buf_size < buf_size)
-+		return buf_size;
-+
-+	return attr->get(path, ctx);
-+}
-+
-+static void fsinfo_attributes_insert(struct fsinfo_context *ctx,
-+				     const struct fsinfo_attribute *attr)
-+{
-+	__u32 *p = ctx->buffer;
-+	unsigned int i;
-+
-+	if (ctx->usage >= ctx->buf_size ||
-+	    ctx->buf_size - ctx->usage < sizeof(__u32)) {
-+		ctx->usage += sizeof(__u32);
-+		return;
-+	}
-+
-+	for (i = 0; i < ctx->usage / sizeof(__u32); i++)
-+		if (p[i] == attr->attr_id)
-+			return;
-+
-+	p[i] = attr->attr_id;
-+	ctx->usage += sizeof(__u32);
-+}
-+
-+static int fsinfo_list_attributes(struct path *path,
-+				  struct fsinfo_context *ctx,
-+				  const struct fsinfo_attribute *attributes)
-+{
-+	const struct fsinfo_attribute *a;
-+
-+	for (a = attributes; a->get; a++)
-+		fsinfo_attributes_insert(ctx, a);
-+	return -EOPNOTSUPP; /* We want to go through all the lists */
-+}
-+
-+static int fsinfo_get_attribute_info(struct path *path,
-+				     struct fsinfo_context *ctx,
-+				     const struct fsinfo_attribute *attributes)
-+{
-+	const struct fsinfo_attribute *a;
-+	struct fsinfo_attribute_info *p = ctx->buffer;
-+
-+	if (!ctx->buf_size)
-+		return sizeof(*p);
-+
-+	for (a = attributes; a->get; a++) {
-+		if (a->attr_id == ctx->Nth) {
-+			p->attr_id	= a->attr_id;
-+			p->type		= a->type;
-+			p->flags	= a->flags;
-+			p->size		= a->size;
-+			p->size		= a->size;
-+			return sizeof(*p);
-+		}
-+	}
-+	return -EOPNOTSUPP; /* We want to go through all the lists */
-+}
-+
-+/**
-+ * fsinfo_get_attribute - Look up and handle an attribute
-+ * @path: The object to query
-+ * @params: Parameters to define a request and place to store result
-+ * @attributes: List of attributes to search.
-+ *
-+ * Look through a list of attributes for one that matches the requested
-+ * attribute then call the handler for it.
-+ */
-+int fsinfo_get_attribute(struct path *path, struct fsinfo_context *ctx,
-+			 const struct fsinfo_attribute *attributes)
-+{
-+	const struct fsinfo_attribute *a;
-+
-+	switch (ctx->requested_attr) {
-+	case FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO:
-+		return fsinfo_get_attribute_info(path, ctx, attributes);
-+	case FSINFO_ATTR_FSINFO_ATTRIBUTES:
-+		return fsinfo_list_attributes(path, ctx, attributes);
-+	default:
-+		for (a = attributes; a->get; a++)
-+			if (a->attr_id == ctx->requested_attr)
-+				return fsinfo_get_this_attribute(path, ctx, a);
-+		return -EOPNOTSUPP;
-+	}
-+}
-+EXPORT_SYMBOL(fsinfo_get_attribute);
-+
-+/**
-+ * generic_fsinfo - Handle an fsinfo attribute generically
-+ * @path: The object to query
-+ * @params: Parameters to define a request and place to store result
-+ */
-+static int fsinfo_call(struct path *path, struct fsinfo_context *ctx)
-+{
-+	int ret;
-+
-+	if (path->dentry->d_sb->s_op->fsinfo) {
-+		ret = path->dentry->d_sb->s_op->fsinfo(path, ctx);
-+		if (ret != -EOPNOTSUPP)
-+			return ret;
-+	}
-+	ret = fsinfo_get_attribute(path, ctx, fsinfo_common_attributes);
-+	if (ret != -EOPNOTSUPP)
-+		return ret;
-+
-+	switch (ctx->requested_attr) {
-+	case FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO:
-+		return -ENODATA;
-+	case FSINFO_ATTR_FSINFO_ATTRIBUTES:
-+		return ctx->usage;
-+	default:
-+		return -EOPNOTSUPP;
-+	}
-+}
-+
-+/**
-+ * vfs_fsinfo - Retrieve filesystem information
-+ * @path: The object to query
-+ * @params: Parameters to define a request and place to store result
-+ *
-+ * Get an attribute on a filesystem or an object within a filesystem.  The
-+ * filesystem attribute to be queried is indicated by @ctx->requested_attr, and
-+ * if it's a multi-valued attribute, the particular value is selected by
-+ * @ctx->Nth and then @ctx->Mth.
-+ *
-+ * For common attributes, a value may be fabricated if it is not supported by
-+ * the filesystem.
-+ *
-+ * On success, the size of the attribute's value is returned (0 is a valid
-+ * size).  A buffer will have been allocated and will be pointed to by
-+ * @ctx->buffer.  The caller must free this with kvfree().
-+ *
-+ * Errors can also be returned: -ENOMEM if a buffer cannot be allocated, -EPERM
-+ * or -EACCES if permission is denied by the LSM, -EOPNOTSUPP if an attribute
-+ * doesn't exist for the specified object or -ENODATA if the attribute exists,
-+ * but the Nth,Mth value does not exist.  -EMSGSIZE indicates that the value is
-+ * unmanageable internally and -ENOPKG indicates other internal failure.
-+ *
-+ * Errors such as -EIO may also come from attempts to access media or servers
-+ * to obtain the requested information if it's not immediately to hand.
-+ *
-+ * [*] Note that the caller may set @ctx->want_size_only if it only wants the
-+ *     size of the value and not the data.  If this is set, a buffer may not be
-+ *     allocated under some circumstances.  This is intended for size query by
-+ *     userspace.
-+ *
-+ * [*] Note that @ctx->clear_tail will be returned set if the data should be
-+ *     padded out with zeros when writing it to userspace.
-+ */
-+static int vfs_fsinfo(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct dentry *dentry = path->dentry;
-+	int ret;
-+
-+	ret = security_sb_statfs(dentry);
-+	if (ret)
-+		return ret;
-+
-+	/* Call the handler to find out the buffer size required. */
-+	ctx->buf_size = 0;
-+	ret = fsinfo_call(path, ctx);
-+	if (ret < 0 || ctx->want_size_only)
-+		return ret;
-+	ctx->buf_size = ret;
-+
-+	do {
-+		/* Allocate a buffer of the requested size. */
-+		if (ctx->buf_size > INT_MAX)
-+			return -EMSGSIZE;
-+		ctx->buffer = kvzalloc(ctx->buf_size, GFP_KERNEL);
-+		if (!ctx->buffer)
-+			return -ENOMEM;
-+
-+		ctx->usage = 0;
-+		ctx->skip = 0;
-+		ret = fsinfo_call(path, ctx);
-+		if (IS_ERR_VALUE((long)ret))
-+			return ret;
-+		if ((unsigned int)ret <= ctx->buf_size)
-+			return ret; /* It fitted */
-+
-+		/* We need to resize the buffer */
-+		ctx->buf_size = roundup(ret, PAGE_SIZE);
-+		kvfree(ctx->buffer);
-+		ctx->buffer = NULL;
-+	} while (!signal_pending(current));
-+
-+	return -ERESTARTSYS;
-+}
-+
-+static int vfs_fsinfo_path(int dfd, const char __user *pathname,
-+			   const struct fsinfo_params *up,
-+			   struct fsinfo_context *ctx)
-+{
-+	struct path path;
-+	unsigned lookup_flags = LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT;
-+	int ret = -EINVAL;
-+
-+	if (up->resolve_flags & ~VALID_RESOLVE_FLAGS)
-+		return -EINVAL;
-+	if (up->at_flags & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |
-+			     AT_EMPTY_PATH))
-+		return -EINVAL;
-+
-+	if (up->resolve_flags & RESOLVE_NO_XDEV)
-+		lookup_flags |= LOOKUP_NO_XDEV;
-+	if (up->resolve_flags & RESOLVE_NO_MAGICLINKS)
-+		lookup_flags |= LOOKUP_NO_MAGICLINKS;
-+	if (up->resolve_flags & RESOLVE_NO_SYMLINKS)
-+		lookup_flags |= LOOKUP_NO_SYMLINKS;
-+	if (up->resolve_flags & RESOLVE_BENEATH)
-+		lookup_flags |= LOOKUP_BENEATH;
-+	if (up->resolve_flags & RESOLVE_IN_ROOT)
-+		lookup_flags |= LOOKUP_IN_ROOT;
-+	if (up->at_flags & AT_SYMLINK_NOFOLLOW)
-+		lookup_flags &= ~LOOKUP_FOLLOW;
-+	if (up->at_flags & AT_NO_AUTOMOUNT)
-+		lookup_flags &= ~LOOKUP_AUTOMOUNT;
-+	if (up->at_flags & AT_EMPTY_PATH)
-+		lookup_flags |= LOOKUP_EMPTY;
-+
-+retry:
-+	ret = user_path_at(dfd, pathname, lookup_flags, &path);
-+	if (ret)
-+		goto out;
-+
-+	ret = vfs_fsinfo(&path, ctx);
-+	path_put(&path);
-+	if (retry_estale(ret, lookup_flags)) {
-+		lookup_flags |= LOOKUP_REVAL;
-+		goto retry;
-+	}
-+out:
-+	return ret;
-+}
-+
-+static int vfs_fsinfo_fd(unsigned int fd, struct fsinfo_context *ctx)
-+{
-+	struct fd f = fdget_raw(fd);
-+	int ret = -EBADF;
-+
-+	if (f.file) {
-+		ret = vfs_fsinfo(&f.file->f_path, ctx);
-+		fdput(f);
-+	}
-+	return ret;
-+}
-+
-+/**
-+ * sys_fsinfo - System call to get filesystem information
-+ * @dfd: Base directory to pathwalk from or fd referring to filesystem.
-+ * @pathname: Filesystem to query or NULL.
-+ * @params: Parameters to define request (NULL: FSINFO_ATTR_STATFS).
-+ * @params_size: Size of parameter buffer.
-+ * @result_buffer: Result buffer.
-+ * @result_buf_size: Size of result buffer.
-+ *
-+ * Get information on a filesystem.  The filesystem attribute to be queried is
-+ * indicated by @_params->request, and some of the attributes can have multiple
-+ * values, indexed by @_params->Nth and @_params->Mth.  If @_params is NULL,
-+ * then the 0th fsinfo_attr_statfs attribute is queried.  If an attribute does
-+ * not exist, EOPNOTSUPP is returned; if the Nth,Mth value does not exist,
-+ * ENODATA is returned.
-+ *
-+ * On success, the size of the attribute's value is returned.  If
-+ * @result_buf_size is 0 or @result_buffer is NULL, only the size is returned.
-+ * If the size of the value is larger than @result_buf_size, it will be
-+ * truncated by the copy.  If the size of the value is smaller than
-+ * @result_buf_size then the excess buffer space will be cleared.  The full
-+ * size of the value will be returned, irrespective of how much data is
-+ * actually placed in the buffer.
-+ */
-+SYSCALL_DEFINE6(fsinfo,
-+		int, dfd,
-+		const char __user *, pathname,
-+		const struct fsinfo_params __user *, params,
-+		size_t, params_size,
-+		void __user *, result_buffer,
-+		size_t, result_buf_size)
-+{
-+	struct fsinfo_context ctx;
-+	struct fsinfo_params user_params;
-+	unsigned int result_size;
-+	void *r;
-+	int ret;
-+
-+	if ((!params &&  params_size) ||
-+	    ( params && !params_size) ||
-+	    (!result_buffer &&  result_buf_size) ||
-+	    ( result_buffer && !result_buf_size))
-+		return -EINVAL;
-+	if (result_buf_size > UINT_MAX)
-+		return -EOVERFLOW;
-+
-+	memset(&ctx, 0, sizeof(ctx));
-+	ctx.requested_attr	= FSINFO_ATTR_STATFS;
-+	ctx.flags		= FSINFO_FLAGS_QUERY_PATH;
-+	ctx.want_size_only	= (result_buf_size == 0);
-+
-+	if (params) {
-+		ret = copy_struct_from_user(&user_params, sizeof(user_params),
-+					    params, params_size);
-+		if (ret < 0)
-+			return ret;
-+		if (user_params.flags & ~FSINFO_FLAGS_QUERY_MASK)
-+			return -EINVAL;
-+		ctx.flags = user_params.flags;
-+		ctx.requested_attr = user_params.request;
-+		ctx.Nth = user_params.Nth;
-+		ctx.Mth = user_params.Mth;
-+	}
-+
-+	switch (ctx.flags & FSINFO_FLAGS_QUERY_MASK) {
-+	case FSINFO_FLAGS_QUERY_PATH:
-+		ret = vfs_fsinfo_path(dfd, pathname, &user_params, &ctx);
-+		break;
-+	case FSINFO_FLAGS_QUERY_FD:
-+		if (pathname)
-+			return -EINVAL;
-+		ret = vfs_fsinfo_fd(dfd, &ctx);
-+		break;
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	if (ret < 0)
-+		goto error;
-+
-+	r = ctx.buffer + ctx.skip;
-+	result_size = min_t(size_t, ret, result_buf_size);
-+	if (result_size > 0 &&
-+	    copy_to_user(result_buffer, r, result_size) != 0) {
-+		ret = -EFAULT;
-+		goto error;
-+	}
-+
-+	/* Clear any part of the buffer that we won't fill if we're putting a
-+	 * struct in there.  Strings, opaque objects and arrays are expected to
-+	 * be variable length.
-+	 */
-+	if (ctx.clear_tail &&
-+	    result_buf_size > result_size &&
-+	    clear_user(result_buffer + result_size,
-+		       result_buf_size - result_size) != 0) {
-+		ret = -EFAULT;
-+		goto error;
-+	}
-+
-+error:
-+	kvfree(ctx.buffer);
-+	return ret;
-+}
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index e1325dec4fa86..2d5a2f709f322 100644
---- a/include/linux/fs.h
-+++ b/include/linux/fs.h
-@@ -68,6 +68,7 @@ struct fsverity_info;
- struct fsverity_operations;
- struct fs_context;
- struct fs_parameter_spec;
-+struct fsinfo_context;
- 
- extern void __init inode_init(void);
- extern void __init inode_init_early(void);
-@@ -1951,6 +1952,9 @@ struct super_operations {
- 	int (*thaw_super) (struct super_block *);
- 	int (*unfreeze_fs) (struct super_block *);
- 	int (*statfs) (struct dentry *, struct kstatfs *);
-+#ifdef CONFIG_FSINFO
-+	int (*fsinfo)(struct path *, struct fsinfo_context *);
-+#endif
- 	int (*remount_fs) (struct super_block *, int *, char *);
- 	void (*umount_begin) (struct super_block *);
- 
-diff --git a/include/linux/fsinfo.h b/include/linux/fsinfo.h
-new file mode 100644
-index 0000000000000..a811d69b02ff0
---- /dev/null
-+++ b/include/linux/fsinfo.h
-@@ -0,0 +1,74 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/* Filesystem information query
-+ *
-+ * Copyright (C) 2020 Red Hat, Inc. All Rights Reserved.
-+ * Written by David Howells (dhowells@redhat.com)
-+ */
-+
-+#ifndef _LINUX_FSINFO_H
-+#define _LINUX_FSINFO_H
-+
-+#ifdef CONFIG_FSINFO
-+
-+#include <uapi/linux/fsinfo.h>
-+
-+struct path;
-+
-+#define FSINFO_NORMAL_ATTR_MAX_SIZE 4096
-+
-+struct fsinfo_context {
-+	__u32		flags;		/* [in] FSINFO_FLAGS_* */
-+	__u32		requested_attr;	/* [in] What is being asking for */
-+	__u32		Nth;		/* [in] Instance of it (some may have multiple) */
-+	__u32		Mth;		/* [in] Subinstance */
-+	bool		want_size_only;	/* [in] Just want to know the size, not the data */
-+	bool		clear_tail;	/* [out] T if tail of buffer should be cleared */
-+	unsigned int	skip;		/* [out] Number of bytes to skip in buffer */
-+	unsigned int	usage;		/* [tmp] Amount of buffer used (if large) */
-+	unsigned int	buf_size;	/* [tmp] Size of ->buffer[] */
-+	void		*buffer;	/* [out] The reply buffer */
-+};
-+
-+/*
-+ * A filesystem information attribute definition.
-+ */
-+struct fsinfo_attribute {
-+	unsigned int		attr_id;	/* The ID of the attribute */
-+	enum fsinfo_value_type	type:8;		/* The type of the attribute's value(s) */
-+	unsigned int		flags:8;
-+	unsigned int		size:16;	/* - Value size (FSINFO_STRUCT/LIST) */
-+	int (*get)(struct path *path, struct fsinfo_context *params);
-+};
-+
-+#define __FSINFO(A, T, S, G, F) \
-+	{ .attr_id = A, .type = T, .flags = F, .size = S, .get = G }
-+
-+#define _FSINFO(A, T, S, G)	__FSINFO(A, T, S, G, 0)
-+#define _FSINFO_N(A, T, S, G)	__FSINFO(A, T, S, G, FSINFO_FLAGS_N)
-+#define _FSINFO_NM(A, T, S, G)	__FSINFO(A, T, S, G, FSINFO_FLAGS_NM)
-+
-+#define _FSINFO_VSTRUCT(A,S,G)	  _FSINFO   (A, FSINFO_TYPE_VSTRUCT, sizeof(S), G)
-+#define _FSINFO_VSTRUCT_N(A,S,G)  _FSINFO_N (A, FSINFO_TYPE_VSTRUCT, sizeof(S), G)
-+#define _FSINFO_VSTRUCT_NM(A,S,G) _FSINFO_NM(A, FSINFO_TYPE_VSTRUCT, sizeof(S), G)
-+
-+#define FSINFO_VSTRUCT(A,G)	_FSINFO_VSTRUCT   (A, A##__STRUCT, G)
-+#define FSINFO_VSTRUCT_N(A,G)	_FSINFO_VSTRUCT_N (A, A##__STRUCT, G)
-+#define FSINFO_VSTRUCT_NM(A,G)	_FSINFO_VSTRUCT_NM(A, A##__STRUCT, G)
-+#define FSINFO_STRING(A,G)	_FSINFO   (A, FSINFO_TYPE_STRING, 0, G)
-+#define FSINFO_STRING_N(A,G)	_FSINFO_N (A, FSINFO_TYPE_STRING, 0, G)
-+#define FSINFO_STRING_NM(A,G)	_FSINFO_NM(A, FSINFO_TYPE_STRING, 0, G)
-+#define FSINFO_OPAQUE(A,G)	_FSINFO   (A, FSINFO_TYPE_OPAQUE, 0, G)
-+#define FSINFO_LIST(A,G)	_FSINFO   (A, FSINFO_TYPE_LIST, sizeof(A##__STRUCT), G)
-+#define FSINFO_LIST_N(A,G)	_FSINFO_N (A, FSINFO_TYPE_LIST, sizeof(A##__STRUCT), G)
-+
-+extern int fsinfo_opaque(const void *, struct fsinfo_context *, unsigned int);
-+extern int fsinfo_string(const char *, struct fsinfo_context *);
-+extern int fsinfo_generic_timestamp_info(struct path *, struct fsinfo_context *);
-+extern int fsinfo_generic_supports(struct path *, struct fsinfo_context *);
-+extern int fsinfo_generic_limits(struct path *, struct fsinfo_context *);
-+extern int fsinfo_get_attribute(struct path *, struct fsinfo_context *,
-+				const struct fsinfo_attribute *);
-+
-+#endif /* CONFIG_FSINFO */
-+
-+#endif /* _LINUX_FSINFO_H */
-diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
-index 37bea07c12f21..e315f719899a1 100644
---- a/include/linux/syscalls.h
-+++ b/include/linux/syscalls.h
-@@ -47,6 +47,7 @@ struct stat64;
- struct statfs;
- struct statfs64;
- struct statx;
-+struct fsinfo_params;
- struct sysinfo;
- struct timespec;
- struct __kernel_old_timeval;
-@@ -1008,6 +1009,9 @@ asmlinkage long sys_pidfd_send_signal(int pidfd, int sig,
- 				       siginfo_t __user *info,
- 				       unsigned int flags);
- asmlinkage long sys_pidfd_getfd(int pidfd, int fd, unsigned int flags);
-+asmlinkage long sys_fsinfo(int dfd, const char __user *pathname,
-+			   const struct fsinfo_params __user *params, size_t params_size,
-+			   void __user *result_buffer, size_t result_buf_size);
- 
- /*
-  * Architecture-specific system calls
-diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
-index 2056318988f77..3a2e44f770f8e 100644
---- a/include/uapi/asm-generic/unistd.h
-+++ b/include/uapi/asm-generic/unistd.h
-@@ -859,9 +859,11 @@ __SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd)
- __SYSCALL(__NR_faccessat2, sys_faccessat2)
- #define __NR_process_madvise 440
- __SYSCALL(__NR_process_madvise, sys_process_madvise)
-+#define __NR_fsinfo 441
-+__SYSCALL(__NR_fsinfo, sys_fsinfo)
- 
- #undef __NR_syscalls
--#define __NR_syscalls 441
-+#define __NR_syscalls 443
- 
- /*
-  * 32 bit systems traditionally used different
-diff --git a/include/uapi/linux/fsinfo.h b/include/uapi/linux/fsinfo.h
-new file mode 100644
-index 0000000000000..65892239ba86c
---- /dev/null
-+++ b/include/uapi/linux/fsinfo.h
-@@ -0,0 +1,189 @@
-+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-+/* fsinfo() definitions.
-+ *
-+ * Copyright (C) 2020 Red Hat, Inc. All Rights Reserved.
-+ * Written by David Howells (dhowells@redhat.com)
-+ */
-+#ifndef _UAPI_LINUX_FSINFO_H
-+#define _UAPI_LINUX_FSINFO_H
-+
-+#include <linux/types.h>
-+#include <linux/socket.h>
-+#include <linux/openat2.h>
-+
-+/*
-+ * The filesystem attributes that can be requested.  Note that some attributes
-+ * may have multiple instances which can be switched in the parameter block.
-+ */
-+#define FSINFO_ATTR_STATFS		0x00	/* statfs()-style state */
-+#define FSINFO_ATTR_IDS			0x01	/* Filesystem IDs */
-+#define FSINFO_ATTR_LIMITS		0x02	/* Filesystem limits */
-+#define FSINFO_ATTR_SUPPORTS		0x03	/* What's supported in statx, iocflags, ... */
-+#define FSINFO_ATTR_TIMESTAMP_INFO	0x04	/* Inode timestamp info */
-+#define FSINFO_ATTR_VOLUME_ID		0x05	/* Volume ID (string) */
-+#define FSINFO_ATTR_VOLUME_UUID		0x06	/* Volume UUID (LE uuid) */
-+#define FSINFO_ATTR_VOLUME_NAME		0x07	/* Volume name (string) */
-+
-+#define FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO 0x100	/* Information about attr N (for path) */
-+#define FSINFO_ATTR_FSINFO_ATTRIBUTES	0x101	/* List of supported attrs (for path) */
-+
-+/*
-+ * Optional fsinfo() parameter structure.
-+ *
-+ * If this is not given, it is assumed that fsinfo_attr_statfs instance 0,0 is
-+ * desired.
-+ */
-+struct fsinfo_params {
-+	__u64	resolve_flags;	/* RESOLVE_* flags */
-+	__u32	at_flags;	/* AT_* flags */
-+	__u32	flags;		/* Flags controlling fsinfo() specifically */
-+#define FSINFO_FLAGS_QUERY_MASK	0x0007 /* What object should fsinfo() query? */
-+#define FSINFO_FLAGS_QUERY_PATH	0x0000 /* - path, specified by dirfd,pathname,AT_EMPTY_PATH */
-+#define FSINFO_FLAGS_QUERY_FD	0x0001 /* - fd specified by dirfd */
-+	__u32	request;	/* ID of requested attribute */
-+	__u32	Nth;		/* Instance of it (some may have multiple) */
-+	__u32	Mth;		/* Subinstance of Nth instance */
-+};
-+
-+enum fsinfo_value_type {
-+	FSINFO_TYPE_VSTRUCT	= 0,	/* Version-lengthed struct (up to 4096 bytes) */
-+	FSINFO_TYPE_STRING	= 1,	/* NUL-term var-length string (up to 4095 chars) */
-+	FSINFO_TYPE_OPAQUE	= 2,	/* Opaque blob (unlimited size) */
-+	FSINFO_TYPE_LIST	= 3,	/* List of ints/structs (unlimited size) */
-+};
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO).
-+ *
-+ * This gives information about the attributes supported by fsinfo for the
-+ * given path.
-+ */
-+struct fsinfo_attribute_info {
-+	unsigned int		attr_id;	/* The ID of the attribute */
-+	enum fsinfo_value_type	type;		/* The type of the attribute's value(s) */
-+	unsigned int		flags;
-+#define FSINFO_FLAGS_N		0x01		/* - Attr has a set of values */
-+#define FSINFO_FLAGS_NM		0x02		/* - Attr has a set of sets of values */
-+	unsigned int		size;		/* - Value size (FSINFO_STRUCT/FSINFO_LIST) */
-+};
-+
-+#define FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO__STRUCT struct fsinfo_attribute_info
-+#define FSINFO_ATTR_FSINFO_ATTRIBUTES__STRUCT __u32
-+
-+struct fsinfo_u128 {
-+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
-+	__u64	hi;
-+	__u64	lo;
-+#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
-+	__u64	lo;
-+	__u64	hi;
-+#endif
-+};
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_STATFS).
-+ * - This gives extended filesystem information.
-+ */
-+struct fsinfo_statfs {
-+	struct fsinfo_u128 f_blocks;	/* Total number of blocks in fs */
-+	struct fsinfo_u128 f_bfree;	/* Total number of free blocks */
-+	struct fsinfo_u128 f_bavail;	/* Number of free blocks available to ordinary user */
-+	struct fsinfo_u128 f_files;	/* Total number of file nodes in fs */
-+	struct fsinfo_u128 f_ffree;	/* Number of free file nodes */
-+	struct fsinfo_u128 f_favail;	/* Number of file nodes available to ordinary user */
-+	__u64	f_bsize;		/* Optimal block size */
-+	__u64	f_frsize;		/* Fragment size */
-+};
-+
-+#define FSINFO_ATTR_STATFS__STRUCT struct fsinfo_statfs
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_IDS).
-+ *
-+ * List of basic identifiers as is normally found in statfs().
-+ */
-+struct fsinfo_ids {
-+	char	f_fs_name[15 + 1];	/* Filesystem name */
-+	__u64	f_fsid;			/* Short 64-bit Filesystem ID (as statfs) */
-+	__u64	f_sb_id;		/* Internal superblock ID for sbnotify()/mntnotify() */
-+	__u32	f_fstype;		/* Filesystem type from linux/magic.h [uncond] */
-+	__u32	f_dev_major;		/* As st_dev_* from struct statx [uncond] */
-+	__u32	f_dev_minor;
-+	__u32	__padding[1];
-+};
-+
-+#define FSINFO_ATTR_IDS__STRUCT struct fsinfo_ids
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_LIMITS).
-+ *
-+ * List of supported filesystem limits.
-+ */
-+struct fsinfo_limits {
-+	struct fsinfo_u128 max_file_size;	/* Maximum file size */
-+	struct fsinfo_u128 max_ino;		/* Maximum inode number */
-+	__u64	max_uid;			/* Maximum UID supported */
-+	__u64	max_gid;			/* Maximum GID supported */
-+	__u64	max_projid;			/* Maximum project ID supported */
-+	__u64	max_hard_links;			/* Maximum number of hard links on a file */
-+	__u64	max_xattr_body_len;		/* Maximum xattr content length */
-+	__u32	max_xattr_name_len;		/* Maximum xattr name length */
-+	__u32	max_filename_len;		/* Maximum filename length */
-+	__u32	max_symlink_len;		/* Maximum symlink content length */
-+	__u32	max_dev_major;			/* Maximum device major representable */
-+	__u32	max_dev_minor;			/* Maximum device minor representable */
-+	__u32	__padding[1];
-+};
-+
-+#define FSINFO_ATTR_LIMITS__STRUCT struct fsinfo_limits
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_SUPPORTS).
-+ *
-+ * What's supported in various masks, such as statx() attribute and mask bits
-+ * and IOC flags.
-+ */
-+struct fsinfo_supports {
-+	__u64	stx_attributes;		/* What statx::stx_attributes are supported */
-+	__u32	stx_mask;		/* What statx::stx_mask bits are supported */
-+	__u32	fs_ioc_getflags;	/* What FS_IOC_GETFLAGS may return */
-+	__u32	fs_ioc_setflags_set;	/* What FS_IOC_SETFLAGS may set */
-+	__u32	fs_ioc_setflags_clear;	/* What FS_IOC_SETFLAGS may clear */
-+	__u32	fs_ioc_fsgetxattr_xflags; /* What FS_IOC_FSGETXATTR[A] may return in fsx_xflags */
-+	__u32	fs_ioc_fssetxattr_xflags_set; /* What FS_IOC_FSSETXATTR may set in fsx_xflags */
-+	__u32	fs_ioc_fssetxattr_xflags_clear; /* What FS_IOC_FSSETXATTR may set in fsx_xflags */
-+	__u32	win_file_attrs;		/* What DOS/Windows FILE_* attributes are supported */
-+};
-+
-+#define FSINFO_ATTR_SUPPORTS__STRUCT struct fsinfo_supports
-+
-+struct fsinfo_timestamp_one {
-+	__s64	minimum;	/* Minimum timestamp value in seconds */
-+	__s64	maximum;	/* Maximum timestamp value in seconds */
-+	__u16	gran_mantissa;	/* Granularity(secs) = mant * 10^exp */
-+	__s8	gran_exponent;
-+	__u8	__padding[5];
-+};
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_TIMESTAMP_INFO).
-+ */
-+struct fsinfo_timestamp_info {
-+	struct fsinfo_timestamp_one	atime;	/* Access time */
-+	struct fsinfo_timestamp_one	mtime;	/* Modification time */
-+	struct fsinfo_timestamp_one	ctime;	/* Change time */
-+	struct fsinfo_timestamp_one	btime;	/* Birth/creation time */
-+};
-+
-+#define FSINFO_ATTR_TIMESTAMP_INFO__STRUCT struct fsinfo_timestamp_info
-+
-+/*
-+ * Information struct for fsinfo(FSINFO_ATTR_VOLUME_UUID).
-+ */
-+struct fsinfo_volume_uuid {
-+	__u8	uuid[16];
-+};
-+
-+#define FSINFO_ATTR_VOLUME_UUID__STRUCT struct fsinfo_volume_uuid
-+
-+#endif /* _UAPI_LINUX_FSINFO_H */
-diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
-index f27ac94d5fa72..3cf167e82606f 100644
---- a/kernel/sys_ni.c
-+++ b/kernel/sys_ni.c
-@@ -51,6 +51,7 @@ COND_SYSCALL_COMPAT(io_pgetevents);
- COND_SYSCALL(io_uring_setup);
- COND_SYSCALL(io_uring_enter);
- COND_SYSCALL(io_uring_register);
-+COND_SYSCALL(fsinfo);
- 
- /* fs/xattr.c */
- 
-diff --git a/samples/vfs/Makefile b/samples/vfs/Makefile
-index 6377a678134ac..8efb67c45ceaa 100644
---- a/samples/vfs/Makefile
-+++ b/samples/vfs/Makefile
-@@ -1,4 +1,4 @@
- # SPDX-License-Identifier: GPL-2.0-only
--userprogs-always-y += test-fsmount test-statx
-+userprogs-always-y += test-fsinfo test-fsmount test-statx
- 
- userccflags += -I usr/include
-diff --git a/samples/vfs/test-fsinfo.c b/samples/vfs/test-fsinfo.c
-new file mode 100644
-index 0000000000000..934b25399ffed
---- /dev/null
-+++ b/samples/vfs/test-fsinfo.c
-@@ -0,0 +1,646 @@
-+// SPDX-License-Identifier: GPL-2.0-or-later
-+/* Test the fsinfo() system call
-+ *
-+ * Copyright (C) 2020 Red Hat, Inc. All Rights Reserved.
-+ * Written by David Howells (dhowells@redhat.com)
-+ */
-+
-+#define _GNU_SOURCE
-+#define _ATFILE_SOURCE
-+#include <stdbool.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdint.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <ctype.h>
-+#include <errno.h>
-+#include <time.h>
-+#include <math.h>
-+#include <fcntl.h>
-+#include <sys/syscall.h>
-+#include <linux/fsinfo.h>
-+#include <linux/socket.h>
-+#include <sys/stat.h>
-+#include <arpa/inet.h>
-+
-+#ifndef __NR_fsinfo
-+#define __NR_fsinfo -1
-+#endif
-+
-+static bool debug = 0;
-+static bool list_last;
-+
-+static __attribute__((unused))
-+ssize_t fsinfo(int dfd, const char *filename,
-+	       struct fsinfo_params *params, size_t params_size,
-+	       void *result_buffer, size_t result_buf_size)
-+{
-+	return syscall(__NR_fsinfo, dfd, filename,
-+		       params, params_size,
-+		       result_buffer, result_buf_size);
-+}
-+
-+struct fsinfo_attribute {
-+	unsigned int		attr_id;
-+	enum fsinfo_value_type	type;
-+	unsigned int		size;
-+	const char		*name;
-+	void (*dump)(void *reply, unsigned int size);
-+};
-+
-+static const struct fsinfo_attribute fsinfo_attributes[];
-+
-+static ssize_t get_fsinfo(const char *, const char *, struct fsinfo_params *, void **);
-+
-+static void dump_hex(FILE *f, unsigned char *data, int from, int to)
-+{
-+	unsigned offset, col = 0;
-+	bool print_offset = true;
-+
-+	for (offset = from; offset < to; offset++) {
-+		if (print_offset) {
-+			fprintf(f, "%04x: ", offset);
-+			print_offset = 0;
-+		}
-+		fprintf(f, "%02x", data[offset]);
-+		col++;
-+		if ((col & 3) == 0) {
-+			if ((col & 15) == 0) {
-+				fprintf(f, "\n");
-+				print_offset = 1;
-+			} else {
-+				fprintf(f, " ");
-+			}
-+		}
-+	}
-+
-+	if (!print_offset)
-+		fprintf(f, "\n");
-+}
-+
-+static void dump_attribute_info(void *reply, unsigned int size)
-+{
-+	struct fsinfo_attribute_info *attr_info = reply;
-+	const struct fsinfo_attribute *attr;
-+	char type[32], val_size[32];
-+
-+	switch (attr_info->type) {
-+	case FSINFO_TYPE_VSTRUCT:	strcpy(type, "V-STRUCT");	break;
-+	case FSINFO_TYPE_STRING:	strcpy(type, "STRING");		break;
-+	case FSINFO_TYPE_OPAQUE:	strcpy(type, "OPAQUE");		break;
-+	case FSINFO_TYPE_LIST:		strcpy(type, "LIST");		break;
-+	default:
-+		sprintf(type, "type-%x", attr_info->type);
-+		break;
-+	}
-+
-+	if (attr_info->flags & FSINFO_FLAGS_N)
-+		strcat(type, " x N");
-+	else if (attr_info->flags & FSINFO_FLAGS_NM)
-+		strcat(type, " x NM");
-+
-+	for (attr = fsinfo_attributes; attr->name; attr++)
-+		if (attr->attr_id == attr_info->attr_id)
-+			break;
-+
-+	if (attr_info->size)
-+		sprintf(val_size, "%u", attr_info->size);
-+	else
-+		strcpy(val_size, "-");
-+
-+	printf("%8x %-12s %08x %5s %s\n",
-+	       attr_info->attr_id,
-+	       type,
-+	       attr_info->flags,
-+	       val_size,
-+	       attr->name ? attr->name : "");
-+}
-+
-+static void dump_fsinfo_generic_statfs(void *reply, unsigned int size)
-+{
-+	struct fsinfo_statfs *f = reply;
-+
-+	printf("\n");
-+	printf("\tblocks       : n=%llu fr=%llu av=%llu\n",
-+	       (unsigned long long)f->f_blocks.lo,
-+	       (unsigned long long)f->f_bfree.lo,
-+	       (unsigned long long)f->f_bavail.lo);
-+
-+	printf("\tfiles        : n=%llu fr=%llu av=%llu\n",
-+	       (unsigned long long)f->f_files.lo,
-+	       (unsigned long long)f->f_ffree.lo,
-+	       (unsigned long long)f->f_favail.lo);
-+	printf("\tbsize        : %llu\n",
-+	       (unsigned long long)f->f_bsize);
-+	printf("\tfrsize       : %llu\n",
-+	       (unsigned long long)f->f_frsize);
-+}
-+
-+static void dump_fsinfo_generic_ids(void *reply, unsigned int size)
-+{
-+	struct fsinfo_ids *f = reply;
-+
-+	printf("\n");
-+	printf("\tdev          : %02x:%02x\n", f->f_dev_major, f->f_dev_minor);
-+	printf("\tfs           : type=%x name=%s\n", f->f_fstype, f->f_fs_name);
-+	printf("\tfsid         : %llx\n", (unsigned long long)f->f_fsid);
-+	printf("\tsbid         : %llx\n", (unsigned long long)f->f_sb_id);
-+}
-+
-+static void dump_fsinfo_generic_limits(void *reply, unsigned int size)
-+{
-+	struct fsinfo_limits *f = reply;
-+
-+	printf("\n");
-+	printf("\tmax file size: %llx%016llx\n",
-+	       (unsigned long long)f->max_file_size.hi,
-+	       (unsigned long long)f->max_file_size.lo);
-+	printf("\tmax ino      : %llx%016llx\n",
-+	       (unsigned long long)f->max_ino.hi,
-+	       (unsigned long long)f->max_ino.lo);
-+	printf("\tmax ids      : u=%llx g=%llx p=%llx\n",
-+	       (unsigned long long)f->max_uid,
-+	       (unsigned long long)f->max_gid,
-+	       (unsigned long long)f->max_projid);
-+	printf("\tmax dev      : maj=%x min=%x\n",
-+	       f->max_dev_major, f->max_dev_minor);
-+	printf("\tmax links    : %llx\n",
-+	       (unsigned long long)f->max_hard_links);
-+	printf("\tmax xattr    : n=%x b=%llx\n",
-+	       f->max_xattr_name_len,
-+	       (unsigned long long)f->max_xattr_body_len);
-+	printf("\tmax len      : file=%x sym=%x\n",
-+	       f->max_filename_len, f->max_symlink_len);
-+}
-+
-+static void dump_fsinfo_generic_supports(void *reply, unsigned int size)
-+{
-+	struct fsinfo_supports *f = reply;
-+
-+	printf("\n");
-+	printf("\tstx_attr     : %llx\n", (unsigned long long)f->stx_attributes);
-+	printf("\tstx_mask     : %x\n", f->stx_mask);
-+	printf("\tfs_ioc_*flags: get=%x set=%x clr=%x\n",
-+	       f->fs_ioc_getflags, f->fs_ioc_setflags_set, f->fs_ioc_setflags_clear);
-+	printf("\tfs_ioc_*xattr: fsx_xflags: get=%x set=%x clr=%x\n",
-+	       f->fs_ioc_fsgetxattr_xflags,
-+	       f->fs_ioc_fssetxattr_xflags_set,
-+	       f->fs_ioc_fssetxattr_xflags_clear);
-+	printf("\twin_fattrs   : %x\n", f->win_file_attrs);
-+}
-+
-+static void print_time(struct fsinfo_timestamp_one *t, char stamp)
-+{
-+	printf("\t%ctime       : gran=%uE%d range=%llx-%llx\n",
-+	       stamp,
-+	       t->gran_mantissa, t->gran_exponent,
-+	       (long long)t->minimum, (long long)t->maximum);
-+}
-+
-+static void dump_fsinfo_generic_timestamp_info(void *reply, unsigned int size)
-+{
-+	struct fsinfo_timestamp_info *f = reply;
-+
-+	printf("\n");
-+	print_time(&f->atime, 'a');
-+	print_time(&f->mtime, 'm');
-+	print_time(&f->ctime, 'c');
-+	print_time(&f->btime, 'b');
-+}
-+
-+static void dump_fsinfo_generic_volume_uuid(void *reply, unsigned int size)
-+{
-+	struct fsinfo_volume_uuid *f = reply;
-+
-+	printf("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x"
-+	       "-%02x%02x%02x%02x%02x%02x\n",
-+	       f->uuid[ 0], f->uuid[ 1],
-+	       f->uuid[ 2], f->uuid[ 3],
-+	       f->uuid[ 4], f->uuid[ 5],
-+	       f->uuid[ 6], f->uuid[ 7],
-+	       f->uuid[ 8], f->uuid[ 9],
-+	       f->uuid[10], f->uuid[11],
-+	       f->uuid[12], f->uuid[13],
-+	       f->uuid[14], f->uuid[15]);
-+}
-+
-+static void dump_string(void *reply, unsigned int size)
-+{
-+	char *s = reply, *p;
-+	bool nl = false, last_nl = false;
-+
-+	p = s;
-+	if (size >= 4096) {
-+		size = 4096;
-+		p[4092] = '.';
-+		p[4093] = '.';
-+		p[4094] = '.';
-+		p[4095] = 0;
-+	} else {
-+		p[size] = 0;
-+	}
-+
-+	for (p = s; *p; p++) {
-+		if (*p == '\n') {
-+			last_nl = nl = true;
-+			continue;
-+		}
-+		last_nl = false;
-+		if (!isprint(*p) && *p != '\t')
-+			*p = '?';
-+	}
-+
-+	if (nl)
-+		putchar('\n');
-+	printf("%s", s);
-+	if (!last_nl)
-+		putchar('\n');
-+}
-+
-+#define dump_fsinfo_meta_attribute_info		(void *)0x123
-+#define dump_fsinfo_meta_attributes		(void *)0x123
-+
-+/*
-+ *
-+ */
-+#define __FSINFO(A, T, S, G, F, N)					\
-+	{ .attr_id = A, .type = T, .size = S, .name = N, .dump = dump_##G }
-+
-+#define _FSINFO(A,T,S,G,N)	__FSINFO(A, T, S, G, 0, N)
-+#define _FSINFO_N(A,T,S,G,N)	__FSINFO(A, T, S, G, FSINFO_FLAGS_N, N)
-+#define _FSINFO_NM(A,T,S,G,N)	__FSINFO(A, T, S, G, FSINFO_FLAGS_NM, N)
-+
-+#define _FSINFO_VSTRUCT(A,S,G,N)    _FSINFO   (A, FSINFO_TYPE_VSTRUCT, sizeof(S), G, N)
-+#define _FSINFO_VSTRUCT_N(A,S,G,N)  _FSINFO_N (A, FSINFO_TYPE_VSTRUCT, sizeof(S), G, N)
-+#define _FSINFO_VSTRUCT_NM(A,S,G,N) _FSINFO_NM(A, FSINFO_TYPE_VSTRUCT, sizeof(S), G, N)
-+
-+#define FSINFO_VSTRUCT(A,G)	_FSINFO_VSTRUCT   (A, A##__STRUCT, G, #A)
-+#define FSINFO_VSTRUCT_N(A,G)	_FSINFO_VSTRUCT_N (A, A##__STRUCT, G, #A)
-+#define FSINFO_VSTRUCT_NM(A,G)	_FSINFO_VSTRUCT_NM(A, A##__STRUCT, G, #A)
-+#define FSINFO_STRING(A,G)	_FSINFO   (A, FSINFO_TYPE_STRING, 0, G, #A)
-+#define FSINFO_STRING_N(A,G)	_FSINFO_N (A, FSINFO_TYPE_STRING, 0, G, #A)
-+#define FSINFO_STRING_NM(A,G)	_FSINFO_NM(A, FSINFO_TYPE_STRING, 0, G, #A)
-+#define FSINFO_OPAQUE(A,G)	_FSINFO   (A, FSINFO_TYPE_OPAQUE, 0, G, #A)
-+#define FSINFO_LIST(A,G)	_FSINFO   (A, FSINFO_TYPE_LIST, sizeof(A##__STRUCT), G, #A)
-+#define FSINFO_LIST_N(A,G)	_FSINFO_N (A, FSINFO_TYPE_LIST, sizeof(A##__STRUCT), G, #A)
-+
-+static const struct fsinfo_attribute fsinfo_attributes[] = {
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_STATFS,		fsinfo_generic_statfs),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_IDS,		fsinfo_generic_ids),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_LIMITS,		fsinfo_generic_limits),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_SUPPORTS,		fsinfo_generic_supports),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_TIMESTAMP_INFO,	fsinfo_generic_timestamp_info),
-+	FSINFO_STRING	(FSINFO_ATTR_VOLUME_ID,		string),
-+	FSINFO_VSTRUCT	(FSINFO_ATTR_VOLUME_UUID,	fsinfo_generic_volume_uuid),
-+	FSINFO_STRING	(FSINFO_ATTR_VOLUME_NAME,	string),
-+	FSINFO_VSTRUCT_N(FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO, fsinfo_meta_attribute_info),
-+	FSINFO_LIST	(FSINFO_ATTR_FSINFO_ATTRIBUTES,	fsinfo_meta_attributes),
-+	{}
-+};
-+
-+static __attribute__((noreturn))
-+void bad_value(const char *what,
-+	       struct fsinfo_params *params,
-+	       const struct fsinfo_attribute *attr,
-+	       const struct fsinfo_attribute_info *attr_info,
-+	       void *reply, unsigned int size)
-+{
-+	printf("\n");
-+	fprintf(stderr, "%s %s{%u}{%u} t=%x f=%x s=%x\n",
-+		what, attr->name, params->Nth, params->Mth,
-+		attr_info->type, attr_info->flags, attr_info->size);
-+	fprintf(stderr, "size=%u\n", size);
-+	dump_hex(stderr, reply, 0, size);
-+	exit(1);
-+}
-+
-+static void dump_value(unsigned int attr_id,
-+		       const struct fsinfo_attribute *attr,
-+		       const struct fsinfo_attribute_info *attr_info,
-+		       void *reply, unsigned int size)
-+{
-+	if (!attr || !attr->dump) {
-+		printf("<no dumper>\n");
-+		return;
-+	}
-+
-+	if (attr->type == FSINFO_TYPE_VSTRUCT && size < attr->size) {
-+		printf("<short data %u/%u>\n", size, attr->size);
-+		return;
-+	}
-+
-+	attr->dump(reply, size);
-+}
-+
-+static void dump_list(unsigned int attr_id,
-+		      const struct fsinfo_attribute *attr,
-+		      const struct fsinfo_attribute_info *attr_info,
-+		      void *reply, unsigned int size)
-+{
-+	size_t elem_size = attr_info->size;
-+	unsigned int ix = 0;
-+
-+	printf("\n");
-+	if (!attr || !attr->dump) {
-+		printf("<no dumper>\n");
-+		return;
-+	}
-+
-+	if (attr->type == FSINFO_TYPE_VSTRUCT && size < attr->size) {
-+		printf("<short data %u/%u>\n", size, attr->size);
-+		return;
-+	}
-+
-+	list_last = false;
-+	while (size >= elem_size) {
-+		printf("\t[%02x] ", ix);
-+		if (size == elem_size)
-+			list_last = true;
-+		attr->dump(reply, size);
-+		reply += elem_size;
-+		size -= elem_size;
-+		ix++;
-+	}
-+}
-+
-+/*
-+ * Call fsinfo, expanding the buffer as necessary.
-+ */
-+static ssize_t get_fsinfo(const char *file, const char *name,
-+			  struct fsinfo_params *params, void **_r)
-+{
-+	ssize_t ret;
-+	size_t buf_size = 4096;
-+	void *r;
-+
-+	for (;;) {
-+		r = malloc(buf_size);
-+		if (!r) {
-+			perror("malloc");
-+			exit(1);
-+		}
-+		memset(r, 0xbd, buf_size);
-+
-+		errno = 0;
-+		ret = fsinfo(AT_FDCWD, file, params, sizeof(*params), r, buf_size - 1);
-+		if (ret == -1)
-+			goto error;
-+
-+		if (ret <= buf_size - 1)
-+			break;
-+		buf_size = (ret + 4096 - 1) & ~(4096 - 1);
-+	}
-+
-+	if (debug)
-+		printf("fsinfo(%s,%s,%u,%u) = %zd\n",
-+		       file, name, params->Nth, params->Mth, ret);
-+
-+	((char *)r)[ret] = 0;
-+	*_r = r;
-+	return ret;
-+
-+error:
-+	*_r = NULL;
-+	free(r);
-+	if (debug)
-+		printf("fsinfo(%s,%s,%u,%u) = %m\n",
-+		       file, name, params->Nth, params->Mth);
-+	return ret;
-+}
-+
-+/*
-+ * Try one subinstance of an attribute.
-+ */
-+static int try_one(const char *file, struct fsinfo_params *params,
-+		   const struct fsinfo_attribute_info *attr_info, bool raw)
-+{
-+	const struct fsinfo_attribute *attr;
-+	const char *name;
-+	size_t size = 4096;
-+	char namebuf[32];
-+	void *r;
-+
-+	for (attr = fsinfo_attributes; attr->name; attr++) {
-+		if (attr->attr_id == params->request) {
-+			name = attr->name;
-+			if (strncmp(name, "fsinfo_generic_", 15) == 0)
-+				name += 15;
-+			goto found;
-+		}
-+	}
-+
-+	sprintf(namebuf, "<unknown-%x>", params->request);
-+	name = namebuf;
-+	attr = NULL;
-+
-+found:
-+	size = get_fsinfo(file, name, params, &r);
-+
-+	if (size == -1) {
-+		if (errno == ENODATA) {
-+			if (!(attr_info->flags & (FSINFO_FLAGS_N | FSINFO_FLAGS_NM)) &&
-+			    params->Nth == 0 && params->Mth == 0)
-+				bad_value("Unexpected ENODATA",
-+					  params, attr, attr_info, r, size);
-+			free(r);
-+			return (params->Mth == 0) ? 2 : 1;
-+		}
-+		if (errno == EOPNOTSUPP) {
-+			if (params->Nth > 0 || params->Mth > 0)
-+				bad_value("Should return ENODATA",
-+					  params, attr, attr_info, r, size);
-+			//printf("\e[33m%s\e[m: <not supported>\n",
-+			//       fsinfo_attr_names[attr]);
-+			free(r);
-+			return 2;
-+		}
-+		perror(file);
-+		exit(1);
-+	}
-+
-+	if (raw) {
-+		if (size > 4096)
-+			size = 4096;
-+		dump_hex(stdout, r, 0, size);
-+		free(r);
-+		return 0;
-+	}
-+
-+	switch (attr_info->flags & (FSINFO_FLAGS_N | FSINFO_FLAGS_NM)) {
-+	case 0:
-+		printf("\e[33m%s\e[m: ", name);
-+		break;
-+	case FSINFO_FLAGS_N:
-+		printf("\e[33m%s{%u}\e[m: ", name, params->Nth);
-+		break;
-+	case FSINFO_FLAGS_NM:
-+		printf("\e[33m%s{%u,%u}\e[m: ", name, params->Nth, params->Mth);
-+		break;
-+	}
-+
-+	switch (attr_info->type) {
-+	case FSINFO_TYPE_STRING:
-+		if (size == 0 || ((char *)r)[size - 1] != 0)
-+			bad_value("Unterminated string",
-+				  params, attr, attr_info, r, size);
-+	case FSINFO_TYPE_VSTRUCT:
-+	case FSINFO_TYPE_OPAQUE:
-+		dump_value(params->request, attr, attr_info, r, size);
-+		free(r);
-+		return 0;
-+
-+	case FSINFO_TYPE_LIST:
-+		dump_list(params->request, attr, attr_info, r, size);
-+		free(r);
-+		return 0;
-+
-+	default:
-+		bad_value("Fishy type", params, attr, attr_info, r, size);
-+	}
-+}
-+
-+static int cmp_u32(const void *a, const void *b)
-+{
-+	return *(const int *)a - *(const int *)b;
-+}
-+
-+/*
-+ *
-+ */
-+int main(int argc, char **argv)
-+{
-+	struct fsinfo_attribute_info attr_info;
-+	struct fsinfo_params params = {
-+		.at_flags	= AT_SYMLINK_NOFOLLOW,
-+		.flags		= FSINFO_FLAGS_QUERY_PATH,
-+	};
-+	unsigned int *attrs, ret, nr, i;
-+	bool meta = false;
-+	int raw = 0, opt, Nth, Mth;
-+
-+	while ((opt = getopt(argc, argv, "Madlr"))) {
-+		switch (opt) {
-+		case 'M':
-+			meta = true;
-+			continue;
-+		case 'a':
-+			params.at_flags |= AT_NO_AUTOMOUNT;
-+			params.flags = FSINFO_FLAGS_QUERY_PATH;
-+			continue;
-+		case 'd':
-+			debug = true;
-+			continue;
-+		case 'l':
-+			params.at_flags &= ~AT_SYMLINK_NOFOLLOW;
-+			params.flags = FSINFO_FLAGS_QUERY_PATH;
-+			continue;
-+		case 'r':
-+			raw = 1;
-+			continue;
-+		}
-+		break;
-+	}
-+
-+	argc -= optind;
-+	argv += optind;
-+
-+	if (argc != 1) {
-+		printf("Format: test-fsinfo [-Madlr] <path>\n");
-+		exit(2);
-+	}
-+
-+	/* Retrieve a list of supported attribute IDs */
-+	params.request = FSINFO_ATTR_FSINFO_ATTRIBUTES;
-+	params.Nth = 0;
-+	params.Mth = 0;
-+	ret = get_fsinfo(argv[0], "attributes", &params, (void **)&attrs);
-+	if (ret == -1) {
-+		fprintf(stderr, "Unable to get attribute list: %m\n");
-+		exit(1);
-+	}
-+
-+	if (ret % sizeof(attrs[0])) {
-+		fprintf(stderr, "Bad length of attribute list (0x%x)\n", ret);
-+		exit(2);
-+	}
-+
-+	nr = ret / sizeof(attrs[0]);
-+	qsort(attrs, nr, sizeof(attrs[0]), cmp_u32);
-+
-+	if (meta) {
-+		printf("ATTR ID  TYPE         FLAGS    SIZE  NAME\n");
-+		printf("======== ============ ======== ===== =========\n");
-+		for (i = 0; i < nr; i++) {
-+			params.request = FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO;
-+			params.Nth = attrs[i];
-+			params.Mth = 0;
-+			ret = fsinfo(AT_FDCWD, argv[0],
-+				     &params, sizeof(params),
-+				     &attr_info, sizeof(attr_info));
-+			if (ret == -1) {
-+				fprintf(stderr, "Can't get info for attribute %x: %m\n", attrs[i]);
-+				exit(1);
-+			}
-+
-+			dump_attribute_info(&attr_info, ret);
-+		}
-+		exit(0);
-+	}
-+
-+	for (i = 0; i < nr; i++) {
-+		params.request = FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO;
-+		params.Nth = attrs[i];
-+		params.Mth = 0;
-+		ret = fsinfo(AT_FDCWD, argv[0],
-+			     &params, sizeof(params),
-+			     &attr_info, sizeof(attr_info));
-+		if (ret == -1) {
-+			fprintf(stderr, "Can't get info for attribute %x: %m\n", attrs[i]);
-+			exit(1);
-+		}
-+
-+		if (attrs[i] == FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO ||
-+		    attrs[i] == FSINFO_ATTR_FSINFO_ATTRIBUTES)
-+			continue;
-+
-+		if (attrs[i] != attr_info.attr_id) {
-+			fprintf(stderr, "ID for %03x returned %03x\n",
-+				attrs[i], attr_info.attr_id);
-+			break;
-+		}
-+		Nth = 0;
-+		do {
-+			Mth = 0;
-+			do {
-+				params.request = attrs[i];
-+				params.Nth = Nth;
-+				params.Mth = Mth;
-+
-+				switch (try_one(argv[0], &params, &attr_info, raw)) {
-+				case 0:
-+					continue;
-+				case 1:
-+					goto done_M;
-+				case 2:
-+					goto done_N;
-+				}
-+			} while (++Mth < 100);
-+
-+		done_M:
-+			if (Mth >= 100) {
-+				fprintf(stderr, "Fishy: Mth %x[%u][%u]\n", attrs[i], Nth, Mth);
-+				break;
-+			}
-+
-+		} while (++Nth < 100);
-+
-+	done_N:
-+		if (Nth >= 100) {
-+			fprintf(stderr, "Fishy: Nth %x[%u]\n", attrs[i], Nth);
-+			break;
-+		}
-+	}
-+
-+	return 0;
-+}
--- 
-2.25.1
-
diff --git a/third_party/linux/external/0003-fsinfo-Allow-retrieval-of-superblock-devname-options.patch b/third_party/linux/external/0003-fsinfo-Allow-retrieval-of-superblock-devname-options.patch
deleted file mode 100644
index d05bff4..0000000
--- a/third_party/linux/external/0003-fsinfo-Allow-retrieval-of-superblock-devname-options.patch
+++ /dev/null
@@ -1,183 +0,0 @@
-From 69b33d464bcadd6c60018f5d0bde8ad3e7530dc7 Mon Sep 17 00:00:00 2001
-From: David Howells <dhowells@redhat.com>
-Date: Tue, 3 Mar 2020 14:29:27 +0000
-Subject: [PATCH 3/3] fsinfo: Allow retrieval of superblock devname, options
- and stats
-
-Provide fsinfo() attributes to retrieve superblock device name, options,
-and statistics in string form.  The following attributes are defined:
-
-	FSINFO_ATTR_SOURCE		- Mount-specific device name
-	FSINFO_ATTR_CONFIGURATION	- Mount options
-	FSINFO_ATTR_FS_STATISTICS	- Filesystem statistics
-
-FSINFO_ATTR_SOURCE could be made indexable by params->Nth to handle the
-case where there is more than one source (e.g. the bcachefs filesystem).
-
-Signed-off-by: David Howells <dhowells@redhat.com>
----
- fs/fsinfo.c                 | 39 +++++++++++++++++++++++++++++++++++
- fs/internal.h               |  2 ++
- fs/namespace.c              | 41 +++++++++++++++++++++++++++++++++++++
- include/uapi/linux/fsinfo.h |  3 +++
- samples/vfs/test-fsinfo.c   |  4 ++++
- 5 files changed, 89 insertions(+)
-
-diff --git a/fs/fsinfo.c b/fs/fsinfo.c
-index 7d9c73e9cbdef..7e2d871eb5dfe 100644
---- a/fs/fsinfo.c
-+++ b/fs/fsinfo.c
-@@ -198,6 +198,42 @@ static int fsinfo_generic_volume_id(struct path *path, struct fsinfo_context *ct
- 	return fsinfo_string(path->dentry->d_sb->s_id, ctx);
- }
- 
-+/*
-+ * Retrieve the superblock configuration (mount options) as a comma-separated
-+ * string.  The initial comma is stripped off and NUL termination is added.
-+ */
-+static int fsinfo_generic_seq_read(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct super_block *sb = path->dentry->d_sb;
-+	struct seq_file m = {
-+		.buf	= ctx->buffer,
-+		.size	= ctx->buf_size - 1,
-+	};
-+	int ret = 0;
-+
-+	switch (ctx->requested_attr) {
-+	case FSINFO_ATTR_CONFIGURATION:
-+		seq_puts(&m, sb_rdonly(sb) ? "ro" : "rw");
-+		ret = security_sb_show_options(&m, sb);
-+		if (!ret && sb->s_op->show_options)
-+			ret = sb->s_op->show_options(&m, path->mnt->mnt_root);
-+		break;
-+
-+	case FSINFO_ATTR_FS_STATISTICS:
-+		if (sb->s_op->show_stats)
-+			ret = sb->s_op->show_stats(&m, path->mnt->mnt_root);
-+		break;
-+	}
-+
-+	if (ret < 0)
-+		return ret;
-+	if (seq_has_overflowed(&m))
-+		return ctx->buf_size + PAGE_SIZE;
-+
-+	((char *)ctx->buffer)[ctx->skip + m.count] = 0;
-+	return m.count + 1;
-+}
-+
- static const struct fsinfo_attribute fsinfo_common_attributes[] = {
- 	FSINFO_VSTRUCT	(FSINFO_ATTR_STATFS,		fsinfo_generic_statfs),
- 	FSINFO_VSTRUCT	(FSINFO_ATTR_IDS,		fsinfo_generic_ids),
-@@ -206,6 +242,9 @@ static const struct fsinfo_attribute fsinfo_common_attributes[] = {
- 	FSINFO_VSTRUCT	(FSINFO_ATTR_TIMESTAMP_INFO,	fsinfo_generic_timestamp_info),
- 	FSINFO_STRING	(FSINFO_ATTR_VOLUME_ID,		fsinfo_generic_volume_id),
- 	FSINFO_VSTRUCT	(FSINFO_ATTR_VOLUME_UUID,	fsinfo_generic_volume_uuid),
-+	FSINFO_STRING	(FSINFO_ATTR_SOURCE,		fsinfo_generic_mount_source),
-+	FSINFO_STRING	(FSINFO_ATTR_CONFIGURATION,	fsinfo_generic_seq_read),
-+	FSINFO_STRING	(FSINFO_ATTR_FS_STATISTICS,	fsinfo_generic_seq_read),
- 
- 	FSINFO_LIST	(FSINFO_ATTR_FSINFO_ATTRIBUTES,	(void *)123UL),
- 	FSINFO_VSTRUCT_N(FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO, (void *)123UL),
-diff --git a/fs/internal.h b/fs/internal.h
-index 1b7460f055a3b..a2a529da7e673 100644
---- a/fs/internal.h
-+++ b/fs/internal.h
-@@ -98,6 +98,8 @@ int path_mount(const char *dev_name, struct path *path,
- 		const char *type_page, unsigned long flags, void *data_page);
- int path_umount(struct path *path, int flags);
- 
-+extern int fsinfo_generic_mount_source(struct path *, struct fsinfo_context *);
-+
- /*
-  * fs_struct.c
-  */
-diff --git a/fs/namespace.c b/fs/namespace.c
-index cebaa3e817940..33218f67ad5b1 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -30,6 +30,7 @@
- #include <uapi/linux/mount.h>
- #include <linux/fs_context.h>
- #include <linux/shmem_fs.h>
-+#include <linux/fsinfo.h>
- 
- #include "pnode.h"
- #include "internal.h"
-@@ -4105,3 +4106,43 @@ const struct proc_ns_operations mntns_operations = {
- 	.install	= mntns_install,
- 	.owner		= mntns_owner,
- };
-+
-+#ifdef CONFIG_FSINFO
-+static inline void mangle(struct seq_file *m, const char *s)
-+{
-+	seq_escape(m, s, " \t\n\\");
-+}
-+
-+/*
-+ * Return the mount source/device name as seen from this mountpoint.  Shared
-+ * mounts may vary here and the filesystem is permitted to substitute its own
-+ * rendering.
-+ */
-+int fsinfo_generic_mount_source(struct path *path, struct fsinfo_context *ctx)
-+{
-+	struct super_block *sb = path->mnt->mnt_sb;
-+	struct mount *mnt = real_mount(path->mnt);
-+	struct seq_file m = {
-+		.buf	= ctx->buffer,
-+		.size	= ctx->buf_size - 1,
-+	};
-+	int ret;
-+
-+	if (sb->s_op->show_devname) {
-+		ret = sb->s_op->show_devname(&m, mnt->mnt.mnt_root);
-+		if (ret < 0)
-+			return ret;
-+	} else {
-+		if (!mnt->mnt_devname)
-+			return fsinfo_string("none", ctx);
-+		mangle(&m, mnt->mnt_devname);
-+	}
-+
-+	if (seq_has_overflowed(&m))
-+		return ctx->buf_size + PAGE_SIZE;
-+
-+	((char *)ctx->buffer)[m.count] = 0;
-+	return m.count + 1;
-+}
-+
-+#endif /* CONFIG_FSINFO */
-diff --git a/include/uapi/linux/fsinfo.h b/include/uapi/linux/fsinfo.h
-index 65892239ba86c..45d9f4b758787 100644
---- a/include/uapi/linux/fsinfo.h
-+++ b/include/uapi/linux/fsinfo.h
-@@ -23,6 +23,9 @@
- #define FSINFO_ATTR_VOLUME_ID		0x05	/* Volume ID (string) */
- #define FSINFO_ATTR_VOLUME_UUID		0x06	/* Volume UUID (LE uuid) */
- #define FSINFO_ATTR_VOLUME_NAME		0x07	/* Volume name (string) */
-+#define FSINFO_ATTR_SOURCE		0x09	/* Superblock source/device name (string) */
-+#define FSINFO_ATTR_CONFIGURATION	0x0a	/* Superblock configuration/options (string) */
-+#define FSINFO_ATTR_FS_STATISTICS	0x0b	/* Superblock filesystem statistics (string) */
- 
- #define FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO 0x100	/* Information about attr N (for path) */
- #define FSINFO_ATTR_FSINFO_ATTRIBUTES	0x101	/* List of supported attrs (for path) */
-diff --git a/samples/vfs/test-fsinfo.c b/samples/vfs/test-fsinfo.c
-index 934b25399ffed..cf849c9778f71 100644
---- a/samples/vfs/test-fsinfo.c
-+++ b/samples/vfs/test-fsinfo.c
-@@ -294,6 +294,10 @@ static const struct fsinfo_attribute fsinfo_attributes[] = {
- 	FSINFO_STRING	(FSINFO_ATTR_VOLUME_ID,		string),
- 	FSINFO_VSTRUCT	(FSINFO_ATTR_VOLUME_UUID,	fsinfo_generic_volume_uuid),
- 	FSINFO_STRING	(FSINFO_ATTR_VOLUME_NAME,	string),
-+	FSINFO_STRING	(FSINFO_ATTR_SOURCE,		string),
-+	FSINFO_STRING	(FSINFO_ATTR_CONFIGURATION,	string),
-+	FSINFO_STRING	(FSINFO_ATTR_FS_STATISTICS,	string),
-+
- 	FSINFO_VSTRUCT_N(FSINFO_ATTR_FSINFO_ATTRIBUTE_INFO, fsinfo_meta_attribute_info),
- 	FSINFO_LIST	(FSINFO_ATTR_FSINFO_ATTRIBUTES,	fsinfo_meta_attributes),
- 	{}
--- 
-2.25.1
-
