[packages/kernel] Up to 6.17.0 (partial)

arekm arekm at pld-linux.org
Mon Sep 29 20:33:43 CEST 2025


commit 6e258e6c5023fcee9916074b5fbaaace3e3e7fed
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Mon Sep 29 20:33:22 2025 +0200

    Up to 6.17.0 (partial)

 kernel-aufs.patch       | 2214 ++++++++++++++++++++++-------------------------
 kernel-multiarch.config |  539 +++++++++---
 kernel.spec             |   13 +-
 update-source.sh        |    9 +-
 4 files changed, 1443 insertions(+), 1332 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index d56d63d8..447b6e77 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -51,9 +51,9 @@
 %define		have_drm	0
 %endif
 
-%define		rel		1
-%define		basever		6.16
-%define		postver		.9
+%define		rel		0.1
+%define		basever		6.17
+%define		postver		.0
 
 # define this to '-%{basever}' for longterm branch
 %define		versuffix	%{nil}
@@ -104,7 +104,7 @@ Epoch:		3
 License:	GPL v2
 Group:		Base/Kernel
 Source0:	https://www.kernel.org/pub/linux/kernel/v6.x/linux-%{basever}.tar.xz
-# Source0-md5:	dd850269c3f456c0ff5518b1a2a81836
+# Source0-md5:	ac8cfd661ca56a142bb92f9d9e7754a0
 %if "%{postver}" != ".0"
 Patch0:		https://www.kernel.org/pub/linux/kernel/v6.x/patch-%{version}.xz
 # Patch0-md5:	3f71c40f62c2ecf122192deb7785fbf6
@@ -641,14 +641,15 @@ find -name '*.pl' -print0 | \
 	samples/check-exec/run-script-ask.sh
 
 %{__sed} -i -e '1s,/usr/bin/env bash,%{__bash},' \
-	drivers/gpu/drm/ci/lava-submit.sh \
+	drivers/gpu/drm/ci/*.sh \
 	lib/tests/module/gen_test_kallsyms.sh \
 	scripts/coccicheck \
 	scripts/config \
 	scripts/decode_stacktrace.sh \
 	tools/testing/selftests/drivers/net/*.sh \
 	tools/testing/selftests/exec/check-exec-tests.sh \
-	tools/testing/selftests/powerpc/security/mitigation-patching.sh
+	tools/testing/selftests/powerpc/security/mitigation-patching.sh \
+	tools/testing/selftests/sysctl/sysctl.sh
 
 %build
 install -d %{objdir}
diff --git a/kernel-aufs.patch b/kernel-aufs.patch
index 7e91c644..29f8c165 100644
--- a/kernel-aufs.patch
+++ b/kernel-aufs.patch
@@ -1,962 +1,3 @@
-SPDX-License-Identifier: GPL-2.0
-aufs6.16 kbuild patch
-
-diff --git a/fs/Kconfig b/fs/Kconfig
-index 44b6cdd36dc16..d571db04dfe9d 100644
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -341,6 +341,7 @@ source "fs/pstore/Kconfig"
- source "fs/ufs/Kconfig"
- source "fs/erofs/Kconfig"
- source "fs/vboxsf/Kconfig"
-+source "fs/aufs/Kconfig"
- 
- endif # MISC_FILESYSTEMS
- 
-diff --git a/fs/Makefile b/fs/Makefile
-index 79c08b914c474..dcd049ca86b77 100644
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -129,3 +129,4 @@ obj-$(CONFIG_VBOXSF_FS)		+= vboxsf/
- obj-$(CONFIG_ZONEFS_FS)		+= zonefs/
- obj-$(CONFIG_BPF_LSM)		+= bpf_fs_kfuncs.o
- obj-$(CONFIG_RESCTRL_FS)	+= resctrl/
-+obj-$(CONFIG_AUFS_FS)           += aufs/
-SPDX-License-Identifier: GPL-2.0
-aufs6.16 base patch
-
-diff --git a/MAINTAINERS b/MAINTAINERS
-index c0b444e5fd5ad..65367aa9747af 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -3943,6 +3943,19 @@ S:	Supported
- F:	Documentation/dev-tools/autofdo.rst
- F:	scripts/Makefile.autofdo
- 
-+AUFS (advanced multi layered unification filesystem) FILESYSTEM
-+M:	"J. R. Okajima" <hooanon05g at gmail.com>
-+L:	aufs-users at lists.sourceforge.net (members only)
-+L:	linux-unionfs at vger.kernel.org
-+S:	Supported
-+W:	http://aufs.sourceforge.net
-+T:	git://github.com/sfjro/aufs4-linux.git
-+F:	Documentation/ABI/testing/debugfs-aufs
-+F:	Documentation/ABI/testing/sysfs-aufs
-+F:	Documentation/filesystems/aufs/
-+F:	fs/aufs/
-+F:	include/uapi/linux/aufs_type.h
-+
- AUXILIARY BUS DRIVER
- M:	Greg Kroah-Hartman <gregkh at linuxfoundation.org>
- R:	Dave Ertman <david.m.ertman at intel.com>
-diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 8d994cae3b83b..f4fbdf6c64117 100644
---- a/drivers/block/loop.c
-+++ b/drivers/block/loop.c
-@@ -620,6 +620,26 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
- 	goto done;
- }
- 
-+/*
-+ * for AUFS
-+ * no get/put for file.
-+ */
-+/* Just to make the compiler silence, declare it */
-+struct file *loop_backing_file(struct super_block *sb);
-+struct file *loop_backing_file(struct super_block *sb)
-+{
-+	struct file *ret;
-+	struct loop_device *l;
-+
-+	ret = NULL;
-+	if (MAJOR(sb->s_dev) == LOOP_MAJOR) {
-+		l = sb->s_bdev->bd_disk->private_data;
-+		ret = l->lo_backing_file;
-+	}
-+	return ret;
-+}
-+EXPORT_SYMBOL_GPL(loop_backing_file);
-+
- /* loop sysfs attributes */
- 
- static ssize_t loop_attr_show(struct device *dev, char *page,
-diff --git a/fs/dcache.c b/fs/dcache.c
-index 03d58b2d4fa34..7f483c97810f2 100644
---- a/fs/dcache.c
-+++ b/fs/dcache.c
-@@ -1277,6 +1277,9 @@ enum d_walk_ret {
- 	D_WALK_SKIP,
- };
- 
-+/* AUFS calls d_walk(). Just to make the compiler silence, declare it */
-+void d_walk(struct dentry *parent, void *data,
-+		   enum d_walk_ret (*enter)(void *, struct dentry *));
- /**
-  * d_walk - walk the dentry tree
-  * @parent:	start of walk
-@@ -1285,7 +1288,7 @@ enum d_walk_ret {
-  *
-  * The @enter() callbacks are called with d_lock held.
-  */
--static void d_walk(struct dentry *parent, void *data,
-+void d_walk(struct dentry *parent, void *data,
- 		   enum d_walk_ret (*enter)(void *, struct dentry *))
- {
- 	struct dentry *this_parent, *dentry;
-diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 5598e4d574229..90af6a47fbadc 100644
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -36,7 +36,7 @@
- 
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
- 
--static int setfl(int fd, struct file * filp, unsigned int arg)
-+int setfl(int fd, struct file * filp, unsigned int arg)
- {
- 	struct inode * inode = file_inode(filp);
- 	int error = 0;
-@@ -66,6 +66,8 @@ static int setfl(int fd, struct file * filp, unsigned int arg)
- 
- 	if (filp->f_op->check_flags)
- 		error = filp->f_op->check_flags(arg);
-+	if (!error && filp->f_op->setfl)
-+		error = filp->f_op->setfl(filp, arg);
- 	if (error)
- 		return error;
- 
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 54c59e091919b..fca52af064af1 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -1004,6 +1004,12 @@ static inline int check_mnt(struct mount *mnt)
- 	return mnt->mnt_ns == current->nsproxy->mnt_ns;
- }
- 
-+/* for aufs, CONFIG_AUFS_BR_FUSE */
-+int is_current_mnt_ns(struct vfsmount *mnt)
-+{
-+	return check_mnt(real_mount(mnt));
-+}
-+
- static inline bool check_anonymous_mnt(struct mount *mnt)
- {
- 	u64 seq;
-diff --git a/fs/splice.c b/fs/splice.c
-index 4d6df083e0c06..73cd917c821fe 100644
---- a/fs/splice.c
-+++ b/fs/splice.c
-@@ -927,7 +927,7 @@ static int warn_unsupported(struct file *file, const char *op)
- /*
-  * Attempt to initiate a splice from pipe to file.
-  */
--static ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
-+ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- 			      loff_t *ppos, size_t len, unsigned int flags)
- {
- 	if (unlikely(!out->f_op->splice_write))
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 040c0036320fd..5a4ba4c04cd98 100644
---- a/include/linux/fs.h
-+++ b/include/linux/fs.h
-@@ -1223,6 +1223,7 @@ extern void fasync_free(struct fasync_struct *);
- /* can be called from interrupts */
- extern void kill_fasync(struct fasync_struct **, int, int);
- 
-+extern int setfl(int fd, struct file *filp, unsigned int arg);
- extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
- extern int f_setown(struct file *filp, int who, int force);
- extern void f_delown(struct file *filp);
-@@ -2171,6 +2172,7 @@ struct file_operations {
- 	int (*lock) (struct file *, int, struct file_lock *);
- 	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
- 	int (*check_flags)(int);
-+	int (*setfl)(struct file *, unsigned long);
- 	int (*flock) (struct file *, int, struct file_lock *);
- 	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
- 	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
-diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
-index 67964dc4db952..517ef3ea8c85f 100644
---- a/include/linux/lockdep.h
-+++ b/include/linux/lockdep.h
-@@ -210,6 +210,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
- 	return lock->key == key;
- }
- 
-+struct lock_class *lockdep_hlock_class(struct held_lock *hlock);
-+
- /*
-  * Acquire a lock.
-  *
-diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
-index 70b366b648160..08cfdabb2721f 100644
---- a/include/linux/mnt_namespace.h
-+++ b/include/linux/mnt_namespace.h
-@@ -10,6 +10,7 @@ struct mnt_namespace;
- struct fs_struct;
- struct user_namespace;
- struct ns_common;
-+struct vfsmount;
- 
- extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,
- 		struct user_namespace *, struct fs_struct *);
-@@ -17,6 +18,8 @@ extern void put_mnt_ns(struct mnt_namespace *ns);
- DEFINE_FREE(put_mnt_ns, struct mnt_namespace *, if (!IS_ERR_OR_NULL(_T)) put_mnt_ns(_T))
- extern struct ns_common *from_mnt_ns(struct mnt_namespace *);
- 
-+extern int is_current_mnt_ns(struct vfsmount *mnt);
-+
- extern const struct file_operations proc_mounts_operations;
- extern const struct file_operations proc_mountinfo_operations;
- extern const struct file_operations proc_mountstats_operations;
-diff --git a/include/linux/splice.h b/include/linux/splice.h
-index 9dec4861d09f6..14583d8468640 100644
---- a/include/linux/splice.h
-+++ b/include/linux/splice.h
-@@ -108,4 +108,7 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
- 
- extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
- extern const struct pipe_buf_operations default_pipe_buf_ops;
-+
-+extern ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
-+			      loff_t *ppos, size_t len, unsigned int flags);
- #endif
-diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index dd2bbf73718b0..e3a5bfdb88c62 100644
---- a/kernel/locking/lockdep.c
-+++ b/kernel/locking/lockdep.c
-@@ -224,7 +224,7 @@ unsigned long max_lock_class_idx;
- struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
- DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS);
- 
--static inline struct lock_class *hlock_class(struct held_lock *hlock)
-+inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
- {
- 	unsigned int class_idx = hlock->class_idx;
- 
-@@ -245,6 +245,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock)
- 	 */
- 	return lock_classes + class_idx;
- }
-+#define hlock_class(hlock) lockdep_hlock_class(hlock)
- 
- #ifdef CONFIG_LOCK_STAT
- static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats);
-SPDX-License-Identifier: GPL-2.0
-aufs6.16 mmap patch
-
-diff --git a/fs/proc/base.c b/fs/proc/base.c
-index c667702dc69b8..3ea53a8ca3f9f 100644
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
-@@ -2276,7 +2276,7 @@ static int map_files_get_link(struct dentry *dentry, struct path *path)
- 	rc = -ENOENT;
- 	vma = find_exact_vma(mm, vm_start, vm_end);
- 	if (vma && vma->vm_file) {
--		*path = *file_user_path(vma->vm_file);
-+		*path = vma_pr_or_file(vma)->f_path;
- 		path_get(path);
- 		rc = 0;
- 	}
-diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
-index c6e7ebc637562..d7ccfd9097646 100644
---- a/fs/proc/nommu.c
-+++ b/fs/proc/nommu.c
-@@ -39,7 +39,10 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
- 	file = region->vm_file;
- 
- 	if (file) {
--		struct inode *inode = file_inode(region->vm_file);
-+		struct inode *inode;
-+
-+		file = vmr_pr_or_file(region);
-+		inode = file_inode(file);
- 		dev = inode->i_sb->s_dev;
- 		ino = inode->i_ino;
- 	}
-diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index 751479eb128f0..7f26002f448f0 100644
---- a/fs/proc/task_mmu.c
-+++ b/fs/proc/task_mmu.c
-@@ -264,7 +264,8 @@ static void get_vma_name(struct vm_area_struct *vma,
- 			*name_fmt = "[anon_shmem:%s]";
- 			*name = anon_name->name;
- 		} else {
--			*path = file_user_path(vma->vm_file);
-+			struct file *f = vma_pr_or_file(vma);
-+			*path = file_user_path(f);
- 		}
- 		return;
- 	}
-@@ -333,7 +334,8 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
- 	dev_t dev = 0;
- 
- 	if (vma->vm_file) {
--		const struct inode *inode = file_user_inode(vma->vm_file);
-+		const struct inode *inode
-+			= file_inode(vma_pr_or_file(vma));
- 
- 		dev = inode->i_sb->s_dev;
- 		ino = inode->i_ino;
-@@ -3037,7 +3039,7 @@ static int show_numa_map(struct seq_file *m, void *v)
- 	struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
- 	struct vm_area_struct *vma = v;
- 	struct numa_maps *md = &numa_priv->md;
--	struct file *file = vma->vm_file;
-+	struct file *file = vma_pr_or_file(vma);
- 	struct mm_struct *mm = vma->vm_mm;
- 	char buffer[64];
- 	struct mempolicy *pol;
-diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
-index 59bfd61d653aa..95dc1673366a4 100644
---- a/fs/proc/task_nommu.c
-+++ b/fs/proc/task_nommu.c
-@@ -137,7 +137,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
- 	file = vma->vm_file;
- 
- 	if (file) {
--		struct inode *inode = file_inode(vma->vm_file);
-+		struct inode *inode;
-+
-+		file = vma_pr_or_file(vma);
-+		inode = file_inode(file);
- 		dev = inode->i_sb->s_dev;
- 		ino = inode->i_ino;
- 		pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
-diff --git a/include/linux/mm.h b/include/linux/mm.h
-index fa538feaa8d95..716f3d5e5d8b8 100644
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -2438,6 +2438,54 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping,
- static inline struct vm_area_struct *vma_lookup(struct mm_struct *mm,
- 						unsigned long addr);
- 
-+#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */
-+static inline struct file *vma_prfile_value(struct vm_area_struct *vma)
-+{
-+	return vma->vm_prfile;
-+}
-+static inline void vma_prfile_set(struct vm_area_struct *vma, struct file *pr)
-+{
-+	vma->vm_prfile = pr;
-+}
-+
-+extern void vma_do_file_update_time(struct vm_area_struct *, const char[], int);
-+extern struct file *vma_do_pr_or_file(struct vm_area_struct *, const char[],
-+				      int);
-+extern void vma_do_get_file(struct vm_area_struct *, const char[], int);
-+extern void vma_do_fput(struct vm_area_struct *, const char[], int);
-+
-+#define vma_file_update_time(vma)	vma_do_file_update_time(vma, __func__, \
-+								__LINE__)
-+#define vma_pr_or_file(vma)		vma_do_pr_or_file(vma, __func__, \
-+							  __LINE__)
-+#define vma_get_file(vma)		vma_do_get_file(vma, __func__, __LINE__)
-+#define vma_fput(vma)			vma_do_fput(vma, __func__, __LINE__)
-+
-+#ifndef CONFIG_MMU
-+extern struct file *vmr_do_pr_or_file(struct vm_region *, const char[], int);
-+extern void vmr_do_fput(struct vm_region *, const char[], int);
-+
-+#define vmr_pr_or_file(region)		vmr_do_pr_or_file(region, __func__, \
-+							  __LINE__)
-+#define vmr_fput(region)		vmr_do_fput(region, __func__, __LINE__)
-+#endif /* !CONFIG_MMU */
-+
-+#else
-+#define vma_prfile_value(vma)	(NULL)
-+#define vma_prfile_set(vma, pr)	/* empty */
-+
-+#define vma_file_update_time(vma)	file_update_time((vma)->vm_file)
-+#define vma_pr_or_file(vma)		(vma)->vm_file
-+#define vma_get_file(vma)		get_file((vma)->vm_file)
-+#define vma_fput(vma)			fput((vma)->vm_file)
-+
-+#ifndef CONFIG_MMU
-+#define vmr_pr_or_file(region)		(region)->vm_file
-+#define vmr_fput(region)		fput((region)->vm_file)
-+#endif /* !CONFIG_MMU */
-+
-+#endif /* CONFIG_AUFS_FS */
-+
- extern int access_process_vm(struct task_struct *tsk, unsigned long addr,
- 		void *buf, int len, unsigned int gup_flags);
- extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
-diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index d6b91e8a66d6d..811190b21dbba 100644
---- a/include/linux/mm_types.h
-+++ b/include/linux/mm_types.h
-@@ -682,6 +682,9 @@ struct vm_region {
- 	unsigned long	vm_top;		/* region allocated to here */
- 	unsigned long	vm_pgoff;	/* the offset in vm_file corresponding to vm_start */
- 	struct file	*vm_file;	/* the backing file or NULL */
-+#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */
-+	struct file	*vm_prfile;	/* the virtual backing file or NULL */
-+#endif
- 
- 	int		vm_usage;	/* region usage count (access under nommu_region_sem) */
- 	bool		vm_icache_flushed : 1; /* true if the icache has been flushed for
-@@ -870,6 +873,9 @@ struct vm_area_struct {
- 	unsigned long vm_pgoff;		/* Offset (within vm_file) in PAGE_SIZE
- 					   units */
- 	struct file * vm_file;		/* File we map to (can be NULL). */
-+#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */
-+	struct file *vm_prfile;		/* shadow of vm_file */
-+#endif
- 	void * vm_private_data;		/* was vm_pte (shared mem) */
- 
- #ifdef CONFIG_SWAP
-diff --git a/mm/Makefile b/mm/Makefile
-index 1a7a11d4933d1..27728e2ba991a 100644
---- a/mm/Makefile
-+++ b/mm/Makefile
-@@ -148,3 +148,4 @@ obj-$(CONFIG_SHRINKER_DEBUG) += shrinker_debug.o
- obj-$(CONFIG_EXECMEM) += execmem.o
- obj-$(CONFIG_TMPFS_QUOTA) += shmem_quota.o
- obj-$(CONFIG_PT_RECLAIM) += pt_reclaim.o
-+obj-y += prfile.o
-diff --git a/mm/filemap.c b/mm/filemap.c
-index bada249b9fb76..661211f75261f 100644
---- a/mm/filemap.c
-+++ b/mm/filemap.c
-@@ -3776,7 +3776,7 @@ vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf)
- 	vm_fault_t ret = VM_FAULT_LOCKED;
- 
- 	sb_start_pagefault(mapping->host->i_sb);
--	file_update_time(vmf->vma->vm_file);
-+	vma_file_update_time(vmf->vma);
- 	folio_lock(folio);
- 	if (folio->mapping != mapping) {
- 		folio_unlock(folio);
-diff --git a/mm/mmap.c b/mm/mmap.c
-index 09c563c951123..670327a26f75b 100644
---- a/mm/mmap.c
-+++ b/mm/mmap.c
-@@ -1098,6 +1098,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
- 	unsigned long ret = -EINVAL;
- 	struct file *file;
- 	vm_flags_t vm_flags;
-+	struct file *prfile = NULL; /* aufs */
- 
- 	pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/mm/remap_file_pages.rst.\n",
- 		     current->comm, current->pid);
-@@ -1140,14 +1141,16 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
- 
- 	/* Save vm_flags used to calculate prot and flags, and recheck later. */
- 	vm_flags = vma->vm_flags;
--	file = get_file(vma->vm_file);
-+	vma_get_file(vma);
-+	file = vma->vm_file;
-+	prfile = vma_prfile_value(vma);
- 
- 	mmap_read_unlock(mm);
- 
- 	/* Call outside mmap_lock to be consistent with other callers. */
- 	ret = security_mmap_file(file, prot, flags);
- 	if (ret) {
--		fput(file);
-+		vma_fput(vma);
- 		return ret;
- 	}
- 
-@@ -1155,7 +1158,7 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
- 
- 	/* OK security check passed, take write lock + let it rip. */
- 	if (mmap_write_lock_killable(mm)) {
--		fput(file);
-+		vma_fput(vma);
- 		return -EINTR;
- 	}
- 
-@@ -1197,9 +1200,27 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
- 
- 	ret = do_mmap(vma->vm_file, start, size,
- 			prot, flags, 0, pgoff, &populate, NULL);
-+#if 1 /* IS_ENABLED(CONFIG_AUFS_FS) */
-+	if (!IS_ERR_VALUE(ret) && file && prfile) {
-+		struct vm_area_struct *new_vma;
-+
-+		new_vma = find_vma(mm, ret);
-+		if (!vma_prfile_value(new_vma))
-+			vma_prfile_set(new_vma, prfile);
-+		if (prfile)
-+			get_file(prfile);
-+	}
-+#endif
-+
- out:
- 	mmap_write_unlock(mm);
-+	/*
-+	 * two fput()s instead of vma_fput(vma),
-+	 * coz vma may not be available anymore.
-+	 */
- 	fput(file);
-+	if (prfile)
-+		fput(prfile);
- 	if (populate)
- 		mm_populate(ret, populate);
- 	if (!IS_ERR_VALUE(ret))
-@@ -1823,6 +1844,7 @@ __latent_entropy int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
- 			struct address_space *mapping = file->f_mapping;
- 
- 			get_file(file);
-+			vma_get_file(tmp);
- 			i_mmap_lock_write(mapping);
- 			if (vma_is_shared_maywrite(tmp))
- 				mapping_allow_writable(mapping);
-diff --git a/mm/nommu.c b/mm/nommu.c
-index b624acec6d2ee..a117fbddaed15 100644
---- a/mm/nommu.c
-+++ b/mm/nommu.c
-@@ -537,7 +537,7 @@ static void __put_nommu_region(struct vm_region *region)
- 		up_write(&nommu_region_sem);
- 
- 		if (region->vm_file)
--			fput(region->vm_file);
-+			vmr_fput(region);
- 
- 		/* IO memory and memory shared directly out of the pagecache
- 		 * from ramfs/tmpfs mustn't be released here */
-@@ -616,7 +616,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
- {
- 	vma_close(vma);
- 	if (vma->vm_file)
--		fput(vma->vm_file);
-+		vma_fput(vma);
- 	put_nommu_region(vma->vm_region);
- 	vm_area_free(vma);
- }
-@@ -1132,7 +1132,7 @@ unsigned long do_mmap(struct file *file,
- 					goto error_just_free;
- 				}
- 			}
--			fput(region->vm_file);
-+			vmr_fput(region);
- 			kmem_cache_free(vm_region_jar, region);
- 			region = pregion;
- 			result = start;
-@@ -1218,10 +1218,10 @@ unsigned long do_mmap(struct file *file,
- error:
- 	vma_iter_free(&vmi);
- 	if (region->vm_file)
--		fput(region->vm_file);
-+		vmr_fput(region);
- 	kmem_cache_free(vm_region_jar, region);
- 	if (vma->vm_file)
--		fput(vma->vm_file);
-+		vma_fput(vma);
- 	vm_area_free(vma);
- 	return ret;
- 
-diff --git a/mm/prfile.c b/mm/prfile.c
-new file mode 100644
-index 0000000000000..b034d160a18f4
---- /dev/null
-+++ b/mm/prfile.c
-@@ -0,0 +1,86 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Mainly for aufs which mmap(2) different file and wants to print different
-+ * path in /proc/PID/maps.
-+ * Call these functions via macros defined in linux/mm.h.
-+ *
-+ * See Documentation/filesystems/aufs/design/06mmap.txt
-+ *
-+ * Copyright (c) 2014-2025 Junjro R. Okajima
-+ * Copyright (c) 2014 Ian Campbell
-+ */
-+
-+#include <linux/mm.h>
-+#include <linux/file.h>
-+#include <linux/fs.h>
-+
-+/* #define PRFILE_TRACE */
-+static inline void prfile_trace(struct file *f, struct file *pr,
-+			      const char func[], int line, const char func2[])
-+{
-+#ifdef PRFILE_TRACE
-+	if (pr)
-+		pr_info("%s:%d: %s, %pD2\n", func, line, func2, f);
-+#endif
-+}
-+
-+void vma_do_file_update_time(struct vm_area_struct *vma, const char func[],
-+			     int line)
-+{
-+	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
-+
-+	prfile_trace(f, pr, func, line, __func__);
-+	file_update_time(f);
-+	if (f && pr)
-+		file_update_time(pr);
-+}
-+
-+struct file *vma_do_pr_or_file(struct vm_area_struct *vma, const char func[],
-+			       int line)
-+{
-+	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
-+
-+	prfile_trace(f, pr, func, line, __func__);
-+	return (f && pr) ? pr : f;
-+}
-+
-+void vma_do_get_file(struct vm_area_struct *vma, const char func[], int line)
-+{
-+	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
-+
-+	prfile_trace(f, pr, func, line, __func__);
-+	get_file(f);
-+	if (f && pr)
-+		get_file(pr);
-+}
-+
-+void vma_do_fput(struct vm_area_struct *vma, const char func[], int line)
-+{
-+	struct file *f = vma->vm_file, *pr = vma->vm_prfile;
-+
-+	prfile_trace(f, pr, func, line, __func__);
-+	fput(f);
-+	if (f && pr)
-+		fput(pr);
-+}
-+
-+#ifndef CONFIG_MMU
-+struct file *vmr_do_pr_or_file(struct vm_region *region, const char func[],
-+			       int line)
-+{
-+	struct file *f = region->vm_file, *pr = region->vm_prfile;
-+
-+	prfile_trace(f, pr, func, line, __func__);
-+	return (f && pr) ? pr : f;
-+}
-+
-+void vmr_do_fput(struct vm_region *region, const char func[], int line)
-+{
-+	struct file *f = region->vm_file, *pr = region->vm_prfile;
-+
-+	prfile_trace(f, pr, func, line, __func__);
-+	fput(f);
-+	if (f && pr)
-+		fput(pr);
-+}
-+#endif /* !CONFIG_MMU */
-diff --git a/mm/vma.c b/mm/vma.c
-index fef67a66a0959..4febf77b68e30 100644
---- a/mm/vma.c
-+++ b/mm/vma.c
-@@ -376,7 +376,7 @@ static void vma_complete(struct vma_prepare *vp, struct vma_iterator *vmi,
- 		if (vp->file) {
- 			uprobe_munmap(vp->remove, vp->remove->vm_start,
- 				      vp->remove->vm_end);
--			fput(vp->file);
-+			vma_fput(vp->vma);
- 		}
- 		if (vp->remove->anon_vma)
- 			anon_vma_merge(vp->vma, vp->remove);
-@@ -460,7 +460,7 @@ void remove_vma(struct vm_area_struct *vma)
- 	might_sleep();
- 	vma_close(vma);
- 	if (vma->vm_file)
--		fput(vma->vm_file);
-+		vma_fput(vma);
- 	mpol_put(vma_policy(vma));
- 	vm_area_free(vma);
- }
-@@ -534,7 +534,7 @@ __split_vma(struct vma_iterator *vmi, struct vm_area_struct *vma,
- 		goto out_free_mpol;
- 
- 	if (new->vm_file)
--		get_file(new->vm_file);
-+		vma_get_file(new);
- 
- 	if (new->vm_ops && new->vm_ops->open)
- 		new->vm_ops->open(new);
-@@ -1871,7 +1871,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
- 		if (anon_vma_clone(new_vma, vma))
- 			goto out_free_mempol;
- 		if (new_vma->vm_file)
--			get_file(new_vma->vm_file);
-+			vma_get_file(new_vma);
- 		if (new_vma->vm_ops && new_vma->vm_ops->open)
- 			new_vma->vm_ops->open(new_vma);
- 		if (vma_link(mm, new_vma))
-@@ -1885,7 +1885,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
- 	vma_close(new_vma);
- 
- 	if (new_vma->vm_file)
--		fput(new_vma->vm_file);
-+		vma_fput(new_vma);
- 
- 	unlink_anon_vmas(new_vma);
- out_free_mempol:
-diff --git a/mm/vma_init.c b/mm/vma_init.c
-index 8e53c7943561e..13fb5979c63a1 100644
---- a/mm/vma_init.c
-+++ b/mm/vma_init.c
-@@ -47,6 +47,7 @@ static void vm_area_init_from(const struct vm_area_struct *src,
- 	dest->anon_vma = src->anon_vma;
- 	dest->vm_pgoff = src->vm_pgoff;
- 	dest->vm_file = src->vm_file;
-+	vma_prfile_set(dest, vma_prfile_value((struct vm_area_struct *)src));
- 	dest->vm_private_data = src->vm_private_data;
- 	vm_flags_init(dest, src->vm_flags);
- 	memcpy(&dest->vm_page_prot, &src->vm_page_prot,
-SPDX-License-Identifier: GPL-2.0
-aufs6.16 standalone patch
-
-diff --git a/fs/dcache.c b/fs/dcache.c
-index 7f483c97810f2..7f1b9af1355be 100644
---- a/fs/dcache.c
-+++ b/fs/dcache.c
-@@ -1387,6 +1387,7 @@ void d_walk(struct dentry *parent, void *data,
- 	seq = 1;
- 	goto again;
- }
-+EXPORT_SYMBOL_GPL(d_walk);
- 
- struct check_mount {
- 	struct vfsmount *mnt;
-@@ -2902,6 +2903,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
- 
- 	write_sequnlock(&rename_lock);
- }
-+EXPORT_SYMBOL_GPL(d_exchange);
- 
- /**
-  * d_ancestor - search for an ancestor
-diff --git a/fs/exec.c b/fs/exec.c
-index ba400aafd6406..31f0a6e5acaca 100644
---- a/fs/exec.c
-+++ b/fs/exec.c
-@@ -120,6 +120,7 @@ bool path_noexec(const struct path *path)
- 	return (path->mnt->mnt_flags & MNT_NOEXEC) ||
- 	       (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
- }
-+EXPORT_SYMBOL_GPL(path_noexec);
- 
- #ifdef CONFIG_MMU
- /*
-diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 90af6a47fbadc..7d4eaaff13bc9 100644
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -89,6 +89,7 @@ int setfl(int fd, struct file * filp, unsigned int arg)
-  out:
- 	return error;
- }
-+EXPORT_SYMBOL_GPL(setfl);
- 
- /*
-  * Allocate an file->f_owner struct if it doesn't exist, handling racing
-diff --git a/fs/file_table.c b/fs/file_table.c
-index 138114d643077..1b95604f19e29 100644
---- a/fs/file_table.c
-+++ b/fs/file_table.c
-@@ -253,6 +253,7 @@ struct file *alloc_empty_file(int flags, const struct cred *cred)
- 	}
- 	return ERR_PTR(-ENFILE);
- }
-+EXPORT_SYMBOL_GPL(alloc_empty_file);
- 
- /*
-  * Variant of alloc_empty_file() that doesn't check and modify nr_files.
-diff --git a/fs/namespace.c b/fs/namespace.c
-index fca52af064af1..1c172584695ea 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -1009,6 +1009,7 @@ int is_current_mnt_ns(struct vfsmount *mnt)
- {
- 	return check_mnt(real_mount(mnt));
- }
-+EXPORT_SYMBOL_GPL(is_current_mnt_ns);
- 
- static inline bool check_anonymous_mnt(struct mount *mnt)
- {
-@@ -2365,6 +2366,7 @@ struct path *collect_paths(const struct path *path,
- 		path_get(p);
- 	return res;
- }
-+EXPORT_SYMBOL_GPL(collect_paths);
- 
- void drop_collected_paths(struct path *paths, struct path *prealloc)
- {
-@@ -2373,6 +2375,7 @@ void drop_collected_paths(struct path *paths, struct path *prealloc)
- 	if (paths != prealloc)
- 		kfree(paths);
- }
-+EXPORT_SYMBOL_GPL(drop_collected_paths);
- 
- static void free_mnt_ns(struct mnt_namespace *);
- static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *, bool);
-diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c
-index e2b4f17a48bb7..7a411ea72cea4 100644
---- a/fs/notify/fsnotify.c
-+++ b/fs/notify/fsnotify.c
-@@ -225,6 +225,7 @@ int fsnotify_pre_content(const struct path *path, const loff_t *ppos,
- 	return fsnotify_parent(path->dentry, FS_PRE_ACCESS, &range,
- 			       FSNOTIFY_EVENT_FILE_RANGE);
- }
-+EXPORT_SYMBOL_GPL(fsnotify_pre_content);
- 
- /*
-  * Notify this dentry's parent about a child's events with child name info
-diff --git a/fs/notify/group.c b/fs/notify/group.c
-index 18446b7b0d495..09138e0b8a6a5 100644
---- a/fs/notify/group.c
-+++ b/fs/notify/group.c
-@@ -100,6 +100,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
- {
- 	refcount_inc(&group->refcnt);
- }
-+EXPORT_SYMBOL_GPL(fsnotify_get_group);
- 
- /*
-  * Drop a reference to a group.  Free it if it's through.
-diff --git a/fs/open.c b/fs/open.c
-index 7828234a7caa4..bdc55f69a9dba 100644
---- a/fs/open.c
-+++ b/fs/open.c
-@@ -69,6 +69,7 @@ int do_truncate(struct mnt_idmap *idmap, struct dentry *dentry,
- 	inode_unlock(dentry->d_inode);
- 	return ret;
- }
-+EXPORT_SYMBOL_GPL(do_truncate);
- 
- int vfs_truncate(const struct path *path, loff_t length)
- {
-diff --git a/fs/read_write.c b/fs/read_write.c
-index 0ef70e128c4af..52806554f78e9 100644
---- a/fs/read_write.c
-+++ b/fs/read_write.c
-@@ -579,6 +579,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
- 	inc_syscr(current);
- 	return ret;
- }
-+EXPORT_SYMBOL_GPL(vfs_read);
- 
- static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
- {
-@@ -694,6 +695,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
- 	file_end_write(file);
- 	return ret;
- }
-+EXPORT_SYMBOL_GPL(vfs_write);
- 
- /* file_ppos returns &file->f_pos or NULL if file is stream */
- static inline loff_t *file_ppos(struct file *file)
-diff --git a/fs/splice.c b/fs/splice.c
-index 73cd917c821fe..eb7b4d93a3523 100644
---- a/fs/splice.c
-+++ b/fs/splice.c
-@@ -934,6 +934,7 @@ ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- 		return warn_unsupported(out, "write");
- 	return out->f_op->splice_write(pipe, out, ppos, len, flags);
- }
-+EXPORT_SYMBOL_GPL(do_splice_from);
- 
- /*
-  * Indicate to the caller that there was a premature EOF when reading from the
-diff --git a/fs/xattr.c b/fs/xattr.c
-index 600ae97969cf2..ffe4d60b01f96 100644
---- a/fs/xattr.c
-+++ b/fs/xattr.c
-@@ -405,6 +405,7 @@ vfs_getxattr_alloc(struct mnt_idmap *idmap, struct dentry *dentry,
- 	*xattr_value = value;
- 	return error;
- }
-+EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
- 
- ssize_t
- __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
-diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
-index e3a5bfdb88c62..d82ca73a54e61 100644
---- a/kernel/locking/lockdep.c
-+++ b/kernel/locking/lockdep.c
-@@ -245,6 +245,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
- 	 */
- 	return lock_classes + class_idx;
- }
-+EXPORT_SYMBOL_GPL(lockdep_hlock_class);
- #define hlock_class(hlock) lockdep_hlock_class(hlock)
- 
- #ifdef CONFIG_LOCK_STAT
-diff --git a/kernel/task_work.c b/kernel/task_work.c
-index d1efec571a4a4..eed18cc26c370 100644
---- a/kernel/task_work.c
-+++ b/kernel/task_work.c
-@@ -230,3 +230,4 @@ void task_work_run(void)
- 		} while (work);
- 	}
- }
-+EXPORT_SYMBOL_GPL(task_work_run);
-diff --git a/security/security.c b/security/security.c
-index 596d418185773..19fd676e50c1b 100644
---- a/security/security.c
-+++ b/security/security.c
-@@ -1948,6 +1948,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
- 		return 0;
- 	return call_int_hook(path_rmdir, dir, dentry);
- }
-+EXPORT_SYMBOL_GPL(security_path_rmdir);
- 
- /**
-  * security_path_unlink() - Check if removing a hard link is allowed
-@@ -1983,6 +1984,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
- 		return 0;
- 	return call_int_hook(path_symlink, dir, dentry, old_name);
- }
-+EXPORT_SYMBOL_GPL(security_path_symlink);
- 
- /**
-  * security_path_link - Check if creating a hard link is allowed
-@@ -2001,6 +2003,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
- 		return 0;
- 	return call_int_hook(path_link, old_dentry, new_dir, new_dentry);
- }
-+EXPORT_SYMBOL_GPL(security_path_link);
- 
- /**
-  * security_path_rename() - Check if renaming a file is allowed
-@@ -2062,6 +2065,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
- 		return 0;
- 	return call_int_hook(path_chmod, path, mode);
- }
-+EXPORT_SYMBOL_GPL(security_path_chmod);
- 
- /**
-  * security_path_chown() - Check if changing the file's owner/group is allowed
-@@ -2079,6 +2083,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
- 		return 0;
- 	return call_int_hook(path_chown, path, uid, gid);
- }
-+EXPORT_SYMBOL_GPL(security_path_chown);
- 
- /**
-  * security_path_chroot() - Check if changing the root directory is allowed
-@@ -2323,6 +2328,7 @@ int security_inode_permission(struct inode *inode, int mask)
- 		return 0;
- 	return call_int_hook(inode_permission, inode, mask);
- }
-+EXPORT_SYMBOL_GPL(security_inode_permission);
- 
- /**
-  * security_inode_setattr() - Check if setting file attributes is allowed
-@@ -2843,6 +2849,7 @@ int security_file_permission(struct file *file, int mask)
- {
- 	return call_int_hook(file_permission, file, mask);
- }
-+EXPORT_SYMBOL_GPL(security_file_permission);
- 
- /**
-  * security_file_alloc() - Allocate and init a file's LSM blob
-@@ -3145,6 +3152,7 @@ int security_file_truncate(struct file *file)
- {
- 	return call_int_hook(file_truncate, file);
- }
-+EXPORT_SYMBOL_GPL(security_file_truncate);
- 
- /**
-  * security_task_alloc() - Allocate a task's LSM blob
 diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Documentation/ABI/testing/debugfs-aufs
 --- /usr/share/empty/Documentation/ABI/testing/debugfs-aufs	1970-01-01 01:00:00.000000000 +0100
 +++ linux/Documentation/ABI/testing/debugfs-aufs	2022-11-05 23:02:18.955889283 +0100
@@ -2118,8 +1159,8 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt linu
 +should restore the original file state after an error happens.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linux/Documentation/filesystems/aufs/design/06mmap.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06mmap.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,72 @@
++++ linux/Documentation/filesystems/aufs/design/06mmap.txt	2025-09-29 19:49:00.446642640 +0200
+@@ -0,0 +1,40 @@
 +
 +# Copyright (C) 2005-2025 Junjiro R. Okajima
 +#
@@ -2145,53 +1186,21 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linu
 +Under /proc, several entries show the mmapped files by its path (with
 +device and inode number), and the printed path will be the path on the
 +branch fs's instead of virtual aufs's.
-+This is not a problem in most cases, but some utilities lsof(1) (and its
-+user) may expect the path on aufs.
-+
-+To address this issue, aufs adds a new member called vm_prfile in struct
-+vm_area_struct (and struct vm_region). The original vm_file points to
-+the file on the branch fs in order to handle everything correctly as
-+usual. The new vm_prfile points to a virtual file in aufs, and the
-+show-functions in procfs refers to vm_prfile if it is set.
-+Also we need to maintain several other places where touching vm_file
-+such like
-+- fork()/clone() copies vma and the reference count of vm_file is
-+  incremented.
-+- merging vma maintains the ref count too.
-+
-+This is not a good approach. It just fakes the printed path. But it
-+leaves all behaviour around f_mapping unchanged. This is surely an
-+advantage.
-+Actually aufs had adopted another complicated approach which calls
-+generic_file_mmap() and handles struct vm_operations_struct. In this
-+approach, aufs met a hard problem and I could not solve it without
-+switching the approach.
-+
-+There may be one more another approach which is
-+- bind-mount the branch-root onto the aufs-root internally
-+- grab the new vfsmount (ie. struct mount)
-+- lazy-umount the branch-root internally
-+- in open(2) the aufs-file, open the branch-file with the hidden
-+  vfsmount (instead of the original branch's vfsmount)
-+- ideally this "bind-mount and lazy-umount" should be done atomically,
-+  but it may be possible from userspace by the mount helper.
-+
-+Adding the internal hidden vfsmount and using it in opening a file, the
-+file path under /proc will be printed correctly. This approach looks
-+smarter, but is not possible I am afraid.
-+- aufs-root may be bind-mount later. when it happens, another hidden
-+  vfsmount will be required.
-+- it is hard to get the chance to bind-mount and lazy-umount
-+  + in kernel-space, FS can have vfsmount in open(2) via
-+    file->f_path, and aufs can know its vfsmount. But several locks are
-+    already acquired, and if aufs tries to bind-mount and lazy-umount
-+    here, then it may cause a deadlock.
-+  + in user-space, bind-mount doesn't invoke the mount helper.
-+- since /proc shows dev and ino, aufs has to give vma these info. it
-+  means a new member vm_prinode will be necessary. this is essentially
-+  equivalent to vm_prfile described above.
-+
-+I have to give up this "looks-smater" approach.
++This is not a problem in most cases, but some utilities such like
++lsof(1) (and its user) may expect the path on aufs.
++
++To address this issue, aufs used to take an approach to add a new
++member 'vm_prfile' into struct vm_area_struct (and struct
++vm_region). It was not an ideal solution but worked well for a long
++time. One big disadvantage is that it requires to follow every changes
++around 'vm_file' in every mainline releases.
++
++In linux-v6.7 (and v6.8), VFS internal functions file_user_path() and
++file_user_inode() were introduced for FMODE_BACKING and Overlayfs.
++They are good customization points and aufs gave up 'vm_prfile'
++approach and switched to modifiying file_user_{path,inode}() since
++aufs6.12. It also requires to changes to 'vm_file' in mainline, but it
++will be much smaller than the approach aufs used to take.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt linux/Documentation/filesystems/aufs/design/06xattr.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt	1970-01-01 01:00:00.000000000 +0100
 +++ linux/Documentation/filesystems/aufs/design/06xattr.txt	2025-02-04 20:03:40.673271838 +0100
@@ -2461,7 +1470,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt lin
 +regular files only.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documentation/filesystems/aufs/README
 --- /usr/share/empty/Documentation/filesystems/aufs/README	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/README	2024-11-18 12:46:45.633029891 +0100
++++ linux/Documentation/filesystems/aufs/README	2025-09-29 19:49:00.443309306 +0200
 @@ -0,0 +1,409 @@
 +
 +Aufs6 -- advanced multi layered unification filesystem version 6.x
@@ -2845,7 +1854,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +The Parted Magic Project made a donation (2013/9 and 11).
 +Pavel Barta made a donation (2013/10).
 +Nikolay Pertsev made a donation (2014/5).
-+James B made a donation (2014/7, 2015/7, and 2021/12).
++James B made a donation (2014/7, 2015/7, 2021/12, and 2025/9).
 +Stefano Di Biase made a donation (2014/8).
 +Daniel Epellei made a donation (2015/1).
 +OmegaPhil made a donation (2016/1, 2018/4).
@@ -8009,7 +7018,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h
 +#endif /* __AUFS_DEBUG_H__ */
 diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 --- /usr/share/empty/fs/aufs/dentry.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dentry.c	2025-09-09 22:51:34.576666640 +0200
