all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH zfsonlinux] update submodule to 2.4.2 and refresh patches
@ 2026-05-13 16:08 Stoiko Ivanov
  2026-05-13 20:46 ` applied: " Thomas Lamprecht
  0 siblings, 1 reply; 2+ messages in thread
From: Stoiko Ivanov @ 2026-05-13 16:08 UTC (permalink / raw)
  To: pve-devel

mostly drop all patches that are now included in 2.4.2 (most of those
were the 7.0 compatibility fixes).

The changes between 2.4.1 and 2.4.2 are kernel-compat patches (up to
7.1[0]), some bugfixes, a few patches addressing removal of the old
mount-api [1,2], rework of tests and CI. Nothing stood out as too
scary.

Minimally tested on 2 VMs with replication (also including the recent
changes of supporting sending encrypted datasets with
--no-preserve-encryption).

[0] https://github.com/openzfs/zfs/pull/18471
[1] https://github.com/openzfs/zfs/pull/18339
[2] https://github.com/openzfs/zfs/pull/18377

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 ...META-and-DCH-consistency-in-autoconf.patch |   9 +-
 .../0006-dont-symlink-zed-scripts.patch       |   4 +-
 ...md-unit-for-importing-specific-pools.patch |   4 +-
 ...y-include-start-and-end-nv-pairs-if-.patch |   2 +-
 ...010-Add-no-preserve-encryption-flag.patch} |   4 +-
 ...itly-set-setlease-handler-to-kernel-.patch | 464 ------------------
 ...ueue_nonrot-renamed-to-blk_queue_rot.patch |  86 ----
 ...ix_acl_to_xattr-now-allocates-memory.patch | 115 -----
 ...ims-for-the-fs_context-based-mount-A.patch | 153 ------
 ...et-setlease-handler-on-directories-1.patch |  36 --
 ...nf-Remove-copy-from-user-inatomic-AP.patch |  79 ---
 ...re-LSMs-get-to-process-mount-options.patch |  67 ---
 .../patches/0017-Linux-7.0-compat-META.patch  |  28 --
 ...0019-Fix-kernel-BUG-at-mm-usercopy.c.patch |  62 ---
 debian/patches/series                         |  11 +-
 upstream                                      |   2 +-
 16 files changed, 14 insertions(+), 1112 deletions(-)
 rename debian/patches/{0018-Add-no-preserve-encryption-flag.patch => 0010-Add-no-preserve-encryption-flag.patch} (98%)
 delete mode 100644 debian/patches/0010-Linux-7.0-explicitly-set-setlease-handler-to-kernel-.patch
 delete mode 100644 debian/patches/0011-Linux-7.0-blk_queue_nonrot-renamed-to-blk_queue_rot.patch
 delete mode 100644 debian/patches/0012-Linux-7.0-posix_acl_to_xattr-now-allocates-memory.patch
 delete mode 100644 debian/patches/0013-Linux-7.0-add-shims-for-the-fs_context-based-mount-A.patch
 delete mode 100644 debian/patches/0014-Linux-7.0-also-set-setlease-handler-on-directories-1.patch
 delete mode 100644 debian/patches/0015-Linux-7.0-autoconf-Remove-copy-from-user-inatomic-AP.patch
 delete mode 100644 debian/patches/0016-Linux-7.0-ensure-LSMs-get-to-process-mount-options.patch
 delete mode 100644 debian/patches/0017-Linux-7.0-compat-META.patch
 delete mode 100644 debian/patches/0019-Fix-kernel-BUG-at-mm-usercopy.c.patch

diff --git a/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch b/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch
index 41fa5b583..4d00dc970 100644
--- a/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch
+++ b/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch
@@ -10,10 +10,11 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 29 insertions(+), 5 deletions(-)
 
 diff --git a/config/zfs-meta.m4 b/config/zfs-meta.m4
-index 20064a0fb5957288640494bd6a640942796050b4..4d5f545adc23c3c97604b7a1ac47e9711c81e9fd 100644
+index 72d424e2d47873c0049c2039c4b01a22eafad3ef..3e0943c797a35c7792e105206f68a3eff3e7d9d7 100644
 --- a/config/zfs-meta.m4
 +++ b/config/zfs-meta.m4
-@@ -1,9 +1,10 @@
+@@ -1,10 +1,11 @@
+ dnl # SPDX-License-Identifier: CDDL-1.0
  dnl #
  dnl # DESCRIPTION:
 -dnl # Read meta data from the META file.  When building from a git repository
@@ -28,7 +29,7 @@ index 20064a0fb5957288640494bd6a640942796050b4..4d5f545adc23c3c97604b7a1ac47e971
  dnl #
  dnl #    The META file format is as follows:
  dnl #      ^[ ]*KEY:[ \t]+VALUE$
-@@ -49,6 +50,7 @@ AC_DEFUN([ZFS_AC_META], [
+@@ -50,6 +51,7 @@ AC_DEFUN([ZFS_AC_META], [
  	_zfs_ac_meta_type="none"
  	if test -f "$META"; then
  		_zfs_ac_meta_type="META file"
@@ -36,7 +37,7 @@ index 20064a0fb5957288640494bd6a640942796050b4..4d5f545adc23c3c97604b7a1ac47e971
  
  		ZFS_META_NAME=_ZFS_AC_META_GETVAL([(Name|Project|Package)]);
  		if test -n "$ZFS_META_NAME"; then
-@@ -69,8 +71,30 @@ AC_DEFUN([ZFS_AC_META], [
+@@ -70,8 +72,30 @@ AC_DEFUN([ZFS_AC_META], [
  			AC_SUBST([ZFS_META_VERSION])
  		fi
  
diff --git a/debian/patches/0006-dont-symlink-zed-scripts.patch b/debian/patches/0006-dont-symlink-zed-scripts.patch
index d017f18fc..78b649510 100644
--- a/debian/patches/0006-dont-symlink-zed-scripts.patch
+++ b/debian/patches/0006-dont-symlink-zed-scripts.patch
@@ -32,10 +32,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/cmd/zed/zed.d/Makefile.am b/cmd/zed/zed.d/Makefile.am
-index c0b161ecf2489ee2ba5988f51bda99ac0dd2f639..141116709dfbfb32f6b3da81b25d69499dc6e72c 100644
+index 4a02f8abfc22d44d2c4ae4f97a3fc8803d546239..213861cd1c9a9398e75cacd0c5fa476b579aed4c 100644
 --- a/cmd/zed/zed.d/Makefile.am
 +++ b/cmd/zed/zed.d/Makefile.am
-@@ -50,7 +50,7 @@ zed-install-data-hook:
+@@ -51,7 +51,7 @@ zed-install-data-hook:
  	set -x; for f in $(zedconfdefaults); do \
  	  [ -f "$(DESTDIR)$(zedconfdir)/$${f}" ] ||\
  	    [ -L "$(DESTDIR)$(zedconfdir)/$${f}" ] || \
diff --git a/debian/patches/0007-Add-systemd-unit-for-importing-specific-pools.patch b/debian/patches/0007-Add-systemd-unit-for-importing-specific-pools.patch
index 28477cbcd..3313dd5d4 100644
--- a/debian/patches/0007-Add-systemd-unit-for-importing-specific-pools.patch
+++ b/debian/patches/0007-Add-systemd-unit-for-importing-specific-pools.patch
@@ -23,10 +23,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  create mode 100644 etc/systemd/system/zfs-import@.service.in
 
 diff --git a/etc/Makefile.am b/etc/Makefile.am
-index 808c729cd96838f4039a1e4476826a958414ce4f..88f85ca9bbebcc76e81adcad6d56c07b8661b09e 100644
+index 58b3cf563b624c716f1a3f82b15283758a19bc0c..2e539ae4623441db09a8baa166fca4deceed7930 100644
 --- a/etc/Makefile.am
 +++ b/etc/Makefile.am
-@@ -54,6 +54,7 @@ dist_systemdpreset_DATA = \
+@@ -55,6 +55,7 @@ dist_systemdpreset_DATA = \
  systemdunit_DATA = \
  	%D%/systemd/system/zfs-import-cache.service \
  	%D%/systemd/system/zfs-import-scan.service \
diff --git a/debian/patches/0009-libzfs-scrub-only-include-start-and-end-nv-pairs-if-.patch b/debian/patches/0009-libzfs-scrub-only-include-start-and-end-nv-pairs-if-.patch
index 0675045fb..0fd341e47 100644
--- a/debian/patches/0009-libzfs-scrub-only-include-start-and-end-nv-pairs-if-.patch
+++ b/debian/patches/0009-libzfs-scrub-only-include-start-and-end-nv-pairs-if-.patch
@@ -41,7 +41,7 @@ Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
  1 file changed, 5 insertions(+), 2 deletions(-)
 
 diff --git a/lib/libzfs/libzfs_pool.c b/lib/libzfs/libzfs_pool.c
-index db5cd6dc00ac4882f3877b5b3bd4ac50967626b3..1b59b50cbd1cff7b14e79f10fd8bb8564e8e0e7e 100644
+index 42a1ddcf28a62efb17f45d1a7870248bcdbb7ca3..9420c346431d7841a8edebf5e60075a6cfd1516f 100644
 --- a/lib/libzfs/libzfs_pool.c
 +++ b/lib/libzfs/libzfs_pool.c
 @@ -2797,8 +2797,11 @@ zpool_scan_range(zpool_handle_t *zhp, pool_scan_func_t func,
diff --git a/debian/patches/0018-Add-no-preserve-encryption-flag.patch b/debian/patches/0010-Add-no-preserve-encryption-flag.patch
similarity index 98%
rename from debian/patches/0018-Add-no-preserve-encryption-flag.patch
rename to debian/patches/0010-Add-no-preserve-encryption-flag.patch
index ccb160f3f..0343a443b 100644
--- a/debian/patches/0018-Add-no-preserve-encryption-flag.patch
+++ b/debian/patches/0010-Add-no-preserve-encryption-flag.patch
@@ -21,7 +21,7 @@ Closes #18240
  5 files changed, 62 insertions(+), 22 deletions(-)
 
 diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c
-index d39b6fe5f76b4d8cb4169718c753b994870560bb..9b5891e0c86bc5621886ef9e8edc0c784a573802 100644
+index ce948951a028a22ba21aba87035ae4b64b443fb9..7cd9a3479d549973ff842386f760b27ab9ad5636 100644
 --- a/cmd/zfs/zfs_main.c
 +++ b/cmd/zfs/zfs_main.c
 @@ -345,10 +345,10 @@ get_usage(zfs_help_t idx)
@@ -76,7 +76,7 @@ index 14930fb90622b706d7c45991817746a61e0fdd2d..c67d5f353e99b4273728ccffde1f4db6
  
  typedef boolean_t (snapfilter_cb_t)(zfs_handle_t *, void *);
 diff --git a/lib/libzfs/libzfs_sendrecv.c b/lib/libzfs/libzfs_sendrecv.c
-index 0e5cecc6cca9e78e7eb015000b010bab8fa2e36c..9d693223e1c854e94b7b5a0fcf11b089c077caf5 100644
+index 2c38333e18a19c4750f6219d11020096581fbb1d..fb446516d81563227664e9dc039abc2fcaa7e7e0 100644
 --- a/lib/libzfs/libzfs_sendrecv.c
 +++ b/lib/libzfs/libzfs_sendrecv.c
 @@ -258,6 +258,7 @@ typedef struct send_data {
diff --git a/debian/patches/0010-Linux-7.0-explicitly-set-setlease-handler-to-kernel-.patch b/debian/patches/0010-Linux-7.0-explicitly-set-setlease-handler-to-kernel-.patch
deleted file mode 100644
index 11cc352e0..000000000
--- a/debian/patches/0010-Linux-7.0-explicitly-set-setlease-handler-to-kernel-.patch
+++ /dev/null
@@ -1,464 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <rob.norris@truenas.com>
-Date: Mon, 23 Feb 2026 06:39:06 +1100
-Subject: [PATCH] Linux 7.0: explicitly set setlease handler to kernel
- implementation
-
-The upcoming 7.0 kernel will no longer fall back to generic_setlease(),
-instead returning EINVAL if .setlease is NULL. So, we set it explicitly.
-
-To ensure that we catch any future kernel change, adds a sanity test for
-F_SETLEASE and F_GETLEASE too. Since this is a Linux-specific test,
-also a small adjustment to the test runner to allow OS-specific helper
-programs.
-
-Sponsored-by: TrueNAS
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Signed-off-by: Rob Norris <rob.norris@truenas.com>
-Closes #18215
-(cherry picked from commit 168023b60316badde853a8264b3bdbe071bab0c1)
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- config/kernel-filelock.m4                     |  23 ++++
- config/kernel.m4                              |   2 +
- module/os/linux/zfs/zpl_file.c                |   4 +
- scripts/zfs-tests.sh                          |  16 ++-
- tests/runfiles/linux.run                      |   4 +
- tests/zfs-tests/cmd/.gitignore                |   1 +
- tests/zfs-tests/cmd/Makefile.am               |   1 +
- tests/zfs-tests/cmd/setlease.c                | 126 ++++++++++++++++++
- tests/zfs-tests/include/commands.cfg          |   5 +-
- tests/zfs-tests/tests/Makefile.am             |   3 +
- .../tests/functional/lease/cleanup.ksh        |  26 ++++
- .../tests/functional/lease/lease_setlease.ksh |  44 ++++++
- .../tests/functional/lease/setup.ksh          |  27 ++++
- 13 files changed, 275 insertions(+), 7 deletions(-)
- create mode 100644 config/kernel-filelock.m4
- create mode 100644 tests/zfs-tests/cmd/setlease.c
- create mode 100755 tests/zfs-tests/tests/functional/lease/cleanup.ksh
- create mode 100755 tests/zfs-tests/tests/functional/lease/lease_setlease.ksh
- create mode 100755 tests/zfs-tests/tests/functional/lease/setup.ksh
-
-diff --git a/config/kernel-filelock.m4 b/config/kernel-filelock.m4
-new file mode 100644
-index 0000000000000000000000000000000000000000..5e8d7c78469227eb769a91a3a8add4d55c1ba58c
---- /dev/null
-+++ b/config/kernel-filelock.m4
-@@ -0,0 +1,23 @@
-+dnl # SPDX-License-Identifier: CDDL-1.0
-+dnl #
-+dnl # 6.3 API change
-+dnl # locking support functions (eg generic_setlease) were moved out of
-+dnl # linux/fs.h to linux/filelock.h
-+dnl #
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_FILELOCK_HEADER], [
-+	ZFS_LINUX_TEST_SRC([filelock_header], [
-+		#include <linux/fs.h>
-+		#include <linux/filelock.h>
-+	], [])
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_FILELOCK_HEADER], [
-+	AC_MSG_CHECKING([for standalone filelock header])
-+	ZFS_LINUX_TEST_RESULT([filelock_header], [
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_FILELOCK_HEADER, 1, [linux/filelock.h exists])
-+	], [
-+		AC_MSG_RESULT(no)
-+	])
-+])
-+
-diff --git a/config/kernel.m4 b/config/kernel.m4
-index eb2e827d5cbf92537993d6d79340431e7b6a3b35..df168506691dec7b9479da12e9ac9e08694853c4 100644
---- a/config/kernel.m4
-+++ b/config/kernel.m4
-@@ -140,6 +140,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
- 	ZFS_AC_KERNEL_SRC_NAMESPACE
- 	ZFS_AC_KERNEL_SRC_INODE_GENERIC_DROP
- 	ZFS_AC_KERNEL_SRC_KASAN_ENABLED
-+	ZFS_AC_KERNEL_SRC_FILELOCK_HEADER
- 	case "$host_cpu" in
- 		powerpc*)
- 			ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
-@@ -264,6 +265,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
- 	ZFS_AC_KERNEL_NAMESPACE
- 	ZFS_AC_KERNEL_INODE_GENERIC_DROP
- 	ZFS_AC_KERNEL_KASAN_ENABLED
-+	ZFS_AC_KERNEL_FILELOCK_HEADER
- 	case "$host_cpu" in
- 		powerpc*)
- 			ZFS_AC_KERNEL_CPU_HAS_FEATURE
-diff --git a/module/os/linux/zfs/zpl_file.c b/module/os/linux/zfs/zpl_file.c
-index f7691c02d1634164c751df9eab36a641fc53a86e..30f3e3855355332aa10402791429cb4dc326f077 100644
---- a/module/os/linux/zfs/zpl_file.c
-+++ b/module/os/linux/zfs/zpl_file.c
-@@ -43,6 +43,9 @@
- #ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
- #include <linux/writeback.h>
- #endif
-+#ifdef HAVE_FILELOCK_HEADER
-+#include <linux/filelock.h>
-+#endif
- 
- /*
-  * When using fallocate(2) to preallocate space, inflate the requested
-@@ -1242,6 +1245,7 @@ const struct file_operations zpl_file_operations = {
- 	.mmap		= zpl_mmap,
- 	.fsync		= zpl_fsync,
- 	.fallocate	= zpl_fallocate,
-+	.setlease	= generic_setlease,
- 	.copy_file_range	= zpl_copy_file_range,
- #ifdef HAVE_VFS_CLONE_FILE_RANGE
- 	.clone_file_range	= zpl_clone_file_range,
-diff --git a/scripts/zfs-tests.sh b/scripts/zfs-tests.sh
-index 09a15bafc27e87a036d547832d80549ffc7da5a6..697c3f304d8150b157935b08e161e7aec531fa54 100755
---- a/scripts/zfs-tests.sh
-+++ b/scripts/zfs-tests.sh
-@@ -294,6 +294,16 @@ constrain_path() {
- 	SYSTEM_DIRS="/usr/local/bin /usr/local/sbin"
- 	SYSTEM_DIRS="$SYSTEM_DIRS /usr/bin /usr/sbin /bin /sbin $LIBEXEC_DIR"
- 
-+	SYSTEM_FILES="$SYSTEM_FILES_COMMON"
-+	ZFSTEST_FILES="$ZFSTEST_FILES_COMMON"
-+	if [ "$UNAME" = "FreeBSD" ] ; then
-+		SYSTEM_FILES="$SYSTEM_FILES $SYSTEM_FILES_FREEBSD"
-+		ZFSTEST_FILES="$ZFSTEST_FILES $ZFSTEST_FILES_FREEBSD"
-+	else
-+		SYSTEM_FILES="$SYSTEM_FILES $SYSTEM_FILES_LINUX"
-+		ZFSTEST_FILES="$ZFSTEST_FILES $ZFSTEST_FILES_LINUX"
-+	fi
-+
- 	if [ "$INTREE" = "yes" ]; then
- 		# Constrained path set to $(top_builddir)/tests/zfs-tests/bin
- 		STF_PATH="$BIN_DIR"
-@@ -326,12 +336,6 @@ constrain_path() {
- 	fi
- 
- 	# Standard system utilities
--	SYSTEM_FILES="$SYSTEM_FILES_COMMON"
--	if [ "$UNAME" = "FreeBSD" ] ; then
--		SYSTEM_FILES="$SYSTEM_FILES $SYSTEM_FILES_FREEBSD"
--	else
--		SYSTEM_FILES="$SYSTEM_FILES $SYSTEM_FILES_LINUX"
--	fi
- 	create_links "$SYSTEM_DIRS" "$SYSTEM_FILES"
- 
- 	# Exceptions
-diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run
-index a65633dd8cfb276ff68894f4bcd3ecffcc1bc862..2717bf53d0b1ad1fbb5447a0d8ee20d98efff54b 100644
---- a/tests/runfiles/linux.run
-+++ b/tests/runfiles/linux.run
-@@ -141,6 +141,10 @@ pre =
- post =
- tags = ['functional', 'largest_pool']
- 
-+[tests/functional/lease:Linux]
-+tests = ['lease_setlease']
-+tags = ['functional', 'lease']
-+
- [tests/functional/longname:Linux]
- tests = ['longname_001_pos', 'longname_002_pos', 'longname_003_pos']
- tags = ['functional', 'longname']
-diff --git a/tests/zfs-tests/cmd/.gitignore b/tests/zfs-tests/cmd/.gitignore
-index 62f1684acfb4bfafe8e511e2d69f1af13b73ced1..335e4ceba28200b137abce25038a8989263c7663 100644
---- a/tests/zfs-tests/cmd/.gitignore
-+++ b/tests/zfs-tests/cmd/.gitignore
-@@ -58,3 +58,4 @@
- /sha2_test
- /idmap_util
- /statx
-+/setlease
-diff --git a/tests/zfs-tests/cmd/Makefile.am b/tests/zfs-tests/cmd/Makefile.am
-index 85c3cf3c35a8cdfb6ba7f95ab48d942cdc85e0d9..f07e7fda14fd2c63b500dc14b08922373ea1a189 100644
---- a/tests/zfs-tests/cmd/Makefile.am
-+++ b/tests/zfs-tests/cmd/Makefile.am
-@@ -132,6 +132,7 @@ scripts_zfs_tests_bin_PROGRAMS += %D%/statx
- scripts_zfs_tests_bin_PROGRAMS += %D%/xattrtest
- scripts_zfs_tests_bin_PROGRAMS += %D%/zed_fd_spill-zedlet
- scripts_zfs_tests_bin_PROGRAMS += %D%/idmap_util
-+scripts_zfs_tests_bin_PROGRAMS += %D%/setlease
- 
- %C%_idmap_util_LDADD = libspl.la
- 
-diff --git a/tests/zfs-tests/cmd/setlease.c b/tests/zfs-tests/cmd/setlease.c
-new file mode 100644
-index 0000000000000000000000000000000000000000..12bcbd91beb53750a616aa1604a5d7bd9450af6c
---- /dev/null
-+++ b/tests/zfs-tests/cmd/setlease.c
-@@ -0,0 +1,126 @@
-+// SPDX-License-Identifier: CDDL-1.0
-+/*
-+ * CDDL HEADER START
-+ *
-+ * The contents of this file are subject to the terms of the
-+ * Common Development and Distribution License (the "License").
-+ * You may not use this file except in compliance with the License.
-+ *
-+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-+ * or https://opensource.org/licenses/CDDL-1.0.
-+ * See the License for the specific language governing permissions
-+ * and limitations under the License.
-+ *
-+ * When distributing Covered Code, include this CDDL HEADER in each
-+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-+ * If applicable, add the following below this CDDL HEADER, with the
-+ * fields enclosed by brackets "[]" replaced with your own identifying
-+ * information: Portions Copyright [yyyy] [name of copyright owner]
-+ *
-+ * CDDL HEADER END
-+ */
-+
-+/*
-+ * Copyright (c) 2026, TrueNAS.
-+ */
-+
-+/*
-+ * This is a sanity check test for the F_SETLEASE and F_GETLEASE fcntl() calls.
-+ * We use the generic kernel implementation, but we want to be alerted if it
-+ * ever breaks.
-+ *
-+ * This is not a comprehensive test. It would be nice if it could be!
-+ */
-+
-+#ifndef _GNU_SOURCE
-+#define	_GNU_SOURCE
-+#endif
-+
-+#include <stdio.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <string.h>
-+
-+static int
-+get_lease(int fd) {
-+	int r = fcntl(fd, F_GETLEASE);
-+	if (r < 0) {
-+		perror("fcntl(GETLEASE)");
-+		exit(2);
-+	}
-+	return (r);
-+}
-+
-+static int
-+set_lease(int fd, int lease) {
-+	return (fcntl(fd, F_SETLEASE, lease) < 0 ? errno : 0);
-+}
-+
-+static const char *lease_str[] = {
-+	[F_RDLCK] = "RDLCK",
-+	[F_WRLCK] = "WRLCK",
-+	[F_UNLCK] = "UNLCK",
-+};
-+
-+static void
-+assert_lease(int fd, int expect) {
-+	int got = get_lease(fd);
-+	if (got != expect) {
-+		fprintf(stderr, "ASSERT_LEASE: expected %s [%d], got %s [%d]\n",
-+		    lease_str[expect], expect, lease_str[got], got);
-+		abort();
-+	}
-+	printf("ok: lease is %s\n", lease_str[got]);
-+}
-+
-+static void
-+assert_set_lease(int fd, int lease) {
-+	int err = set_lease(fd, lease);
-+	if (err != 0) {
-+		fprintf(stderr, "ASSERT_SET_LEASE: tried %s [%d], error: %s\n",
-+		    lease_str[lease], lease, strerror(err));
-+		abort();
-+	}
-+	printf("ok: set lease to %s\n", lease_str[lease]);
-+}
-+
-+int
-+main(int argc, char **argv)
-+{
-+	if (argc != 2) {
-+		fprintf(stderr, "usage: %s <filename>\n", argv[0]);
-+		exit(1);
-+	}
-+
-+	/* create and open file, read+write */
-+	int fd = open(argv[1], O_CREAT|O_RDONLY, S_IRWXU|S_IRWXG|S_IRWXO);
-+	if (fd < 0) {
-+		perror("open");
-+		exit(2);
-+	}
-+	printf("ok: opened file RDONLY\n");
-+
-+	/* fd starts with no lease */
-+	assert_lease(fd, F_UNLCK);
-+
-+	/* fd is readonly, so can take read lease */
-+	assert_set_lease(fd, F_RDLCK);
-+	/* confirm read lease */
-+	assert_lease(fd, F_RDLCK);
-+
-+	/* no other openers, so can take write lease */
-+	assert_set_lease(fd, F_WRLCK);
-+	/* confirm write lease */
-+	assert_lease(fd, F_WRLCK);
-+
-+	/* release lease */
-+	assert_set_lease(fd, F_UNLCK);
-+	/* confirm lease released */
-+	assert_lease(fd, F_UNLCK);
-+
-+	close(fd);
-+
-+	return (0);
-+}
-diff --git a/tests/zfs-tests/include/commands.cfg b/tests/zfs-tests/include/commands.cfg
-index 1c4d25e152a73d3ea17d59280b66b0df7ef65c37..4ba9aa7c8b676975cb147fc74124488097936823 100644
---- a/tests/zfs-tests/include/commands.cfg
-+++ b/tests/zfs-tests/include/commands.cfg
-@@ -182,7 +182,7 @@ export ZFS_FILES='zdb
-     zfs_ids_to_path
-     zpool_influxdb'
- 
--export ZFSTEST_FILES='badsend
-+export ZFSTEST_FILES_COMMON='badsend
-     btree_test
-     chg_usr_exec
-     clonefile
-@@ -241,3 +241,6 @@ export ZFSTEST_FILES='badsend
-     zfs_diff-socket
-     dosmode_readonly_write
-     idmap_util'
-+
-+export ZFSTEST_FILES_LINUX='
-+    setlease'
-diff --git a/tests/zfs-tests/tests/Makefile.am b/tests/zfs-tests/tests/Makefile.am
-index 99477a74326a5e47bffabdcd89c850f9a3ed3cf4..d14592ffa5d69e37b098213d2ccd97ae0a9d83d5 100644
---- a/tests/zfs-tests/tests/Makefile.am
-+++ b/tests/zfs-tests/tests/Makefile.am
-@@ -1655,6 +1655,9 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \
- 	functional/io/psync.ksh \
- 	functional/io/setup.ksh \
- 	functional/io/sync.ksh \
-+	functional/lease/cleanup.ksh \
-+	functional/lease/lease_setlease.ksh \
-+	functional/lease/setup.ksh \
- 	functional/l2arc/cleanup.ksh \
- 	functional/l2arc/l2arc_arcstats_pos.ksh \
- 	functional/l2arc/l2arc_l2miss_pos.ksh \
-diff --git a/tests/zfs-tests/tests/functional/lease/cleanup.ksh b/tests/zfs-tests/tests/functional/lease/cleanup.ksh
-new file mode 100755
-index 0000000000000000000000000000000000000000..5e73dd34936e1c6ebc7c1c8a1a7d8274677a4191
---- /dev/null
-+++ b/tests/zfs-tests/tests/functional/lease/cleanup.ksh
-@@ -0,0 +1,26 @@
-+#!/bin/ksh -p
-+# SPDX-License-Identifier: CDDL-1.0
-+#
-+# CDDL HEADER START
-+#
-+# The contents of this file are subject to the terms of the
-+# Common Development and Distribution License (the "License").
-+# You may not use this file except in compliance with the License.
-+#
-+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-+# or https://opensource.org/licenses/CDDL-1.0.
-+# See the License for the specific language governing permissions
-+# and limitations under the License.
-+#
-+# When distributing Covered Code, include this CDDL HEADER in each
-+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-+# If applicable, add the following below this CDDL HEADER, with the
-+# fields enclosed by brackets "[]" replaced with your own identifying
-+# information: Portions Copyright [yyyy] [name of copyright owner]
-+#
-+# CDDL HEADER END
-+#
-+
-+. $STF_SUITE/include/libtest.shlib
-+
-+default_cleanup
-diff --git a/tests/zfs-tests/tests/functional/lease/lease_setlease.ksh b/tests/zfs-tests/tests/functional/lease/lease_setlease.ksh
-new file mode 100755
-index 0000000000000000000000000000000000000000..8647d01995c32f58d3e37fafea0013b7795af0d7
---- /dev/null
-+++ b/tests/zfs-tests/tests/functional/lease/lease_setlease.ksh
-@@ -0,0 +1,44 @@
-+#!/bin/ksh -p
-+# SPDX-License-Identifier: CDDL-1.0
-+#
-+# CDDL HEADER START
-+#
-+# The contents of this file are subject to the terms of the
-+# Common Development and Distribution License (the "License").
-+# You may not use this file except in compliance with the License.
-+#
-+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-+# or https://opensource.org/licenses/CDDL-1.0.
-+# See the License for the specific language governing permissions
-+# and limitations under the License.
-+#
-+# When distributing Covered Code, include this CDDL HEADER in each
-+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-+# If applicable, add the following below this CDDL HEADER, with the
-+# fields enclosed by brackets "[]" replaced with your own identifying
-+# information: Portions Copyright [yyyy] [name of copyright owner]
-+#
-+# CDDL HEADER END
-+#
-+
-+#
-+# Copyright (c) 2026, TrueNAS.
-+#
-+
-+. $STF_SUITE/include/libtest.shlib
-+
-+verify_runnable "both"
-+
-+leasefile=/$TESTPOOL/leasefile
-+
-+function cleanup
-+{
-+	rm -f $leasefile
-+}
-+
-+log_assert "F_SETLEASE is supported"
-+log_onexit cleanup
-+
-+log_must setlease $leasefile
-+
-+log_pass "F_SETLEASE is supported"
-diff --git a/tests/zfs-tests/tests/functional/lease/setup.ksh b/tests/zfs-tests/tests/functional/lease/setup.ksh
-new file mode 100755
-index 0000000000000000000000000000000000000000..09da91b0f93f70f98a91107ca687549801a67074
---- /dev/null
-+++ b/tests/zfs-tests/tests/functional/lease/setup.ksh
-@@ -0,0 +1,27 @@
-+#!/bin/ksh -p
-+# SPDX-License-Identifier: CDDL-1.0
-+#
-+# CDDL HEADER START
-+#
-+# The contents of this file are subject to the terms of the
-+# Common Development and Distribution License (the "License").
-+# You may not use this file except in compliance with the License.
-+#
-+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-+# or https://opensource.org/licenses/CDDL-1.0.
-+# See the License for the specific language governing permissions
-+# and limitations under the License.
-+#
-+# When distributing Covered Code, include this CDDL HEADER in each
-+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-+# If applicable, add the following below this CDDL HEADER, with the
-+# fields enclosed by brackets "[]" replaced with your own identifying
-+# information: Portions Copyright [yyyy] [name of copyright owner]
-+#
-+# CDDL HEADER END
-+#
-+
-+. $STF_SUITE/include/libtest.shlib
-+
-+DISK=${DISKS%% *}
-+default_setup $DISK
diff --git a/debian/patches/0011-Linux-7.0-blk_queue_nonrot-renamed-to-blk_queue_rot.patch b/debian/patches/0011-Linux-7.0-blk_queue_nonrot-renamed-to-blk_queue_rot.patch
deleted file mode 100644
index 8c5c17946..000000000
--- a/debian/patches/0011-Linux-7.0-blk_queue_nonrot-renamed-to-blk_queue_rot.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <rob.norris@truenas.com>
-Date: Thu, 5 Feb 2026 19:39:23 +1100
-Subject: [PATCH] Linux 7.0: blk_queue_nonrot() renamed to blk_queue_rot()
-
-It does exactly the same thing, just inverts the return. Detect its
-presence or absence and call the right one.
-
-Sponsored-by: TrueNAS
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Signed-off-by: Rob Norris <rob.norris@truenas.com>
-Closes #18216
-(cherry picked from commit 204de946ebd1e540efe0067f3b880daf0795c1fb)
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- config/kernel-blk-queue.m4      | 26 ++++++++++++++++++++++++++
- module/os/linux/zfs/vdev_disk.c |  4 ++++
- 2 files changed, 30 insertions(+)
-
-diff --git a/config/kernel-blk-queue.m4 b/config/kernel-blk-queue.m4
-index cd2b143e89a0892af2e7a1cc40154cfcf1210d44..c6479b51da8c0faef6f54687149644d6cf321e9e 100644
---- a/config/kernel-blk-queue.m4
-+++ b/config/kernel-blk-queue.m4
-@@ -225,6 +225,30 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS], [
- 	])
- ])
- 
-+dnl #
-+dnl # 7.0 API change
-+dnl # blk_queue_rot() replaces blk_queue_nonrot() (inverted meaning)
-+dnl #
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_ROT], [
-+	ZFS_LINUX_TEST_SRC([blk_queue_rot], [
-+		#include <linux/blkdev.h>
-+	], [
-+		struct request_queue *q __attribute__ ((unused)) = NULL;
-+		(void) blk_queue_rot(q);
-+	], [])
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_ROT], [
-+	AC_MSG_CHECKING([whether blk_queue_rot() is available])
-+	ZFS_LINUX_TEST_RESULT([blk_queue_rot], [
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_BLK_QUEUE_ROT, 1,
-+		    [blk_queue_rot() is available])
-+	],[
-+		AC_MSG_RESULT(no)
-+	])
-+])
-+
- dnl #
- dnl # 2.6.34 API change
- dnl # blk_queue_max_segments() consolidates blk_queue_max_hw_segments()
-@@ -278,6 +302,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE], [
- 	ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE
- 	ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS
- 	ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS
-+	ZFS_AC_KERNEL_SRC_BLK_QUEUE_ROT
- 	ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX
- ])
- 
-@@ -290,5 +315,6 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE], [
- 	ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE
- 	ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS
- 	ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS
-+	ZFS_AC_KERNEL_BLK_QUEUE_ROT
- 	ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX
- ])
-diff --git a/module/os/linux/zfs/vdev_disk.c b/module/os/linux/zfs/vdev_disk.c
-index 1bd3500e9f6665b0b23878ca575e57161a5031a7..ab7457b04e2e3bd30167a61f28f6c1aa24bdf8a6 100644
---- a/module/os/linux/zfs/vdev_disk.c
-+++ b/module/os/linux/zfs/vdev_disk.c
-@@ -445,7 +445,11 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize,
- 	v->vdev_has_securetrim = bdev_secure_discard_supported(bdev);
- 
- 	/* Inform the ZIO pipeline that we are non-rotational */
-+#ifdef HAVE_BLK_QUEUE_ROT
-+	v->vdev_nonrot = !blk_queue_rot(bdev_get_queue(bdev));
-+#else
- 	v->vdev_nonrot = blk_queue_nonrot(bdev_get_queue(bdev));
-+#endif
- 
- 	/* Physical volume size in bytes for the partition */
- 	*psize = bdev_capacity(bdev);
diff --git a/debian/patches/0012-Linux-7.0-posix_acl_to_xattr-now-allocates-memory.patch b/debian/patches/0012-Linux-7.0-posix_acl_to_xattr-now-allocates-memory.patch
deleted file mode 100644
index 924884801..000000000
--- a/debian/patches/0012-Linux-7.0-posix_acl_to_xattr-now-allocates-memory.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <rob.norris@truenas.com>
-Date: Tue, 27 Jan 2026 16:49:59 +1100
-Subject: [PATCH] Linux 7.0: posix_acl_to_xattr() now allocates memory
-
-Kernel devs noted that almost all callers to posix_acl_to_xattr() would
-check the ACL value size and allocate a buffer before make the call. To
-reduce the repetition, they've changed it to allocate this buffer
-internally and return it.
-
-Unfortunately that's not true for us; most of our calls are from
-xattr_handler->get() to convert a stored ACL to an xattr, and that call
-provides a buffer. For now we have no other option, so this commit
-detects the new version and wraps to copy the value back into the
-provided buffer and then free it.
-
-Sponsored-by: TrueNAS
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Signed-off-by: Rob Norris <rob.norris@truenas.com>
-Closes #18216
-(cherry picked from commit d34fd6cff3ac882a0f26cb6bdd5a5b1c189c0e82)
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- config/kernel-acl.m4                         | 31 ++++++++++++++++++++
- include/os/linux/kernel/linux/xattr_compat.h | 17 +++++++++++
- 2 files changed, 48 insertions(+)
-
-diff --git a/config/kernel-acl.m4 b/config/kernel-acl.m4
-index 3dbd97948189c1af6487a3ce1d035b46fc0e993e..4393e3ab8b5e0175434f5dc61fdb224ae713774b 100644
---- a/config/kernel-acl.m4
-+++ b/config/kernel-acl.m4
-@@ -21,6 +21,35 @@ AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T], [
- 	])
- ])
- 
-+dnl #
-+dnl # 7.0 API change
-+dnl # posix_acl_to_xattr() now allocates and returns the value.
-+dnl #
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_POSIX_ACL_TO_XATTR_ALLOC], [
-+	ZFS_LINUX_TEST_SRC([posix_acl_to_xattr_alloc], [
-+		#include <linux/fs.h>
-+		#include <linux/posix_acl_xattr.h>
-+	], [
-+		struct user_namespace *ns = NULL;
-+		struct posix_acl *acl = NULL;
-+		size_t size = 0;
-+		gfp_t gfp = 0;
-+		void *xattr = NULL;
-+		xattr = posix_acl_to_xattr(ns, acl, &size, gfp);
-+	])
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_TO_XATTR_ALLOC], [
-+	AC_MSG_CHECKING([whether posix_acl_to_xattr() allocates its result]);
-+	ZFS_LINUX_TEST_RESULT([posix_acl_to_xattr_alloc], [
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_POSIX_ACL_TO_XATTR_ALLOC, 1,
-+		    [posix_acl_to_xattr() allocates its result])
-+	], [
-+		AC_MSG_RESULT(no)
-+	])
-+])
-+
- dnl #
- dnl # 3.1 API change,
- dnl # Check if inode_operations contains the function get_acl
-@@ -173,12 +202,14 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL], [
- 
- AC_DEFUN([ZFS_AC_KERNEL_SRC_ACL], [
- 	ZFS_AC_KERNEL_SRC_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T
-+	ZFS_AC_KERNEL_SRC_POSIX_ACL_TO_XATTR_ALLOC
- 	ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_GET_ACL
- 	ZFS_AC_KERNEL_SRC_INODE_OPERATIONS_SET_ACL
- ])
- 
- AC_DEFUN([ZFS_AC_KERNEL_ACL], [
- 	ZFS_AC_KERNEL_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T
-+	ZFS_AC_KERNEL_POSIX_ACL_TO_XATTR_ALLOC
- 	ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL
- 	ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL
- ])
-diff --git a/include/os/linux/kernel/linux/xattr_compat.h b/include/os/linux/kernel/linux/xattr_compat.h
-index f2f7e1ed017f6002ff2f1b59de25dc3dd6a04785..39645c19094f13b16e12f98ff7afa532b6105d4f 100644
---- a/include/os/linux/kernel/linux/xattr_compat.h
-+++ b/include/os/linux/kernel/linux/xattr_compat.h
-@@ -130,10 +130,27 @@ zpl_acl_from_xattr(const void *value, int size)
- 	return (posix_acl_from_xattr(kcred->user_ns, value, size));
- }
- 
-+/*
-+ * Linux 7.0 API change. posix_acl_to_xattr() changed from filling the
-+ * caller-provided buffer to allocating a buffer with enough space and
-+ * returning it. We wrap this up by copying the result into the provided
-+ * buffer and freeing the allocated buffer.
-+ */
- static inline int
- zpl_acl_to_xattr(struct posix_acl *acl, void *value, int size)
- {
-+#ifdef HAVE_POSIX_ACL_TO_XATTR_ALLOC
-+	size_t s = 0;
-+	void *v = posix_acl_to_xattr(kcred->user_ns, acl, &s,
-+	    kmem_flags_convert(KM_SLEEP));
-+	if (v == NULL)
-+		return (-ENOMEM);
-+	memcpy(value, v, MIN(size, s));
-+	kfree(v);
-+	return (0);
-+#else
- 	return (posix_acl_to_xattr(kcred->user_ns, acl, value, size));
-+#endif
- }
- 
- #endif /* _ZFS_XATTR_H */
diff --git a/debian/patches/0013-Linux-7.0-add-shims-for-the-fs_context-based-mount-A.patch b/debian/patches/0013-Linux-7.0-add-shims-for-the-fs_context-based-mount-A.patch
deleted file mode 100644
index 73ccba85a..000000000
--- a/debian/patches/0013-Linux-7.0-add-shims-for-the-fs_context-based-mount-A.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <rob.norris@truenas.com>
-Date: Mon, 26 Jan 2026 11:21:25 +1100
-Subject: [PATCH] Linux 7.0: add shims for the fs_context-based mount API
-
-The traditional mount API has been removed, so detect when its not
-available and instead use a small adapter to allow our existing mount
-functions to keep working.
-
-Sponsored-by: TrueNAS
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Signed-off-by: Rob Norris <rob.norris@truenas.com>
-Closes #18216
-(cherry picked from commit 0f608aa6ca323e503cba6843320b1dab3b004896)
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- config/kernel-fst-mount.m4      |  7 +++-
- module/os/linux/zfs/zpl_super.c | 66 +++++++++++++++++++++++++++++++++
- 2 files changed, 72 insertions(+), 1 deletion(-)
-
-diff --git a/config/kernel-fst-mount.m4 b/config/kernel-fst-mount.m4
-index 576f5f0129c555b418668762cf183c165b3bf05a..798acf19b79d22adfc59a48a832af757fc4fb47f 100644
---- a/config/kernel-fst-mount.m4
-+++ b/config/kernel-fst-mount.m4
-@@ -3,6 +3,10 @@ dnl # 2.6.38 API change
- dnl # The .get_sb callback has been replaced by a .mount callback
- dnl # in the file_system_type structure.
- dnl #
-+dnl # 7.0 API change
-+dnl # The .mount callback has been removed, requiring all mount work
-+dnl # to be done through the "new" mount API introduced in 5.2.
-+dnl #
- AC_DEFUN([ZFS_AC_KERNEL_SRC_FST_MOUNT], [
-         ZFS_LINUX_TEST_SRC([file_system_type_mount], [
-                 #include <linux/fs.h>
-@@ -24,7 +28,8 @@ AC_DEFUN([ZFS_AC_KERNEL_FST_MOUNT], [
-         AC_MSG_CHECKING([whether fst->mount() exists])
-         ZFS_LINUX_TEST_RESULT([file_system_type_mount], [
-                 AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_FST_MOUNT, 1, [fst->mount() exists])
-         ],[
--		ZFS_LINUX_TEST_ERROR([fst->mount()])
-+		AC_MSG_RESULT(no)
-         ])
- ])
-diff --git a/module/os/linux/zfs/zpl_super.c b/module/os/linux/zfs/zpl_super.c
-index 347b352506e54b0a5b5ff2b3d8fd3d549941183c..d509152b692133f5dd0339e750dba50160e37232 100644
---- a/module/os/linux/zfs/zpl_super.c
-+++ b/module/os/linux/zfs/zpl_super.c
-@@ -24,6 +24,7 @@
-  * Copyright (c) 2023, Datto Inc. All rights reserved.
-  * Copyright (c) 2025, Klara, Inc.
-  * Copyright (c) 2025, Rob Norris <robn@despairlabs.com>
-+ * Copyright (c) 2026, TrueNAS.
-  */
- 
- 
-@@ -36,6 +37,10 @@
- #include <linux/version.h>
- #include <linux/vfs_compat.h>
- 
-+#ifndef HAVE_FST_MOUNT
-+#include <linux/fs_context.h>
-+#endif
-+
- /*
-  * What to do when the last reference to an inode is released. If 0, the kernel
-  * will cache it on the superblock. If 1, the inode will be freed immediately.
-@@ -504,6 +509,61 @@ zpl_prune_sb(uint64_t nr_to_scan, void *arg)
- #endif
- }
- 
-+#ifndef HAVE_FST_MOUNT
-+/*
-+ * In kernel 7.0, the file_system_type->mount() and
-+ * super_operations->remount_fs() callbacks have been removed, requiring all
-+ * users to convert to the "new" fs_context-based mount API introduced in 5.2.
-+ *
-+ * This is the simplest compatibility shim possible to adapt the fs_context
-+ * interface to the old-style calls. Although this interface exists in almost
-+ * all versions of Linux currently supported by OpenZFS, we only use it when
-+ * the kernel-provided shims are unavailable, to avoid bugs in these new shims
-+ * affecting all OpenZFS deployments.
-+ */
-+static int
-+zpl_parse_monolithic(struct fs_context *fc, void *data)
-+{
-+	/*
-+	 * We do options parsing in zfs_domount(); just stash the options blob
-+	 * in the fs_context so we can pass it down later.
-+	 */
-+	fc->fs_private = data;
-+	return (0);
-+}
-+
-+static int
-+zpl_get_tree(struct fs_context *fc)
-+{
-+	struct dentry *root =
-+	    zpl_mount(fc->fs_type, fc->sb_flags, fc->source, fc->fs_private);
-+	if (IS_ERR(root))
-+		return (PTR_ERR(root));
-+
-+	fc->root = root;
-+	return (0);
-+}
-+
-+static int
-+zpl_reconfigure(struct fs_context *fc)
-+{
-+	return (zpl_remount_fs(fc->root->d_sb, &fc->sb_flags, fc->fs_private));
-+}
-+
-+const struct fs_context_operations zpl_fs_context_operations = {
-+	.parse_monolithic	= zpl_parse_monolithic,
-+	.get_tree		= zpl_get_tree,
-+	.reconfigure		= zpl_reconfigure,
-+};
-+
-+static int
-+zpl_init_fs_context(struct fs_context *fc)
-+{
-+	fc->ops = &zpl_fs_context_operations;
-+	return (0);
-+}
-+#endif
-+
- const struct super_operations zpl_super_operations = {
- 	.alloc_inode		= zpl_inode_alloc,
- #ifdef HAVE_SOPS_FREE_INODE
-@@ -517,7 +577,9 @@ const struct super_operations zpl_super_operations = {
- 	.put_super		= zpl_put_super,
- 	.sync_fs		= zpl_sync_fs,
- 	.statfs			= zpl_statfs,
-+#ifdef HAVE_FST_MOUNT
- 	.remount_fs		= zpl_remount_fs,
-+#endif
- 	.show_devname		= zpl_show_devname,
- 	.show_options		= zpl_show_options,
- 	.show_stats		= NULL,
-@@ -560,7 +622,11 @@ struct file_system_type zpl_fs_type = {
- #else
- 	.fs_flags		= FS_USERNS_MOUNT,
- #endif
-+#ifdef HAVE_FST_MOUNT
- 	.mount			= zpl_mount,
-+#else
-+	.init_fs_context	= zpl_init_fs_context,
-+#endif
- 	.kill_sb		= zpl_kill_sb,
- };
- 
diff --git a/debian/patches/0014-Linux-7.0-also-set-setlease-handler-on-directories-1.patch b/debian/patches/0014-Linux-7.0-also-set-setlease-handler-on-directories-1.patch
deleted file mode 100644
index 819c0726a..000000000
--- a/debian/patches/0014-Linux-7.0-also-set-setlease-handler-on-directories-1.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <rob.norris@truenas.com>
-Date: Wed, 18 Mar 2026 09:28:30 +1100
-Subject: [PATCH] Linux 7.0: also set setlease handler on directories (#18331)
-
-It turns out the kernel can also take directory leases, most notably in
-the NFS server. Without a setlease handler on the directory file ops,
-attempts to open a directory over NFS can fail with EINVAL.
-
-Adding a directory setlease handler was missed in 168023b603. This fixes
-that, allowing directories to be properly accessed over NFS.
-
-Sponsored-by: TrueNAS
-Reported-by: Satadru Pramanik <satadru@gmail.com>
-
-Signed-off-by: Rob Norris <rob.norris@truenas.com>
-Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-(cherry picked from commit d8c08a1cea6428fa37b3a6585150b10dedfd79b8)
-Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
----
- module/os/linux/zfs/zpl_file.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/module/os/linux/zfs/zpl_file.c b/module/os/linux/zfs/zpl_file.c
-index 30f3e3855355332aa10402791429cb4dc326f077..efcb400f196e3595fde85e5cf17be8bcf2d9520d 100644
---- a/module/os/linux/zfs/zpl_file.c
-+++ b/module/os/linux/zfs/zpl_file.c
-@@ -1268,6 +1268,7 @@ const struct file_operations zpl_dir_file_operations = {
- 	.read		= generic_read_dir,
- 	.iterate_shared	= zpl_iterate,
- 	.fsync		= zpl_fsync,
-+	.setlease	= generic_setlease,
- 	.unlocked_ioctl = zpl_ioctl,
- #ifdef CONFIG_COMPAT
- 	.compat_ioctl   = zpl_compat_ioctl,
diff --git a/debian/patches/0015-Linux-7.0-autoconf-Remove-copy-from-user-inatomic-AP.patch b/debian/patches/0015-Linux-7.0-autoconf-Remove-copy-from-user-inatomic-AP.patch
deleted file mode 100644
index b0f610085..000000000
--- a/debian/patches/0015-Linux-7.0-autoconf-Remove-copy-from-user-inatomic-AP.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: John Cabaj <john.cabaj@canonical.com>
-Date: Mon, 23 Mar 2026 11:19:41 -0500
-Subject: [PATCH] Linux 7.0: autoconf: Remove copy-from-user-inatomic API
- checks (#18348) (#18354)
-
-This function was removed in c6442bd3b643: "Removing old code outside
-of 4.18 kernsls", but fails at present on PowerPC builds due to the
-recent inclusion of 6bc9c0a90522: "powerpc: fix KUAP warning in VMX
-usercopy path" in the upstream kernel, which introduces a use of
-cpu_feature_keys[], which is a GPL-only symbol. Removing the API
-check as it doesn't appear necessary.
-
-Signed-off-by: John Cabaj <john.cabaj@canonical.com>
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
-(cherry picked from commit 8518e3e809a4ca0d152c24efbd2409772295b056)
-Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
----
- config/kernel-copy-from-user-inatomic.m4 | 29 ------------------------
- config/kernel.m4                         |  2 --
- 2 files changed, 31 deletions(-)
- delete mode 100644 config/kernel-copy-from-user-inatomic.m4
-
-diff --git a/config/kernel-copy-from-user-inatomic.m4 b/config/kernel-copy-from-user-inatomic.m4
-deleted file mode 100644
-index fec354b2f38e32e959024bf1d8608c8a7aab5803..0000000000000000000000000000000000000000
---- a/config/kernel-copy-from-user-inatomic.m4
-+++ /dev/null
-@@ -1,29 +0,0 @@
--dnl #
--dnl # On certain architectures `__copy_from_user_inatomic`
--dnl # is a GPL exported variable and cannot be used by OpenZFS.
--dnl #
--
--dnl #
--dnl # Checking if `__copy_from_user_inatomic` is available.
--dnl #
--AC_DEFUN([ZFS_AC_KERNEL_SRC___COPY_FROM_USER_INATOMIC], [
--	ZFS_LINUX_TEST_SRC([__copy_from_user_inatomic], [
--		#include <linux/uaccess.h>
--	], [
--		int result __attribute__ ((unused)) = __copy_from_user_inatomic(NULL, NULL, 0);
--	], [], [ZFS_META_LICENSE])
--])
--
--AC_DEFUN([ZFS_AC_KERNEL___COPY_FROM_USER_INATOMIC], [
--	AC_MSG_CHECKING([whether __copy_from_user_inatomic is available])
--	ZFS_LINUX_TEST_RESULT([__copy_from_user_inatomic_license], [
--		AC_MSG_RESULT(yes)
--	], [
--		AC_MSG_RESULT(no)
--		AC_MSG_ERROR([
--	*** The `__copy_from_user_inatomic()` Linux kernel function is
--	*** incompatible with the CDDL license and will prevent the module
--	*** linking stage from succeeding.  OpenZFS cannot be compiled.
--		])
--	])
--])
-diff --git a/config/kernel.m4 b/config/kernel.m4
-index df168506691dec7b9479da12e9ac9e08694853c4..258611467893a0a9666a8da3bdcd78999c765679 100644
---- a/config/kernel.m4
-+++ b/config/kernel.m4
-@@ -118,7 +118,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
- 	ZFS_AC_KERNEL_SRC_ADD_DISK
- 	ZFS_AC_KERNEL_SRC_KTHREAD
- 	ZFS_AC_KERNEL_SRC_ZERO_PAGE
--	ZFS_AC_KERNEL_SRC___COPY_FROM_USER_INATOMIC
- 	ZFS_AC_KERNEL_SRC_IDMAP_MNT_API
- 	ZFS_AC_KERNEL_SRC_IDMAP_NO_USERNS
- 	ZFS_AC_KERNEL_SRC_IATTR_VFSID
-@@ -242,7 +241,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
- 	ZFS_AC_KERNEL_ADD_DISK
- 	ZFS_AC_KERNEL_KTHREAD
- 	ZFS_AC_KERNEL_ZERO_PAGE
--	ZFS_AC_KERNEL___COPY_FROM_USER_INATOMIC
- 	ZFS_AC_KERNEL_IDMAP_MNT_API
- 	ZFS_AC_KERNEL_IDMAP_NO_USERNS
- 	ZFS_AC_KERNEL_IATTR_VFSID
diff --git a/debian/patches/0016-Linux-7.0-ensure-LSMs-get-to-process-mount-options.patch b/debian/patches/0016-Linux-7.0-ensure-LSMs-get-to-process-mount-options.patch
deleted file mode 100644
index 45eea3f03..000000000
--- a/debian/patches/0016-Linux-7.0-ensure-LSMs-get-to-process-mount-options.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <rob.norris@truenas.com>
-Date: Tue, 31 Mar 2026 10:44:31 +1100
-Subject: [PATCH] Linux 7.0: ensure LSMs get to process mount options
-
-Normally, kernel gives any LSM registering a `sb_eat_lsm_opts` hook a
-first look at mount options coming in from a userspace mount request.
-The LSM may process and/or remove any options. Whatever is left is
-passed to the filesystem.
-
-This is how the dataset properties `context`, `fscontext`, `defcontext`
-and `rootcontext` are used to configure ZFS mounts for SELinux. libzfs
-will fetch those properties from the dataset, then add them to the mount
-options.
-
-In 0f608aa6ca (#18216) we added our own mount shims to cover the loss of
-the kernel-provided ones. It turns out that if a filesystem provides a
-`.parse_monolithic callback`, it is expected to do _all_ mount option
-parameter processing - the kernel will not get involved at all. Because
-of that, LSMs are never given a chance to process mount options. The
-`context` properties are never seen by SELinux, nor are any other
-options targetting other LSMs.
-
-Fix this by calling `security_sb_eat_lsm_opts()` in
-`zpl_parse_monolithic()`, before we stash the remaining options for
-`zfs_domount()`.
-
-Sponsored-by: TrueNAS
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Signed-off-by: Rob Norris <rob.norris@truenas.com>
-Closes #18376
-(cherry picked from commit 4155d1533e1ac22057c9d21d57b28f8d36e59359)
-Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
----
- module/os/linux/zfs/zpl_super.c | 17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/module/os/linux/zfs/zpl_super.c b/module/os/linux/zfs/zpl_super.c
-index d509152b692133f5dd0339e750dba50160e37232..5baa4f637cdc2e3cd4f68032f28de686b95200a0 100644
---- a/module/os/linux/zfs/zpl_super.c
-+++ b/module/os/linux/zfs/zpl_super.c
-@@ -524,9 +524,22 @@ zpl_prune_sb(uint64_t nr_to_scan, void *arg)
- static int
- zpl_parse_monolithic(struct fs_context *fc, void *data)
- {
-+	if (data == NULL)
-+		return (0);
-+
-+	/*
-+	 * Because we supply a .parse_monolithic callback, the kernel does
-+	 * no consideration of the options blob at all. Because of this, we
-+	 * have to give LSMs a first look at it. They will remove any options
-+	 * of interest to them (eg the SELinux *context= options).
-+	 */
-+	int err = security_sb_eat_lsm_opts((char *)data, &fc->security);
-+	if (err)
-+		return (err);
-+
- 	/*
--	 * We do options parsing in zfs_domount(); just stash the options blob
--	 * in the fs_context so we can pass it down later.
-+	 * Whatever is left we stash on in the fs_context so we can pass it
-+	 * down to zfs_domount() or zfs_remount() later.
- 	 */
- 	fc->fs_private = data;
- 	return (0);
diff --git a/debian/patches/0017-Linux-7.0-compat-META.patch b/debian/patches/0017-Linux-7.0-compat-META.patch
deleted file mode 100644
index ed1efa6f0..000000000
--- a/debian/patches/0017-Linux-7.0-compat-META.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Brian Behlendorf <behlendorf1@llnl.gov>
-Date: Thu, 16 Apr 2026 16:45:20 -0700
-Subject: [PATCH] Linux 7.0 compat: META
-
-Update the META file to reflect compatibility with the 7.0
-kernel.
-
-Reviewed-by: Tony Hutter <hutter2@llnl.gov>
-Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Closes #18435
-(cherry picked from commit d88d9c91dce065c59e2d21aea5a85ba525b6a2f5)
-Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
----
- META | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/META b/META
-index c6d7e3e94057c7b6870ebb3818ba0e04141efdd0..805ab052fa8dc1882eb4b6f362225997a03b34ee 100644
---- a/META
-+++ b/META
-@@ -6,5 +6,5 @@ Release:       1
- Release-Tags:  relext
- License:       CDDL
- Author:        OpenZFS
--Linux-Maximum: 6.19
-+Linux-Maximum: 7.0
- Linux-Minimum: 4.18
diff --git a/debian/patches/0019-Fix-kernel-BUG-at-mm-usercopy.c.patch b/debian/patches/0019-Fix-kernel-BUG-at-mm-usercopy.c.patch
deleted file mode 100644
index 2e074ee3e..000000000
--- a/debian/patches/0019-Fix-kernel-BUG-at-mm-usercopy.c.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Tony Hutter <hutter2@llnl.gov>
-Date: Thu, 23 Apr 2026 10:52:19 -0700
-Subject: [PATCH] Fix 'kernel BUG at mm/usercopy.c'
-
-Fix a bug where an cgroup-OOM-killed process can cause a panic:
-
-usercopy: Kernel memory exposure attempt detected from vmalloc (offset
-1007584, size 217120)!
-kernel BUG at mm/usercopy.c:102!
-
-This was caused by zfs_uiomove() not correctly returning EFAULT
-for short copies.
-
-Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Signed-off-by: Tony Hutter <hutter2@llnl.gov>
-Closes #15918
-Closes #18408
-(cherry picked from commit fc6aa4369ef79bde105a359019575d9103541287)
-Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
----
- module/os/linux/zfs/zfs_uio.c | 13 ++++++++++---
- 1 file changed, 10 insertions(+), 3 deletions(-)
-
-diff --git a/module/os/linux/zfs/zfs_uio.c b/module/os/linux/zfs/zfs_uio.c
-index 8f9b161995f4e1d8cbbe457683879e0c343b2731..bfce9e6b52022f989f8108fdcfa4600278f0934d 100644
---- a/module/os/linux/zfs/zfs_uio.c
-+++ b/module/os/linux/zfs/zfs_uio.c
-@@ -234,6 +234,8 @@ zfs_uiomove_iter(void *p, size_t n, zfs_uio_rw_t rw, zfs_uio_t *uio,
-     boolean_t revert)
- {
- 	size_t cnt = MIN(n, uio->uio_resid);
-+	size_t oldcnt = cnt;
-+	int error = 0;
- 
- 	if (rw == UIO_READ)
- 		cnt = copy_to_iter(p, cnt, uio->uio_iter);
-@@ -249,16 +251,21 @@ zfs_uiomove_iter(void *p, size_t n, zfs_uio_rw_t rw, zfs_uio_t *uio,
- 		return (EFAULT);
- 
- 	/*
--	 * Revert advancing the uio_iter.  This is set by zfs_uiocopy()
--	 * to avoid consuming the uio and its iov_iter structure.
-+	 * When revert is set this is a zfs_uiocopy() which should not
-+	 * consume the uio and its iov_iter structure.  Otherwise, it's
-+	 * a zfs_uiomove() which is expected to update the uio.  Partial
-+	 * copies are allowed for both copy and move but EFAULT should
-+	 * be returned for zfs_uiomove().
- 	 */
- 	if (revert)
- 		iov_iter_revert(uio->uio_iter, cnt);
-+	else if (cnt != oldcnt)
-+		error = EFAULT;
- 
- 	uio->uio_resid -= cnt;
- 	uio->uio_loffset += cnt;
- 
--	return (0);
-+	return (error);
- }
- 
- int
diff --git a/debian/patches/series b/debian/patches/series
index 8b9f97f80..0ef82e7bb 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -7,13 +7,4 @@
 0007-Add-systemd-unit-for-importing-specific-pools.patch
 0008-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
 0009-libzfs-scrub-only-include-start-and-end-nv-pairs-if-.patch
-0010-Linux-7.0-explicitly-set-setlease-handler-to-kernel-.patch
-0011-Linux-7.0-blk_queue_nonrot-renamed-to-blk_queue_rot.patch
-0012-Linux-7.0-posix_acl_to_xattr-now-allocates-memory.patch
-0013-Linux-7.0-add-shims-for-the-fs_context-based-mount-A.patch
-0014-Linux-7.0-also-set-setlease-handler-on-directories-1.patch
-0015-Linux-7.0-autoconf-Remove-copy-from-user-inatomic-AP.patch
-0016-Linux-7.0-ensure-LSMs-get-to-process-mount-options.patch
-0017-Linux-7.0-compat-META.patch
-0018-Add-no-preserve-encryption-flag.patch
-0019-Fix-kernel-BUG-at-mm-usercopy.c.patch
+0010-Add-no-preserve-encryption-flag.patch
diff --git a/upstream b/upstream
index 1c702dda3..6330a45b0 160000
--- a/upstream
+++ b/upstream
@@ -1 +1 @@
-Subproject commit 1c702dda346a59e05cfd3029569bbb1d5d91c54b
+Subproject commit 6330a45b06d20125de679aae5f63ba14082671ef
-- 
2.47.3





^ permalink raw reply related	[flat|nested] 2+ messages in thread

* applied: [PATCH zfsonlinux] update submodule to 2.4.2 and refresh patches
  2026-05-13 16:08 [PATCH zfsonlinux] update submodule to 2.4.2 and refresh patches Stoiko Ivanov
@ 2026-05-13 20:46 ` Thomas Lamprecht
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Lamprecht @ 2026-05-13 20:46 UTC (permalink / raw)
  To: pve-devel, Stoiko Ivanov

On Wed, 13 May 2026 18:08:17 +0200, Stoiko Ivanov wrote:
> mostly drop all patches that are now included in 2.4.2 (most of those
> were the 7.0 compatibility fixes).
> 
> The changes between 2.4.1 and 2.4.2 are kernel-compat patches (up to
> 7.1[0]), some bugfixes, a few patches addressing removal of the old
> mount-api [1,2], rework of tests and CI. Nothing stood out as too
> scary.
> 
> [...]

Applied, thanks!

[1/1] update submodule to 2.4.2 and refresh patches
      commit: 225081b4fb8759f9a66deca5c58eabfc85e22429




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-05-13 20:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-13 16:08 [PATCH zfsonlinux] update submodule to 2.4.2 and refresh patches Stoiko Ivanov
2026-05-13 20:46 ` applied: " Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal