[packages/kernel] up to 7.0.0 (aufs patch not ready yet)

atler atler at pld-linux.org
Mon Apr 20 19:42:13 CEST 2026


commit 826e79ee3e23b1e5af6822759b6f69a621c3d980
Author: Jan Palus <atler at pld-linux.org>
Date:   Mon Apr 20 19:36:20 2026 +0200

    up to 7.0.0 (aufs patch not ready yet)
    
    exports of two symbols dropped upstream aufs although still used by
    current codebase so module ends up with unresolved symbols

 kernel-aufs-make.patch  |    4 +-
 kernel-aufs.patch       | 2325 +++++++++++++----------------------------------
 kernel-multiarch.config |  245 +++--
 kernel-x86.config       |    1 -
 kernel.spec             |   17 +-
 update-source.sh        |    8 +-
 6 files changed, 788 insertions(+), 1812 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 30e29d2b..df876ada 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -51,9 +51,9 @@
 %define		have_drm	0
 %endif
 
-%define		rel		1
-%define		basever		6.19
-%define		postver		.11
+%define		rel		0.1
+%define		basever		7.0
+%define		postver		.0
 
 # define this to '-%{basever}' for longterm branch
 %define		versuffix	%{nil}
@@ -103,10 +103,10 @@ Release:	%{rel}
 Epoch:		3
 License:	GPL v2
 Group:		Base/Kernel
-Source0:	https://www.kernel.org/pub/linux/kernel/v6.x/linux-%{basever}.tar.xz
-# Source0-md5:	59c1e1f9c69a6fa9051450ba2ca38200
+Source0:	https://www.kernel.org/pub/linux/kernel/v7.x/linux-%{basever}.tar.xz
+# Source0-md5:	1d35f79af3a784f986e4c3a154c0ecf5
 %if "%{postver}" != ".0"
-Patch0:		https://www.kernel.org/pub/linux/kernel/v6.x/patch-%{version}.xz
+Patch0:		https://www.kernel.org/pub/linux/kernel/v7.x/patch-%{version}.xz
 # Patch0-md5:	b6d512946c3f7173a462a972981abdd7
 %endif
 Source1:	kernel.sysconfig
@@ -616,10 +616,13 @@ find -name '*.py' -print0 | \
 	    -e '1s,/usr/bin/env python$,%{__python},' \
 	    -e '1s,/usr/bin/env python3$,%{__python3},' \
 	scripts/bloat-o-meter \
+	scripts/container \
 	scripts/diffconfig \
 	scripts/dtc/dt-extract-compatibles \
 	scripts/jobserver-exec \
+	scripts/kernel-doc \
 	scripts/show_delta \
+	tools/docs/kernel-doc \
 	tools/docs/sphinx-pre-install \
 	tools/docs/sphinx-build-wrapper \
 	tools/hv/lsvmbus \
@@ -650,8 +653,8 @@ find -name '*.pl' -print0 | \
 	scripts/config \
 	scripts/decode_stacktrace.sh \
 	scripts/faddr2line \