++++ linux/fs/aufs/dentry.c	2025-09-29 19:49:18.929975970 +0200
 @@ -0,0 +1,1228 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
@@ -8744,7 +7753,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +void au_refresh_dop(struct dentry *dentry, int force_reval)
 +{
 +	const struct dentry_operations *dop
-+		= force_reval ? &aufs_dop : dentry->d_sb->s_d_op;
++		= force_reval ? &aufs_dop : dentry->d_sb->__s_d_op;
 +	static const unsigned int mask
 +		= DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE;
 +
@@ -14155,8 +13164,8 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c
 +}
 diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 --- /usr/share/empty/fs/aufs/file.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/file.c	2025-09-09 22:51:34.576666640 +0200
-@@ -0,0 +1,854 @@
++++ linux/fs/aufs/file.c	2025-09-29 19:49:18.929975970 +0200
+@@ -0,0 +1,855 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
 + * Copyright (C) 2005-2025 Junjiro R. Okajima
@@ -14949,13 +13958,14 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 +
 +/* they will never be called. */
 +#ifdef CONFIG_AUFS_DEBUG
-+static int aufs_write_begin(struct file *file, struct address_space *mapping,
-+			    loff_t pos, unsigned len,
-+			    struct folio **foliop, void **fsdata)
++static int aufs_write_begin(const struct kiocb *iocb,
++			    struct address_space *mapping, loff_t pos,
++			    unsigned len, struct folio **foliop, void **fsdata)
 +{ AuUnsupport(); return 0; }
-+static int aufs_write_end(struct file *file, struct address_space *mapping,
-+			  loff_t pos, unsigned len, unsigned copied,
-+			  struct folio *folio, void *fsdata)
++static int aufs_write_end(const struct kiocb *iocb,
++			  struct address_space *mapping, loff_t pos,
++			  unsigned len, unsigned copied, struct folio *folio,
++			  void *fsdata)
 +{ AuUnsupport(); return 0; }
 +
 +static bool aufs_dirty_folio(struct address_space *mapping, struct folio *folio)
@@ -15013,8 +14023,8 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 +};
 diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 --- /usr/share/empty/fs/aufs/file.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/file.h	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,342 @@
++++ linux/fs/aufs/file.h	2025-09-29 19:49:00.446642640 +0200
+@@ -0,0 +1,327 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
 + * Copyright (C) 2005-2025 Junjiro R. Okajima
@@ -15078,6 +14088,7 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 +	struct {				/* for non-dir */
 +		struct au_hfile			fi_htop;
 +		atomic_t			fi_mmapped;
++		struct hlist_bl_node		fi_mf;
 +	};
 +	struct au_fidir		*fi_hdir;	/* for dir only */
 +
@@ -15133,6 +14144,16 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 +int aufs_release_nondir(struct inode *inode __maybe_unused, struct file *file);
 +struct file *au_read_pre(struct file *file, int keep_fi, unsigned int lsc);
 +
++/* mf.c */
++void au_mf_add(struct file *h_file, struct file *file);
++void au_mf_del(struct file *h_file, struct file *file);
++#if IS_MODULE(CONFIG_AUFS_FS)
++const struct path *au_do_file_user_path(struct file *h_file);
++const struct inode *au_do_file_user_inode(struct file *h_file);
++#elif IS_BUILTIN(CONFIG_AUFS_FS)
++/* declared in include/linux/fs.h */
++#endif
++
 +/* finfo.c */
 +void au_hfput(struct au_hfile *hf, int execed);
 +void au_set_h_fptr(struct file *file, aufs_bindex_t bindex,
@@ -15306,25 +14327,13 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 +}
 +
 +/* customize vma->vm_file */
-+
-+static inline void au_do_vm_file_reset(struct vm_area_struct *vma,
-+				       struct file *file)
-+{
-+	struct file *f;
-+
-+	f = vma->vm_file;
-+	get_file(file);
-+	vma->vm_file = file;
-+	fput(f);
-+}
-+
 +#ifdef CONFIG_MMU
 +AuStubVoid(AuDbgVmRegion, struct file *file, struct vm_area_struct *vma)
 +
 +static inline void au_vm_file_reset(struct vm_area_struct *vma,
 +				    struct file *file)
 +{
-+	au_do_vm_file_reset(vma, file);
++	vma_set_file(vma, file);
 +}
 +#else
 +#define AuDbgVmRegion(file, vma) \
@@ -15333,28 +14342,14 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 +static inline void au_vm_file_reset(struct vm_area_struct *vma,
 +				    struct file *file)
 +{
-+	struct file *f;
++	vma_set_file(vma, file);
 +
-+	au_do_vm_file_reset(vma, file);
-+	f = vma->vm_region->vm_file;
 +	get_file(file);
-+	vma->vm_region->vm_file = file;
-+	fput(f);
++	swap(vma->vm_region->vm_file, file);
++	fput(file);
 +}
 +#endif /* CONFIG_MMU */
 +
-+/* handle vma->vm_prfile */
-+static inline void au_vm_prfile_set(struct vm_area_struct *vma,
-+				    struct file *file)
-+{
-+	get_file(file);
-+	vma->vm_prfile = file;
-+#ifndef CONFIG_MMU
-+	get_file(file);
-+	vma->vm_region->vm_prfile = file;
-+#endif
-+}
-+
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_FILE_H__ */
 diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c
@@ -15510,8 +14505,8 @@ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 --- /usr/share/empty/fs/aufs/f_op.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/f_op.c	2025-09-09 22:51:34.576666640 +0200
-@@ -0,0 +1,782 @@
++++ linux/fs/aufs/f_op.c	2025-09-29 19:49:18.929975970 +0200
+@@ -0,0 +1,790 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
 + * Copyright (C) 2005-2025 Junjiro R. Okajima
@@ -15621,13 +14616,21 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +{
 +	struct au_finfo *finfo;
 +	aufs_bindex_t bindex;
++	struct file *h_file;
 +
 +	finfo = au_fi(file);
 +	au_hbl_del(&finfo->fi_hlist,
 +		   &au_sbi(file->f_path.dentry->d_sb)->si_files);
 +	bindex = finfo->fi_btop;
-+	if (bindex >= 0)
++	if (bindex >= 0) {
++		if (au_test_mmapped(file)) {
++			/* h_file = au_hf_top(file); */
++			h_file = finfo->fi_htop.hf_file;
++			if (h_file)
++				au_mf_del(h_file, file);
++		}
 +		au_set_h_fptr(file, bindex, NULL);
++	}
 +
 +	au_finfo_fin(file);
 +	return 0;
@@ -16159,9 +15162,9 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	 *			 au_flag_conv(vma->vm_flags));
 +	 */
 +	if (!err)
-+		err = call_mmap(h_file, vma);
++		err = vfs_mmap(h_file, vma);
 +	if (!err) {
-+		au_vm_prfile_set(vma, file);
++		au_mf_add(h_file, file);
 +		fsstack_copy_attr_atime(inode, file_inode(h_file));
 +		goto out_fput; /* success */
 +	}
@@ -16296,7 +15299,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +};
 diff -urN /usr/share/empty/fs/aufs/fsctx.c linux/fs/aufs/fsctx.c
 --- /usr/share/empty/fs/aufs/fsctx.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/fsctx.c	2025-09-09 22:51:34.579999974 +0200
++++ linux/fs/aufs/fsctx.c	2025-09-29 19:49:18.929975970 +0200
 @@ -0,0 +1,1244 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
@@ -16422,7 +15425,7 @@ diff -urN /usr/share/empty/fs/aufs/fsctx.c linux/fs/aufs/fsctx.c
 +	/* all timestamps always follow the ones on the branch */
 +	sb->s_flags |= SB_NOATIME | SB_NODIRATIME | SB_I_VERSION;
 +	sb->s_op = &aufs_sop;
-+	sb->s_d_op = &aufs_dop;
++	set_default_d_op(sb, &aufs_dop);
 +	sb->s_magic = AUFS_SUPER_MAGIC;
 +	sb->s_maxbytes = 0;
 +	sb->s_stack_depth = 1;
@@ -16445,9 +15448,9 @@ diff -urN /usr/share/empty/fs/aufs/fsctx.c linux/fs/aufs/fsctx.c
 +	err = au_opts_mount(sb, &a->opts);
 +	AuTraceErr(err);
 +	if (!err && au_ftest_si(sbinfo, NO_DREVAL)) {
-+		sb->s_d_op = &aufs_dop_noreval;
-+		/* infofc(fc, "%ps", sb->s_d_op); */
-+		pr_info("%ps\n", sb->s_d_op);
++		set_default_d_op(sb, &aufs_dop_noreval);
++		/* infofc(fc, "%ps", sb->__s_d_op); */
++		pr_info("%ps\n", sb->__s_d_op);
 +		au_refresh_dop(root, /*force_reval*/0);
 +		sbinfo->si_iop_array = aufs_iop_nogetattr;
 +		au_refresh_iop(inode, /*force_getattr*/0);
@@ -25840,7 +24843,7 @@ diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk
 +endif
 diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 --- /usr/share/empty/fs/aufs/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/Makefile	2025-09-09 22:51:05.449999973 +0200
++++ linux/fs/aufs/Makefile	2025-09-29 19:49:00.446642640 +0200
 @@ -0,0 +1,47 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
@@ -25867,7 +24870,7 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 +	cpup.o whout.o wbr_policy.o \
 +	dinfo.o dentry.o \
 +	dynop.o \
-+	finfo.o file.o f_op.o \
++	finfo.o file.o f_op.o mf.o \
 +	dir.o vdir.o \
 +	iinfo.o inode.o i_op.o i_op_add.o i_op_del.o i_op_ren.o \
 +	mvdown.o ioctl.o
@@ -25889,6 +24892,126 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 +aufs-$(CONFIG_AUFS_BR_HFSPLUS) += hfsplus.o
 +aufs-$(CONFIG_AUFS_DEBUG) += debug.o
 +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o
+diff -urN /usr/share/empty/fs/aufs/mf.c linux/fs/aufs/mf.c
+--- /usr/share/empty/fs/aufs/mf.c	1970-01-01 01:00:00.000000000 +0100
++++ linux/fs/aufs/mf.c	2025-09-29 19:49:00.446642640 +0200
+@@ -0,0 +1,116 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Copyright (C) 2025 Junjiro R. Okajima
++ */
++
++/*
++ * mmapped files.
++ */
++
++#include "aufs.h"
++
++/*
++ * File hashtable.
++ * It identifies aufs file by branch's file as a key.
++ * Used by customized file_user_path() and file_user_inode() in
++ * include/linux/fs.h.
++ * This table doesn't make get/put call for the elements.
++ */
++#define N 0x0ff
++static struct hlist_bl_head au_mmapped_finfo[N];
++
++static unsigned int au_mf_hash(struct file *h_file)
++{
++	uintptr_t ptr;
++
++	BUILD_BUG_ON(sizeof(ptr) < sizeof(h_file));
++	ptr = (uintptr_t)h_file;
++	return (ptr >> 8) & N;
++}
++
++void au_mf_add(struct file *h_file, struct file *file)
++{
++	struct au_finfo *finfo;
++	unsigned int hash;
++	struct hlist_bl_head *hbl_head;
++
++	finfo = au_fi(file);
++	AuDebugOn(!au_test_mmapped(file));
++	if (atomic_read(&finfo->fi_mmapped) == 1) {
++		hash = au_mf_hash(h_file);
++		hbl_head = au_mmapped_finfo + hash;
++		au_hbl_add(&finfo->fi_mf, hbl_head);
++	}
++}
++
++void au_mf_del(struct file *h_file, struct file *file)
++{
++	struct au_finfo *finfo;
++	unsigned int hash;
++	struct hlist_bl_head *hbl_head;
++
++	finfo = au_fi(file);
++	hash = au_mf_hash(h_file);
++	hbl_head = au_mmapped_finfo + hash;
++	au_hbl_del(&finfo->fi_mf, hbl_head);
++}
++
++static struct file *au_mf_find(struct file *h_file)
++{
++	struct file *found;
++	unsigned int hash;
++	struct hlist_bl_head *hbl_head;
++	struct hlist_bl_node *hbl_node;
++	struct au_finfo *finfo;
++	struct au_hfile *hfile;
++
++	found = NULL;
++	hash = au_mf_hash(h_file);
++	hbl_head = au_mmapped_finfo + hash;
++	hlist_bl_lock(hbl_head);
++	au_hbl_for_each(hbl_node, hbl_head) {
++		if (!hbl_node)
++			continue;
++
++		finfo = container_of(hbl_node, struct au_finfo, fi_mf);
++		hfile = &finfo->fi_htop;
++		if (hfile->hf_file == h_file) {
++			found = finfo->fi_file;
++			break;
++		}
++	}
++	hlist_bl_unlock(hbl_head);
++
++	return found;
++}
++
++/* ---------------------------------------------------------------------- */
++/* declared in include/linux/fs.h */
++
++const struct path *au_do_file_user_path(struct file *h_file)
++{
++	struct path *path;
++	struct file *file;
++
++	path = NULL;
++	file = au_mf_find(h_file);
++	if (file)
++		path = &file->f_path;
++
++	return path;
++}
++EXPORT_SYMBOL_GPL(au_do_file_user_path);
++
++const struct inode *au_do_file_user_inode(struct file *h_file)
++{
++	struct inode *inode;
++	struct file *file;
++
++	inode = NULL;
++	file = au_mf_find(h_file);
++	if (file)
++		inode = file->f_inode;
++
++	return inode;
++}
++EXPORT_SYMBOL_GPL(au_do_file_user_inode);
 diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
 --- /usr/share/empty/fs/aufs/module.c	1970-01-01 01:00:00.000000000 +0100
 +++ linux/fs/aufs/module.c	2025-02-04 20:03:40.679938505 +0100
@@ -30034,7 +29157,7 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 --- /usr/share/empty/fs/aufs/super.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/super.c	2025-09-09 22:51:34.579999974 +0200
++++ linux/fs/aufs/super.c	2025-09-29 19:49:18.929975970 +0200
 @@ -0,0 +1,872 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
@@ -30772,18 +29895,18 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 +
 +	if (do_idop) {
 +		if (au_ftest_si(sbi, NO_DREVAL)) {
-+			AuDebugOn(sb->s_d_op == &aufs_dop_noreval);
-+			sb->s_d_op = &aufs_dop_noreval;
++			AuDebugOn(sb->__s_d_op == &aufs_dop_noreval);
++			set_default_d_op(sb, &aufs_dop_noreval);
 +			AuDebugOn(sbi->si_iop_array == aufs_iop_nogetattr);
 +			sbi->si_iop_array = aufs_iop_nogetattr;
 +		} else {
-+			AuDebugOn(sb->s_d_op == &aufs_dop);
-+			sb->s_d_op = &aufs_dop;
++			AuDebugOn(sb->__s_d_op == &aufs_dop);
++			set_default_d_op(sb, &aufs_dop);
 +			AuDebugOn(sbi->si_iop_array == aufs_iop);
 +			sbi->si_iop_array = aufs_iop;
 +		}
 +		pr_info("reset to %ps and %ps\n",
-+			sb->s_d_op, sbi->si_iop_array);
++			sb->__s_d_op, sbi->si_iop_array);
 +	}
 +
 +	di_write_unlock(root);
