[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