-	tools/testing/selftests/drivers/net/*.sh \
 	tools/testing/selftests/drivers/net/bonding/netcons_over_bonding.sh \
+	tools/testing/selftests/drivers/net/netconsole/*.sh \
 	tools/testing/selftests/exec/check-exec-tests.sh \
 	tools/testing/selftests/powerpc/security/mitigation-patching.sh \
 	tools/testing/selftests/sysctl/sysctl.sh
diff --git a/kernel-aufs-make.patch b/kernel-aufs-make.patch
index 50dcd2ba..24d0e9c6 100644
--- a/kernel-aufs-make.patch
+++ b/kernel-aufs-make.patch
@@ -12,5 +12,5 @@
 --include ${src}/priv_def.mk
 +-include ${srctree}/fs/aufs/priv_def.mk
  
- ccflags-y += ${EXTRA_CFLAGS}
- # cf. include/linux/kernel.h
+ # For aufs as an outsider, it is still useful to specify CFLAGS from
+ # the command-line especially in its module building.
diff --git a/kernel-aufs.patch b/kernel-aufs.patch
index c566bf33..ee19ca71 100644
--- a/kernel-aufs.patch
+++ b/kernel-aufs.patch
@@ -1,6 +1,6 @@
 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
++++ linux/Documentation/ABI/testing/debugfs-aufs	2026-04-20 13:41:05.024683291 +0200
 @@ -0,0 +1,55 @@
 +What:		/debug/aufs/si_<id>/
 +Date:		March 2009
@@ -59,7 +59,7 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Document
 +		will be empty. About XINO files, see the aufs manual.
 diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentation/ABI/testing/sysfs-aufs
 --- /usr/share/empty/Documentation/ABI/testing/sysfs-aufs	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/ABI/testing/sysfs-aufs	2022-11-05 23:02:18.955889283 +0100
++++ linux/Documentation/ABI/testing/sysfs-aufs	2026-04-20 13:41:05.025077435 +0200
 @@ -0,0 +1,31 @@
 +What:		/sys/fs/aufs/si_<id>/
 +Date:		March 2009
@@ -94,23 +94,10 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentat
 +		will be empty. About XINO files, see the aufs manual.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt linux/Documentation/filesystems/aufs/design/01intro.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/01intro.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,171 @@
-+
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/01intro.txt	2026-04-20 13:43:42.057730253 +0200
+@@ -0,0 +1,158 @@
++
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Introduction
 +----------------------------------------
@@ -269,23 +256,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt lin
 +about it. But currently I have implemented it in kernel space.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt linux/Documentation/filesystems/aufs/design/02struct.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/02struct.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,258 @@
++++ linux/Documentation/filesystems/aufs/design/02struct.txt	2026-04-20 13:43:42.058620909 +0200
+@@ -0,0 +1,245 @@
 +
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Basic Aufs Internal Structure
 +
@@ -531,23 +505,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt li
 +For this purpose, use "aumvdown" command in aufs-util.git.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.txt linux/Documentation/filesystems/aufs/design/03atomic_open.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,85 @@
-+
-+# Copyright (C) 2015-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt	2026-04-20 13:43:42.058984964 +0200
+@@ -0,0 +1,72 @@
++
++# Copyright (C) 2015-2026 Junjiro R. Okajima
 +
 +Support for a branch who has its ->atomic_open()
 +----------------------------------------------------------------------
@@ -620,23 +581,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.t
 +       be implemented in aufs, but not all I am afraid.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt linux/Documentation/filesystems/aufs/design/03lookup.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/03lookup.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,113 @@
-+
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/03lookup.txt	2026-04-20 13:43:42.059491780 +0200
+@@ -0,0 +1,100 @@
++
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Lookup in a Branch
 +----------------------------------------------------------------------
@@ -737,23 +685,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt li
 +   by over-mounting something (or another method).
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt linux/Documentation/filesystems/aufs/design/04branch.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/04branch.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,74 @@
++++ linux/Documentation/filesystems/aufs/design/04branch.txt	2026-04-20 13:43:42.059977110 +0200
+@@ -0,0 +1,61 @@
 +
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Branch Manipulation
 +
@@ -815,23 +750,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt li
 +    same named entry on the upper branch.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt linux/Documentation/filesystems/aufs/design/05wbr_policy.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,64 @@
++++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt	2026-04-20 13:43:42.060603083 +0200
+@@ -0,0 +1,51 @@
 +
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Policies to Select One among Multiple Writable Branches
 +----------------------------------------------------------------------
@@ -883,23 +805,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.tx
 +  copyup policy.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.dot linux/Documentation/filesystems/aufs/design/06dirren.dot
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.dot	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06dirren.dot	2022-11-05 23:02:18.959222617 +0100
-@@ -0,0 +1,44 @@
++++ linux/Documentation/filesystems/aufs/design/06dirren.dot	2026-04-20 13:43:42.061181826 +0200
+@@ -0,0 +1,31 @@
 +
 +// to view this graph, run dot(1) command in GRAPHVIZ.
-+//
-+// This program is free software; you can redistribute it and/or modify
-+// it under the terms of the GNU General Public License as published by
-+// the Free Software Foundation; either version 2 of the License, or
-+// (at your option) any later version.
-+//
-+// This program is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU General Public License
-+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 +
 +digraph G {
 +node [shape=box];
@@ -931,23 +840,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.dot li
 +}
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.txt linux/Documentation/filesystems/aufs/design/06dirren.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06dirren.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,102 @@
-+
-+# Copyright (C) 2017-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/06dirren.txt	2026-04-20 13:43:42.061834350 +0200
+@@ -0,0 +1,89 @@
++
++# Copyright (C) 2017-2026 Junjiro R. Okajima
 +
 +Special handling for renaming a directory (DIRREN)
 +----------------------------------------------------------------------
@@ -1037,23 +933,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06dirren.txt li
 +equivalen to udba=reval case.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt linux/Documentation/filesystems/aufs/design/06fhsm.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06fhsm.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,118 @@
-+
-+# Copyright (C) 2011-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/06fhsm.txt	2026-04-20 13:43:42.062371578 +0200
+@@ -0,0 +1,105 @@
++
++# Copyright (C) 2011-2026 Junjiro R. Okajima
 +
 +File-based Hierarchical Storage Management (FHSM)
 +----------------------------------------------------------------------
@@ -1159,23 +1042,10 @@ 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-12-01 15:04:47.556666712 +0100
-@@ -0,0 +1,40 @@
++++ linux/Documentation/filesystems/aufs/design/06mmap.txt	2026-04-20 13:43:42.062911901 +0200
+@@ -0,0 +1,27 @@
 +
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +mmap(2) -- File Memory Mapping
 +----------------------------------------------------------------------
@@ -1203,23 +1073,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linu
 +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
-@@ -0,0 +1,94 @@
-+
-+# Copyright (C) 2014-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/06xattr.txt	2026-04-20 13:43:42.063434157 +0200
+@@ -0,0 +1,81 @@
++
++# Copyright (C) 2014-2026 Junjiro R. Okajima
 +
 +Listing XATTR/EA and getting the value
 +----------------------------------------------------------------------
@@ -1301,23 +1158,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt lin
 +now, aufs implements the branch attributes to ignore the error.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt linux/Documentation/filesystems/aufs/design/07export.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/07export.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,58 @@
-+
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++++ linux/Documentation/filesystems/aufs/design/07export.txt	2026-04-20 13:43:42.063989796 +0200
+@@ -0,0 +1,45 @@
++
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Export Aufs via NFS
 +----------------------------------------------------------------------
@@ -1363,23 +1207,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt li
 +  lookup_one_len(), vfs_getattr(), encode_fh() and others.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linux/Documentation/filesystems/aufs/design/08shwh.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/08shwh.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,52 @@
++++ linux/Documentation/filesystems/aufs/design/08shwh.txt	2026-04-20 13:43:42.064527855 +0200
+@@ -0,0 +1,39 @@
 +
-+# Copyright (C) 2005-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++# Copyright (C) 2005-2026 Junjiro R. Okajima
 +
 +Show Whiteout Mode (shwh)
 +----------------------------------------------------------------------
@@ -1419,23 +1250,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linu
 +initramfs will use it to replace the old one at the next boot.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt linux/Documentation/filesystems/aufs/design/10dynop.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/10dynop.txt	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,47 @@
++++ linux/Documentation/filesystems/aufs/design/10dynop.txt	2026-04-20 13:43:42.065046192 +0200
+@@ -0,0 +1,34 @@
 +
-+# Copyright (C) 2010-2025 Junjiro R. Okajima
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++# Copyright (C) 2010-2026 Junjiro R. Okajima
 +
 +Dynamically customizable FS operations
 +----------------------------------------------------------------------
@@ -1470,10 +1288,10 @@ 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	2025-12-01 15:04:47.556666712 +0100
-@@ -0,0 +1,409 @@
++++ linux/Documentation/filesystems/aufs/README	2026-04-20 13:43:42.056961632 +0200
+@@ -0,0 +1,398 @@
 +
-+Aufs6 -- advanced multi layered unification filesystem version 6.x
++Aufs7 -- advanced multi layered unification filesystem version 7.x
 +http://aufs.sf.net
 +Junjiro R. Okajima
 +
@@ -1489,30 +1307,22 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +Unionfs was being developed by Professor Erez Zadok at Stony Brook
 +University and his team.
 +
-+Aufs6 supports linux-v6.0 and later, try aufs6.0 branch in
-+aufs-linux.git or aufs-standalone.git.
-+If you want older kernel version support,
-+- for linux-v5.x series, try aufs-linux.git or aufs-standalone.git
++Aufs7 supports linux-v7.0 and later, If you want older kernel version
++support,
++- for linux-v6.x series, try aufs6.* branches in aufs-linux.git or
++  aufs-standalone.git
++- for linux-v5.x series, try aufs5.* branches in aufs-linux.git or
++  aufs-standalone.git
 +- for linux-v4.x series, try aufs4-linux.git or aufs4-standalone.git
 +- for linux-v3.x series, try aufs3-linux.git or aufs3-standalone.git
 +- for linux-v2.6.16 and later, try aufs2-2.6.git, aufs2-standalone.git
 +  or aufs1 from CVS on SourceForge.
 +
-+Note: the name of aufs5-linux.git and aufs5-standalone.git on github
-+      were changed. Now they are aufs-linux.git and
-+      aufs-standalone.git and they contain aufs5 and later branches.
-+
 +Note: it becomes clear that "Aufs was rejected. Let's give it up."
 +      According to Christoph Hellwig, linux rejects all union-type
 +      filesystems but UnionMount.
 +<http://marc.info/?l=linux-kernel&m=123938533724484&w=2>
 +
-+PS. Al Viro seems have a plan to merge aufs as well as overlayfs and
-+    UnionMount, and he pointed out an issue around a directory mutex
-+    lock and aufs addressed it. But it is still unsure whether aufs will
-+    be merged (or any other union solution).
-+<http://marc.info/?l=linux-kernel&m=136312705029295&w=1>
-+
 +
 +1. Features
 +----------------------------------------
@@ -1560,7 +1370,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +- userspace wrapper for pathconf(3)/fpathconf(3) with _PC_LINK_MAX.
 +- and more...
 +
-+Currently these features are dropped temporary from aufs6.
++Currently these features are dropped temporary from aufs7.
 +See design/08plan.txt in detail.
 +- nested mount, i.e. aufs as readonly no-whiteout branch of another aufs
 +  (robr)
@@ -1578,7 +1388,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +
 +2. Download
 +----------------------------------------
-+There are three GIT trees for aufs6, aufs-linux.git,
++There are three GIT trees for aufs7, aufs-linux.git,
 +aufs-standalone.git, and aufs-util.git.
 +While the aufs-util is always necessary, you need either of aufs-linux
 +or aufs-standalone.
@@ -1586,7 +1396,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +The aufs-linux tree includes the whole linux mainline GIT tree,
 +git://git.kernel.org/.../torvalds/linux.git.
 +And you cannot select CONFIG_AUFS_FS=m for this version, eg. you cannot
-+build aufs6 as an external kernel module.
++build aufs7 as an external kernel module.
 +Several extra patches are not included in this tree. Only
 +aufs-standalone tree contains them. They are described in the later
 +section "Configuration and Compilation."
@@ -1595,46 +1405,46 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +and necessary patches, and you can select CONFIG_AUFS_FS=m.
 +But you need to apply all aufs patches manually.
 +
-+You will find GIT branches whose name is in form of "aufs6.x" where "x"
-+represents the linux kernel version, "linux-6.x". For instance,
-+"aufs6.0" is for linux-6.0. For latest "linux-6.x-rcN", use
-+"aufs6.x-rcN" branch.
++You will find GIT branches whose name is in form of "aufs7.x" where "x"
++represents the linux kernel version, "linux-v7.x". For instance,
++"aufs7.0" is for linux-v7.0. For latest "linux-v7.x-rcN", use
++"aufs7.x-rcN" branch.
 +
 +o aufs-linux tree
 +$ git clone --reference /your/linux/git/tree \
 +	git://github.com/sfjro/aufs-linux.git aufs-linux.git
 +- if you don't have linux GIT tree, then remove "--reference ..."
 +$ cd aufs-linux.git
-+$ git checkout origin/aufs6.0
++$ git checkout origin/aufs7.0
 +
 +Or You may want to directly git-pull aufs into your linux GIT tree, and
 +leave the patch-work to GIT.
 +$ cd /your/linux/git/tree
 +$ git remote add aufs git://github.com/sfjro/aufs-linux.git
 +$ git fetch aufs
-+$ git checkout -b my6.0 v6.0
++$ git checkout -b your7.0 v7.0
 +$ (add your local change...)
-+$ git pull aufs aufs6.0
-+- now you have v6.0 + your_changes + aufs6.0 in you my6.0 branch.
++$ git pull aufs aufs7.0
++- now you have v7.0 + your_changes + aufs7.0 in your7.0 branch.
 +- you may need to solve some conflicts between your_changes and
-+  aufs6.0. in this case, git-rerere is recommended so that you can
-+  solve the similar conflicts automatically when you upgrade to 6.1 or
++  aufs7.0. in this case, git-rerere is recommended so that you can
++  solve the similar conflicts automatically when you upgrade to 7.1 or
 +  later in the future.
 +
 +o aufs-standalone tree
 +$ git clone git://github.com/sfjro/aufs-standalone.git aufs-standalone.git
 +$ cd aufs-standalone.git
-+$ git checkout origin/aufs6.0
++$ git checkout origin/aufs7.0
 +
 +o aufs-util tree
 +$ git clone git://git.code.sf.net/p/aufs/aufs-util aufs-util.git
 +- note that the public aufs-util.git is on SourceForge instead of
 +  GitHUB.
 +$ cd aufs-util.git
-+$ git checkout origin/aufs6.0
++$ git checkout origin/aufs7.0
 +
-+Note: The 6.x-rcN branch is to be used with `rc' kernel versions ONLY.
-+The minor version number, 'x' in '6.x', of aufs may not always
++Note: The 7.x-rcN branch is to be used with `rc' kernel versions ONLY.
++The minor version number, 'x' in '7.x', of aufs may not always
 +follow the minor version number of the kernel.
 +Because changes in the kernel that cause the use of a new
 +minor version number do not always require changes to aufs-util.
@@ -1646,8 +1456,8 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +nearest lower number.
 +
 +For (an unreleased) example:
-+If you are using "linux-6.10" and the "aufs6.10" branch
-+does not exist in aufs-util repository, then "aufs6.9", "aufs6.8"
++If you are using "linux-v7.10" and the "aufs7.10" branch
++does not exist in aufs-util repository, then "aufs7.9", "aufs7.8"
 +or something numerically smaller is the branch for your kernel.
 +
 +Also you can view all branches by
@@ -1671,22 +1481,19 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +	CONFIG_LOCKDEP_BITS=21
 +	CONFIG_LOCKDEP_CHAINS_BITS=21
 +	CONFIG_LOCKDEP_STACK_TRACE_BITS=24
-+  Also you will need to expand some constant values in LOCKDEP. Refer
-+  to lockdep-debug.patch in aufs-standalone.git.
 +
 +For aufs-standalone tree,
 +There are several ways to build.
 +
 +1.
-+- apply ./aufs6-kbuild.patch to your kernel source files.
-+- apply ./aufs6-base.patch too.
-+- apply ./aufs6-mmap.patch too.
-+- apply ./aufs6-standalone.patch too, if you have a plan to set
-+  CONFIG_AUFS_FS=m. otherwise you don't need ./aufs-standalone.patch.
++- apply ./aufs7-kbuild.patch to your kernel source files.
++- apply ./aufs7-base.patch too.
++- apply ./aufs7-mmap.patch too.
++- apply ./aufs7-standalone.patch too, if you have a plan to set
++  CONFIG_AUFS_FS=m. otherwise you don't need ./aufs7-standalone.patch.
 +- copy ./{Documentation,fs,include/uapi/linux/aufs_type.h} files to your
 +  kernel source tree. Never copy $PWD/include/uapi/linux/Kbuild.
-+- enable CONFIG_AUFS_FS, you can select either
-+  =m or =y.
++- enable CONFIG_AUFS_FS, you can select either =m or =y.
 +- and build your kernel as usual.
 +- install the built kernel.
 +- install the header files too by "make headers_install" to the
@@ -1696,9 +1503,9 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +
 +2.
 +- module only (CONFIG_AUFS_FS=m).
-+- apply ./aufs6-base.patch to your kernel source files.
-+- apply ./aufs6-mmap.patch too.
-+- apply ./aufs6-standalone.patch too.
++- apply ./aufs7-base.patch to your kernel source files.
++- apply ./aufs7-mmap.patch too.
++- apply ./aufs7-standalone.patch too.
 +- build your kernel, don't forget "make headers_install", and reboot.
 +- edit ./config.mk and set other aufs configurations if necessary.
 +  Note: You should read $PWD/fs/aufs/Kconfig carefully which describes
@@ -1714,7 +1521,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +    available in aufs standalone version's Makefile only), or copy
 +    $PWD/usr/include/linux/aufs_type.h to /usr/include/linux or wherever
 +    you like manually. By default, the target directory is $PWD/usr.
-+- no need to apply aufs6-kbuild.patch, nor copying source files to your
++- no need to apply aufs7-kbuild.patch, nor copying source files to your
 +  kernel source tree.
 +
 +Note: The header file aufs_type.h is necessary to build aufs-util
@@ -1736,7 +1543,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +
 +There several other patches in aufs-standalone.git. They are all
 +optional. When you meet some problems, they will help you.
-+- aufs6-loopback.patch
++- aufs7-loopback.patch
 +  Supports a nested loopback mount in a branch-fs. This patch is
 +  unnecessary until aufs produces a message like "you may want to try
 +  another patch for loopback file".
@@ -1883,24 +1690,11 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +# End: ;
 diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h
 --- /usr/share/empty/fs/aufs/aufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/aufs.h	2025-02-04 20:03:40.673271838 +0100
-@@ -0,0 +1,62 @@
++++ linux/fs/aufs/aufs.h	2026-04-20 13:43:42.069019911 +0200
+@@ -0,0 +1,49 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -1949,24 +1743,11 @@ diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h
 +#endif /* __AUFS_H__ */
 diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 --- /usr/share/empty/fs/aufs/branch.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/branch.c	2025-07-24 19:31:57.789847457 +0200
-@@ -0,0 +1,1427 @@
++++ linux/fs/aufs/branch.c	2026-04-20 13:43:42.069538354 +0200
+@@ -0,0 +1,1412 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -2090,7 +1871,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +	int err;
 +
 +	err = -ENOMEM;
-+	add_branch = kzalloc(sizeof(*add_branch), GFP_NOFS);
++	add_branch = kzalloc_obj(*add_branch, GFP_NOFS);
 +	if (unlikely(!add_branch))
 +		goto out;
 +	add_branch->br_xino = au_xino_alloc(/*nfile*/1);
@@ -2102,8 +1883,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +
 +	if (au_br_writable(perm)) {
 +		/* may be freed separately at changing the branch permission */
-+		add_branch->br_wbr = kzalloc(sizeof(*add_branch->br_wbr),
-+					     GFP_NOFS);
++		add_branch->br_wbr = kzalloc_obj(*add_branch->br_wbr, GFP_NOFS);
 +		if (unlikely(!add_branch->br_wbr))
 +			goto out_hnotify;
 +	}
@@ -3313,8 +3093,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +
 +			if (unlikely(err)) {
 +				rerr = -ENOMEM;
-+				br->br_wbr = kzalloc(sizeof(*br->br_wbr),
-+						     GFP_NOFS);
++				br->br_wbr = kzalloc_obj(*br->br_wbr, GFP_NOFS);
 +				if (br->br_wbr)
 +					rerr = au_wbr_init(br, sb, br->br_perm);
 +				if (unlikely(rerr)) {
@@ -3327,7 +3106,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +	} else if (au_br_writable(mod->perm)) {
 +		/* ro --> rw */
 +		err = -ENOMEM;
-+		br->br_wbr = kzalloc(sizeof(*br->br_wbr), GFP_NOFS);
++		br->br_wbr = kzalloc_obj(*br->br_wbr, GFP_NOFS);
 +		if (br->br_wbr) {
 +			err = au_wbr_init(br, sb, mod->perm);
 +			if (unlikely(err)) {
@@ -3380,24 +3159,11 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +}
 diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
 --- /usr/share/empty/fs/aufs/branch.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/branch.h	2026-02-09 09:56:16.563330741 +0100
-@@ -0,0 +1,375 @@
++++ linux/fs/aufs/branch.h	2026-04-20 13:43:42.070303002 +0200
+@@ -0,0 +1,362 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -3759,7 +3525,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
 +#endif /* __AUFS_BRANCH_H__ */
 diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk
 --- /usr/share/empty/fs/aufs/conf.mk	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/conf.mk	2022-11-05 23:02:18.959222617 +0100
++++ linux/fs/aufs/conf.mk	2026-04-20 13:41:05.039983867 +0200
 @@ -0,0 +1,40 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
@@ -3803,24 +3569,11 @@ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk
 +-include ${srctree}/${src}/conf_priv.mk
 diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 --- /usr/share/empty/fs/aufs/cpup.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/cpup.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,1454 @@
++++ linux/fs/aufs/cpup.c	2026-04-20 13:43:42.071181885 +0200
+@@ -0,0 +1,1439 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -4389,12 +4142,10 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +{
 +	int err;
 +	struct dentry *h_dentry;
-+	/* struct inode *h_inode; */
 +	struct mnt_idmap *h_idmap;
 +
 +	h_idmap = mnt_idmap(h_path->mnt);
 +	h_dentry = h_path->dentry;
-+	/* h_inode = d_inode(h_dentry); */
 +	/* forget_all_cached_acls(h_inode)); */
 +	err = vfsub_remove_acl(h_idmap, h_dentry, XATTR_NAME_POSIX_ACL_ACCESS);
 +	AuTraceErr(err);
@@ -4613,7 +4364,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +	} *a;
 +
 +	err = -ENOMEM;
-+	a = kmalloc(sizeof(*a), GFP_NOFS);
++	a = kmalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +	a->h_src_attr.valid = 0;
@@ -4747,9 +4498,9 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +	a->h_path.dentry = h_dst;
 +	rerr = 0;
 +	if (d_is_positive(h_dst)) {
-+		if (!isdir) {
++		if (!isdir)
 +			rerr = vfsub_unlink(h_dir, &a->h_path, /*force*/0);
-+		} else
++		else
 +			rerr = vfsub_rmdir(h_dir, &a->h_path);
 +	}
 +	au_dtime_revert(&a->dt);
@@ -5043,9 +4794,9 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +
 +	dget(wh_dentry);
 +	h_path.dentry = wh_dentry;
-+	if (!d_is_dir(wh_dentry)) {
++	if (!d_is_dir(wh_dentry))
 +		err = vfsub_unlink(d_inode(h_parent), &h_path, /*force*/0);
-+	} else
++	else
 +		err = vfsub_rmdir(d_inode(h_parent), &h_path);
 +	if (unlikely(err)) {
 +		AuIOErr("failed remove copied-up tmp file %pd(%d)\n",
@@ -5261,24 +5012,11 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +}
 diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h
 --- /usr/share/empty/fs/aufs/cpup.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/cpup.h	2025-07-24 19:31:57.789847457 +0200
-@@ -0,0 +1,101 @@
++++ linux/fs/aufs/cpup.h	2026-04-20 13:43:42.072005972 +0200
+@@ -0,0 +1,88 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -5366,24 +5104,11 @@ diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h
 +#endif /* __AUFS_CPUP_H__ */
 diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 --- /usr/share/empty/fs/aufs/dbgaufs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dbgaufs.c	2026-02-09 09:56:16.563330741 +0100
-@@ -0,0 +1,525 @@
++++ linux/fs/aufs/dbgaufs.c	2026-04-20 13:43:42.072480077 +0200
+@@ -0,0 +1,512 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -5431,7 +5156,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 +	struct dbgaufs_arg *p;
 +
 +	err = -ENOMEM;
-+	p = kmalloc(sizeof(*p), GFP_NOFS);
++	p = kmalloc_obj(*p, GFP_NOFS);
 +	if (unlikely(!p))
 +		goto out;
 +
@@ -5895,24 +5620,11 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h
 --- /usr/share/empty/fs/aufs/dbgaufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dbgaufs.h	2025-02-04 20:03:40.676605172 +0100
-@@ -0,0 +1,53 @@
++++ linux/fs/aufs/dbgaufs.h	2026-04-20 13:43:42.073021431 +0200
+@@ -0,0 +1,40 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -5952,24 +5664,11 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h
 +#endif /* __DBGAUFS_H__ */
 diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c
 --- /usr/share/empty/fs/aufs/dcsub.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dcsub.c	2025-02-04 20:03:40.676605172 +0100
-@@ -0,0 +1,225 @@
++++ linux/fs/aufs/dcsub.c	2026-04-20 13:43:42.073565538 +0200
+@@ -0,0 +1,212 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -5995,7 +5694,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c
 +	void *p;
 +
 +	err = -ENOMEM;
-+	dpages->dpages = kmalloc(sizeof(*dpages->dpages), gfp);
++	dpages->dpages = kmalloc_obj(*dpages->dpages, gfp);
 +	if (unlikely(!dpages->dpages))
 +		goto out;
 +
@@ -6181,24 +5880,11 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h
 --- /usr/share/empty/fs/aufs/dcsub.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dcsub.h	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,139 @@
++++ linux/fs/aufs/dcsub.h	2026-04-20 13:43:42.074072371 +0200
+@@ -0,0 +1,126 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -6324,24 +6010,11 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h
 +#endif /* __AUFS_DCSUB_H__ */
 diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 --- /usr/share/empty/fs/aufs/debug.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/debug.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,448 @@
++++ linux/fs/aufs/debug.c	2026-04-20 13:43:42.074632930 +0200
+@@ -0,0 +1,435 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -6660,7 +6333,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +	} *a;
 +
 +	/* this function can be called from magic sysrq */
-+	a = kzalloc(sizeof(*a), GFP_ATOMIC);
++	a = kzalloc_obj(*a, GFP_ATOMIC);
 +	if (unlikely(!a)) {
 +		dpri("no memory\n");
 +		return;
@@ -6776,24 +6449,11 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +}
 diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h
 --- /usr/share/empty/fs/aufs/debug.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/debug.h	2025-02-04 20:03:40.676605172 +0100
-@@ -0,0 +1,226 @@
++++ linux/fs/aufs/debug.h	2026-04-20 13:43:42.075218618 +0200
+@@ -0,0 +1,213 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -7006,24 +6666,11 @@ 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	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,1230 @@
++++ linux/fs/aufs/dentry.c	2026-04-20 13:43:42.075742820 +0200
+@@ -0,0 +1,1217 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -8240,24 +7887,11 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +};
 diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
 --- /usr/share/empty/fs/aufs/dentry.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dentry.h	2026-02-09 09:56:16.566664074 +0100
-@@ -0,0 +1,271 @@
++++ linux/fs/aufs/dentry.h	2026-04-20 13:43:42.076577104 +0200
+@@ -0,0 +1,258 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -8515,24 +8149,11 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
 +#endif /* __AUFS_DENTRY_H__ */
 diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
 --- /usr/share/empty/fs/aufs/dinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dinfo.c	2025-02-04 20:03:40.676605172 +0100
-@@ -0,0 +1,555 @@
++++ linux/fs/aufs/dinfo.c	2026-04-20 13:43:42.077196028 +0200
+@@ -0,0 +1,544 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -8560,7 +8181,7 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
 +	nbr = au_sbbot(sb) + 1;
 +	if (nbr <= 0)
 +		nbr = 1;
-+	dinfo->di_hdentry = kcalloc(nbr, sizeof(*dinfo->di_hdentry), GFP_NOFS);
++	dinfo->di_hdentry = kzalloc_objs(*dinfo->di_hdentry, nbr, GFP_NOFS);
 +	if (dinfo->di_hdentry) {
 +		au_rw_write_lock_nested(&dinfo->di_rwsem, lsc);
 +		dinfo->di_btop = -1;
@@ -8586,6 +8207,8 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
 +	struct au_hdentry *p;
 +	aufs_bindex_t bbot, bindex;
 +
++	AuDebugOn(dinfo->di_htmpfile);
++
 +	/* dentry may not be revalidated */
 +	bindex = dinfo->di_btop;
 +	if (bindex >= 0) {
@@ -9074,24 +8697,11 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 --- /usr/share/empty/fs/aufs/dir.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dir.c	2025-07-24 19:31:57.789847457 +0200
-@@ -0,0 +1,765 @@
++++ linux/fs/aufs/dir.c	2026-04-20 13:43:42.077841209 +0200
+@@ -0,0 +1,752 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -9639,7 +9249,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 +	arg->err = 0;
 +	au_fset_testempty(arg->flags, CALLED);
 +	/* smp_mb(); */
-+	if (is_dot_dotdot(name, namelen))
++	if (name_is_dot_dotdot(name, namelen))
 +		goto out; /* success */
 +
 +	if (namelen <= AUFS_WH_PFX_LEN
@@ -9843,24 +9453,11 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 +};
 diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h
 --- /usr/share/empty/fs/aufs/dir.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dir.h	2025-02-04 20:03:40.676605172 +0100
-@@ -0,0 +1,134 @@
++++ linux/fs/aufs/dir.h	2026-04-20 13:43:42.078617312 +0200
+@@ -0,0 +1,121 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -9981,24 +9578,11 @@ diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h
 +#endif /* __AUFS_DIR_H__ */
 diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 --- /usr/share/empty/fs/aufs/dirren.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dirren.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,1308 @@
++++ linux/fs/aufs/dirren.c	2026-04-20 13:43:42.079195547 +0200
+@@ -0,0 +1,1294 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2017-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2017-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -10186,7 +9770,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +			goto out_free;
 +		}
 +
-+		ent = kmalloc(sizeof(*ent), GFP_NOFS);
++		ent = kmalloc_obj(*ent, GFP_NOFS);
 +		if (!ent) {
 +			err = -ENOMEM;
 +			AuTraceErr(err);
@@ -10879,7 +10463,7 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +	AuDbg("bindex %d\n", bindex);
 +
 +	err = -ENOMEM;
-+	ent = kmalloc(sizeof(*ent), GFP_NOFS);
++	ent = kmalloc_obj(*ent, GFP_NOFS);
 +	if (unlikely(!ent))
 +		goto out;
 +
@@ -11135,9 +10719,8 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +	bbot = au_sbbot(sb);
 +	w.ninfo = bbot + 1;
 +	if (!lkup->dirren.drinfo) {
-+		lkup->dirren.drinfo = kcalloc(w.ninfo,
-+					      sizeof(*lkup->dirren.drinfo),
-+					      GFP_NOFS);
++		lkup->dirren.drinfo = kzalloc_objs(*lkup->dirren.drinfo,
++						   w.ninfo, GFP_NOFS);
 +		if (unlikely(!lkup->dirren.drinfo)) {
 +			err = -ENOMEM;
 +			goto out;
@@ -11293,24 +10876,11 @@ diff -urN /usr/share/empty/fs/aufs/dirren.c linux/fs/aufs/dirren.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dirren.h linux/fs/aufs/dirren.h
 --- /usr/share/empty/fs/aufs/dirren.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dirren.h	2026-02-09 09:56:16.566664074 +0100
-@@ -0,0 +1,140 @@
++++ linux/fs/aufs/dirren.h	2026-04-20 13:43:42.080100236 +0200
+@@ -0,0 +1,127 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2017-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2017-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -11437,24 +11007,11 @@ diff -urN /usr/share/empty/fs/aufs/dirren.h linux/fs/aufs/dirren.h
 +#endif /* __AUFS_DIRREN_H__ */
 diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c
 --- /usr/share/empty/fs/aufs/dynop.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dynop.c	2026-02-09 09:56:16.566664074 +0100
-@@ -0,0 +1,364 @@
++++ linux/fs/aufs/dynop.c	2026-04-20 13:43:42.080697981 +0200
+@@ -0,0 +1,351 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2010-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2010-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -11805,24 +11362,11 @@ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h
 --- /usr/share/empty/fs/aufs/dynop.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dynop.h	2025-02-04 20:03:40.676605172 +0100
-@@ -0,0 +1,77 @@
++++ linux/fs/aufs/dynop.h	2026-04-20 13:43:42.081291943 +0200
+@@ -0,0 +1,64 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2010-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2010-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -11886,24 +11430,11 @@ diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h
 +#endif /* __AUFS_DYNOP_H__ */
 diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 --- /usr/share/empty/fs/aufs/export.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/export.c	2026-02-09 09:56:16.566664074 +0100
-@@ -0,0 +1,829 @@
++++ linux/fs/aufs/export.c	2026-04-20 13:43:42.081857148 +0200
+@@ -0,0 +1,816 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -12719,24 +12250,11 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 +}
 diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c
 --- /usr/share/empty/fs/aufs/fhsm.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/fhsm.c	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,426 @@
++++ linux/fs/aufs/fhsm.c	2026-04-20 13:43:42.083347169 +0200
+@@ -0,0 +1,413 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2011-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2011-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -13101,7 +12619,7 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c
 +	int err;
 +
 +	err = 0;
-+	br->br_fhsm = kmalloc(sizeof(*br->br_fhsm), GFP_NOFS);
++	br->br_fhsm = kmalloc_obj(*br->br_fhsm, GFP_NOFS);
 +	if (br->br_fhsm)
 +		au_br_fhsm_init(br->br_fhsm);
 +	else
@@ -13149,24 +12667,11 @@ 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	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,848 @@
++++ linux/fs/aufs/file.c	2026-04-20 13:43:42.083885281 +0200
+@@ -0,0 +1,835 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -14001,24 +13506,11 @@ 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	2026-02-09 09:56:16.566664074 +0100
-@@ -0,0 +1,327 @@
++++ linux/fs/aufs/file.h	2026-04-20 13:43:42.084550626 +0200
+@@ -0,0 +1,314 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -14332,24 +13824,11 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 +#endif /* __AUFS_FILE_H__ */
 diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c
 --- /usr/share/empty/fs/aufs/finfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/finfo.c	2025-12-01 15:04:47.560000045 +0100
-@@ -0,0 +1,148 @@
++++ linux/fs/aufs/finfo.c	2026-04-20 13:43:42.085035176 +0200
+@@ -0,0 +1,135 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -14484,24 +13963,11 @@ 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	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,791 @@
++++ linux/fs/aufs/f_op.c	2026-04-20 13:43:42.082631176 +0200
+@@ -0,0 +1,778 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -15279,24 +14745,11 @@ 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	2026-02-09 09:56:16.569997407 +0100
-@@ -0,0 +1,1244 @@
++++ linux/fs/aufs/fsctx.c	2026-04-20 13:43:42.085511584 +0200
+@@ -0,0 +1,1231 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2022-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2022-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -16483,7 +15936,7 @@ diff -urN /usr/share/empty/fs/aufs/fsctx.c linux/fs/aufs/fsctx.c
 +
 +	/* they will be freed by au_fsctx_free() */
 +	err = -ENOMEM;
-+	a = kzalloc(sizeof(*a), GFP_NOFS);
++	a = kzalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +	a->bindex = 0;
@@ -16527,24 +15980,11 @@ diff -urN /usr/share/empty/fs/aufs/fsctx.c linux/fs/aufs/fsctx.c
 +}
 diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h
 --- /usr/share/empty/fs/aufs/fstype.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/fstype.h	2025-04-07 08:13:07.936660162 +0200
-@@ -0,0 +1,419 @@
++++ linux/fs/aufs/fstype.h	2026-04-20 13:43:42.086210835 +0200
+@@ -0,0 +1,406 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -16950,24 +16390,11 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h
 +#endif /* __AUFS_FSTYPE_H__ */
 diff -urN /usr/share/empty/fs/aufs/hbl.h linux/fs/aufs/hbl.h
 --- /usr/share/empty/fs/aufs/hbl.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hbl.h	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,65 @@
++++ linux/fs/aufs/hbl.h	2026-04-20 13:43:42.086766722 +0200
+@@ -0,0 +1,52 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2017-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2017-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -17019,24 +16446,11 @@ diff -urN /usr/share/empty/fs/aufs/hbl.h linux/fs/aufs/hbl.h
 +#endif /* __AUFS_HBL_H__ */
 diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c
 --- /usr/share/empty/fs/aufs/hfsnotify.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hfsnotify.c	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,290 @@
++++ linux/fs/aufs/hfsnotify.c	2026-04-20 13:43:42.087236174 +0200
+@@ -0,0 +1,277 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -17257,7 +16671,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c
 +		goto out;
 +
 +	err = -ENOMEM;
-+	hfsn = kmalloc(sizeof(*hfsn), GFP_NOFS);
++	hfsn = kmalloc_obj(*hfsn, GFP_NOFS);
 +	if (unlikely(!hfsn))
 +		goto out;
 +
@@ -17313,24 +16727,11 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c
 +};
 diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c
 --- /usr/share/empty/fs/aufs/hfsplus.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hfsplus.c	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,60 @@
++++ linux/fs/aufs/hfsplus.c	2026-04-20 13:43:42.087745386 +0200
+@@ -0,0 +1,47 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2010-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2010-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -17377,24 +16778,11 @@ diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c
 +}
 diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c
 --- /usr/share/empty/fs/aufs/hnotify.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hnotify.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,715 @@
++++ linux/fs/aufs/hnotify.c	2026-04-20 13:43:42.088211970 +0200
+@@ -0,0 +1,702 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -18096,24 +17484,11 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c
 +}
 diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c
 --- /usr/share/empty/fs/aufs/iinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/iinfo.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,288 @@
++++ linux/fs/aufs/iinfo.c	2026-04-20 13:43:42.091756100 +0200
+@@ -0,0 +1,275 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -18388,24 +17763,11 @@ diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
 --- /usr/share/empty/fs/aufs/inode.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/inode.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,533 @@
++++ linux/fs/aufs/inode.c	2026-04-20 13:43:42.092318979 +0200
+@@ -0,0 +1,520 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -18925,24 +18287,11 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
 +}
 diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
 --- /usr/share/empty/fs/aufs/inode.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/inode.h	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,728 @@
++++ linux/fs/aufs/inode.h	2026-04-20 13:43:42.092923932 +0200
+@@ -0,0 +1,716 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -18954,6 +18303,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
 +
 +#ifdef __KERNEL__
 +
++#include <linux/fs.h>
 +#include <linux/fsnotify.h>
 +#include "fstype.h"
 +#include "rwsem.h"
@@ -19275,8 +18625,8 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
 +
 +#ifdef CONFIG_FS_POSIX_ACL
 +struct posix_acl *aufs_get_inode_acl(struct inode *inode, int type, bool rcu);
-+struct posix_acl *aufs_get_acl(struct mnt_idmap *idmap,
-+			       struct dentry *dentry, int type);
++struct posix_acl *aufs_get_acl(struct mnt_idmap *idmap, struct dentry *dentry,
++			       int type);
 +int aufs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
 +		 struct posix_acl *acl, int type);
 +#endif
@@ -19657,24 +19007,11 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
 +#endif /* __AUFS_INODE_H__ */
 diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c
 --- /usr/share/empty/fs/aufs/ioctl.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/ioctl.c	2026-02-09 09:56:16.569997407 +0100
-@@ -0,0 +1,220 @@
++++ linux/fs/aufs/ioctl.c	2026-04-20 13:43:42.093650137 +0200
+@@ -0,0 +1,207 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -19881,24 +19218,11 @@ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c
 +#endif
 diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 --- /usr/share/empty/fs/aufs/i_op_add.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_add.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,955 @@
++++ linux/fs/aufs/i_op_add.c	2026-04-20 13:43:42.089649108 +0200
+@@ -0,0 +1,943 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -20150,7 +19474,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 +	IMustLock(dir);
 +
 +	err = -ENOMEM;
-+	a = kmalloc(sizeof(*a), GFP_NOFS);
++	a = kmalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +	a->wr_dir_args.force_btgt = -1;
@@ -20328,6 +19652,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 +		goto out;
 +
 +	dentry = file->f_path.dentry;
++	AuDebugOn(au_di(dentry));
 +	err = au_di_init(dentry);
 +	if (unlikely(err))
 +		goto out_si;
@@ -20587,7 +19912,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 +	IMustLock(inode);
 +
 +	err = -ENOMEM;
-+	a = kzalloc(sizeof(*a), GFP_NOFS);
++	a = kzalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -20744,7 +20069,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 +	IMustLock(dir);
 +
 +	ret = ERR_PTR(-ENOMEM);
-+	a = kmalloc(sizeof(*a), GFP_NOFS);
++	a = kmalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -20840,24 +20165,11 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 +}
 diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 --- /usr/share/empty/fs/aufs/i_op.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,1518 @@
++++ linux/fs/aufs/i_op.c	2026-04-20 13:43:42.088828354 +0200
+@@ -0,0 +1,1504 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -20865,7 +20177,6 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 + */
 +
 +#include <linux/device_cgroup.h>
-+#include <linux/filelock.h>
 +#include <linux/fs_stack.h>
 +#include <linux/iversion.h>
 +#include <linux/security.h>