@@ -33175,7 +32298,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +}
 diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 --- /usr/share/empty/fs/aufs/vfsub.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vfsub.c	2025-09-09 22:51:34.579999974 +0200
++++ linux/fs/aufs/vfsub.c	2025-09-29 19:49:18.929975970 +0200
 @@ -0,0 +1,972 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
@@ -33654,11 +32777,11 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +		goto out;
 +
 +	rd.old_mnt_idmap = mnt_idmap(path->mnt);
-+	rd.old_dir = src_dir;
 +	rd.old_dentry = src_dentry;
++	rd.old_parent = rd.old_dentry->d_parent;
 +	rd.new_mnt_idmap = rd.old_mnt_idmap;
-+	rd.new_dir = dir;
 +	rd.new_dentry = path->dentry;
++	rd.new_parent = rd.new_dentry->d_parent;
 +	rd.delegated_inode = delegated_inode;
 +	rd.flags = flags;
 +	lockdep_off();
@@ -39387,7 +38510,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +}
 diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/linux/aufs_type.h
 --- /usr/share/empty/include/uapi/linux/aufs_type.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/include/uapi/linux/aufs_type.h	2025-09-09 22:51:34.579999974 +0200
++++ linux/include/uapi/linux/aufs_type.h	2025-09-29 19:49:18.929975970 +0200
 @@ -0,0 +1,452 @@
 +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 +/*
@@ -39431,7 +38554,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +#include <limits.h>
 +#endif /* __KERNEL__ */
 +
-+#define AUFS_VERSION	"6.16-20250804"
++#define AUFS_VERSION	"6.x-rcN-20250922"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -39741,111 +38864,840 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +/* future */
 +#define AUFS_DRINFO_MAGIC_V2	('a' << 24 | 'd' << 16 | 'r' << 8 | 0x02)
 +
-+/* ---------------------------------------------------------------------- */
++/* ---------------------------------------------------------------------- */
++
++struct aufs_wbr_fd {
++	uint32_t	oflags;
++	int16_t		brid;
++} __aligned(8);
++
++/* ---------------------------------------------------------------------- */
++
++struct aufs_ibusy {
++	uint64_t	ino, h_ino;
++	int16_t		bindex;
++} __aligned(8);
++
++/* ---------------------------------------------------------------------- */
++
++/* error code for move-down */
++/* the actual message strings are implemented in aufs-util.git */
++enum {
++	EAU_MVDOWN_OPAQUE = 1,
++	EAU_MVDOWN_WHITEOUT,
++	EAU_MVDOWN_UPPER,
++	EAU_MVDOWN_BOTTOM,
++	EAU_MVDOWN_NOUPPER,
++	EAU_MVDOWN_NOLOWERBR,
++	EAU_Last
++};
++
++/* flags for move-down */
++#define AUFS_MVDOWN_DMSG	1
++#define AUFS_MVDOWN_OWLOWER	(1 << 1)	/* overwrite lower */
++#define AUFS_MVDOWN_KUPPER	(1 << 2)	/* keep upper */
++#define AUFS_MVDOWN_ROLOWER	(1 << 3)	/* do even if lower is RO */
++#define AUFS_MVDOWN_ROLOWER_R	(1 << 4)	/* did on lower RO */
++#define AUFS_MVDOWN_ROUPPER	(1 << 5)	/* do even if upper is RO */
++#define AUFS_MVDOWN_ROUPPER_R	(1 << 6)	/* did on upper RO */
++#define AUFS_MVDOWN_BRID_UPPER	(1 << 7)	/* upper brid */
++#define AUFS_MVDOWN_BRID_LOWER	(1 << 8)	/* lower brid */
++#define AUFS_MVDOWN_FHSM_LOWER	(1 << 9)	/* find fhsm attr for lower */
++#define AUFS_MVDOWN_STFS	(1 << 10)	/* req. stfs */
++#define AUFS_MVDOWN_STFS_FAILED	(1 << 11)	/* output: stfs is unusable */
++#define AUFS_MVDOWN_BOTTOM	(1 << 12)	/* output: no more lowers */
++
++/* index for move-down */
++enum {
++	AUFS_MVDOWN_UPPER,
++	AUFS_MVDOWN_LOWER,
++	AUFS_MVDOWN_NARRAY
++};
++
++/*
++ * additional info of move-down
++ * number of free blocks and inodes.
++ * subset of struct kstatfs, but smaller and always 64bit.
++ */
++struct aufs_stfs {
++	uint64_t	f_blocks;
++	uint64_t	f_bavail;
++	uint64_t	f_files;
++	uint64_t	f_ffree;
++};
++
++struct aufs_stbr {
++	int16_t			brid;	/* optional input */
++	int16_t			bindex;	/* output */
++	struct aufs_stfs	stfs;	/* output when AUFS_MVDOWN_STFS set */
++} __aligned(8);
++
++struct aufs_mvdown {
++	uint32_t		flags;			/* input/output */
++	struct aufs_stbr	stbr[AUFS_MVDOWN_NARRAY]; /* input/output */
++	int8_t			au_errno;		/* output */
++} __aligned(8);
++
++/* ---------------------------------------------------------------------- */
++
++union aufs_brinfo {
++	/* PATH_MAX may differ between kernel-space and user-space */
++	char	_spacer[4096];
++	struct {
++		int16_t	id;
++		int	perm;
++		char	path[];
++	};
++} __aligned(8);
++
++/* ---------------------------------------------------------------------- */
++
++#define AuCtlType		'A'
++#define AUFS_CTL_RDU		_IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
++#define AUFS_CTL_RDU_INO	_IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
++#define AUFS_CTL_WBR_FD		_IOW(AuCtlType, AuCtl_WBR_FD, \
++				     struct aufs_wbr_fd)
++#define AUFS_CTL_IBUSY		_IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
++#define AUFS_CTL_MVDOWN		_IOWR(AuCtlType, AuCtl_MVDOWN, \
++				      struct aufs_mvdown)
++#define AUFS_CTL_BRINFO		_IOW(AuCtlType, AuCtl_BR, union aufs_brinfo)
++#define AUFS_CTL_FHSM_FD	_IOW(AuCtlType, AuCtl_FHSM_FD, int)
++
++#endif /* __AUFS_TYPE_H__ */
+SPDX-License-Identifier: GPL-2.0
+aufs6.x-rcN kbuild patch
+
+diff --git a/fs/Kconfig b/fs/Kconfig
+index c654a36428970..522605732463c 100644
+--- a/fs/Kconfig
++++ b/fs/Kconfig
+@@ -334,6 +334,7 @@ source "fs/pstore/Kconfig"
+ source "fs/ufs/Kconfig"
+ source "fs/erofs/Kconfig"
+ source "fs/vboxsf/Kconfig"
++source "fs/aufs/Kconfig"
+ 
+ endif # MISC_FILESYSTEMS
+ 
+diff --git a/fs/Makefile b/fs/Makefile
+index 334654f9584b9..76bdb36b7a2a8 100644
+--- a/fs/Makefile
++++ b/fs/Makefile
+@@ -130,3 +130,4 @@ obj-$(CONFIG_VBOXSF_FS)		+= vboxsf/
+ obj-$(CONFIG_ZONEFS_FS)		+= zonefs/
+ obj-$(CONFIG_BPF_LSM)		+= bpf_fs_kfuncs.o
+ obj-$(CONFIG_RESCTRL_FS)	+= resctrl/
++obj-$(CONFIG_AUFS_FS)           += aufs/
+SPDX-License-Identifier: GPL-2.0
+aufs6.x-rcN base patch
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index f6206963efbf0..1befc625702de 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -4040,6 +4040,19 @@ S:	Supported
+ F:	Documentation/dev-tools/autofdo.rst
+ F:	scripts/Makefile.autofdo
+ 
++AUFS (advanced multi layered unification filesystem) FILESYSTEM
++M:	"J. R. Okajima" <hooanon05g at gmail.com>
++L:	aufs-users at lists.sourceforge.net (members only)
++L:	linux-unionfs at vger.kernel.org
++S:	Supported
++W:	http://aufs.sourceforge.net
++T:	git://github.com/sfjro/aufs4-linux.git
++F:	Documentation/ABI/testing/debugfs-aufs
++F:	Documentation/ABI/testing/sysfs-aufs
++F:	Documentation/filesystems/aufs/
++F:	fs/aufs/
++F:	include/uapi/linux/aufs_type.h
++
+ AUXILIARY BUS DRIVER
+ M:	Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+ R:	Dave Ertman <david.m.ertman at intel.com>
+diff --git a/drivers/block/loop.c b/drivers/block/loop.c
+index 053a086d547ec..28f606fd10056 100644
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -630,6 +630,26 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+ 	goto done;
+ }
+ 
++/*
++ * for AUFS
++ * no get/put for file.
++ */
++/* Just to make the compiler silence, declare it */
++struct file *loop_backing_file(struct super_block *sb);
++struct file *loop_backing_file(struct super_block *sb)
++{
++	struct file *ret;
++	struct loop_device *l;
++
++	ret = NULL;
++	if (MAJOR(sb->s_dev) == LOOP_MAJOR) {
++		l = sb->s_bdev->bd_disk->private_data;
++		ret = l->lo_backing_file;
++	}
++	return ret;
++}
++EXPORT_SYMBOL_GPL(loop_backing_file);
++
+ /* loop sysfs attributes */
+ 
+ static ssize_t loop_attr_show(struct device *dev, char *page,
+diff --git a/fs/dcache.c b/fs/dcache.c
+index 60046ae23d514..f69e432ca64cd 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -1277,6 +1277,9 @@ enum d_walk_ret {
+ 	D_WALK_SKIP,
+ };
+ 
++/* AUFS calls d_walk(). Just to make the compiler silence, declare it */
++void d_walk(struct dentry *parent, void *data,
++		   enum d_walk_ret (*enter)(void *, struct dentry *));
+ /**
+  * d_walk - walk the dentry tree
+  * @parent:	start of walk
+@@ -1285,7 +1288,7 @@ enum d_walk_ret {
+  *
+  * The @enter() callbacks are called with d_lock held.
+  */
+-static void d_walk(struct dentry *parent, void *data,
++void d_walk(struct dentry *parent, void *data,
+ 		   enum d_walk_ret (*enter)(void *, struct dentry *))
+ {
+ 	struct dentry *this_parent, *dentry;
+diff --git a/fs/fcntl.c b/fs/fcntl.c
+index 5598e4d574229..90af6a47fbadc 100644
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -36,7 +36,7 @@
+ 
+ #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
+ 
+-static int setfl(int fd, struct file * filp, unsigned int arg)
++int setfl(int fd, struct file * filp, unsigned int arg)
+ {
+ 	struct inode * inode = file_inode(filp);
+ 	int error = 0;
+@@ -66,6 +66,8 @@ static int setfl(int fd, struct file * filp, unsigned int arg)
+ 
+ 	if (filp->f_op->check_flags)
+ 		error = filp->f_op->check_flags(arg);
++	if (!error && filp->f_op->setfl)
++		error = filp->f_op->setfl(filp, arg);
+ 	if (error)
+ 		return error;
+ 
+diff --git a/fs/namespace.c b/fs/namespace.c
+index 51f77c65c0c61..c97877af1142b 100644
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -1009,6 +1009,12 @@ static inline int check_mnt(struct mount *mnt)
+ 	return mnt->mnt_ns == current->nsproxy->mnt_ns;
+ }
+ 
++/* for aufs, CONFIG_AUFS_BR_FUSE */
++int is_current_mnt_ns(struct vfsmount *mnt)
++{
++	return check_mnt(real_mount(mnt));
++}
++
+ static inline bool check_anonymous_mnt(struct mount *mnt)
+ {
+ 	u64 seq;
+diff --git a/fs/splice.c b/fs/splice.c
+index f5094b6d00a09..19c0ba712acc1 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -930,7 +930,7 @@ static int warn_unsupported(struct file *file, const char *op)
+ /*
+  * Attempt to initiate a splice from pipe to file.
+  */
+-static ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
++ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+ 			      loff_t *ppos, size_t len, unsigned int flags)
+ {
+ 	if (unlikely(!out->f_op->splice_write))
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 601d036a6c78e..92a229c4b95c1 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -1226,6 +1226,7 @@ extern void fasync_free(struct fasync_struct *);
+ /* can be called from interrupts */
+ extern void kill_fasync(struct fasync_struct **, int, int);
+ 
++extern int setfl(int fd, struct file *filp, unsigned int arg);
+ extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
+ extern int f_setown(struct file *filp, int who, int force);
+ extern void f_delown(struct file *filp);
+@@ -2175,6 +2176,7 @@ struct file_operations {
+ 	int (*lock) (struct file *, int, struct file_lock *);
+ 	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+ 	int (*check_flags)(int);
++	int (*setfl)(struct file *, unsigned long);
+ 	int (*flock) (struct file *, int, struct file_lock *);
+ 	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+ 	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
+index 67964dc4db952..517ef3ea8c85f 100644
+--- a/include/linux/lockdep.h
++++ b/include/linux/lockdep.h
+@@ -210,6 +210,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
+ 	return lock->key == key;
+ }
+ 
++struct lock_class *lockdep_hlock_class(struct held_lock *hlock);
 +
-+struct aufs_wbr_fd {
-+	uint32_t	oflags;
-+	int16_t		brid;
-+} __aligned(8);
+ /*
+  * Acquire a lock.
+  *
+diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
+index 70b366b648160..08cfdabb2721f 100644
+--- a/include/linux/mnt_namespace.h
++++ b/include/linux/mnt_namespace.h
+@@ -10,6 +10,7 @@ struct mnt_namespace;
+ struct fs_struct;
+ struct user_namespace;
+ struct ns_common;
++struct vfsmount;
+ 
+ extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,
+ 		struct user_namespace *, struct fs_struct *);
+@@ -17,6 +18,8 @@ extern void put_mnt_ns(struct mnt_namespace *ns);
+ DEFINE_FREE(put_mnt_ns, struct mnt_namespace *, if (!IS_ERR_OR_NULL(_T)) put_mnt_ns(_T))
+ extern struct ns_common *from_mnt_ns(struct mnt_namespace *);
+ 
++extern int is_current_mnt_ns(struct vfsmount *mnt);
 +
-+/* ---------------------------------------------------------------------- */
+ extern const struct file_operations proc_mounts_operations;
+ extern const struct file_operations proc_mountinfo_operations;
+ extern const struct file_operations proc_mountstats_operations;
+diff --git a/include/linux/splice.h b/include/linux/splice.h
+index 9dec4861d09f6..14583d8468640 100644
+--- a/include/linux/splice.h
++++ b/include/linux/splice.h
+@@ -108,4 +108,7 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
+ 
+ extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
+ extern const struct pipe_buf_operations default_pipe_buf_ops;
 +
-+struct aufs_ibusy {
-+	uint64_t	ino, h_ino;
-+	int16_t		bindex;
-+} __aligned(8);
++extern ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
++			      loff_t *ppos, size_t len, unsigned int flags);
+ #endif
+diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
+index 2d4c5bab5af88..b720d966c7b92 100644
+--- a/kernel/locking/lockdep.c
++++ b/kernel/locking/lockdep.c
+@@ -224,7 +224,7 @@ unsigned long max_lock_class_idx;
+ struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
+ DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS);
+ 
+-static inline struct lock_class *hlock_class(struct held_lock *hlock)
++inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
+ {
+ 	unsigned int class_idx = hlock->class_idx;
+ 
+@@ -245,6 +245,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock)
+ 	 */
+ 	return lock_classes + class_idx;
+ }
++#define hlock_class(hlock) lockdep_hlock_class(hlock)
+ 
+ #ifdef CONFIG_LOCK_STAT
+ static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats);
+SPDX-License-Identifier: GPL-2.0
+aufs6.x-rcN mmap patch
+
+diff --git a/fs/Makefile b/fs/Makefile
+index 76bdb36b7a2a8..fa238fd4f2fd6 100644
+--- a/fs/Makefile
++++ b/fs/Makefile
+@@ -17,6 +17,9 @@ obj-y :=	open.o read_write.o file_table.o super.o \
+ 		fs_types.o fs_context.o fs_parser.o fsopen.o init.o \
+ 		kernel_read_file.o mnt_idmapping.o remap_range.o pidfs.o \
+ 		file_attr.o
++ifeq (${CONFIG_AUFS_FS},m)
++obj-y += au_mf.o
++endif
+ 
+ obj-$(CONFIG_BUFFER_HEAD)	+= buffer.o mpage.o
+ obj-$(CONFIG_PROC_FS)		+= proc_namespace.o
+diff --git a/fs/au_mf.c b/fs/au_mf.c
+new file mode 100644
+index 0000000000000..bacf13696a772
+--- /dev/null
++++ b/fs/au_mf.c
+@@ -0,0 +1,60 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Copyright (C) 2025 Junjiro R. Okajima
++ */
 +
-+/* ---------------------------------------------------------------------- */
++#include <linux/fs.h>
++#include <linux/module.h>
 +
-+/* error code for move-down */
-+/* the actual message strings are implemented in aufs-util.git */
-+enum {
-+	EAU_MVDOWN_OPAQUE = 1,
-+	EAU_MVDOWN_WHITEOUT,
-+	EAU_MVDOWN_UPPER,
-+	EAU_MVDOWN_BOTTOM,
-+	EAU_MVDOWN_NOUPPER,
-+	EAU_MVDOWN_NOLOWERBR,
-+	EAU_Last
-+};
++#if IS_MODULE(CONFIG_AUFS_FS)
++/*
++ * This au_mf.c (aufs mmapped files) is for external AUFS module only,
++ * and statically linked to kernel.
++ * See also $srctree/fs/Makefile.
++ * This linking may seem to be tricky. It is due to support the case when AUFS
++ * is configured as an external module, eg. VFS calls a function defined in the
++ * dynamic module.
++ */
++#else
++BUILD_BUG_ON_MSG(1, "CONFIG_AUFS_FS is disabled.");
++#endif
 +
-+/* flags for move-down */
-+#define AUFS_MVDOWN_DMSG	1
-+#define AUFS_MVDOWN_OWLOWER	(1 << 1)	/* overwrite lower */
-+#define AUFS_MVDOWN_KUPPER	(1 << 2)	/* keep upper */
-+#define AUFS_MVDOWN_ROLOWER	(1 << 3)	/* do even if lower is RO */
-+#define AUFS_MVDOWN_ROLOWER_R	(1 << 4)	/* did on lower RO */
-+#define AUFS_MVDOWN_ROUPPER	(1 << 5)	/* do even if upper is RO */
-+#define AUFS_MVDOWN_ROUPPER_R	(1 << 6)	/* did on upper RO */
-+#define AUFS_MVDOWN_BRID_UPPER	(1 << 7)	/* upper brid */
-+#define AUFS_MVDOWN_BRID_LOWER	(1 << 8)	/* lower brid */
-+#define AUFS_MVDOWN_FHSM_LOWER	(1 << 9)	/* find fhsm attr for lower */
-+#define AUFS_MVDOWN_STFS	(1 << 10)	/* req. stfs */
-+#define AUFS_MVDOWN_STFS_FAILED	(1 << 11)	/* output: stfs is unusable */
-+#define AUFS_MVDOWN_BOTTOM	(1 << 12)	/* output: no more lowers */
++const struct path *au_file_user_path(const struct file *f)
++{
++	const struct path *path,
++		*(*func)(const struct file *f),
++		*au_do_file_user_path(const struct file *f);
 +
-+/* index for move-down */
-+enum {
-+	AUFS_MVDOWN_UPPER,
-+	AUFS_MVDOWN_LOWER,
-+	AUFS_MVDOWN_NARRAY
-+};
++	path = NULL;
++	func = symbol_get(au_do_file_user_path);
++	if (unlikely(!func))
++		/* "aufs" module is not loaded */
++		goto out;
 +
-+/*
-+ * additional info of move-down
-+ * number of free blocks and inodes.
-+ * subset of struct kstatfs, but smaller and always 64bit.
-+ */
-+struct aufs_stfs {
-+	uint64_t	f_blocks;
-+	uint64_t	f_bavail;
-+	uint64_t	f_files;
-+	uint64_t	f_ffree;
-+};
++	path = func(f);
++	symbol_put(au_do_file_user_path);
 +
-+struct aufs_stbr {
-+	int16_t			brid;	/* optional input */
-+	int16_t			bindex;	/* output */
-+	struct aufs_stfs	stfs;	/* output when AUFS_MVDOWN_STFS set */
-+} __aligned(8);
++out:
++	return path;
++}
++EXPORT_SYMBOL_GPL(au_file_user_path);
 +
-+struct aufs_mvdown {
-+	uint32_t		flags;			/* input/output */
-+	struct aufs_stbr	stbr[AUFS_MVDOWN_NARRAY]; /* input/output */
-+	int8_t			au_errno;		/* output */
-+} __aligned(8);
++const struct inode *au_file_user_inode(const struct file *f)
++{
++	const struct inode *inode,
++		*(*func)(const struct file *f),
++		*au_do_file_user_inode(const struct file *f);
 +
-+/* ---------------------------------------------------------------------- */
++	inode = NULL;
++	func = symbol_get(au_do_file_user_inode);
++	if (unlikely(!func))
++		/* "aufs" module is not loaded */
++		goto out;
 +
-+union aufs_brinfo {
-+	/* PATH_MAX may differ between kernel-space and user-space */
-+	char	_spacer[4096];
-+	struct {
-+		int16_t	id;
-+		int	perm;
-+		char	path[];
-+	};
-+} __aligned(8);
++	inode = func(f);
++	symbol_put(au_do_file_user_inode);
 +
-+/* ---------------------------------------------------------------------- */
++out:
++	return inode;
++}
++EXPORT_SYMBOL_GPL(au_file_user_inode);
+diff --git a/fs/aufs/file.h b/fs/aufs/file.h
+index db7eb6ba8ef0f..6781ffc5b093c 100644
+--- a/fs/aufs/file.h
++++ b/fs/aufs/file.h
+@@ -108,8 +108,8 @@ struct file *au_read_pre(struct file *file, int keep_fi, unsigned int lsc);
+ void au_mf_add(struct file *h_file, struct file *file);
+ void au_mf_del(struct file *h_file, struct file *file);
+ #if IS_MODULE(CONFIG_AUFS_FS)
+-const struct path *au_do_file_user_path(struct file *h_file);
+-const struct inode *au_do_file_user_inode(struct file *h_file);
++const struct path *au_do_file_user_path(const struct file *h_file);
++const struct inode *au_do_file_user_inode(const struct file *h_file);
+ #elif IS_BUILTIN(CONFIG_AUFS_FS)
+ /* declared in include/linux/fs.h */
+ #endif
+diff --git a/fs/aufs/mf.c b/fs/aufs/mf.c
+index 109578a2cc18d..d97837d45e545 100644
+--- a/fs/aufs/mf.c
++++ b/fs/aufs/mf.c
+@@ -19,7 +19,7 @@
+ #define N 0x0ff
+ static struct hlist_bl_head au_mmapped_finfo[N];
+ 
+-static unsigned int au_mf_hash(struct file *h_file)
++static unsigned int au_mf_hash(const struct file *h_file)
+ {
+ 	uintptr_t ptr;
+ 
+@@ -55,7 +55,7 @@ void au_mf_del(struct file *h_file, struct file *file)
+ 	au_hbl_del(&finfo->fi_mf, hbl_head);
+ }
+ 
+-static struct file *au_mf_find(struct file *h_file)
++static struct file *au_mf_find(const struct file *h_file)
+ {
+ 	struct file *found;
+ 	unsigned int hash;
+@@ -87,7 +87,7 @@ static struct file *au_mf_find(struct file *h_file)
+ /* ---------------------------------------------------------------------- */
+ /* declared in include/linux/fs.h */
+ 
+-const struct path *au_do_file_user_path(struct file *h_file)
++const struct path *au_do_file_user_path(const struct file *h_file)
+ {
+ 	struct path *path;
+ 	struct file *file;
+@@ -101,7 +101,7 @@ const struct path *au_do_file_user_path(struct file *h_file)
+ }
+ EXPORT_SYMBOL_GPL(au_do_file_user_path);
+ 
+-const struct inode *au_do_file_user_inode(struct file *h_file)
++const struct inode *au_do_file_user_inode(const struct file *h_file)
+ {
+ 	struct inode *inode;
+ 	struct file *file;
+diff --git a/fs/proc/base.c b/fs/proc/base.c
+index 62d35631ba8c3..7c3061d1df6cb 100644
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -1788,7 +1788,7 @@ static int proc_exe_link(struct dentry *dentry, struct path *exe_path)
+ 	exe_file = get_task_exe_file(task);
+ 	put_task_struct(task);
+ 	if (exe_file) {
+-		*exe_path = exe_file->f_path;
++		*exe_path = *file_user_path(exe_file);
+ 		path_get(&exe_file->f_path);
+ 		fput(exe_file);
+ 		return 0;
+diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
+index c6e7ebc637562..12c340dcdec3d 100644
+--- a/fs/proc/nommu.c
++++ b/fs/proc/nommu.c
+@@ -39,7 +39,7 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
+ 	file = region->vm_file;
+ 
+ 	if (file) {
+-		struct inode *inode = file_inode(region->vm_file);
++		struct inode *inode = file_user_inode(region->vm_file);
+ 		dev = inode->i_sb->s_dev;
+ 		ino = inode->i_ino;
+ 	}
+diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
+index 59bfd61d653aa..a67d967f75d39 100644
+--- a/fs/proc/task_nommu.c
++++ b/fs/proc/task_nommu.c
+@@ -137,7 +137,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma)
+ 	file = vma->vm_file;
+ 
+ 	if (file) {
+-		struct inode *inode = file_inode(vma->vm_file);
++		struct inode *inode = file_user_inode(vma->vm_file);
+ 		dev = inode->i_sb->s_dev;
+ 		ino = inode->i_ino;
+ 		pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 92a229c4b95c1..a921b5cc813db 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -2884,6 +2884,21 @@ struct file *dentry_create(const struct path *path, int flags, umode_t mode,
+ 			   const struct cred *cred);
+ struct path *backing_file_user_path(const struct file *f);
+ 
++#if IS_MODULE(CONFIG_AUFS_FS)
++/* fs/au_mf.c */
++const struct path *au_file_user_path(const struct file *f);
++const struct inode *au_file_user_inode(const struct file *f);
++#elif IS_BUILTIN(CONFIG_AUFS_FS)
++/* fs/aufs/mf.c */
++const struct path *au_do_file_user_path(const struct file *f);
++const struct inode *au_do_file_user_inode(const struct file *f);
++#define au_file_user_path(f)	au_do_file_user_path(f)
++#define au_file_user_inode(f)	au_do_file_user_inode(f)
++#else
++#define au_file_user_path(f)	NULL
++#define au_file_user_inode(f)	NULL
++#endif
 +
-+#define AuCtlType		'A'
-+#define AUFS_CTL_RDU		_IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
-+#define AUFS_CTL_RDU_INO	_IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
-+#define AUFS_CTL_WBR_FD		_IOW(AuCtlType, AuCtl_WBR_FD, \
-+				     struct aufs_wbr_fd)
-+#define AUFS_CTL_IBUSY		_IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
-+#define AUFS_CTL_MVDOWN		_IOWR(AuCtlType, AuCtl_MVDOWN, \
-+				      struct aufs_mvdown)
-+#define AUFS_CTL_BRINFO		_IOW(AuCtlType, AuCtl_BR, union aufs_brinfo)
-+#define AUFS_CTL_FHSM_FD	_IOW(AuCtlType, AuCtl_FHSM_FD, int)
+ /*
+  * When mmapping a file on a stackable filesystem (e.g., overlayfs), the file
+  * stored in ->vm_file is a backing file whose f_inode is on the underlying
+@@ -2896,15 +2911,25 @@ struct path *backing_file_user_path(const struct file *f);
+ /* Get the path to display in /proc/<pid>/maps */
+ static inline const struct path *file_user_path(const struct file *f)
+ {
++	const struct path *path;
++
+ 	if (unlikely(f->f_mode & FMODE_BACKING))
+ 		return backing_file_user_path(f);
++	path = au_file_user_path(f);
++	if (path)
++		return path;
+ 	return &f->f_path;
+ }
+ /* Get the inode whose inode number to display in /proc/<pid>/maps */
+ static inline const struct inode *file_user_inode(const struct file *f)
+ {
++	const struct inode *inode;
 +
-+#endif /* __AUFS_TYPE_H__ */
+ 	if (unlikely(f->f_mode & FMODE_BACKING))
+ 		return d_inode(backing_file_user_path(f)->dentry);
++	inode = au_file_user_inode(f);
++	if (inode)
++		return inode;
+ 	return file_inode(f);
+ }
+ 
+SPDX-License-Identifier: GPL-2.0
+aufs6.x-rcN standalone patch
+
+diff --git a/fs/dcache.c b/fs/dcache.c
+index f69e432ca64cd..ab035b1ad4fcd 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -1387,6 +1387,7 @@ void d_walk(struct dentry *parent, void *data,
+ 	seq = 1;
+ 	goto again;
+ }
++EXPORT_SYMBOL_GPL(d_walk);
+ 
+ struct check_mount {
+ 	struct vfsmount *mnt;
+@@ -2925,6 +2926,7 @@ void d_exchange(struct dentry *dentry1, struct dentry *dentry2)
+ 
+ 	write_sequnlock(&rename_lock);
+ }
++EXPORT_SYMBOL_GPL(d_exchange);
+ 
+ /**
+  * d_ancestor - search for an ancestor
+diff --git a/fs/exec.c b/fs/exec.c
+index e861a4b7ffda9..10b3646c6b2f0 100644
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -120,6 +120,7 @@ bool path_noexec(const struct path *path)
+ 	return (path->mnt->mnt_flags & MNT_NOEXEC) ||
+ 	       (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
+ }
++EXPORT_SYMBOL_GPL(path_noexec);
+ 
+ #ifdef CONFIG_MMU
+ /*
+diff --git a/fs/fcntl.c b/fs/fcntl.c
+index 90af6a47fbadc..7d4eaaff13bc9 100644
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -89,6 +89,7 @@ int setfl(int fd, struct file * filp, unsigned int arg)
+  out:
+ 	return error;
+ }
++EXPORT_SYMBOL_GPL(setfl);
+ 
+ /*
+  * Allocate an file->f_owner struct if it doesn't exist, handling racing
+diff --git a/fs/file_table.c b/fs/file_table.c
+index 81c72576e548f..8852477affcfe 100644
+--- a/fs/file_table.c
++++ b/fs/file_table.c
+@@ -256,6 +256,7 @@ struct file *alloc_empty_file(int flags, const struct cred *cred)
+ 	}
+ 	return ERR_PTR(-ENFILE);
+ }
++EXPORT_SYMBOL_GPL(alloc_empty_file);
+ 
+ /*
+  * Variant of alloc_empty_file() that doesn't check and modify nr_files.
+diff --git a/fs/namespace.c b/fs/namespace.c
+index c97877af1142b..175b3f7ac8cdf 100644
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -1014,6 +1014,7 @@ int is_current_mnt_ns(struct vfsmount *mnt)
+ {
+ 	return check_mnt(real_mount(mnt));
+ }
++EXPORT_SYMBOL_GPL(is_current_mnt_ns);
+ 
+ static inline bool check_anonymous_mnt(struct mount *mnt)
+ {
+@@ -2337,6 +2338,7 @@ struct path *collect_paths(const struct path *path,
+ 		path_get(p);
+ 	return res;
+ }
++EXPORT_SYMBOL_GPL(collect_paths);
+ 
+ void drop_collected_paths(struct path *paths, struct path *prealloc)
+ {
+@@ -2345,6 +2347,7 @@ void drop_collected_paths(struct path *paths, struct path *prealloc)
+ 	if (paths != prealloc)
+ 		kfree(paths);
+ }
++EXPORT_SYMBOL_GPL(drop_collected_paths);
+ 
+ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *, bool);
+ 
+diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c
+index 079b868552c21..70f989d2e4092 100644
+--- a/fs/notify/fsnotify.c
++++ b/fs/notify/fsnotify.c
+@@ -225,6 +225,7 @@ int fsnotify_pre_content(const struct path *path, const loff_t *ppos,
+ 	return fsnotify_parent(path->dentry, FS_PRE_ACCESS, &range,
+ 			       FSNOTIFY_EVENT_FILE_RANGE);
+ }
++EXPORT_SYMBOL_GPL(fsnotify_pre_content);
+ 
+ /*
+  * Notify this dentry's parent about a child's events with child name info
+diff --git a/fs/notify/group.c b/fs/notify/group.c
+index 18446b7b0d495..09138e0b8a6a5 100644
+--- a/fs/notify/group.c
++++ b/fs/notify/group.c
+@@ -100,6 +100,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
+ {
+ 	refcount_inc(&group->refcnt);
+ }
++EXPORT_SYMBOL_GPL(fsnotify_get_group);
+ 
+ /*
+  * Drop a reference to a group.  Free it if it's through.
+diff --git a/fs/open.c b/fs/open.c
+index 9655158c38853..797f58fa857d1 100644
+--- a/fs/open.c
++++ b/fs/open.c
+@@ -69,6 +69,7 @@ int do_truncate(struct mnt_idmap *idmap, struct dentry *dentry,
+ 	inode_unlock(dentry->d_inode);
+ 	return ret;
+ }
++EXPORT_SYMBOL_GPL(do_truncate);
+ 
+ int vfs_truncate(const struct path *path, loff_t length)
+ {
+diff --git a/fs/read_write.c b/fs/read_write.c
+index c5b6265d984ba..93a9a9d9e9da5 100644
+--- a/fs/read_write.c
++++ b/fs/read_write.c
+@@ -579,6 +579,7 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
+ 	inc_syscr(current);
+ 	return ret;
+ }
++EXPORT_SYMBOL_GPL(vfs_read);
+ 
+ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
+ {
+@@ -694,6 +695,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
+ 	file_end_write(file);
+ 	return ret;
+ }
++EXPORT_SYMBOL_GPL(vfs_write);
+ 
+ /* file_ppos returns &file->f_pos or NULL if file is stream */
+ static inline loff_t *file_ppos(struct file *file)
+diff --git a/fs/splice.c b/fs/splice.c
+index 19c0ba712acc1..657ad35bdf9ff 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -937,6 +937,7 @@ ssize_t do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+ 		return warn_unsupported(out, "write");
+ 	return out->f_op->splice_write(pipe, out, ppos, len, flags);
+ }
++EXPORT_SYMBOL_GPL(do_splice_from);
+ 
+ /*
+  * Indicate to the caller that there was a premature EOF when reading from the
+diff --git a/fs/xattr.c b/fs/xattr.c
+index 8851a5ef34f5a..01880c373f068 100644
+--- a/fs/xattr.c
++++ b/fs/xattr.c
+@@ -405,6 +405,7 @@ vfs_getxattr_alloc(struct mnt_idmap *idmap, struct dentry *dentry,
+ 	*xattr_value = value;
+ 	return error;
+ }
++EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
+ 
+ ssize_t
+ __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
+diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
+index b720d966c7b92..02c8ce18d6e0d 100644
+--- a/kernel/locking/lockdep.c
++++ b/kernel/locking/lockdep.c
+@@ -245,6 +245,7 @@ inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
+ 	 */
+ 	return lock_classes + class_idx;
+ }
++EXPORT_SYMBOL_GPL(lockdep_hlock_class);
+ #define hlock_class(hlock) lockdep_hlock_class(hlock)
+ 
+ #ifdef CONFIG_LOCK_STAT
+diff --git a/kernel/task_work.c b/kernel/task_work.c
+index d1efec571a4a4..eed18cc26c370 100644
+--- a/kernel/task_work.c
++++ b/kernel/task_work.c
+@@ -230,3 +230,4 @@ void task_work_run(void)
+ 		} while (work);
+ 	}
+ }
++EXPORT_SYMBOL_GPL(task_work_run);
+diff --git a/security/security.c b/security/security.c
+index ad163f06bf7ab..c150be79e9e90 100644
+--- a/security/security.c
++++ b/security/security.c
+@@ -1948,6 +1948,7 @@ int security_path_rmdir(const struct path *dir, struct dentry *dentry)
+ 		return 0;
+ 	return call_int_hook(path_rmdir, dir, dentry);
+ }
++EXPORT_SYMBOL_GPL(security_path_rmdir);
+ 
+ /**
+  * security_path_unlink() - Check if removing a hard link is allowed
+@@ -1983,6 +1984,7 @@ int security_path_symlink(const struct path *dir, struct dentry *dentry,
+ 		return 0;
+ 	return call_int_hook(path_symlink, dir, dentry, old_name);
+ }
++EXPORT_SYMBOL_GPL(security_path_symlink);
+ 
+ /**
+  * security_path_link - Check if creating a hard link is allowed
+@@ -2001,6 +2003,7 @@ int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
+ 		return 0;
+ 	return call_int_hook(path_link, old_dentry, new_dir, new_dentry);
+ }
++EXPORT_SYMBOL_GPL(security_path_link);
+ 
+ /**
+  * security_path_rename() - Check if renaming a file is allowed
+@@ -2062,6 +2065,7 @@ int security_path_chmod(const struct path *path, umode_t mode)
+ 		return 0;
+ 	return call_int_hook(path_chmod, path, mode);
+ }
++EXPORT_SYMBOL_GPL(security_path_chmod);
+ 
+ /**
+  * security_path_chown() - Check if changing the file's owner/group is allowed
+@@ -2079,6 +2083,7 @@ int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
+ 		return 0;
+ 	return call_int_hook(path_chown, path, uid, gid);
+ }
++EXPORT_SYMBOL_GPL(security_path_chown);
+ 
+ /**
+  * security_path_chroot() - Check if changing the root directory is allowed
+@@ -2323,6 +2328,7 @@ int security_inode_permission(struct inode *inode, int mask)
+ 		return 0;
+ 	return call_int_hook(inode_permission, inode, mask);
+ }
++EXPORT_SYMBOL_GPL(security_inode_permission);
+ 
+ /**
+  * security_inode_setattr() - Check if setting file attributes is allowed
+@@ -2873,6 +2879,7 @@ int security_file_permission(struct file *file, int mask)
+ {
+ 	return call_int_hook(file_permission, file, mask);
+ }
++EXPORT_SYMBOL_GPL(security_file_permission);
+ 
+ /**
+  * security_file_alloc() - Allocate and init a file's LSM blob
+@@ -3175,6 +3182,7 @@ int security_file_truncate(struct file *file)
+ {
+ 	return call_int_hook(file_truncate, file);
+ }
++EXPORT_SYMBOL_GPL(security_file_truncate);
+ 
+ /**
+  * security_task_alloc() - Allocate a task's LSM blob
 SPDX-License-Identifier: GPL-2.0
-aufs6.16 loopback patch
+aufs6.x-rcN loopback patch
 
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index f4fbdf6c64117..904ac895ddd7d 100644
+index 28f606fd10056..5b4364bc9cbd5 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
 @@ -52,7 +52,7 @@ struct loop_device {
@@ -39857,7 +39709,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	unsigned int	lo_min_dio_size;
  	struct block_device *lo_device;
  
-@@ -431,6 +431,15 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
+@@ -441,6 +441,15 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
  	}
  }
  
@@ -39873,7 +39725,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  static void loop_reread_partitions(struct loop_device *lo)
  {
  	int rc;
-@@ -532,6 +541,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -542,6 +551,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  {
  	struct file *file = fget(arg);
  	struct file *old_file;
@@ -39881,7 +39733,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	unsigned int memflags;
  	int error;
  	bool partscan;
-@@ -560,11 +570,19 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -570,11 +580,19 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	if (!(lo->lo_flags & LO_FLAGS_READ_ONLY))
  		goto out_err;
  
@@ -39901,7 +39753,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  
  	error = -EINVAL;
  
-@@ -584,6 +602,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -594,6 +612,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	memflags = blk_mq_freeze_queue(lo->lo_queue);
  	mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
  	loop_assign_backing_file(lo, file);
@@ -39909,7 +39761,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	loop_update_dio(lo);
  	blk_mq_unfreeze_queue(lo->lo_queue, memflags);
  	partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
-@@ -603,6 +622,9 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -613,6 +632,9 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	 * dependency.
  	 */
  	fput(old_file);