@@ -20902,8 +20213,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +		&& write_mask && !(mask & MAY_READ))
 +	    || !h_inode->i_op->permission) {
 +		/* AuLabel(generic_permission); */
-+		/* AuDbg("get_inode_acl %ps\n",
-+		   h_inode->i_op->get_inode_acl); */
++		/* AuDbg("get_acl %ps\n", h_inode->i_op->get_acl); */
 +		err = generic_permission(h_idmap, h_inode, mask);
 +		if (err == -EOPNOTSUPP && au_test_nfs_noacl(h_inode))
 +			err = h_inode->i_op->permission(h_idmap, h_inode,
@@ -21797,7 +21107,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +		goto out;
 +
 +	err = -ENOMEM;
-+	a = kzalloc(sizeof(*a), GFP_NOFS);
++	a = kzalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -21951,7 +21261,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +	IMustLock(inode);
 +
 +	err = -ENOMEM;
-+	a = kzalloc(sizeof(*a), GFP_NOFS);
++	a = kzalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -22234,7 +21544,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +	return (inode->i_mode & (S_IFBLK | S_IFCHR | S_IFIFO | S_IFSOCK));
 +}
 +
-+static int aufs_update_time(struct inode *inode, int flags)
++static int aufs_update_time(struct inode *inode, enum fs_update_time type,
++			    unsigned int flags)
 +{
 +	int err;
 +	aufs_bindex_t bindex;
@@ -22243,7 +21554,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +	struct vfsmount *h_mnt;
 +
 +	sb = inode->i_sb;
-+	WARN_ONCE((flags & S_ATIME) && !IS_NOATIME(inode),
++	WARN_ONCE(type == FS_UPD_ATIME && !IS_NOATIME(inode),
 +		  "unexpected s_flags 0x%lx", sb->s_flags);
 +
 +	/* mmap_sem might be acquired already, cf. aufs_mmap() */
@@ -22258,7 +21569,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +		h_mnt = au_sbr_mnt(sb, bindex);
 +		err = vfsub_mnt_want_write(h_mnt);
 +		if (!err) {
-+			err = vfsub_update_time(h_inode, flags);
++			err = vfsub_update_time(h_inode, type, flags);
 +			vfsub_mnt_drop_write(h_mnt);
 +		}
 +	} else if (au_is_special(h_inode)) {
@@ -22271,7 +21582,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +		AuWarn1("timestamps for i%lu are ignored "
 +			"since it is on readonly branch (hi%lu).\n",
 +			inode->i_ino, h_inode->i_ino);
-+	} else if (flags & ~S_ATIME) {
++	} else if (type != FS_UPD_ATIME) {
 +		err = -EIO;
 +		AuIOErr1("unexpected flags 0x%x\n", flags);
 +		AuDebugOn(1);
@@ -22283,7 +21594,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +	si_read_unlock(sb);
 +	lockdep_on();
 +
-+	if (!err && (flags & S_VERSION))
++	if (!err && IS_I_VERSION(inode))
 +		inode_inc_iversion(inode);
 +
 +	return err;
@@ -22362,24 +21673,11 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +};
 diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 --- /usr/share/empty/fs/aufs/i_op_del.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_del.c	2026-02-09 09:56:16.949997408 +0100
-@@ -0,0 +1,517 @@
++++ linux/fs/aufs/i_op_del.c	2026-04-20 13:43:42.090358984 +0200
+@@ -0,0 +1,504 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -22691,7 +21989,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 +	IMustLock(dir);
 +
 +	err = -ENOMEM;
-+	a = kmalloc(sizeof(*a), GFP_NOFS);
++	a = kmalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -22787,7 +22085,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 +	IMustLock(dir);
 +
 +	err = -ENOMEM;
-+	a = kmalloc(sizeof(*a), GFP_NOFS);
++	a = kmalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -22883,24 +22181,11 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 +}
 diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 --- /usr/share/empty/fs/aufs/i_op_ren.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_ren.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,1242 @@
++++ linux/fs/aufs/i_op_ren.c	2026-04-20 13:43:42.091182003 +0200
+@@ -0,0 +1,1229 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -23852,7 +23137,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 +
 +	err = -ENOMEM;
 +	BUILD_BUG_ON(sizeof(*a) > PAGE_SIZE);
-+	a = kzalloc(sizeof(*a), GFP_NOFS);
++	a = kzalloc_obj(*a, GFP_NOFS);
 +	if (unlikely(!a))
 +		goto out;
 +
@@ -24129,7 +23414,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 +}
 diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
 --- /usr/share/empty/fs/aufs/Kconfig	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/Kconfig	2025-07-24 19:31:57.786514124 +0200
++++ linux/fs/aufs/Kconfig	2026-04-20 13:41:05.037250991 +0200
 @@ -0,0 +1,201 @@
 +# SPDX-License-Identifier: GPL-2.0
 +config AUFS_FS
@@ -24334,24 +23619,11 @@ diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
 +endif
 diff -urN /usr/share/empty/fs/aufs/lcnt.h linux/fs/aufs/lcnt.h
 --- /usr/share/empty/fs/aufs/lcnt.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/lcnt.h	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,186 @@
++++ linux/fs/aufs/lcnt.h	2026-04-20 13:43:42.094182021 +0200
+@@ -0,0 +1,173 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2018-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2018-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -24524,24 +23796,11 @@ diff -urN /usr/share/empty/fs/aufs/lcnt.h linux/fs/aufs/lcnt.h
 +#endif /* __AUFS_LCNT_H__ */
 diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
 --- /usr/share/empty/fs/aufs/loop.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/loop.c	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,148 @@
++++ linux/fs/aufs/loop.c	2026-04-20 13:43:42.094747100 +0200
+@@ -0,0 +1,135 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -24676,24 +23935,11 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
 +}
 diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h
 --- /usr/share/empty/fs/aufs/loop.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/loop.h	2025-02-04 20:03:40.679938505 +0100
-@@ -0,0 +1,55 @@
++++ linux/fs/aufs/loop.h	2026-04-20 13:43:42.095263755 +0200
+@@ -0,0 +1,42 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -24735,16 +23981,10 @@ diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h
 +#endif /* __AUFS_LOOP_H__ */
 diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk
 --- /usr/share/empty/fs/aufs/magic.mk	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/magic.mk	2022-11-05 23:02:18.965889284 +0100
-@@ -0,0 +1,31 @@
++++ linux/fs/aufs/magic.mk	2026-04-20 13:43:42.095777754 +0200
+@@ -0,0 +1,25 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
-+# defined in ${srctree}/fs/fuse/inode.c
-+# tristate
-+ifdef CONFIG_FUSE_FS
-+ccflags-y += -DFUSE_SUPER_MAGIC=0x65735546
-+endif
-+
 +# defined in ${srctree}/fs/xfs/xfs_sb.h
 +# tristate
 +ifdef CONFIG_XFS_FS
@@ -24770,8 +24010,8 @@ 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	2026-02-09 09:56:16.563330741 +0100
-@@ -0,0 +1,47 @@
++++ linux/fs/aufs/Makefile	2026-04-20 13:43:42.068647206 +0200
+@@ -0,0 +1,49 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
 +include ${src}/magic.mk
@@ -24780,6 +24020,8 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 +endif
 +-include ${src}/priv_def.mk
 +
++# For aufs as an outsider, it is still useful to specify CFLAGS from
++# the command-line especially in its module building.
 +ccflags-y += ${EXTRA_CFLAGS}
 +# cf. include/linux/kernel.h
 +# enable pr_debug
@@ -24821,11 +24063,11 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 +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	2026-02-09 09:56:16.569997407 +0100
++++ linux/fs/aufs/mf.c	2026-04-20 13:43:42.096281579 +0200
 @@ -0,0 +1,119 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2025 Junjiro R. Okajima
++ * Copyright (C) 2025-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -24944,24 +24186,11 @@ diff -urN /usr/share/empty/fs/aufs/mf.c linux/fs/aufs/mf.c
 +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	2026-02-09 09:56:16.569997407 +0100
-@@ -0,0 +1,275 @@
++++ linux/fs/aufs/module.c	2026-04-20 13:43:42.096821934 +0200
+@@ -0,0 +1,262 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -25223,24 +24452,11 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
 +module_exit(aufs_exit);
 diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h
 --- /usr/share/empty/fs/aufs/module.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/module.h	2026-02-09 09:56:16.569997407 +0100
-@@ -0,0 +1,180 @@
++++ linux/fs/aufs/module.h	2026-04-20 13:43:42.097337619 +0200
+@@ -0,0 +1,167 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -25407,24 +24623,11 @@ diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h
 +#endif /* __AUFS_MODULE_H__ */
 diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
 --- /usr/share/empty/fs/aufs/mvdown.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/mvdown.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,700 @@
++++ linux/fs/aufs/mvdown.c	2026-04-20 13:43:42.097819586 +0200
+@@ -0,0 +1,687 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2011-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2011-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -26042,7 +25245,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
 +		goto out;
 +
 +	err = -ENOMEM;
-+	args = kmalloc(sizeof(*args), GFP_NOFS);
++	args = kmalloc_obj(*args, GFP_NOFS);
 +	if (unlikely(!args))
 +		goto out;
 +
@@ -26111,24 +25314,11 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
 +}
 diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
 --- /usr/share/empty/fs/aufs/opts.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/opts.c	2025-07-24 19:31:57.793180791 +0200
-@@ -0,0 +1,1030 @@
++++ linux/fs/aufs/opts.c	2026-04-20 13:43:42.098512985 +0200
+@@ -0,0 +1,1017 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -27145,24 +26335,11 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
 +}
 diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h
 --- /usr/share/empty/fs/aufs/opts.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/opts.h	2025-07-24 19:31:57.793180791 +0200
-@@ -0,0 +1,264 @@
++++ linux/fs/aufs/opts.h	2026-04-20 13:43:42.099137899 +0200
+@@ -0,0 +1,251 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -27413,24 +26590,11 @@ diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h
 +#endif /* __AUFS_OPTS_H__ */
 diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 --- /usr/share/empty/fs/aufs/plink.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/plink.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,508 @@
++++ linux/fs/aufs/plink.c	2026-04-20 13:43:42.099614244 +0200
+@@ -0,0 +1,495 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -27925,24 +27089,11 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +}
 diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c
 --- /usr/share/empty/fs/aufs/poll.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/poll.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,51 @@
++++ linux/fs/aufs/poll.c	2026-04-20 13:43:42.100109595 +0200
+@@ -0,0 +1,38 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -27980,24 +27131,11 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c
 +}
 diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c
 --- /usr/share/empty/fs/aufs/posix_acl.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/posix_acl.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,108 @@
++++ linux/fs/aufs/posix_acl.c	2026-04-20 13:43:42.100556305 +0200
+@@ -0,0 +1,95 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2014-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2014-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -28052,8 +27190,8 @@ diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c
 +	return acl;
 +}
 +
-+struct posix_acl *aufs_get_acl(struct mnt_idmap *idmap,
-+			       struct dentry *dentry, int type)
++struct posix_acl *aufs_get_acl(struct mnt_idmap *idmap, struct dentry *dentry,
++			       int type)
 +{
 +	struct posix_acl *acl;
 +	struct inode *inode;
@@ -28092,24 +27230,11 @@ diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c
 +}
 diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c
 --- /usr/share/empty/fs/aufs/procfs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/procfs.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,168 @@
++++ linux/fs/aufs/procfs.c	2026-04-20 13:43:42.101005668 +0200
+@@ -0,0 +1,155 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2010-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2010-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -28264,24 +27389,11 @@ diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c
 --- /usr/share/empty/fs/aufs/rdu.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/rdu.c	2025-07-24 19:31:57.793180791 +0200
-@@ -0,0 +1,384 @@
++++ linux/fs/aufs/rdu.c	2026-04-20 13:43:42.101469326 +0200
+@@ -0,0 +1,371 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -28652,24 +27764,11 @@ diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c
 +#endif
 diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h
 --- /usr/share/empty/fs/aufs/rwsem.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/rwsem.h	2025-07-24 19:31:57.793180791 +0200
-@@ -0,0 +1,89 @@
++++ linux/fs/aufs/rwsem.h	2026-04-20 13:43:42.101938286 +0200
+@@ -0,0 +1,76 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -28745,24 +27844,11 @@ diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h
 +#endif /* __AUFS_RWSEM_H__ */
 diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 --- /usr/share/empty/fs/aufs/sbinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sbinfo.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,316 @@
++++ linux/fs/aufs/sbinfo.c	2026-04-20 13:43:42.102382688 +0200
+@@ -0,0 +1,302 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -28779,7 +27865,6 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 +{
 +	int i;
 +	struct au_sbinfo *sbinfo;
-+	char *locked __maybe_unused; /* debug only */
 +
 +	sbinfo = container_of(kobj, struct au_sbinfo, si_kobj);
 +	for (i = 0; i < AuPlink_NHASH; i++)
@@ -28811,12 +27896,12 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 +	int err, i;
 +
 +	err = -ENOMEM;
-+	sbinfo = kzalloc(sizeof(*sbinfo), GFP_NOFS);
++	sbinfo = kzalloc_obj(*sbinfo, GFP_NOFS);
 +	if (unlikely(!sbinfo))
 +		goto out;
 +
 +	/* will be reallocated separately */
-+	sbinfo->si_branch = kzalloc(sizeof(*sbinfo->si_branch), GFP_NOFS);
++	sbinfo->si_branch = kzalloc_obj(*sbinfo->si_branch, GFP_NOFS);
 +	if (unlikely(!sbinfo->si_branch))
 +		goto out_sbinfo;
 +
@@ -29065,24 +28150,11 @@ 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	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,872 @@
++++ linux/fs/aufs/super.c	2026-04-20 13:43:42.102858985 +0200
+@@ -0,0 +1,858 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -29186,8 +28258,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 +	return err;
 +}
 +