@@ -39919,7 +39771,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	dev_set_uevent_suppress(disk_to_dev(lo->lo_disk), 0);
  	if (partscan)
  		loop_reread_partitions(lo);
-@@ -616,6 +638,9 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -626,6 +648,9 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	loop_global_unlock(lo, is_loop);
  out_putf:
  	fput(file);
@@ -39929,7 +39781,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	dev_set_uevent_suppress(disk_to_dev(lo->lo_disk), 0);
  	goto done;
  }
-@@ -993,6 +1018,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
+@@ -1003,6 +1028,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
  			  const struct loop_config *config)
  {
  	struct file *file = fget(config->fd);
@@ -39937,7 +39789,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	struct queue_limits lim;
  	int error;
  	loff_t size;
-@@ -1011,6 +1037,13 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
+@@ -1021,6 +1047,13 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
  	/* This is safe, since we have a reference from open(). */
  	__module_get(THIS_MODULE);
  
@@ -39951,7 +39803,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	/*
  	 * If we don't hold exclusive handle for the device, upgrade to it
  	 * here to avoid changing device under exclusive owner.
-@@ -1065,6 +1098,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
+@@ -1075,6 +1108,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
  
  	lo->lo_device = bdev;
  	loop_assign_backing_file(lo, file);
@@ -39959,7 +39811,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  
  	lim = queue_limits_start_update(lo->lo_queue);
  	loop_update_limits(lo, &lim, config->block_size);
-@@ -1115,6 +1149,8 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
+@@ -1125,6 +1159,8 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
  		bd_abort_claiming(bdev, loop_configure);
  out_putf:
  	fput(file);
@@ -39968,7 +39820,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	/* This is safe: open() is still holding a reference. */
  	module_put(THIS_MODULE);
  	return error;
-@@ -1124,11 +1160,13 @@ static void __loop_clr_fd(struct loop_device *lo)
+@@ -1134,11 +1170,13 @@ static void __loop_clr_fd(struct loop_device *lo)
  {
  	struct queue_limits lim;
  	struct file *filp;
@@ -39982,7 +39834,7 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  	spin_unlock_irq(&lo->lo_lock);
  
  	lo->lo_device = NULL;
-@@ -1195,6 +1233,8 @@ static void __loop_clr_fd(struct loop_device *lo)
+@@ -1205,6 +1243,8 @@ static void __loop_clr_fd(struct loop_device *lo)
  	 * fput can take open_mutex which is usually taken before lo_mutex.
  	 */
  	fput(filp);
@@ -39992,10 +39844,10 @@ index f4fbdf6c64117..904ac895ddd7d 100644
  
  static int loop_clr_fd(struct loop_device *lo)
 diff --git a/fs/aufs/f_op.c b/fs/aufs/f_op.c
-index db7e9fcf1056a..6d202136d29af 100644
+index 11fed959853f3..28abe380982e2 100644
 --- a/fs/aufs/f_op.c
 +++ b/fs/aufs/f_op.c
-@@ -317,7 +317,7 @@ static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter)
+@@ -325,7 +325,7 @@ static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter)
  	if (IS_ERR(h_file))
  		goto out;
  
@@ -40051,7 +39903,7 @@ index 519efba31c700..ac701381da792 100644
  
  #endif /* __KERNEL__ */
 diff --git a/fs/aufs/super.c b/fs/aufs/super.c
-index e867aa6e757a6..4a4f96e294315 100644
+index 1cfb665377b3d..b9d1a80bae88d 100644
 --- a/fs/aufs/super.c
 +++ b/fs/aufs/super.c
 @@ -758,7 +758,10 @@ const struct super_operations aufs_sop = {
@@ -40067,12 +39919,12 @@ index e867aa6e757a6..4a4f96e294315 100644
  
  /* ---------------------------------------------------------------------- */
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 5a4ba4c04cd98..926501908120b 100644
+index a921b5cc813db..2fb42df81183f 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -2370,6 +2370,11 @@ struct super_operations {
- 	long (*free_cached_objects)(struct super_block *,
- 				    struct shrink_control *);
+@@ -2382,6 +2382,11 @@ struct super_operations {
+ 	 */
+ 	int (*remove_bdev)(struct super_block *sb, struct block_device *bdev);
  	void (*shutdown)(struct super_block *sb);
 +
 +#if IS_ENABLED(CONFIG_BLK_DEV_LOOP) || IS_ENABLED(CONFIG_BLK_DEV_LOOP_MODULE)
diff --git a/kernel-multiarch.config b/kernel-multiarch.config
index a80b81ab..670bfbf0 100644
--- a/kernel-multiarch.config
+++ b/kernel-multiarch.config
@@ -25,8 +25,6 @@ CRYPTO_ARIA_AESNI_AVX2_X86_64 all=m
 CRYPTO_ARIA_AESNI_AVX_X86_64 all=m
 CRYPTO_ARIA_GFNI_AVX512_X86_64 all=m
 CRYPTO_BLAKE2B_NEON arm=m
-CRYPTO_BLAKE2S_ARM arm=y
-CRYPTO_BLAKE2S_X86 x86_64=y
 CRYPTO_BLOWFISH_X86_64 all=m
 CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 all=m
 CRYPTO_CAMELLIA_AESNI_AVX_X86_64 all=m
@@ -48,16 +46,7 @@ CRYPTO_SERPENT_AVX2_X86_64 all=m
 CRYPTO_SERPENT_AVX_X86_64 all=m
 CRYPTO_SERPENT_SSE2_586 all=m
 CRYPTO_SERPENT_SSE2_X86_64 all=m
-CRYPTO_SHA1_ARM arm=m
-CRYPTO_SHA1_ARM64_CE arm64=m
-CRYPTO_SHA1_ARM_CE arm=m
-CRYPTO_SHA1_ARM_NEON arm=m
-CRYPTO_SHA1_SSSE3 all=m
 CRYPTO_SHA3_ARM64 arm64=m
-CRYPTO_SHA512_ARM arm=m
-CRYPTO_SHA512_ARM64 arm64=m
-CRYPTO_SHA512_ARM64_CE arm64=m
-CRYPTO_SHA512_SSSE3 all=m
 CRYPTO_SM3_ARM64_CE arm64=m
 CRYPTO_SM3_AVX_X86_64 all=m
 CRYPTO_SM3_NEON arm64=m
@@ -96,6 +85,7 @@ IO_DELAY_UDELAY all=n
 JUMP_LABEL all=y
 KPROBES all=y
 KVM_HYPERV all=y
+KVM_IOAPIC all=y
 KVM_MAX_NR_VCPUS all=1024
 KVM_SMM all=y
 LOCK_EVENT_COUNTS all=n
@@ -336,6 +326,133 @@ FIPS_SIGNATURE_SELFTEST all=y
 CRYPTO_KRB5 all=m
 CRYPTO_KRB5_SELFTESTS all=n
 
+#-
+#- *** FILE: drivers/Kconfig ***
+#-
+#- file drivers/amba/Kconfig goes here
+#- file drivers/eisa/Kconfig goes here
+#- file drivers/pci/Kconfig goes here
+#- file drivers/cxl/Kconfig goes here
+#- file drivers/pcmcia/Kconfig goes here
+#- file drivers/rapidio/Kconfig goes here
+PC104 all=y
+#- file drivers/base/Kconfig goes here
+#- file drivers/bus/Kconfig goes here
+#- file drivers/cache/Kconfig goes here
+#- file drivers/connector/Kconfig goes here
+#- file drivers/firmware/Kconfig goes here
+#- file drivers/fwctl/Kconfig goes here
+#- file drivers/gnss/Kconfig goes here
+#- file drivers/mtd/Kconfig goes here
+#- file drivers/of/Kconfig goes here
+#- file drivers/parport/Kconfig goes here
+#- file drivers/pnp/Kconfig goes here
+#- file drivers/block/Kconfig goes here
+#- file drivers/nvme/Kconfig goes here
+#- file drivers/misc/Kconfig goes here
+#- file drivers/scsi/Kconfig goes here
+#- file drivers/ata/Kconfig goes here
+#- file drivers/md/Kconfig goes here
+#- file drivers/target/Kconfig goes here
+#- file drivers/message/fusion/Kconfig goes here
+#- file drivers/firewire/Kconfig goes here
+#- file drivers/macintosh/Kconfig goes here
+#- file drivers/net/Kconfig goes here
+#- file drivers/isdn/Kconfig goes here
+#- file drivers/input/Kconfig goes here
+#- file drivers/char/Kconfig goes here
+#- file drivers/i2c/Kconfig goes here
+#- file drivers/i3c/Kconfig goes here
+#- file drivers/spi/Kconfig goes here
+#- file drivers/spmi/Kconfig goes here
+#- file drivers/hsi/Kconfig goes here
+#- file drivers/pps/Kconfig goes here
+#- file drivers/ptp/Kconfig goes here
+#- file drivers/dpll/Kconfig goes here
+#- file drivers/pinctrl/Kconfig goes here
+#- file drivers/gpio/Kconfig goes here
+#- file drivers/w1/Kconfig goes here
+#- file drivers/power/Kconfig goes here
+#- file drivers/hwmon/Kconfig goes here
+#- file drivers/thermal/Kconfig goes here
+#- file drivers/watchdog/Kconfig goes here
+#- file drivers/ssb/Kconfig goes here
+#- file drivers/bcma/Kconfig goes here
+#- file drivers/mfd/Kconfig goes here
+#- file drivers/regulator/Kconfig goes here
+#- file drivers/media/Kconfig goes here
+#- file drivers/video/Kconfig goes here
+#- file drivers/accel/Kconfig goes here
+#- file sound/Kconfig goes here
+#- file drivers/hid/Kconfig goes here
+#- file drivers/usb/Kconfig goes here
+#- file drivers/mmc/Kconfig goes here
+#- file drivers/ufs/Kconfig goes here
+#- file drivers/memstick/Kconfig goes here
+#- file drivers/leds/Kconfig goes here
+#- file drivers/accessibility/Kconfig goes here
+#- file drivers/infiniband/Kconfig goes here
+#- file drivers/edac/Kconfig goes here
+#- file drivers/rtc/Kconfig goes here
+#- file drivers/dma/Kconfig goes here
+#- file drivers/dma-buf/Kconfig goes here
+#- file drivers/dca/Kconfig goes here
+#- file drivers/uio/Kconfig goes here
+#- file drivers/vfio/Kconfig goes here
+#- file drivers/virt/Kconfig goes here
+#- file drivers/virtio/Kconfig goes here
+#- file drivers/vdpa/Kconfig goes here
+#- file drivers/vhost/Kconfig goes here
+#- file drivers/hv/Kconfig goes here
+#- file drivers/xen/Kconfig goes here
+#- file drivers/greybus/Kconfig goes here
+#- file drivers/comedi/Kconfig goes here
+#- file drivers/staging/Kconfig goes here
+#- file drivers/platform/Kconfig goes here
+#- file drivers/clk/Kconfig goes here
+#- file drivers/hwspinlock/Kconfig goes here
+#- file drivers/clocksource/Kconfig goes here
+#- file drivers/mailbox/Kconfig goes here
+#- file drivers/iommu/Kconfig goes here
+#- file drivers/remoteproc/Kconfig goes here
+#- file drivers/rpmsg/Kconfig goes here
+#- file drivers/soundwire/Kconfig goes here
+#- file drivers/soc/Kconfig goes here
+#- file drivers/pmdomain/Kconfig goes here
+#- file drivers/devfreq/Kconfig goes here
+#- file drivers/extcon/Kconfig goes here
+#- file drivers/memory/Kconfig goes here
+#- file drivers/iio/Kconfig goes here
+#- file drivers/ntb/Kconfig goes here
+#- file drivers/pwm/Kconfig goes here
+#- file drivers/irqchip/Kconfig goes here
+#- file drivers/ipack/Kconfig goes here
+#- file drivers/reset/Kconfig goes here
+#- file drivers/phy/Kconfig goes here
+#- file drivers/powercap/Kconfig goes here
+#- file drivers/mcb/Kconfig goes here
+#- file drivers/perf/Kconfig goes here
+#- file drivers/ras/Kconfig goes here
+#- file drivers/thunderbolt/Kconfig goes here
+#- file drivers/android/Kconfig goes here
+#- file drivers/nvdimm/Kconfig goes here
+#- file drivers/dax/Kconfig goes here
+#- file drivers/nvmem/Kconfig goes here
+#- file drivers/hwtracing/Kconfig goes here
+#- file drivers/fpga/Kconfig goes here
+#- file drivers/fsi/Kconfig goes here
+#- file drivers/tee/Kconfig goes here
+#- file drivers/mux/Kconfig goes here
+#- file drivers/opp/Kconfig goes here
+#- file drivers/siox/Kconfig goes here
+#- file drivers/slimbus/Kconfig goes here
+#- file drivers/interconnect/Kconfig goes here
+#- file drivers/counter/Kconfig goes here
+#- file drivers/most/Kconfig goes here
+#- file drivers/peci/Kconfig goes here
+#- file drivers/hte/Kconfig goes here
+#- file drivers/cdx/Kconfig goes here
+
 #-
 #- *** FILE: drivers/accel/Kconfig ***
 #-
@@ -482,7 +599,6 @@ TPS68470_PMIC_OPREGION=y
 ANDROID_BINDER_IPC all=m
 ANDROID_BINDERFS all=y
 ANDROID_BINDER_DEVICES all="binder,hwbinder,vndbinder"
-ANDROID_BINDER_IPC_SELFTEST all=n
 
 #-
 #- *** FILE: drivers/ata/Kconfig ***
@@ -724,9 +840,6 @@ BLK_DEV_NBD all=m
 BLK_DEV_RAM all=y
 BLK_DEV_RAM_COUNT all=16
 BLK_DEV_RAM_SIZE all=16384
-CDROM_PKTCDVD all=m
-CDROM_PKTCDVD_BUFFERS all=8
-CDROM_PKTCDVD_WCACHE all=y
 ATA_OVER_ETH all=m
 SUNVDC sparc64=m
 #- file drivers/s390/block/Kconfig goes here
@@ -1508,6 +1621,7 @@ DMABUF_SYSFS_STATS all=y
 #-
 DMABUF_HEAPS_SYSTEM all=y
 DMABUF_HEAPS_CMA all=y
+DMABUF_HEAPS_CMA_LEGACY all=y
 
 #-
 #- *** FILE: drivers/dma/Kconfig ***
@@ -1594,6 +1708,12 @@ QCOM_HIDMA all=m
 #-
 SF_PDMA all=m
 
+#-
+#- *** FILE: drivers/dpll/zl3073x/Kconfig ***
+#-
+ZL3073X_I2C all=m
+ZL3073X_SPI all=m
+
 #-
 #- *** FILE: drivers/edac/Kconfig ***
 #-
@@ -1760,6 +1880,8 @@ EFI_DISABLE_PCI_DMA all=n
 EFI_CUSTOM_SSDT_OVERLAYS all=y
 EFI_DISABLE_RUNTIME all=n
 EFI_COCO_SECRET all=y
+OVMF_DEBUG_LOG all=n
+EFI_SBAT_FILE all=""
 TEE_STMM_EFI arm64=m
 
 #-
@@ -2632,7 +2754,7 @@ DRM_XE all=m
 DRM_XE_DISPLAY all=y
 DRM_XE_DP_TUNNEL all=y
 DRM_XE_GPUSVM all=y
-DRM_XE_DEVMEM_MIRROR all=y
+DRM_XE_PAGEMAP all=y
 DRM_XE_FORCE_PROBE all=""
 #- file drivers/gpu/drm/xe/Kconfig.debug goes here
 #- file drivers/gpu/drm/xe/Kconfig.profile goes here
@@ -2647,6 +2769,11 @@ DRM_XEN_FRONTEND all=m
 #-
 IMX_IPUV3_CORE arm=m
 
+#-
+#- *** FILE: drivers/gpu/trace/Kconfig ***
+#-
+TRACE_GPU_MEM all=n
+
 #-
 #- *** FILE: drivers/gpu/vga/Kconfig ***
 #-
@@ -3134,6 +3261,7 @@ SENSORS_ACBEL_FSG032 all=m
 SENSORS_ADM1266 all=m
 SENSORS_ADM1275 all=m
 SENSORS_ADP1050 all=m
+SENSORS_ADP1050_REGULATOR all=y
 SENSORS_BEL_PFE all=m
 SENSORS_BPA_RS600 all=m
 SENSORS_CRPS all=m
@@ -3479,7 +3607,9 @@ STK8BA50 all=m
 AB8500_GPADC all=y
 AD4000 all=m
 AD4030 all=m
+AD4080 all=m
 AD4130 all=m
+AD4170_4 all=m
 AD4695 all=m
 AD4851 all=m
 AD7091R5 all=m
@@ -3494,6 +3624,7 @@ AD7291 all=m
 AD7292 all=m
 AD7298 all=m
 AD7380 all=m
+AD7405 all=m
 AD7476 all=m
 AD7606_IFACE_PARALLEL all=m
 AD7606_IFACE_SPI all=m
@@ -3651,6 +3782,7 @@ VZ89X all=m
 IIO_CROS_EC_SENSORS_CORE all=m
 IIO_CROS_EC_SENSORS all=m
 IIO_CROS_EC_SENSORS_LID_ANGLE all=m
+IIO_CROS_EC_ACTIVITY all=m
 
 #-
 #- *** FILE: drivers/iio/common/scmi_sensors/Kconfig ***
@@ -4019,6 +4151,7 @@ ZPA2326 all=m
 #-
 AS3935 all=m
 CROS_EC_MKBP_PROXIMITY all=m
+D3323AA all=m
 HX9023S all=m
 IRSD200 all=m
 ISL29501 all=m
@@ -4092,7 +4225,6 @@ INFINIBAND_ADDR_TRANS all=y sparc=
 #- file drivers/infiniband/hw/mthca/Kconfig goes here
 #- file drivers/infiniband/hw/ocrdma/Kconfig goes here
 #- file drivers/infiniband/hw/qedr/Kconfig goes here
-#- file drivers/infiniband/hw/qib/Kconfig goes here
 #- file drivers/infiniband/hw/usnic/Kconfig goes here
 #- file drivers/infiniband/hw/vmw_pvrdma/Kconfig goes here
 #- file drivers/infiniband/sw/rdmavt/Kconfig goes here
@@ -4173,12 +4305,6 @@ INFINIBAND_OCRDMA all=m
 #-
 INFINIBAND_QEDR all=m
 
-#-
-#- *** FILE: drivers/infiniband/hw/qib/Kconfig ***
-#-
-INFINIBAND_QIB all=m
-INFINIBAND_QIB_DCA all=y
-
 #-
 #- *** FILE: drivers/infiniband/hw/usnic/Kconfig ***
 #-
@@ -4332,7 +4458,6 @@ JOYSTICK_IFORCE_232 all=m
 INPUT_KEYBOARD all=y
 KEYBOARD_ADC all=m
 KEYBOARD_ADP5588 all=m 
-KEYBOARD_ADP5589 all=m
 KEYBOARD_APPLESPI all=m
 KEYBOARD_ATKBD all=y sparc=m sparc64=m
 KEYBOARD_QT1050 all=m
@@ -4413,7 +4538,6 @@ INPUT_TPS65219_PWRBUTTON all=m
 INPUT_AXP20X_PEK all=m
 INPUT_TWL4030_PWRBUTTON powerpc=m
 INPUT_UINPUT all=m sparc=n
-INPUT_PCF50633_PMU all=m
 INPUT_PCF8574 all=m
 INPUT_PWM_BEEPER all=m
 INPUT_PWM_VIBRA all=m
@@ -4485,6 +4609,8 @@ RMI4_SMB all=m
 RMI4_F03 all=y
 RMI4_F11 all=y
 RMI4_F12 all=y
+RMI4_F1A all=y
+RMI4_F21 all=y
 RMI4_F30 all=y
 RMI4_F34 all=y
 RMI4_F3A all=y
@@ -5287,6 +5413,7 @@ VIDEO_VGXY61 all=m
 #- file drivers/media/i2c/ccs/Kconfig goes here
 #- file drivers/media/i2c/et8ek8/Kconfig goes here
 VIDEO_THP7312 all=m
+VIDEO_CAMERA_LENS all=y
 VIDEO_AD5820 all=m
 VIDEO_AK7375 all=m
 VIDEO_DW9714 all=m
@@ -5709,6 +5836,11 @@ VIDEO_ROCKCHIP_RGA arm64=m
 #-
 VIDEO_ROCKCHIP_ISP1 arm64=m
 
+#-
+#- *** FILE: drivers/media/platform/rockchip/rkvdec/Kconfig ***
+#-
+VIDEO_ROCKCHIP_VDEC arm64=m
+
 #-
 #- *** FILE: drivers/media/platform/st/sti/c8sectpfe/Kconfig ***
 #-
@@ -6217,12 +6349,13 @@ MFD_BD9571MWV all=m
 MFD_AXP20X_I2C all=m
 MFD_CGBC all=m
 MFD_CROS_EC_DEV all=m
+MFD_CS40L50_I2C all=m
+MFD_CS40L50_SPI all=m
 MFD_CS42L43_I2C all=m
 MFD_CS42L43_SDW all=m
 MFD_MADERA all=m
 MFD_MADERA_I2C all=m
 MFD_MADERA_SPI all=m
-MFD_MAX5970 all=m
 MFD_CS47L15 all=y
 MFD_CS47L35 all=y
 MFD_CS47L85 all=y
@@ -6256,6 +6389,7 @@ MFD_JANZ_CMODIO all=m
 MFD_KEMPLD all=m
 MFD_88PM800 all=m
 MFD_88PM805 all=m
+MFD_MAX5970 all=m
 MFD_MAX14577 all=m
 MFD_MAX77650 all=m
 MFD_MAX77686 all=m
@@ -6331,8 +6465,6 @@ MFD_WCD934X all=m
 MFD_ATC260X_I2C all=m
 MFD_KHADAS_MCU arm64=m
 MFD_QCOM_PM8008 all=m
-MFD_CS40L50_I2C all=m
-MFD_CS40L50_SPI all=m
 MFD_VEXPRESS_SYSREG arm=m arm64=m
 RAVE_SP_CORE all=m
 MFD_INTEL_M10_BMC_SPI all=m
@@ -6406,6 +6538,7 @@ MCHP_LAN966X_PCI all=m
 #- file drivers/misc/mchp_pci1xxxx/Kconfig goes here
 #- file drivers/misc/keba/Kconfig goes here
 #- file drivers/misc/amd-sbi/Kconfig goes here
+#- file drivers/misc/rp1/Kconfig goes here
 
 #-
 #- *** FILE: drivers/misc/altera-stapl/Kconfig ***
@@ -6684,6 +6817,7 @@ MTD_MTDRAM all=m
 MTDRAM_TOTAL_SIZE all=4096
 MTDRAM_ERASE_SIZE all=128
 MTD_BLOCK2MTD all=m
+MTD_INTEL_DG all=m
 #- Disk-On-Chip Device Drivers
 MTD_DOCG3 all=m
 
@@ -7408,6 +7542,7 @@ BNXT_SRIOV all=y
 BNXT_FLOWER_OFFLOAD all=y
 BNXT_DCB all=y
 BNXT_HWMON all=y
+BNGE all=m
 
 #-
 #- *** FILE: drivers/net/ethernet/brocade/Kconfig ***
@@ -7525,6 +7660,8 @@ PCMCIA_XIRCOM all=m
 #-
 NET_VENDOR_DLINK all=y
 DL2K all=m
+SUNDANCE all=m
+SUNDANCE_MMIO all=n
 
 #-
 #- *** FILE: drivers/net/ethernet/emulex/Kconfig ***
@@ -8131,6 +8268,8 @@ VIA_VELOCITY all=m
 NET_VENDOR_WANGXUN all=y
 NGBE all=m
 TXGBE all=m
+TXGBEVF all=m
+NGBEVF all=m
 
 #-
 #- *** FILE: drivers/net/ethernet/wiznet/Kconfig ***
@@ -8933,8 +9072,10 @@ RTW88_DEBUGFS all=n
 #-
 RTW89 all=m
 RTW89_8851BE all=m
+RTW89_8851BU all=m
 RTW89_8852AE all=m
 RTW89_8852BE all=m
+RTW89_8852BU all=m
 RTW89_8852BTE all=m
 RTW89_8852CE all=m
 RTW89_8922AE all=m
@@ -9341,6 +9482,7 @@ PCIE_MICROCHIP_HOST all=m
 #-
 PCI_ENDPOINT all=y
 PCI_ENDPOINT_CONFIGFS all=y
+PCI_ENDPOINT_MSI_DOORBELL all=y
 #- file drivers/pci/endpoint/functions/Kconfig goes here
 
 #-
@@ -9824,14 +9966,13 @@ SURFACE_AGGREGATOR_ERROR_INJECTION all=y
 #-
 X86_PLATFORM_DEVICES i386=y x86_64=y
 ACPI_WMI all=m
+ACPI_WMI_LEGACY_DEVICE_NAMES all=n
 WMI_BMOF all=m
 HUAWEI_WMI all=m
 MXM_WMI all=m
 NVIDIA_WMI_EC_BACKLIGHT all=m
 XIAOMI_WMI all=m
 GIGABYTE_WMI all=m
-YOGABOOK all=m
-YT2_1380 all=m
 ACERHDF all=m
 ACER_WIRELESS all=m
 ACER_WMI all=m
@@ -9854,19 +9995,9 @@ GPD_POCKET_FAN all=m
 #- file drivers/platform/x86/hp/Kconfig goes here
 WIRELESS_HOTKEY=m
 IBM_RTL all=m
-IDEAPAD_LAPTOP all=m
-LENOVO_WMI_HOTKEY_UTILITIES all=m
-LENOVO_YMC all=m
 SENSORS_HDAPS all=m
-THINKPAD_ACPI i386=m x86_64=m
-THINKPAD_ACPI_ALSA_SUPPORT all=y
-THINKPAD_ACPI_DEBUGFACILITIES all=n
-THINKPAD_ACPI_DEBUG i386=n x86_64=n
-THINKPAD_ACPI_UNSAFE_LEDS all=n
-THINKPAD_ACPI_VIDEO all=y
-THINKPAD_ACPI_HOTKEY_POLL all=y
-THINKPAD_LMI=m
 #- file drivers/platform/x86/intel/Kconfig goes here
+#- file drivers/platform/x86/lenovo/Kconfig goes here
 ACPI_QUICKSTART all=m
 MEEGOPAD_ANX7428 all=m
 MSI_EC all=m
@@ -9894,7 +10025,6 @@ SYSTEM76_ACPI all=m
 TOPSTAR_LAPTOP all=m
 SERIAL_MULTI_INSTANTIATE x86=m
 INSPUR_PLATFORM_PROFILE all=m
-LENOVO_WMI_CAMERA all=m
 DASHARO_ACPI all=m
 #- file drivers/platform/x86/x86-android-tablets/Kconfig goes here
 INTEL_IPS all=m
@@ -9914,10 +10044,16 @@ OXP_EC all=m
 #- file drivers/platform/x86/amd/hsmp/Kconfig goes here
 #- file drivers/platform/x86/amd/pmf/Kconfig goes here
 #- file drivers/platform/x86/amd/pmc/Kconfig goes here
+#- file drivers/platform/x86/amd/hfi/Kconfig goes here
 AMD_3D_VCACHE all=m
 AMD_WBRF all=y
 AMD_ISP_PLATFORM all=m
 
+#-
+#- *** FILE: drivers/platform/x86/amd/hfi/Kconfig ***
+#-
+AMD_HFI all=y
+
 #-
 #- *** FILE: drivers/platform/x86/amd/hsmp/Kconfig ***
 #-
@@ -10054,6 +10190,25 @@ INTEL_UNCORE_FREQ_CONTROL all=m
 INTEL_WMI_SBL_FW_UPDATE all=m
 INTEL_WMI_THUNDERBOLT all=m
 
+#-
+#- *** FILE: drivers/platform/x86/lenovo/Kconfig ***
+#-
+IDEAPAD_LAPTOP all=m
+LENOVO_WMI_HOTKEY_UTILITIES all=m
+LENOVO_WMI_CAMERA all=m
+LENOVO_YMC all=m
+THINKPAD_ACPI i386=m x86_64=m
+THINKPAD_ACPI_ALSA_SUPPORT all=y
+THINKPAD_ACPI_DEBUGFACILITIES all=n
+THINKPAD_ACPI_DEBUG i386=n x86_64=n
+THINKPAD_ACPI_UNSAFE_LEDS all=n
+THINKPAD_ACPI_VIDEO all=y
+THINKPAD_ACPI_HOTKEY_POLL all=y
+THINKPAD_LMI=m
+YOGABOOK all=m
+YT2_1380 all=m
+LENOVO_WMI_GAMEZONE all=m
+
 #-
 #- *** FILE: drivers/platform/x86/siemens/Kconfig ***
 #-
@@ -10599,7 +10754,6 @@ RTC_DRV_ISL12022 all=m
 RTC_DRV_ISL12026 all=m
 RTC_DRV_X1205 all=m
 RTC_DRV_PCF8523 all=m
-RTC_DRV_PCF85063 all=m
 RTC_DRV_PCF85363 all=m
 RTC_DRV_PCF8563 all=m
 RTC_DRV_PCF8583 all=m sparc=n
@@ -10641,6 +10795,7 @@ RTC_DRV_MCP795 all=m
 RTC_DRV_DS3232 all=m
 RTC_DRV_DS3232_HWMON all=y
 RTC_DRV_PCF2127 all=m
+RTC_DRV_PCF85063 all=m
 RTC_DRV_RV3029C2 all=m
 RTC_DRV_RV3029_HWMON all=y
 RTC_DRV_RX6110 all=m
@@ -11145,6 +11300,7 @@ SPI_SLAVE all=y
 SPI_SLAVE_TIME all=m
 SPI_SLAVE_SYSTEM_CONTROL all=m
 #- SPI Offload triggers
+SPI_OFFLOAD_TRIGGER_ADI_UTIL_SD all=m
 SPI_OFFLOAD_TRIGGER_PWM all=m
 
 #-
@@ -11297,9 +11453,9 @@ STAGING_MEDIA all=y
 #- file drivers/staging/media/av7110/Kconfig goes here
 #- file drivers/staging/media/imx/Kconfig goes here
 #- file drivers/staging/media/ipu3/Kconfig goes here
+#- file drivers/staging/media/ipu7/Kconfig goes here
 #- file drivers/staging/media/max96712/Kconfig goes here
 #- file drivers/staging/media/meson/vdec/Kconfig goes here
-#- file drivers/staging/media/rkvdec/Kconfig goes here
 #- file drivers/staging/media/starfive/Kconfig goes here
 #- file drivers/staging/media/sunxi/Kconfig goes here
 #- file drivers/staging/media/tegra-video/Kconfig goes here
@@ -11332,6 +11488,11 @@ DVB_SP8870 all=m
 #-
 VIDEO_IPU3_IMGU all=m
 
+#-
+#- *** FILE: drivers/staging/media/ipu7/Kconfig ***
+#-
+VIDEO_INTEL_IPU7 all=m
+
 #-
 #- *** FILE: drivers/staging/media/max96712/Kconfig ***
 #-
@@ -11342,11 +11503,6 @@ VIDEO_MAX96712 all=m
 #-
 VIDEO_MESON_VDEC arm64=m
 
-#-
-#- *** FILE: drivers/staging/media/rkvdec/Kconfig ***
-#-
-VIDEO_ROCKCHIP_VDEC arm64=m
-
 #-
 #- *** FILE: drivers/staging/most/Kconfig ***
 #-
@@ -12365,6 +12521,23 @@ VHOST_VDPA all=m
 VHOST_CROSS_ENDIAN_LEGACY all=n
 VHOST_ENABLE_FORK_OWNER_CONTROL all=y
 
+#-
+#- *** FILE: drivers/video/Kconfig ***
+#-
+#- file drivers/auxdisplay/Kconfig goes here
+#- file drivers/char/agp/Kconfig goes here
+#- file drivers/gpu/vga/Kconfig goes here
+#- file drivers/gpu/host1x/Kconfig goes here
+#- file drivers/gpu/ipu-v3/Kconfig goes here
+#- file drivers/gpu/nova-core/Kconfig goes here
+#- file drivers/gpu/drm/Kconfig goes here
+#- file drivers/video/fbdev/Kconfig goes here
+#- file drivers/video/backlight/Kconfig goes here
+FIRMWARE_EDID all=y
+#- file drivers/video/console/Kconfig goes here
+#- file drivers/video/logo/Kconfig goes here
+#- file drivers/gpu/trace/Kconfig goes here
+
 #-
 #- *** FILE: drivers/video/backlight/Kconfig ***
 #-
@@ -12542,7 +12715,6 @@ FB_SM712 all=m
 #-
 #- *** FILE: drivers/video/fbdev/core/Kconfig ***
 #-
-FIRMWARE_EDID all=y
 FB_DEVICE all=y
 #* on PowerPC FB_RADEON and others forces it to `y'
 FB_FOREIGN_ENDIAN all=n
@@ -13645,7 +13817,6 @@ TIMERFD all=y
 EVENTFD all=y
 SHMEM all=y
 AIO all=y
-PC104 all=y
 KALLSYMS all=y
 KALLSYMS_SELFTEST all=n
 KALLSYMS_ALL all=y
@@ -13823,11 +13994,13 @@ NO_HZ_FULL all=n
 NO_HZ all=y alpha=
 HIGH_RES_TIMERS all=y alpha=
 CLOCKSOURCE_WATCHDOG_MAX_SKEW_US all=100
+POSIX_AUX_CLOCKS all=y
 
 #-
 #- *** FILE: kernel/trace/Kconfig ***
 #-
 FTRACE all=y
+TRACEFS_AUTOMOUNT_DEPRECATED all=n
 BOOTTIME_TRACING all=n
 FUNCTION_TRACER all=y
 FUNCTION_GRAPH_TRACER all=y
@@ -13857,6 +14030,7 @@ FPROBE_EVENTS all=y
 KPROBE_EVENTS all=y
 KPROBE_EVENTS_ON_NOTRACE all=n
 UPROBE_EVENTS all=y
+EPROBE_EVENTS all=y
 BPF_KPROBE_OVERRIDE all=y
 SYNTH_EVENTS all=y
 USER_EVENTS all=n
@@ -13880,19 +14054,30 @@ KPROBE_EVENT_GEN_TEST all=m
 #- *** FILE: kernel/trace/rv/Kconfig ***
 #-
 RV all=y
+RV_PER_TASK_MONITORS all=2
 #- file kernel/trace/rv/monitors/wip/Kconfig goes here
 #- file kernel/trace/rv/monitors/wwnr/Kconfig goes here
 #- file kernel/trace/rv/monitors/sched/Kconfig goes here
-#- file kernel/trace/rv/monitors/tss/Kconfig goes here
 #- file kernel/trace/rv/monitors/sco/Kconfig goes here
 #- file kernel/trace/rv/monitors/snroc/Kconfig goes here
 #- file kernel/trace/rv/monitors/scpd/Kconfig goes here
 #- file kernel/trace/rv/monitors/snep/Kconfig goes here
-#- file kernel/trace/rv/monitors/sncid/Kconfig goes here
+#- file kernel/trace/rv/monitors/sts/Kconfig goes here
+#- file kernel/trace/rv/monitors/nrp/Kconfig goes here
+#- file kernel/trace/rv/monitors/sssw/Kconfig goes here
+#- file kernel/trace/rv/monitors/opid/Kconfig goes here
+#- file kernel/trace/rv/monitors/rtapp/Kconfig goes here
+#- file kernel/trace/rv/monitors/pagefault/Kconfig goes here
+#- file kernel/trace/rv/monitors/sleep/Kconfig goes here
 RV_REACTORS all=y
 RV_REACT_PRINTK all=y
 RV_REACT_PANIC all=y
 
+#-
+#- *** FILE: kernel/trace/rv/monitors/rtapp/Kconfig ***
+#-
+RV_MON_RTAPP all=n
+
 #-
 #- *** FILE: kernel/trace/rv/monitors/sched/Kconfig ***
 #-
@@ -13908,11 +14093,6 @@ RV_MON_SCO all=y
 #-
 RV_MON_SNROC all=y
 
-#-
-#- *** FILE: kernel/trace/rv/monitors/tss/Kconfig ***
-#-
-RV_MON_TSS all=y
-
 #-
 #- *** FILE: kernel/trace/rv/monitors/wwnr/Kconfig ***
 #-
@@ -13926,16 +14106,8 @@ PACKING arm=y arm64=y
 #- file lib/math/Kconfig goes here
 INDIRECT_PIO arm64=n
 TRACE_MMIO_ACCESS arm64=n
+#- file lib/crc/Kconfig goes here
 #- file lib/crypto/Kconfig goes here
-CRC_CCITT all=y
-CRC16 all=m
-CRC_T10DIF all=y
-CRC_ITU_T all=m
-CRC32 all=y
-CRC64 all=y
-CRC4 all=m
-CRC7 all=m
-CRC8 all=m
 RANDOM32_SELFTEST all=y
 #- file lib/xz/Kconfig goes here
 #- file kernel/dma/Kconfig goes here
@@ -14127,6 +14299,7 @@ TEST_FREE_PAGES all=m
 TEST_FPU all=m
 TEST_CLOCKSOURCE_WATCHDOG=m
 TEST_OBJPOOL all=m
+TEST_KEXEC_HANDOVER all=n
 MEMTEST all=y
 HYPERV_TESTING all=y
 
@@ -14168,20 +14341,43 @@ KDB_CONTINUE_CATASTROPHIC all=0
 #-
 UBSAN all=n
 
+#-
+#- *** FILE: lib/crc/Kconfig ***
+#-
+CRC4 all=m
+CRC7 all=m
+CRC8 all=m
+CRC16 all=m
+CRC_CCITT all=y
+CRC_ITU_T all=m
+CRC_T10DIF all=y
+CRC32 all=y
+CRC64 all=y
+
 #-
 #- *** FILE: lib/crypto/Kconfig ***
 #-
 CRYPTO_LIB_CHACHA all=m
 CRYPTO_LIB_CURVE25519 all=m
 CRYPTO_LIB_POLY1305 all=m
-#- file arch/arm/lib/crypto/Kconfig goes here
-#- file arch/arm64/lib/crypto/Kconfig goes here
-#- file arch/mips/lib/crypto/Kconfig goes here
-#- file arch/powerpc/lib/crypto/Kconfig goes here
-#- file arch/riscv/lib/crypto/Kconfig goes here
-#- file arch/s390/lib/crypto/Kconfig goes here
-#- file arch/sparc/lib/crypto/Kconfig goes here
-#- file arch/x86/lib/crypto/Kconfig goes here
+#- file lib/crypto/tests/Kconfig goes here
+#- file lib/crypto/arm/Kconfig goes here
+#- file lib/crypto/arm64/Kconfig goes here
+#- file lib/crypto/mips/Kconfig goes here
+#- file lib/crypto/powerpc/Kconfig goes here
+#- file lib/crypto/riscv/Kconfig goes here
+#- file lib/crypto/s390/Kconfig goes here
+#- file lib/crypto/x86/Kconfig goes here
+
+#-
+#- *** FILE: lib/crypto/arm/Kconfig ***
+#-
+CRYPTO_BLAKE2S_ARM arm=y
+
+#-
+#- *** FILE: lib/crypto/x86/Kconfig ***
+#-
+CRYPTO_BLAKE2S_X86 x86_64=y
 
 #-
 #- *** FILE: lib/fonts/Kconfig ***
@@ -14281,7 +14477,7 @@ CMA all=y
 CMA_DEBUGFS all=n
 CMA_SYSFS all=y
 CMA_AREAS all=7
-PAGE_BLOCK_ORDER all=10
+PAGE_BLOCK_MAX_ORDER all=10
 MEM_SOFT_DIRTY all=y
 DEFERRED_STRUCT_PAGE_INIT all=n
 IDLE_PAGE_TRACKING all=y arm=n
@@ -14326,6 +14522,8 @@ DAMON_PADDR all=y arm=n
 DAMON_SYSFS all=y
 DAMON_RECLAIM all=y
 DAMON_LRU_SORT all=y
+DAMON_STAT all=y
+DAMON_STAT_ENABLED_DEFAULT all=y
 
 #-
 #- *** FILE: net/6lowpan/Kconfig ***
@@ -14560,6 +14758,7 @@ NF_TABLES_BRIDGE all=m
 NFT_BRIDGE_META all=m
 NFT_BRIDGE_REJECT all=m
 NF_CONNTRACK_BRIDGE all=m
+BRIDGE_NF_EBTABLES_LEGACY all=m
 BRIDGE_NF_EBTABLES all=m
 BRIDGE_EBT_BROUTE all=m
 BRIDGE_EBT_T_FILTER all=m
@@ -14921,7 +15120,6 @@ NF_CONNTRACK_PROCFS all=n
 NF_CONNTRACK_EVENTS all=y
 NF_CONNTRACK_TIMEOUT all=y
 NF_CONNTRACK_TIMESTAMP all=y
-NF_CT_PROTO_DCCP all=y
 NF_CT_PROTO_SCTP all=y
 NF_CT_PROTO_UDPLITE all=y
 NF_CONNTRACK_AMANDA all=m
@@ -14944,6 +15142,7 @@ NF_TABLES_INET all=y
 NF_TABLES_NETDEV all=y
 NFT_NUMGEN all=m
 NFT_CT all=m
+NFT_EXTHDR_DCCP all=y
 NFT_FLOW_OFFLOAD all=m
 NFT_CONNLIMIT all=m
 NFT_LOG all=m
@@ -14973,6 +15172,7 @@ NF_FLOW_TABLE all=m
 NF_FLOW_TABLE_PROCFS all=y
 NETFILTER_XTABLES all=m
 NETFILTER_XTABLES_COMPAT all=y
+NETFILTER_XTABLES_LEGACY all=y
 #- Xtables combined modules
 NETFILTER_XT_MARK all=m
 NETFILTER_XT_CONNMARK all=m
@@ -15238,6 +15438,7 @@ NET_SCH_FQ_PIE all=m
 NET_SCH_INGRESS all=m
 NET_SCH_PLUG all=m
 NET_SCH_ETS all=m
+NET_SCH_DUALPI2 all=m
 NET_SCH_DEFAULT all=y
 DEFAULT_FQ all=n
 DEFAULT_CODEL all=n
@@ -15446,10 +15647,8 @@ LSM all="landlock,lockdown,yama,loadpin,safesetid,ipe,bpf"
 #-
 INIT_STACK_NONE all=n
 INIT_STACK_ALL_PATTERN all=n
+KSTACK_ERASE all=n
 GCC_PLUGIN_STACKLEAK all=y
-STACKLEAK_TRACK_MIN_SIZE all=100
-STACKLEAK_METRICS all=y
-STACKLEAK_RUNTIME_DISABLE all=y
 INIT_ON_ALLOC_DEFAULT_ON all=y
 INIT_ON_FREE_DEFAULT_ON all=n
 ZERO_CALL_USED_REGS all=y
@@ -15716,9 +15915,91 @@ SND_FIREWIRE_MOTU all=m
 SND_FIREFACE all=m
 
 #-
-#- *** FILE: sound/hda/Kconfig ***
+#- *** FILE: sound/hda/codecs/Kconfig ***
+#-
+SND_HDA_CODEC_ANALOG all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_SIGMATEL all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_VIA all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_CONEXANT all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_SENARYTECH all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_CA0110 all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_CA0132 all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_CA0132_DSP all=y
+SND_HDA_CODEC_CMEDIA all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_CM9825 all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_SI3054 all=m
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_GENERIC all=m
+#- Set to Y if you want auto-loading the codec driver
+#- file sound/hda/codecs/realtek/Kconfig goes here
+#- file sound/hda/codecs/cirrus/Kconfig goes here
+#- file sound/hda/codecs/hdmi/Kconfig goes here
+#- file sound/hda/codecs/side-codecs/Kconfig goes here
+
+#-
+#- *** FILE: sound/hda/codecs/cirrus/Kconfig ***
+#-
+SND_HDA_CODEC_CIRRUS all=m
+#- Set to Y if you want auto-loading the codec driver
+#- Set to Y if you want auto-loading the codec driver
+SND_HDA_CODEC_CS8409 all=m
+#- Set to Y if you want auto-loading the codec driver
+
 #-
+#- *** FILE: sound/hda/codecs/hdmi/Kconfig ***
+#-
+SND_HDA_CODEC_HDMI all=m
+SND_HDA_INTEL_HDMI_SILENT_STREAM all=y
+
+#-
+#- *** FILE: sound/hda/codecs/realtek/Kconfig ***
+#-
+SND_HDA_CODEC_REALTEK all=m
+
+#-
+#- *** FILE: sound/hda/codecs/side-codecs/Kconfig ***
+#-
+SND_HDA_SCODEC_CS35L41_I2C all=m
+#- Set to Y if you want auto-loading the side codec driver
+SND_HDA_SCODEC_CS35L41_SPI all=m
+#- Set to Y if you want auto-loading the side codec driver
+SND_HDA_SCODEC_CS35L56_I2C all=m
+SND_HDA_SCODEC_CS35L56_SPI all=m
+SND_HDA_SCODEC_TAS2781_I2C all=m
+#- Set to Y if you want auto-loading the side codec driver
+SND_HDA_SCODEC_TAS2781_SPI all=m
+#- Set to Y if you want auto-loading the side codec driver
+
+#-
+#- *** FILE: sound/hda/common/Kconfig ***
+#-
+SND_HDA_HWDEP all=y
+SND_HDA_RECONFIG all=y
+SND_HDA_INPUT_BEEP all=y
+SND_HDA_INPUT_BEEP_MODE all=1
+SND_HDA_PATCH_LOADER all=y
+SND_HDA_POWER_SAVE_DEFAULT all=300
+SND_HDA_CTL_DEV_ID all=n
 SND_HDA_PREALLOC_SIZE all=64 x86=0
+
+#-
+#- *** FILE: sound/hda/controllers/Kconfig ***
+#-
+SND_HDA_INTEL all=m sparc=n
+SND_HDA_ACPI all=m
+
+#-
+#- *** FILE: sound/hda/core/Kconfig ***
+#-
 SND_INTEL_BYT_PREFER_SOF all=y
 
 #-
@@ -15837,60 +16118,6 @@ SND_VIA82XX_MODEM all=m
 SND_VIRTUOSO all=m sparc=n
 SND_VX222 all=m
 SND_YMFPCI all=m
-#- file sound/pci/hda/Kconfig goes here
-
-#-
-#- *** FILE: sound/pci/hda/Kconfig ***
-#-
-SND_HDA_INTEL all=m sparc=n
-SND_HDA_ACPI all=m
-SND_HDA_HWDEP all=y
-SND_HDA_RECONFIG all=y
-SND_HDA_INPUT_BEEP all=y
-SND_HDA_INPUT_BEEP_MODE all=1
-SND_HDA_PATCH_LOADER all=y
-SND_HDA_SCODEC_CS35L41_I2C all=m
-#- Set to Y if you want auto-loading the side codec driver
-SND_HDA_SCODEC_CS35L41_SPI all=m
-#- Set to Y if you want auto-loading the side codec driver
-SND_HDA_SCODEC_CS35L56_I2C all=m
-SND_HDA_SCODEC_CS35L56_SPI all=m
-SND_HDA_SCODEC_TAS2781_I2C all=m
-#- Set to Y if you want auto-loading the side codec driver
-SND_HDA_SCODEC_TAS2781_SPI all=m
-#- Set to Y if you want auto-loading the side codec driver
-SND_HDA_CODEC_REALTEK all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_ANALOG all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_SIGMATEL all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_VIA all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_HDMI all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_CIRRUS all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_CS8409 all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_CONEXANT all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_SENARYTECH all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_CA0110 all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_CA0132 all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_CA0132_DSP all=y
-SND_HDA_CODEC_CMEDIA all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_CODEC_SI3054 all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_GENERIC all=m
-#- Set to Y if you want auto-loading the codec driver
-SND_HDA_POWER_SAVE_DEFAULT all=300
-SND_HDA_INTEL_HDMI_SILENT_STREAM all=y
-SND_HDA_CTL_DEV_ID all=n
 
 #-
 #- *** FILE: sound/pcmcia/Kconfig ***
@@ -15938,7 +16165,6 @@ SND_SOC_USB all=m
 #- file sound/soc/rockchip/Kconfig goes here
 #- file sound/soc/samsung/Kconfig goes here
 #- file sound/soc/sdca/Kconfig goes here
-#- file sound/soc/sof/Kconfig goes here
 #- file sound/soc/spear/Kconfig goes here
 #- file sound/soc/sprd/Kconfig goes here
 #- file sound/soc/starfive/Kconfig goes here
@@ -15951,6 +16177,7 @@ SND_SOC_USB all=m
 #- file sound/soc/ux500/Kconfig goes here
 #- file sound/soc/xilinx/Kconfig goes here
 #- file sound/soc/xtensa/Kconfig goes here
+#- file sound/soc/sof/Kconfig goes here
 #- file sound/soc/codecs/Kconfig goes here
 #- file sound/soc/sdw_utils/Kconfig goes here
 #- file sound/soc/generic/Kconfig goes here
@@ -15958,7 +16185,6 @@ SND_SOC_USB all=m
 #-
 #- *** FILE: sound/soc/adi/Kconfig ***
 #-
-SND_SOC_ADI all=m
 SND_SOC_ADI_AXI_I2S all=m
 SND_SOC_ADI_AXI_SPDIF all=m
 
@@ -16002,7 +16228,6 @@ SND_SOC_AMD_LEGACY_SDW_MACH all=m
 #-
 #- *** FILE: sound/soc/atmel/Kconfig ***
 #-
-SND_ATMEL_SOC all=m
 SND_SOC_MIKROE_PROTO all=m
 
 #-
@@ -16159,6 +16384,7 @@ SND_SOC_RT715_SDCA_SDW all=m
 SND_SOC_RT9120 all=m
 SND_SOC_RT9123 all=m
 SND_SOC_RT9123P all=m
+SND_SOC_RTQ9124 all=m
 SND_SOC_RTQ9128 all=m
 SND_SOC_SGTL5000 all=m
 SND_SOC_SIMPLE_AMPLIFIER all=m
@@ -16310,7 +16536,6 @@ SND_I2S_HI6210_I2S all=m
 #-
 #- *** FILE: sound/soc/img/Kconfig ***
 #-
-SND_SOC_IMG all=y
 SND_SOC_IMG_I2S_IN all=m
 SND_SOC_IMG_I2S_OUT all=m
 SND_SOC_IMG_PARALLEL_OUT all=m
@@ -16350,6 +16575,7 @@ SND_SOC_INTEL_AVS_MACH_RT274 all=m
 SND_SOC_INTEL_AVS_MACH_RT286 all=m
 SND_SOC_INTEL_AVS_MACH_RT298 all=m
 SND_SOC_INTEL_AVS_MACH_RT5514 all=m
+SND_SOC_INTEL_AVS_MACH_RT5640 all=m
 SND_SOC_INTEL_AVS_MACH_RT5663 all=m
 SND_SOC_INTEL_AVS_MACH_RT5682 all=m
 SND_SOC_INTEL_AVS_MACH_SSM4567 all=m
@@ -16425,7 +16651,6 @@ SND_SOC_QCOM all=m
 #-
 #- *** FILE: sound/soc/rockchip/Kconfig ***
 #-
-SND_SOC_ROCKCHIP arm64=m
 SND_SOC_ROCKCHIP_I2S arm64=m
 SND_SOC_ROCKCHIP_I2S_TDM arm64=m
 SND_SOC_ROCKCHIP_PDM arm64=m
@@ -16436,6 +16661,12 @@ SND_SOC_ROCKCHIP_RT5645 arm64=m
 SND_SOC_RK3288_HDMI_ANALOG arm64=m
 SND_SOC_RK3399_GRU_SOUND arm64=m
 
+#-
+#- *** FILE: sound/soc/sdca/Kconfig ***
+#-
+SND_SOC_SDCA_HID all=y
+SND_SOC_SDCA_IRQ all=y
+
 #-
 #- *** FILE: sound/soc/sof/Kconfig ***
 #-
@@ -16589,6 +16820,34 @@ RD_ZSTD all=y
 #-
 #- *** PROBABLY REMOVED OPTIONS ***
 #-
+ANDROID_BINDER_IPC_SELFTEST all=n
+CDROM_PKTCDVD all=m
+CDROM_PKTCDVD_BUFFERS all=8
+CDROM_PKTCDVD_WCACHE all=y
+CRYPTO_SHA1_ARM arm=m
+CRYPTO_SHA1_ARM64_CE arm64=m
+CRYPTO_SHA1_ARM_CE arm=m
+CRYPTO_SHA1_ARM_NEON arm=m
+CRYPTO_SHA1_SSSE3 all=m
+CRYPTO_SHA512_ARM arm=m
+CRYPTO_SHA512_ARM64 arm64=m
+CRYPTO_SHA512_ARM64_CE arm64=m
+CRYPTO_SHA512_SSSE3 all=m
+DRM_XE_DEVMEM_MIRROR all=y
+INFINIBAND_QIB all=m
+INFINIBAND_QIB_DCA all=y
+INPUT_PCF50633_PMU all=m
+KEYBOARD_ADP5589 all=m
+NF_CT_PROTO_DCCP all=y
+PAGE_BLOCK_ORDER all=10
+RV_MON_TSS all=y
+SND_ATMEL_SOC all=m
 SND_BCM2708_SOC_HIFIBERRY_DAC arm=m arm64=m
 SND_RPI_SIMPLE_SOUNDCARD arm=m arm64=m
 SND_RPI_WM8804_SOUNDCARD arm=m arm64=m
+SND_SOC_ADI all=m
+SND_SOC_IMG all=y
+SND_SOC_ROCKCHIP arm64=m
+STACKLEAK_METRICS all=y
+STACKLEAK_RUNTIME_DISABLE all=y
+STACKLEAK_TRACK_MIN_SIZE all=100
diff --git a/update-source.sh b/update-source.sh
index 7a618513..bea00dac 100755
--- a/update-source.sh
+++ b/update-source.sh
@@ -1,18 +1,17 @@
 #!/bin/sh
 set -xe
 
-BRANCH=aufs6.16
-#BRANCH=aufs6.x-rcN
+#BRANCH=aufs6.16
+BRANCH=aufs6.x-rcN
 
 # aufs6
 [ -d aufs-standalone ] || git clone https://github.com/sfjro/aufs-standalone.git
 cd aufs-standalone
 git checkout -b ${BRANCH} origin/${BRANCH} || git switch ${BRANCH}
 git pull
-cat aufs6-kbuild.patch aufs6-base.patch aufs6-mmap.patch aufs6-standalone.patch > ../kernel-aufs.patch
 rm -rf linux && mkdir linux
 cp -a Documentation fs include linux
-diff -urN /usr/share/empty linux | filterdiff -x linux/include/uapi/linux/Kbuild >> ../kernel-aufs.patch
-cat aufs6-loopback.patch >> ../kernel-aufs.patch
+diff -urN /usr/share/empty linux | filterdiff -x linux/include/uapi/linux/Kbuild > ../kernel-aufs.patch
+cat aufs6-kbuild.patch aufs6-base.patch aufs6-mmap.patch aufs6-standalone.patch aufs6-loopback.patch >> ../kernel-aufs.patch
 
 # other
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/6e258e6c5023fcee9916074b5fbaaace3e3e7fed



More information about the pld-cvs-commit mailing list