-+static void au_gen_fmt(char *fmt, int len, const char *pat,
-+		       const char *append)
++static void au_gen_fmt(char *fmt, int len, const char *pat, const char *append)
 +{
 +	char *p;
 +
@@ -29941,24 +29012,11 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 +};
 diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 --- /usr/share/empty/fs/aufs/super.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/super.h	2026-02-09 09:56:16.569997407 +0100
-@@ -0,0 +1,618 @@
++++ linux/fs/aufs/super.h	2026-04-20 13:43:42.103574044 +0200
+@@ -0,0 +1,606 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -29972,7 +29030,6 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +
 +#include <linux/fs.h>
 +#include <linux/kobject.h>
-+#include "hbl.h"
 +#include "lcnt.h"
 +#include "rwsem.h"
 +#include "wkq.h"
@@ -30335,20 +29392,6 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +	AuRwDestroy(&au_sbilist_lock);
 +}
 +
-+static inline void au_sbilist_add(struct super_block *sb)
-+{
-+	au_rw_write_lock(&au_sbilist_lock);
-+	hlist_add_head(&au_sbi(sb)->si_list, &au_sbilist);
-+	au_rw_write_unlock(&au_sbilist_lock);
-+}
-+
-+static inline void au_sbilist_del(struct super_block *sb)
-+{
-+	au_rw_write_lock(&au_sbilist_lock);
-+	hlist_del(&au_sbi(sb)->si_list);
-+	au_rw_write_unlock(&au_sbilist_lock);
-+}
-+
 +#ifdef CONFIG_AUFS_MAGIC_SYSRQ
 +static inline void au_sbilist_write_lock(void)
 +{
@@ -30369,7 +29412,9 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +{
 +	au_rw_read_unlock(&au_sbilist_lock);
 +}
++
 +#define AuGFP_SBILIST	GFP_ATOMIC
++
 +#else
 +AuStubVoid(au_sbilist_write_lock, void)
 +AuStubVoid(au_sbilist_write_unlock, void)
@@ -30377,15 +29422,29 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +AuStubVoid(au_sbilist_read_unlock, void)
 +#define AuGFP_SBILIST	GFP_NOFS
 +#endif /* CONFIG_AUFS_MAGIC_SYSRQ */
++
++static inline void au_sbilist_add(struct super_block *sb)
++{
++	au_rw_write_lock(&au_sbilist_lock);
++	hlist_add_head(&au_sbi(sb)->si_list, &au_sbilist);
++	au_rw_write_unlock(&au_sbilist_lock);
++}
++
++static inline void au_sbilist_del(struct super_block *sb)
++{
++	au_rw_write_lock(&au_sbilist_lock);
++	hlist_del(&au_sbi(sb)->si_list);
++	au_rw_write_unlock(&au_sbilist_lock);
++}
 +#else
 +AuStubVoid(au_sbilist_init, void)
 +AuStubVoid(au_sbilist_fin, void)
-+AuStubVoid(au_sbilist_add, struct super_block *sb)
-+AuStubVoid(au_sbilist_del, struct super_block *sb)
 +AuStubVoid(au_sbilist_write_lock, void)
 +AuStubVoid(au_sbilist_write_unlock, void)
 +AuStubVoid(au_sbilist_read_lock, void)
 +AuStubVoid(au_sbilist_read_unlock, void)
++AuStubVoid(au_sbilist_add, struct super_block *sb)
++AuStubVoid(au_sbilist_del, struct super_block *sb)
 +#define AuGFP_SBILIST	GFP_NOFS
 +#endif
 +
@@ -30563,24 +29622,11 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +#endif /* __AUFS_SUPER_H__ */
 diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c
 --- /usr/share/empty/fs/aufs/sysaufs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysaufs.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,94 @@
++++ linux/fs/aufs/sysaufs.c	2026-04-20 13:43:42.104184928 +0200
+@@ -0,0 +1,81 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -30661,24 +29707,11 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h
 --- /usr/share/empty/fs/aufs/sysaufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysaufs.h	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,102 @@
++++ linux/fs/aufs/sysaufs.h	2026-04-20 13:43:42.104663012 +0200
+@@ -0,0 +1,91 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -30741,50 +29774,39 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h
 +#endif
 +
 +void sysaufs_br_init(struct au_branch *br);
++
++AuStubVoid(sysaufs_brs_init, void)
 +void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex);
 +void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex);
 +
-+#define sysaufs_brs_init()	do {} while (0)
-+
 +#else
 +#define sysaufs_attr_group	NULL
 +
 +AuStubInt0(sysaufs_si_xi_path, struct seq_file *seq, struct super_block *sb)
 +AuStub(ssize_t, sysaufs_si_show, return 0, struct kobject *kobj,
 +       struct attribute *attr, char *buf)
++
 +AuStubVoid(sysaufs_br_init, struct au_branch *br)
-+AuStubVoid(sysaufs_brs_add, struct super_block *sb, aufs_bindex_t bindex)
-+AuStubVoid(sysaufs_brs_del, struct super_block *sb, aufs_bindex_t bindex)
 +
 +static inline void sysaufs_brs_init(void)
 +{
 +	sysaufs_brs = 0;
 +}
 +
++AuStubVoid(sysaufs_brs_add, struct super_block *sb, aufs_bindex_t bindex)
++AuStubVoid(sysaufs_brs_del, struct super_block *sb, aufs_bindex_t bindex)
++
 +#endif /* CONFIG_SYSFS */
 +
 +#endif /* __KERNEL__ */
 +#endif /* __SYSAUFS_H__ */
 diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
 --- /usr/share/empty/fs/aufs/sysfs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysfs.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,374 @@
++++ linux/fs/aufs/sysfs.c	2026-04-20 13:43:42.105114691 +0200
+@@ -0,0 +1,361 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -30892,7 +29914,7 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
 +{
 +	struct seq_file *seq;
 +
-+	seq = kzalloc(sizeof(*seq), GFP_NOFS);
++	seq = kzalloc_obj(*seq, GFP_NOFS);
 +	if (seq) {
 +		/* mutex_init(&seq.lock); */
 +		seq->buf = p;
@@ -31145,24 +30167,11 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 --- /usr/share/empty/fs/aufs/sysrq.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysrq.c	2025-02-04 20:03:40.683271838 +0100
-@@ -0,0 +1,157 @@
++++ linux/fs/aufs/sysrq.c	2026-04-20 13:43:42.105610181 +0200
+@@ -0,0 +1,144 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -31306,24 +30315,11 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 +}
 diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 --- /usr/share/empty/fs/aufs/vdir.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vdir.c	2025-07-24 19:31:57.793180791 +0200
-@@ -0,0 +1,896 @@
++++ linux/fs/aufs/vdir.c	2026-04-20 13:43:42.106182092 +0200
+@@ -0,0 +1,883 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -31687,7 +30683,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +	if (unlikely(!vdir))
 +		goto out;
 +
-+	vdir->vd_deblk = kzalloc(sizeof(*vdir->vd_deblk), GFP_NOFS);
++	vdir->vd_deblk = kzalloc_obj(*vdir->vd_deblk, GFP_NOFS);
 +	if (unlikely(!vdir->vd_deblk))
 +		goto out_free;
 +
@@ -31763,8 +30759,8 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +};
 +
 +static bool fillvdir(struct dir_context *ctx, const char *__name, int nlen,
-+		    loff_t offset __maybe_unused, u64 h_ino,
-+		    unsigned int d_type)
++		     loff_t offset __maybe_unused, u64 h_ino,
++		     unsigned int d_type)
 +{
 +	struct fillvdir_arg *arg = container_of(ctx, struct fillvdir_arg, ctx);
 +	char *name = (void *)__name;
@@ -32206,24 +31202,11 @@ 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	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,1055 @@
++++ linux/fs/aufs/vfsub.c	2026-04-20 13:43:42.106715204 +0200
+@@ -0,0 +1,1039 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -32231,9 +31214,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 + */
 +
 +#include <linux/filelock.h>
-+#include <linux/mnt_namespace.h>
-+#include <linux/nsproxy.h>
-+#include <linux/security.h>
++#include <linux/namei.h>
 +#include <linux/splice.h>
 +#include "aufs.h"
 +
@@ -32243,7 +31224,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +	if (!au_test_fuse(h_sb) || !au_userns)
 +		return 0;
 +
-+	return is_current_mnt_ns(mnt) ? 0 : -EACCES;
++	return our_mnt(mnt) ? 0 : -EACCES;
 +}
 +#endif
 +
@@ -32806,12 +31787,11 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +	tmp = *path;
 +	if (ret)
 +		tmp.dentry = ret;
-+	vfsub_update_h_iattr(&tmp, &did);
++	vfsub_update_h_iattr(&tmp, &did); /*ignore*/
 +	if (did) {
 +		tmp.dentry = tmp.dentry->d_parent;
-+		vfsub_update_h_iattr(&tmp, /*did*/NULL);
++		vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/
 +	}
-+	/*ignore*/
 +
 +out:
 +	return ret;
@@ -33265,24 +32245,11 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +}
 diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 --- /usr/share/empty/fs/aufs/vfsub.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vfsub.h	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,436 @@
++++ linux/fs/aufs/vfsub.h	2026-04-20 13:43:42.107339290 +0200
+@@ -0,0 +1,423 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -33295,7 +32262,6 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +#ifdef __KERNEL__
 +
 +#include <linux/fs.h>
-+#include <linux/mount.h>
 +#include <linux/posix_acl.h>
 +#include <linux/xattr.h>
 +#include "debug.h"
@@ -33545,9 +32511,10 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +}
 +#endif
 +
-+static inline int vfsub_update_time(struct inode *h_inode, int flags)
++static inline int vfsub_update_time(struct inode *h_inode,
++				    enum fs_update_time type, int flags)
 +{
-+	return inode_update_time(h_inode, flags);
++	return !inode_update_time(h_inode, type, flags);
 +	/* no vfsub_update_h_iattr() since we don't have struct path */
 +}
 +
@@ -33705,24 +32672,11 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +#endif /* __AUFS_VFSUB_H__ */
 diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c
 --- /usr/share/empty/fs/aufs/wbr_policy.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/wbr_policy.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,841 @@
++++ linux/fs/aufs/wbr_policy.c	2026-04-20 13:43:42.107855417 +0200
+@@ -0,0 +1,828 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -34128,7 +33082,7 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c
 +	/* reduce the stack usage */
 +	struct kstatfs *st;
 +
-+	st = kmalloc(sizeof(*st), GFP_NOFS);
++	st = kmalloc_obj(*st, GFP_NOFS);
 +	if (unlikely(!st)) {
 +		AuWarn1("failed updating mfs(%d), ignored\n", -ENOMEM);
 +		return;
@@ -34550,24 +33504,11 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c
 +};
 diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 --- /usr/share/empty/fs/aufs/whout.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/whout.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,1073 @@
++++ linux/fs/aufs/whout.c	2026-04-20 13:43:42.108495897 +0200
+@@ -0,0 +1,1060 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -34828,7 +33769,6 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +		err = vfsub_rmdir(h_dir, whpath);
 +	else
 +		err = vfsub_unlink(h_dir, whpath, /*force*/0);
-+
 +	if (unlikely(err))
 +		pr_warn("failed removing %pd (%d), ignored.\n",
 +			whpath->dentry, err);
@@ -35184,7 +34124,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +		goto out;
 +
 +	/* ignore ENOMEM */
-+	arg = kmalloc(sizeof(*arg), GFP_NOFS);
++	arg = kmalloc_obj(*arg, GFP_NOFS);
 +	if (arg) {
 +		/*
 +		 * dec(wh_running), kfree(arg) and dec(br_count)
@@ -35234,6 +34174,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	wbr_wh_read_lock(wbr);
 +	if (wbr->wbr_whbase) {
 +		err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path);
++		AuTraceErr(err);
 +		if (!err || err != -EMLINK)
 +			goto out;
 +
@@ -35460,7 +34401,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +
 +	SiMustAnyLock(sb);
 +
-+	whtmp = kzalloc(sizeof(*whtmp), gfp);
++	whtmp = kzalloc_obj(*whtmp, gfp);
 +	if (unlikely(!whtmp)) {
 +		whtmp = ERR_PTR(-ENOMEM);
 +		goto out;
@@ -35627,24 +34568,11 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +}
 diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h
 --- /usr/share/empty/fs/aufs/whout.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/whout.h	2026-02-09 09:56:16.573330741 +0100
-@@ -0,0 +1,87 @@
++++ linux/fs/aufs/whout.h	2026-04-20 13:43:42.109208724 +0200
+@@ -0,0 +1,74 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -35718,24 +34646,11 @@ diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h
 +#endif /* __AUFS_WHOUT_H__ */
 diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c
 --- /usr/share/empty/fs/aufs/wkq.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/wkq.c	2025-02-04 20:03:40.686605172 +0100
-@@ -0,0 +1,370 @@
++++ linux/fs/aufs/wkq.c	2026-04-20 13:43:42.109674270 +0200
+@@ -0,0 +1,357 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -35955,7 +34870,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c
 + */
 +static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp)
 +{
-+	*comp = kmalloc(sizeof(**comp), GFP_NOFS);
++	*comp = kmalloc_obj(**comp, GFP_NOFS);
 +	if (*comp) {
 +		init_completion(*comp);
 +		wkinfo->comp = *comp;
@@ -36043,7 +34958,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c
 +	 * it highly depends upon the implementation of workqueue.
 +	 */
 +	err = 0;
-+	wkinfo = kmalloc(sizeof(*wkinfo), GFP_NOFS);
++	wkinfo = kmalloc_obj(*wkinfo, GFP_NOFS);
 +	if (wkinfo) {
 +		wkinfo->kobj = &au_sbi(sb)->si_kobj;
 +		wkinfo->flags = flags & ~AuWkq_WAIT;
@@ -36092,24 +35007,11 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c
 +}
 diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h
 --- /usr/share/empty/fs/aufs/wkq.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/wkq.h	2025-07-24 19:31:57.796514124 +0200
-@@ -0,0 +1,89 @@
++++ linux/fs/aufs/wkq.h	2026-04-20 13:43:42.110157797 +0200
+@@ -0,0 +1,76 @@
 +/* SPDX-License-Identifier: GPL-2.0 */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -36185,24 +35087,11 @@ diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h
 +#endif /* __AUFS_WKQ_H__ */
 diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c
 --- /usr/share/empty/fs/aufs/xattr.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/xattr.c	2025-02-04 20:03:40.686605172 +0100
-@@ -0,0 +1,360 @@
++++ linux/fs/aufs/xattr.c	2026-04-20 13:43:42.110615324 +0200
+@@ -0,0 +1,347 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2014-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2014-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -36549,24 +35438,11 @@ diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c
 +}
 diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 --- /usr/share/empty/fs/aufs/xino.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/xino.c	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,1927 @@
++++ linux/fs/aufs/xino.c	2026-04-20 13:43:42.111182122 +0200
+@@ -0,0 +1,1913 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +/*
@@ -36588,7 +35464,6 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 + *   + remount with xino/noxino options
 + */
 +
-+#include <linux/seq_file.h>
 +#include <linux/statfs.h>
 +#include "aufs.h"
 +
@@ -37016,7 +35891,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	struct au_xino *xi;
 +
 +	err = -ENOMEM;
-+	st = kmalloc(sizeof(*st), GFP_NOFS);
++	st = kmalloc_obj(*st, GFP_NOFS);
 +	if (unlikely(!st))
 +		goto out;
 +
@@ -37128,7 +36003,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +		goto out;
 +
 +	/* lock and kfree() will be called in trunc_xino() */
-+	args = kmalloc(sizeof(*args), GFP_NOFS);
++	args = kmalloc_obj(*args, GFP_NOFS);
 +	if (unlikely(!args)) {
 +		AuErr1("no memory\n");
 +		goto out;
@@ -37283,7 +36158,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	struct au_xino_do_new_async_args *arg;
 +
 +	err = -ENOMEM;
-+	arg = kmalloc(sizeof(*arg), GFP_NOFS);
++	arg = kmalloc_obj(*arg, GFP_NOFS);
 +	if (unlikely(!arg))
 +		goto out;
 +
@@ -37401,7 +36276,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	file = au_xino_file(xi, calc.idx);
 +	if (!file) {
 +		/* store the inum pair into the list */
-+		p = kmalloc(sizeof(*p), GFP_NOFS | __GFP_NOFAIL);
++		p = kmalloc_obj(*p, GFP_NOFS | __GFP_NOFAIL);
 +		p->h_ino = h_ino;
 +		p->ino = ino;
 +		au_hbl_add(&p->node, &xi->xi_writing);
@@ -37804,11 +36679,11 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +{
 +	struct au_xino *xi;
 +
-+	xi = kzalloc(sizeof(*xi), GFP_NOFS);
++	xi = kzalloc_obj(*xi, GFP_NOFS);
 +	if (unlikely(!xi))
 +		goto out;
 +	xi->xi_nfile = nfile;
-+	xi->xi_file = kcalloc(nfile, sizeof(*xi->xi_file), GFP_NOFS);
++	xi->xi_file = kzalloc_objs(*xi->xi_file, nfile, GFP_NOFS);
 +	if (unlikely(!xi->xi_file))
 +		goto out_free;
 +
@@ -38480,24 +37355,11 @@ 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	2026-02-09 09:56:16.953330741 +0100
-@@ -0,0 +1,452 @@
++++ linux/include/uapi/linux/aufs_type.h	2026-04-20 19:05:38.896897231 +0200
+@@ -0,0 +1,439 @@
 +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 +/*
-+ * Copyright (C) 2005-2025 Junjiro R. Okajima
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
++ * Copyright (C) 2005-2026 Junjiro R. Okajima
 + */
 +
 +#ifndef __AUFS_TYPE_H__
@@ -38524,7 +37386,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.x-rcN-20260112"
++#define AUFS_VERSION	"7.0-20260420"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -38935,10 +37797,10 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +
 +#endif /* __AUFS_TYPE_H__ */
 SPDX-License-Identifier: GPL-2.0
-aufs6.x-rcN kbuild patch
+aufs7.0 kbuild patch
 
 diff --git a/fs/Kconfig b/fs/Kconfig
-index 0bfdaecaa8775..22d84f31397cb 100644
+index 0bfdaecaa877..22d84f31397c 100644
 --- a/fs/Kconfig
 +++ b/fs/Kconfig
 @@ -332,6 +332,7 @@ source "fs/pstore/Kconfig"
@@ -38950,7 +37812,7 @@ index 0bfdaecaa8775..22d84f31397cb 100644
  endif # MISC_FILESYSTEMS
  
 diff --git a/fs/Makefile b/fs/Makefile
-index a04274a3c8542..006f5585be308 100644
+index cf4a745e9679..115d521b01aa 100644
 --- a/fs/Makefile
 +++ b/fs/Makefile
 @@ -129,3 +129,4 @@ obj-$(CONFIG_VBOXSF_FS)		+= vboxsf/
@@ -38959,15 +37821,15 @@ index a04274a3c8542..006f5585be308 100644
  obj-$(CONFIG_RESCTRL_FS)	+= resctrl/
 +obj-$(CONFIG_AUFS_FS)           += aufs/
 SPDX-License-Identifier: GPL-2.0
-aufs6.x-rcN base patch
+aufs7.0 base patch
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index 765ad2daa2183..742b15687beb2 100644
+index d1cc0e12fe1f..7a33d5b80baa 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -4161,6 +4161,19 @@ S:	Supported
- F:	Documentation/dev-tools/autofdo.rst
- F:	scripts/Makefile.autofdo
+@@ -4231,6 +4231,19 @@ F:	kernel/audit*
+ F:	lib/*audit.c
+ K:	\baudit_[a-z_0-9]\+\b
  
 +AUFS (advanced multi layered unification filesystem) FILESYSTEM
 +M:	"J. R. Okajima" <hooanon05g at gmail.com>
@@ -38975,21 +37837,21 @@ index 765ad2daa2183..742b15687beb2 100644
 +L:	linux-unionfs at vger.kernel.org
 +S:	Supported
 +W:	http://aufs.sourceforge.net
-+T:	git://github.com/sfjro/aufs4-linux.git
++T:	git://github.com/sfjro/aufs-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>
+ AUTOFDO BUILD
+ M:	Rong Xu <xur at google.com>
+ M:	Han Shen <shenhan at google.com>
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 32a3a5b138029..4f88a720f30f5 100644
+index 0000913f7efc..e7dadac7dd17 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -631,6 +631,26 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -630,6 +630,26 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	goto done;
  }
  
@@ -39017,20 +37879,21 @@ index 32a3a5b138029..4f88a720f30f5 100644
  
  static ssize_t loop_attr_show(struct device *dev, char *page,
 diff --git a/fs/dcache.c b/fs/dcache.c
-index dc2fff4811d15..7e82da6694764 100644
+index 7ba1801d8132..79b9f1a239d6 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
-@@ -1301,6 +1301,9 @@ enum d_walk_ret {
+@@ -1311,6 +1311,10 @@ 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
-@@ -1309,7 +1312,7 @@ enum d_walk_ret {
+@@ -1319,7 +1323,7 @@ enum d_walk_ret {
   *
   * The @enter() callbacks are called with d_lock held.
   */
@@ -39039,8 +37902,22 @@ index dc2fff4811d15..7e82da6694764 100644
  		   enum d_walk_ret (*enter)(void *, struct dentry *))
  {
  	struct dentry *this_parent, *dentry;
+diff --git a/fs/exec.c b/fs/exec.c
+index 9ea3a775d51e..746e5fdab7b2 100644
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -777,6 +777,9 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
+ 		return ERR_PTR(-EINVAL);
+ 	if (flags & AT_SYMLINK_NOFOLLOW)
+ 		open_exec_flags.lookup_flags &= ~LOOKUP_FOLLOW;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flags & AT_EMPTY_PATH)
++		open_exec_flags.lookup_flags |= LOOKUP_EMPTY;
+ 
+ 	file = do_file_open(fd, name, &open_exec_flags);
+ 	if (IS_ERR(file))
 diff --git a/fs/fcntl.c b/fs/fcntl.c
-index f93dbca084355..0cfe817a82525 100644
+index beab8080badf..c9e5300ff82b 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
 @@ -36,7 +36,7 @@
@@ -39061,28 +37938,97 @@ index f93dbca084355..0cfe817a82525 100644
  	if (error)
  		return error;
  
+diff --git a/fs/fhandle.c b/fs/fhandle.c
+index 642e3d569497..ac33be836512 100644
+--- a/fs/fhandle.c
++++ b/fs/fhandle.c
+@@ -156,6 +156,9 @@ SYSCALL_DEFINE5(name_to_handle_at, int, dfd, const char __user *, name,
+ 		fh_flags |= EXPORT_FH_CONNECTABLE;
+ 
+ 	lookup_flags = (flag & AT_SYMLINK_FOLLOW) ? LOOKUP_FOLLOW : 0;
++	/* for aufs, pass LOOKUP_EMPTY flag */
++	if (flag & AT_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
+ 	CLASS(filename_uflags, filename)(name, flag);
+ 	err = filename_lookup(dfd, filename, lookup_flags, &path, NULL);
+ 	if (!err) {
+diff --git a/fs/fsopen.c b/fs/fsopen.c
+index ae19e5136598..3725f6730b8e 100644
+--- a/fs/fsopen.c
++++ b/fs/fsopen.c
+@@ -181,6 +181,9 @@ SYSCALL_DEFINE3(fspick, int, dfd, const char __user *, path, unsigned int, flags
+ 		lookup_flags &= ~LOOKUP_FOLLOW;
+ 	if (flags & FSPICK_NO_AUTOMOUNT)
+ 		lookup_flags &= ~LOOKUP_AUTOMOUNT;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flags & FSPICK_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
+ 	CLASS(filename_flags, filename)(path,
+ 			 (flags & FSPICK_EMPTY_PATH) ? LOOKUP_EMPTY : 0);
+ 	ret = filename_lookup(dfd, filename, lookup_flags, &target, NULL);
 diff --git a/fs/namespace.c b/fs/namespace.c
-index c58674a20cad5..71b882e8747ea 100644
+index 854f4fc66469..f325581def78 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
-@@ -954,6 +954,12 @@ static inline int check_mnt(const struct mount *mnt)
- 	return mnt->mnt_ns == current->nsproxy->mnt_ns;
- }
+@@ -3198,6 +3198,9 @@ static struct file *vfs_open_tree(int dfd, const char __user *filename, unsigned
+ 		lookup_flags &= ~LOOKUP_AUTOMOUNT;
+ 	if (flags & AT_SYMLINK_NOFOLLOW)
+ 		lookup_flags &= ~LOOKUP_FOLLOW;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flags & AT_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
  
-+/* 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;
+ 	/*
+ 	 * If we create a new mount namespace with the cloned mount tree we
+@@ -5120,6 +5123,9 @@ SYSCALL_DEFINE5(mount_setattr, int, dfd, const char __user *, path,
+ 		lookup_flags &= ~LOOKUP_AUTOMOUNT;
+ 	if (flags & AT_SYMLINK_NOFOLLOW)
+ 		lookup_flags &= ~LOOKUP_FOLLOW;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flags & AT_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
+ 
+ 	kattr = (struct mount_kattr) {
+ 		.lookup_flags	= lookup_flags,
+diff --git a/fs/open.c b/fs/open.c
+index 91f1139591ab..207d229a9069 100644
+--- a/fs/open.c
++++ b/fs/open.c
+@@ -478,6 +478,9 @@ static int do_faccessat(int dfd, const char __user *filename, int mode, int flag
+ 
+ 	if (flags & AT_SYMLINK_NOFOLLOW)
+ 		lookup_flags &= ~LOOKUP_FOLLOW;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flags & AT_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
+ 
+ 	if (access_need_override_creds(flags)) {
+ 		old_cred = access_override_creds();
+@@ -677,6 +680,9 @@ static int do_fchmodat(int dfd, const char __user *filename, umode_t mode,
+ 		return -EINVAL;
+ 
+ 	lookup_flags = (flags & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flags & AT_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
+ 	CLASS(filename_uflags, name)(filename, flags);
+ retry:
+ 	error = filename_lookup(dfd, name, lookup_flags, &path, NULL);
+@@ -797,6 +803,9 @@ int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group,
+ 		return -EINVAL;
+ 
+ 	lookup_flags = (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW;
++	/* for aufs, pass LOOKUP_EMPTY flag, but untested */
++	if (flag & AT_EMPTY_PATH)
++		lookup_flags |= LOOKUP_EMPTY;
+ 	CLASS(filename_uflags, name)(filename, flag);
+ retry:
+ 	error = filename_lookup(dfd, name, lookup_flags, &path, NULL);
 diff --git a/fs/splice.c b/fs/splice.c
-index d338fe56b50b3..966271869bbf3 100644
+index 9d8f63e2fd1a..d2b70cb432d1 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -930,7 +930,7 @@ static int warn_unsupported(struct file *file, const char *op)
+@@ -928,7 +928,7 @@ static int warn_unsupported(struct file *file, const char *op)
  /*
   * Attempt to initiate a splice from pipe to file.
   */
@@ -39092,10 +38038,10 @@ index d338fe56b50b3..966271869bbf3 100644
  {
  	if (unlikely(!out->f_op->splice_write))
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index f5c9cf28c4dcf..2cd870e253579 100644
+index 8b3dd145b25e..53a16e37ccba 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -1388,6 +1388,7 @@ extern void fasync_free(struct fasync_struct *);
+@@ -1389,6 +1389,7 @@ extern void fasync_free(struct fasync_struct *);
  /* can be called from interrupts */
  extern void kill_fasync(struct fasync_struct **, int, int);
  
@@ -39103,7 +38049,7 @@ index f5c9cf28c4dcf..2cd870e253579 100644
  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);
-@@ -1936,6 +1937,7 @@ struct file_operations {
+@@ -1946,6 +1947,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);
@@ -39112,7 +38058,7 @@ index f5c9cf28c4dcf..2cd870e253579 100644
  	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 dd634103b014e..20799d7c7ba78 100644
+index 621566345406..24d2eca0dc1d 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,
@@ -39124,29 +38070,8 @@ index dd634103b014e..20799d7c7ba78 100644
  /*
   * Acquire a lock.
   *
-diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
-index 0acd1089d149c..6fb188373a7ef 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 init_mnt_ns;
- 
-@@ -19,6 +20,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
+index 9dec4861d09f..14583d846864 100644
 --- a/include/linux/splice.h
 +++ b/include/linux/splice.h
 @@ -108,4 +108,7 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
@@ -39158,7 +38083,7 @@ index 9dec4861d09f6..14583d8468640 100644
 +			      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
+index 2d4c5bab5af8..b720d966c7b9 100644
 --- a/kernel/locking/lockdep.c
 +++ b/kernel/locking/lockdep.c
 @@ -224,7 +224,7 @@ unsigned long max_lock_class_idx;
@@ -39178,32 +38103,48 @@ index 2d4c5bab5af88..b720d966c7b92 100644
  
  #ifdef CONFIG_LOCK_STAT
  static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats);
+diff --git a/usr/include/Makefile b/usr/include/Makefile
+index 6d86a53c6f0a..37f8d2f7460e 100644
+--- a/usr/include/Makefile
++++ b/usr/include/Makefile
+@@ -134,6 +134,8 @@ uses-libc += linux/wireless.h
+ uses-libc += regulator/regulator.h
+ uses-libc += scsi/fc/fc_els.h
+ 
++uses-libc += linux/aufs_type.h
++
+ ifeq ($(SRCARCH),hexagon)
+ uses-libc += asm/sigcontext.h
+ endif
 SPDX-License-Identifier: GPL-2.0
-aufs6.x-rcN mmap patch
+aufs7.0 mmap patch
 
 diff --git a/fs/Makefile b/fs/Makefile
-index 006f5585be308..e2b66da4797b9 100644
+index 115d521b01aa..3ee30da8f1b5 100644
 --- a/fs/Makefile
 +++ b/fs/Makefile
-@@ -17,6 +17,9 @@ obj-y :=	open.o read_write.o file_table.o super.o \
- 		fs_dirent.o fs_context.o fs_parser.o fsopen.o init.o \
+@@ -18,6 +18,12 @@ obj-y :=	open.o read_write.o file_table.o super.o \
  		kernel_read_file.o mnt_idmapping.o remap_range.o pidfs.o \
- 		file_attr.o
+ 		file_attr.o fserror.o nullfs.o
+ 
++# don't move au_mf.o to the bottom of this file, otherwise it will
++# conflict with aufs-kbuild.patch.
 +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
+ obj-$(CONFIG_LEGACY_DIRECT_IO)	+= direct-io.o
 diff --git a/fs/au_mf.c b/fs/au_mf.c
 new file mode 100644
-index 0000000000000..bacf13696a772
+index 000000000000..9cba15b883f1
 --- /dev/null
 +++ b/fs/au_mf.c
 @@ -0,0 +1,60 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
-+ * Copyright (C) 2025 Junjiro R. Okajima
++ * Copyright (C) 2025-2026 Junjiro R. Okajima
 + */
 +
 +#include <linux/fs.h>
@@ -39212,10 +38153,10 @@ index 0000000000000..bacf13696a772
 +#if IS_MODULE(CONFIG_AUFS_FS)
 +/*
 + * This au_mf.c (aufs mmapped files) is for external AUFS module only,
-+ * and statically linked to kernel.
++ * and au_mf.o is 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
++ * This linking may seem 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
@@ -39262,7 +38203,7 @@ index 0000000000000..bacf13696a772
 +}
 +EXPORT_SYMBOL_GPL(au_file_user_inode);
 diff --git a/fs/proc/base.c b/fs/proc/base.c
-index 4eec684baca9f..9ff978a58a0b6 100644
+index 4c863d17dfb4..c338133330c6 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)
@@ -39275,7 +38216,7 @@ index 4eec684baca9f..9ff978a58a0b6 100644
  		fput(exe_file);
  		return 0;
 diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
-index c6e7ebc637562..12c340dcdec3d 100644
+index c6e7ebc63756..12c340dcdec3 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)
@@ -39288,7 +38229,7 @@ index c6e7ebc637562..12c340dcdec3d 100644
  		ino = inode->i_ino;
  	}
 diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
-index d362919f4f688..79a2590d40f4d 100644
+index d362919f4f68..79a2590d40f4 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)
@@ -39301,10 +38242,10 @@ index d362919f4f688..79a2590d40f4d 100644
  		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 2cd870e253579..3bfe3b9c889ef 100644
+index 53a16e37ccba..518c6a8a746d 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -2463,6 +2463,21 @@ struct file *dentry_create(const struct path *path, int flags, umode_t mode,
+@@ -2477,6 +2477,21 @@ struct file *dentry_create(struct path *path, int flags, umode_t mode,
  			   const struct cred *cred);
  const struct path *backing_file_user_path(const struct file *f);
  
@@ -39326,7 +38267,7 @@ index 2cd870e253579..3bfe3b9c889ef 100644
  /*
   * 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
-@@ -2475,15 +2490,25 @@ const struct path *backing_file_user_path(const struct file *f);
+@@ -2489,15 +2504,25 @@ const 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)
  {
@@ -39353,13 +38294,13 @@ index 2cd870e253579..3bfe3b9c889ef 100644
  }
  
 SPDX-License-Identifier: GPL-2.0
-aufs6.x-rcN standalone patch
+aufs7.0 standalone patch
 
 diff --git a/fs/dcache.c b/fs/dcache.c
-index 7e82da6694764..4d95cb8032ba3 100644
+index 79b9f1a239d6..2304ef273e3f 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
-@@ -1411,6 +1411,7 @@ void d_walk(struct dentry *parent, void *data,
+@@ -1422,6 +1422,7 @@ void d_walk(struct dentry *parent, void *data,
  	seq = 1;
  	goto again;
  }
@@ -39368,7 +38309,7 @@ index 7e82da6694764..4d95cb8032ba3 100644
  struct check_mount {
  	struct vfsmount *mnt;
 diff --git a/fs/exec.c b/fs/exec.c
-index 9d5ebc9d15b0d..cb08c4c7e4b1c 100644
+index 746e5fdab7b2..4d936496b631 100644
 --- a/fs/exec.c
 +++ b/fs/exec.c
 @@ -120,6 +120,7 @@ bool path_noexec(const struct path *path)
@@ -39380,7 +38321,7 @@ index 9d5ebc9d15b0d..cb08c4c7e4b1c 100644
  #ifdef CONFIG_MMU
  /*
 diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 0cfe817a82525..2ca206582b685 100644
+index c9e5300ff82b..92255e819fb0 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
 @@ -89,6 +89,7 @@ int setfl(int fd, struct file * filp, unsigned int arg)
@@ -39392,7 +38333,7 @@ index 0cfe817a82525..2ca206582b685 100644
  /*
   * 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 cd4a3db4659ac..27cd4c4d5d4bb 100644
+index aaa5faaace1e..2619d87cb4a8 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)
@@ -39404,47 +38345,35 @@ index cd4a3db4659ac..27cd4c4d5d4bb 100644
  /*
   * Variant of alloc_empty_file() that doesn't check and modify nr_files.
<Skipped 1258 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/826e79ee3e23b1e5af6822759b6f69a621c3d980



More information about the pld-cvs-commit mailing list