[pve-devel] [PATCH zfsonlinux 1/8] update zfs submodule to 2.3.1 and refresh patches
Stoiko Ivanov
s.ivanov at proxmox.com
Mon Mar 31 15:41:21 CEST 2025
Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
...META-and-DCH-consistency-in-autoconf.patch | 2 +-
.../0002-always-load-ZFS-module-on-boot.patch | 2 +-
...o-the-zed-binary-on-the-systemd-unit.patch | 2 +-
...ith-d-dev-disk-by-id-in-scan-service.patch | 2 +-
debian/patches/0005-Enable-zed-emails.patch | 2 +-
.../0006-dont-symlink-zed-scripts.patch | 2 +-
...md-unit-for-importing-specific-pools.patch | 6 +-
...-move-manpage-arcstat-1-to-arcstat-8.patch | 4 +-
...-guard-access-to-freshly-introduced-.patch | 439 ------------------
...ten-bounds-for-noalloc-stat-availab.patch} | 4 +-
...runcate_shares-without-etc-exports.d.patch | 77 ---
...rrectly-detect-flush-requests-17131.patch} | 11 +-
...-use-LVM-autoactivation-for-activat.patch} | 7 +-
...ops-d_revalidate-now-takes-four-args.patch | 103 ----
...14-BLK_MQ_F_SHOULD_MERGE-was-removed.patch | 44 --
debian/patches/series | 10 +-
upstream | 2 +-
17 files changed, 23 insertions(+), 696 deletions(-)
delete mode 100644 debian/patches/0009-arc-stat-summary-guard-access-to-freshly-introduced-.patch
rename debian/patches/{0011-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch => 0009-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch} (94%)
delete mode 100644 debian/patches/0010-Fix-nfs_truncate_shares-without-etc-exports.d.patch
rename debian/patches/{0012-linux-zvols-correctly-detect-flush-requests.patch => 0010-linux-zvols-correctly-detect-flush-requests-17131.patch} (88%)
rename debian/patches/{0013-contrib-initramfs-use-LVM-autoactivation-for-activat.patch => 0011-contrib-initramfs-use-LVM-autoactivation-for-activat.patch} (92%)
delete mode 100644 debian/patches/0014-Linux-6.14-dops-d_revalidate-now-takes-four-args.patch
delete mode 100644 debian/patches/0015-Linux-6.14-BLK_MQ_F_SHOULD_MERGE-was-removed.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 504bb9987..41fa5b583 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,7 +10,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 29 insertions(+), 5 deletions(-)
diff --git a/config/zfs-meta.m4 b/config/zfs-meta.m4
-index 20064a0fb..4d5f545ad 100644
+index 20064a0fb5957288640494bd6a640942796050b4..4d5f545adc23c3c97604b7a1ac47e9711c81e9fd 100644
--- a/config/zfs-meta.m4
+++ b/config/zfs-meta.m4
@@ -1,9 +1,10 @@
diff --git a/debian/patches/0002-always-load-ZFS-module-on-boot.patch b/debian/patches/0002-always-load-ZFS-module-on-boot.patch
index 6b1e068b1..87133b7f5 100644
--- a/debian/patches/0002-always-load-ZFS-module-on-boot.patch
+++ b/debian/patches/0002-always-load-ZFS-module-on-boot.patch
@@ -19,7 +19,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/etc/modules-load.d/zfs.conf b/etc/modules-load.d/zfs.conf
-index 44e1bb3ed..7509b03cb 100644
+index 44e1bb3ed906b18eaafb6376471380b669590357..7509b03cb7dd8f326db514841f3f90d47021caa7 100644
--- a/etc/modules-load.d/zfs.conf
+++ b/etc/modules-load.d/zfs.conf
@@ -1,3 +1,3 @@
diff --git a/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch b/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch
index fa365df58..51f3e4e24 100644
--- a/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch
+++ b/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch
@@ -13,7 +13,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/etc/systemd/system/zfs-zed.service.in b/etc/systemd/system/zfs-zed.service.in
-index be2fc6734..7606604ec 100644
+index be2fc67348f937b074554377f46d51ef81ef5105..7606604ec0251a1239e078dc15fd969a584bb843 100644
--- a/etc/systemd/system/zfs-zed.service.in
+++ b/etc/systemd/system/zfs-zed.service.in
@@ -5,7 +5,7 @@ ConditionPathIsDirectory=/sys/module/zfs
diff --git a/debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch b/debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch
index 7ea61c811..d551dc595 100644
--- a/debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch
+++ b/debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch
@@ -14,7 +14,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/etc/systemd/system/zfs-import-scan.service.in b/etc/systemd/system/zfs-import-scan.service.in
-index c5dd45d87..1c792edf0 100644
+index c5dd45d87e683bd78d0d09c506f5b3db179edf2e..1c792edf054271560ec482b0ed8eab8e7b900253 100644
--- a/etc/systemd/system/zfs-import-scan.service.in
+++ b/etc/systemd/system/zfs-import-scan.service.in
@@ -14,7 +14,7 @@ ConditionPathIsDirectory=/sys/module/zfs
diff --git a/debian/patches/0005-Enable-zed-emails.patch b/debian/patches/0005-Enable-zed-emails.patch
index c3ccdecd7..87769ce10 100644
--- a/debian/patches/0005-Enable-zed-emails.patch
+++ b/debian/patches/0005-Enable-zed-emails.patch
@@ -13,7 +13,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/zed/zed.d/zed.rc b/cmd/zed/zed.d/zed.rc
-index 859c6f9cb..9d1ee1560 100644
+index af56147a969b0bef63a9cd6b16b1b59c186298b0..47fb01631ec46980ba1ffbce5d2bb69a3e7150fc 100644
--- a/cmd/zed/zed.d/zed.rc
+++ b/cmd/zed/zed.d/zed.rc
@@ -41,7 +41,7 @@ ZED_EMAIL_ADDR="root"
diff --git a/debian/patches/0006-dont-symlink-zed-scripts.patch b/debian/patches/0006-dont-symlink-zed-scripts.patch
index 2591e8604..eeb8791df 100644
--- a/debian/patches/0006-dont-symlink-zed-scripts.patch
+++ b/debian/patches/0006-dont-symlink-zed-scripts.patch
@@ -32,7 +32,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at 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 093a04c46..e5e735d00 100644
+index 093a04c4636a7455f8ca4b2644f79967736d6233..e5e735d0013a6a20120ff9529a9275557cf88713 100644
--- a/cmd/zed/zed.d/Makefile.am
+++ b/cmd/zed/zed.d/Makefile.am
@@ -50,7 +50,7 @@ zed-install-data-hook:
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 0600296fb..d9fa32321 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,7 +23,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
create mode 100644 etc/systemd/system/zfs-import at .service.in
diff --git a/etc/Makefile.am b/etc/Makefile.am
-index 7187762d3..de131dc87 100644
+index 7187762d380296981b0c440824676f8e47355816..de131dc87952e0668ef9d2b5b951634c939bfff5 100644
--- a/etc/Makefile.am
+++ b/etc/Makefile.am
@@ -54,6 +54,7 @@ dist_systemdpreset_DATA = \
@@ -35,7 +35,7 @@ index 7187762d3..de131dc87 100644
%D%/systemd/system/zfs-mount.service \
%D%/systemd/system/zfs-scrub-monthly at .timer \
diff --git a/etc/systemd/system/50-zfs.preset b/etc/systemd/system/50-zfs.preset
-index e4056a92c..030611419 100644
+index e4056a92cd985380aa7346f4b291e4c3f1446fee..030611419816c83bcb86fc9c23d31855014eb914 100644
--- a/etc/systemd/system/50-zfs.preset
+++ b/etc/systemd/system/50-zfs.preset
@@ -1,6 +1,7 @@
@@ -48,7 +48,7 @@ index e4056a92c..030611419 100644
enable zfs-share.service
diff --git a/etc/systemd/system/zfs-import at .service.in b/etc/systemd/system/zfs-import at .service.in
new file mode 100644
-index 000000000..5bd19fb79
+index 0000000000000000000000000000000000000000..5bd19fb795e2b5554b3932e0b84b2668c2dcac51
--- /dev/null
+++ b/etc/systemd/system/zfs-import at .service.in
@@ -0,0 +1,18 @@
diff --git a/debian/patches/0008-Patch-move-manpage-arcstat-1-to-arcstat-8.patch b/debian/patches/0008-Patch-move-manpage-arcstat-1-to-arcstat-8.patch
index 9a4aea56e..af7509c64 100644
--- a/debian/patches/0008-Patch-move-manpage-arcstat-1-to-arcstat-8.patch
+++ b/debian/patches/0008-Patch-move-manpage-arcstat-1-to-arcstat-8.patch
@@ -15,7 +15,7 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
rename man/{man1/arcstat.1 => man8/arcstat.8} (99%)
diff --git a/man/Makefile.am b/man/Makefile.am
-index 43bb014dd..a9293468a 100644
+index fde7049337640aadc5c4c699c1ccf56c444f9850..f7bd823a2343b7089d38351d510c3ade451f55a1 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -2,7 +2,6 @@ dist_noinst_man_MANS = \
@@ -38,7 +38,7 @@ diff --git a/man/man1/arcstat.1 b/man/man8/arcstat.8
similarity index 99%
rename from man/man1/arcstat.1
rename to man/man8/arcstat.8
-index 82358fa68..a8fb55498 100644
+index 019a8270204a2551035a407ca0e3537ef1d345f3..4128104d5e32ea8804c80712971685c1279cac9b 100644
--- a/man/man1/arcstat.1
+++ b/man/man8/arcstat.8
@@ -13,7 +13,7 @@
diff --git a/debian/patches/0009-arc-stat-summary-guard-access-to-freshly-introduced-.patch b/debian/patches/0009-arc-stat-summary-guard-access-to-freshly-introduced-.patch
deleted file mode 100644
index 75e68c895..000000000
--- a/debian/patches/0009-arc-stat-summary-guard-access-to-freshly-introduced-.patch
+++ /dev/null
@@ -1,439 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Thomas Lamprecht <t.lamprecht at proxmox.com>
-Date: Wed, 10 Nov 2021 09:29:47 +0100
-Subject: [PATCH] arc stat/summary: guard access to freshly introduced stats
-
-l2arc MFU/MRU and zfetch past future and stride stats were introduced
-in 2.1 and 2.2.4 respectively:
-
-commit 085321621e79a75bea41c2b6511da6ebfbf2ba0a added printing MFU
-and MRU stats for 2.1 user space tools, but those keys are not
-available in the 2.0 module. That means it may break the arcstat and
-arc_summary tools after upgrade to 2.1 (user space), before a reboot
-to the new 2.1 ZFS kernel-module happened, due to python raising a
-KeyError on the dict access then.
-
-Move those two keys to a .get accessor with `0` as fallback, as it
-should be better to show some possible wrong data for new stat-keys
-than throwing an exception.
-
-also move l2_mfu_asize l2_mru_asize l2_prefetch_asize
-l2_bufc_data_asize l2_bufc_metadata_asize to .get accessor
-(these are only present with a cache device in the pool)
-
-guard access to iohits and uncached state introduced in
-792a6ee462efc15a7614f27e13f0f8aaa9414a08
-
-guard access to zfetch past future stride stats introduced in
-026fe796465e3da7b27d06ef5338634ee6dd30d8
-
-These are present in the current kernel, but lead to an exception, if
-running the new user-space with an old kernel module.
-
-Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
-Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
----
- cmd/arc_summary | 132 ++++++++++++++++++++++++------------------------
- cmd/arcstat.in | 48 +++++++++---------
- 2 files changed, 90 insertions(+), 90 deletions(-)
-
-diff --git a/cmd/arc_summary b/cmd/arc_summary
-index 100fb1987..30f5d23e9 100755
---- a/cmd/arc_summary
-+++ b/cmd/arc_summary
-@@ -551,21 +551,21 @@ def section_arc(kstats_dict):
- arc_target_size = arc_stats['c']
- arc_max = arc_stats['c_max']
- arc_min = arc_stats['c_min']
-- meta = arc_stats['meta']
-- pd = arc_stats['pd']
-- pm = arc_stats['pm']
-- anon_data = arc_stats['anon_data']
-- anon_metadata = arc_stats['anon_metadata']
-- mfu_data = arc_stats['mfu_data']
-- mfu_metadata = arc_stats['mfu_metadata']
-- mru_data = arc_stats['mru_data']
-- mru_metadata = arc_stats['mru_metadata']
-- mfug_data = arc_stats['mfu_ghost_data']
-- mfug_metadata = arc_stats['mfu_ghost_metadata']
-- mrug_data = arc_stats['mru_ghost_data']
-- mrug_metadata = arc_stats['mru_ghost_metadata']
-- unc_data = arc_stats['uncached_data']
-- unc_metadata = arc_stats['uncached_metadata']
-+ meta = arc_stats.get('meta', 0)
-+ pd = arc_stats.get('pd', 0)
-+ pm = arc_stats.get('pm', 0)
-+ anon_data = arc_stats.get('anon_data', 0)
-+ anon_metadata = arc_stats.get('anon_metadata', 0)
-+ mfu_data = arc_stats.get('mfu_data', 0)
-+ mfu_metadata = arc_stats.get('mfu_metadata', 0)
-+ mru_data = arc_stats.get('mru_data', 0)
-+ mru_metadata = arc_stats.get('mru_metadata', 0)
-+ mfug_data = arc_stats.get('mfu_ghost_data', 0)
-+ mfug_metadata = arc_stats.get('mfu_ghost_metadata', 0)
-+ mrug_data = arc_stats.get('mru_ghost_data', 0)
-+ mrug_metadata = arc_stats.get('mru_ghost_metadata', 0)
-+ unc_data = arc_stats.get('uncached_data', 0)
-+ unc_metadata = arc_stats.get('uncached_metadata', 0)
- bonus_size = arc_stats['bonus_size']
- dnode_limit = arc_stats['arc_dnode_limit']
- dnode_size = arc_stats['dnode_size']
-@@ -655,13 +655,13 @@ def section_arc(kstats_dict):
- prt_i1('L2 cached evictions:', f_bytes(arc_stats['evict_l2_cached']))
- prt_i1('L2 eligible evictions:', f_bytes(arc_stats['evict_l2_eligible']))
- prt_i2('L2 eligible MFU evictions:',
-- f_perc(arc_stats['evict_l2_eligible_mfu'],
-+ f_perc(arc_stats.get('evict_l2_eligible_mfu', 0), # 2.0 module compat
- arc_stats['evict_l2_eligible']),
-- f_bytes(arc_stats['evict_l2_eligible_mfu']))
-+ f_bytes(arc_stats.get('evict_l2_eligible_mfu', 0)))
- prt_i2('L2 eligible MRU evictions:',
-- f_perc(arc_stats['evict_l2_eligible_mru'],
-+ f_perc(arc_stats.get('evict_l2_eligible_mru', 0), # 2.0 module compat
- arc_stats['evict_l2_eligible']),
-- f_bytes(arc_stats['evict_l2_eligible_mru']))
-+ f_bytes(arc_stats.get('evict_l2_eligible_mru', 0)))
- prt_i1('L2 ineligible evictions:',
- f_bytes(arc_stats['evict_l2_ineligible']))
- print()
-@@ -672,106 +672,106 @@ def section_archits(kstats_dict):
- """
-
- arc_stats = isolate_section('arcstats', kstats_dict)
-- all_accesses = int(arc_stats['hits'])+int(arc_stats['iohits'])+\
-+ all_accesses = int(arc_stats['hits'])+int(arc_stats.get('iohits', 0))+\
- int(arc_stats['misses'])
-
- prt_1('ARC total accesses:', f_hits(all_accesses))
- ta_todo = (('Total hits:', arc_stats['hits']),
-- ('Total I/O hits:', arc_stats['iohits']),
-+ ('Total I/O hits:', arc_stats.get('iohits', 0)),
- ('Total misses:', arc_stats['misses']))
- for title, value in ta_todo:
- prt_i2(title, f_perc(value, all_accesses), f_hits(value))
- print()
-
- dd_total = int(arc_stats['demand_data_hits']) +\
-- int(arc_stats['demand_data_iohits']) +\
-+ int(arc_stats.get('demand_data_iohits', 0)) +\
- int(arc_stats['demand_data_misses'])
- prt_2('ARC demand data accesses:', f_perc(dd_total, all_accesses),
- f_hits(dd_total))
- dd_todo = (('Demand data hits:', arc_stats['demand_data_hits']),
-- ('Demand data I/O hits:', arc_stats['demand_data_iohits']),
-+ ('Demand data I/O hits:', arc_stats.get('demand_data_iohits', 0)),
- ('Demand data misses:', arc_stats['demand_data_misses']))
- for title, value in dd_todo:
- prt_i2(title, f_perc(value, dd_total), f_hits(value))
- print()
-
- dm_total = int(arc_stats['demand_metadata_hits']) +\
-- int(arc_stats['demand_metadata_iohits']) +\
-+ int(arc_stats.get('demand_metadata_iohits', 0)) +\
- int(arc_stats['demand_metadata_misses'])
- prt_2('ARC demand metadata accesses:', f_perc(dm_total, all_accesses),
- f_hits(dm_total))
- dm_todo = (('Demand metadata hits:', arc_stats['demand_metadata_hits']),
- ('Demand metadata I/O hits:',
-- arc_stats['demand_metadata_iohits']),
-+ arc_stats.get('demand_metadata_iohits', 0)),
- ('Demand metadata misses:', arc_stats['demand_metadata_misses']))
- for title, value in dm_todo:
- prt_i2(title, f_perc(value, dm_total), f_hits(value))
- print()
-
- pd_total = int(arc_stats['prefetch_data_hits']) +\
-- int(arc_stats['prefetch_data_iohits']) +\
-+ int(arc_stats.get('prefetch_data_iohits', 0)) +\
- int(arc_stats['prefetch_data_misses'])
- prt_2('ARC prefetch data accesses:', f_perc(pd_total, all_accesses),
- f_hits(pd_total))
- pd_todo = (('Prefetch data hits:', arc_stats['prefetch_data_hits']),
-- ('Prefetch data I/O hits:', arc_stats['prefetch_data_iohits']),
-+ ('Prefetch data I/O hits:', arc_stats.get('prefetch_data_iohits', 0)),
- ('Prefetch data misses:', arc_stats['prefetch_data_misses']))
- for title, value in pd_todo:
- prt_i2(title, f_perc(value, pd_total), f_hits(value))
- print()
-
- pm_total = int(arc_stats['prefetch_metadata_hits']) +\
-- int(arc_stats['prefetch_metadata_iohits']) +\
-+ int(arc_stats.get('prefetch_metadata_iohits', 0)) +\
- int(arc_stats['prefetch_metadata_misses'])
- prt_2('ARC prefetch metadata accesses:', f_perc(pm_total, all_accesses),
- f_hits(pm_total))
- pm_todo = (('Prefetch metadata hits:',
- arc_stats['prefetch_metadata_hits']),
- ('Prefetch metadata I/O hits:',
-- arc_stats['prefetch_metadata_iohits']),
-+ arc_stats.get('prefetch_metadata_iohits', 0)),
- ('Prefetch metadata misses:',
- arc_stats['prefetch_metadata_misses']))
- for title, value in pm_todo:
- prt_i2(title, f_perc(value, pm_total), f_hits(value))
- print()
-
-- all_prefetches = int(arc_stats['predictive_prefetch'])+\
-- int(arc_stats['prescient_prefetch'])
-+ all_prefetches = int(arc_stats.get('predictive_prefetch', 0))+\
-+ int(arc_stats.get('prescient_prefetch', 0))
- prt_2('ARC predictive prefetches:',
-- f_perc(arc_stats['predictive_prefetch'], all_prefetches),
-- f_hits(arc_stats['predictive_prefetch']))
-+ f_perc(arc_stats.get('predictive_prefetch', 0), all_prefetches),
-+ f_hits(arc_stats.get('predictive_prefetch', 0)))
- prt_i2('Demand hits after predictive:',
- f_perc(arc_stats['demand_hit_predictive_prefetch'],
-- arc_stats['predictive_prefetch']),
-+ arc_stats.get('predictive_prefetch', 0)),
- f_hits(arc_stats['demand_hit_predictive_prefetch']))
- prt_i2('Demand I/O hits after predictive:',
-- f_perc(arc_stats['demand_iohit_predictive_prefetch'],
-- arc_stats['predictive_prefetch']),
-- f_hits(arc_stats['demand_iohit_predictive_prefetch']))
-- never = int(arc_stats['predictive_prefetch']) -\
-+ f_perc(arc_stats.get('demand_iohit_predictive_prefetch', 0),
-+ arc_stats.get('predictive_prefetch', 0)),
-+ f_hits(arc_stats.get('demand_iohit_predictive_prefetch', 0)))
-+ never = int(arc_stats.get('predictive_prefetch', 0)) -\
- int(arc_stats['demand_hit_predictive_prefetch']) -\
-- int(arc_stats['demand_iohit_predictive_prefetch'])
-+ int(arc_stats.get('demand_iohit_predictive_prefetch', 0))
- prt_i2('Never demanded after predictive:',
-- f_perc(never, arc_stats['predictive_prefetch']),
-+ f_perc(never, arc_stats.get('predictive_prefetch', 0)),
- f_hits(never))
- print()
-
- prt_2('ARC prescient prefetches:',
-- f_perc(arc_stats['prescient_prefetch'], all_prefetches),
-- f_hits(arc_stats['prescient_prefetch']))
-+ f_perc(arc_stats.get('prescient_prefetch', 0), all_prefetches),
-+ f_hits(arc_stats.get('prescient_prefetch', 0)))
- prt_i2('Demand hits after prescient:',
- f_perc(arc_stats['demand_hit_prescient_prefetch'],
-- arc_stats['prescient_prefetch']),
-+ arc_stats.get('prescient_prefetch', 0)),
- f_hits(arc_stats['demand_hit_prescient_prefetch']))
- prt_i2('Demand I/O hits after prescient:',
-- f_perc(arc_stats['demand_iohit_prescient_prefetch'],
-- arc_stats['prescient_prefetch']),
-- f_hits(arc_stats['demand_iohit_prescient_prefetch']))
-- never = int(arc_stats['prescient_prefetch'])-\
-+ f_perc(arc_stats.get('demand_iohit_prescient_prefetch', 0),
-+ arc_stats.get('prescient_prefetch', 0)),
-+ f_hits(arc_stats.get('demand_iohit_prescient_prefetch', 0)))
-+ never = int(arc_stats.get('prescient_prefetch', 0))-\
- int(arc_stats['demand_hit_prescient_prefetch'])-\
-- int(arc_stats['demand_iohit_prescient_prefetch'])
-+ int(arc_stats.get('demand_iohit_prescient_prefetch', 0))
- prt_i2('Never demanded after prescient:',
-- f_perc(never, arc_stats['prescient_prefetch']),
-+ f_perc(never, arc_stats.get('prescient_prefetch', 0)),
- f_hits(never))
- print()
-
-@@ -782,7 +782,7 @@ def section_archits(kstats_dict):
- arc_stats['mfu_ghost_hits']),
- ('Most recently used (MRU) ghost:',
- arc_stats['mru_ghost_hits']),
-- ('Uncached:', arc_stats['uncached_hits']))
-+ ('Uncached:', arc_stats.get('uncached_hits', 0)))
- for title, value in cl_todo:
- prt_i2(title, f_perc(value, all_accesses), f_hits(value))
- print()
-@@ -794,26 +794,26 @@ def section_dmu(kstats_dict):
- zfetch_stats = isolate_section('zfetchstats', kstats_dict)
-
- zfetch_access_total = int(zfetch_stats['hits']) +\
-- int(zfetch_stats['future']) + int(zfetch_stats['stride']) +\
-- int(zfetch_stats['past']) + int(zfetch_stats['misses'])
-+ int(zfetch_stats.get('future', 0)) + int(zfetch_stats.get('stride', 0)) +\
-+ int(zfetch_stats.get('past', 0)) + int(zfetch_stats['misses'])
-
- prt_1('DMU predictive prefetcher calls:', f_hits(zfetch_access_total))
- prt_i2('Stream hits:',
- f_perc(zfetch_stats['hits'], zfetch_access_total),
- f_hits(zfetch_stats['hits']))
-- future = int(zfetch_stats['future']) + int(zfetch_stats['stride'])
-+ future = int(zfetch_stats.get('future', 0)) + int(zfetch_stats.get('stride', 0))
- prt_i2('Hits ahead of stream:', f_perc(future, zfetch_access_total),
- f_hits(future))
- prt_i2('Hits behind stream:',
-- f_perc(zfetch_stats['past'], zfetch_access_total),
-- f_hits(zfetch_stats['past']))
-+ f_perc(zfetch_stats.get('past', 0), zfetch_access_total),
-+ f_hits(zfetch_stats.get('past', 0)))
- prt_i2('Stream misses:',
- f_perc(zfetch_stats['misses'], zfetch_access_total),
- f_hits(zfetch_stats['misses']))
- prt_i2('Streams limit reached:',
- f_perc(zfetch_stats['max_streams'], zfetch_stats['misses']),
- f_hits(zfetch_stats['max_streams']))
-- prt_i1('Stream strides:', f_hits(zfetch_stats['stride']))
-+ prt_i1('Stream strides:', f_hits(zfetch_stats.get('stride', 0)))
- prt_i1('Prefetches issued', f_hits(zfetch_stats['io_issued']))
- print()
-
-@@ -860,20 +860,20 @@ def section_l2arc(kstats_dict):
- f_perc(arc_stats['l2_hdr_size'], arc_stats['l2_size']),
- f_bytes(arc_stats['l2_hdr_size']))
- prt_i2('MFU allocated size:',
-- f_perc(arc_stats['l2_mfu_asize'], arc_stats['l2_asize']),
-- f_bytes(arc_stats['l2_mfu_asize']))
-+ f_perc(arc_stats.get('l2_mfu_asize', 0), arc_stats['l2_asize']),
-+ f_bytes(arc_stats.get('l2_mfu_asize', 0))) # 2.0 module compat
- prt_i2('MRU allocated size:',
-- f_perc(arc_stats['l2_mru_asize'], arc_stats['l2_asize']),
-- f_bytes(arc_stats['l2_mru_asize']))
-+ f_perc(arc_stats.get('l2_mru_asize', 0), arc_stats['l2_asize']),
-+ f_bytes(arc_stats.get('l2_mru_asize', 0))) # 2.0 module compat
- prt_i2('Prefetch allocated size:',
-- f_perc(arc_stats['l2_prefetch_asize'], arc_stats['l2_asize']),
-- f_bytes(arc_stats['l2_prefetch_asize']))
-+ f_perc(arc_stats.get('l2_prefetch_asize', 0), arc_stats['l2_asize']),
-+ f_bytes(arc_stats.get('l2_prefetch_asize',0))) # 2.0 module compat
- prt_i2('Data (buffer content) allocated size:',
-- f_perc(arc_stats['l2_bufc_data_asize'], arc_stats['l2_asize']),
-- f_bytes(arc_stats['l2_bufc_data_asize']))
-+ f_perc(arc_stats.get('l2_bufc_data_asize', 0), arc_stats['l2_asize']),
-+ f_bytes(arc_stats.get('l2_bufc_data_asize', 0))) # 2.0 module compat
- prt_i2('Metadata (buffer content) allocated size:',
-- f_perc(arc_stats['l2_bufc_metadata_asize'], arc_stats['l2_asize']),
-- f_bytes(arc_stats['l2_bufc_metadata_asize']))
-+ f_perc(arc_stats.get('l2_bufc_metadata_asize', 0), arc_stats['l2_asize']),
-+ f_bytes(arc_stats.get('l2_bufc_metadata_asize', 0))) # 2.0 module compat
-
- print()
- prt_1('L2ARC breakdown:', f_hits(l2_access_total))
-diff --git a/cmd/arcstat.in b/cmd/arcstat.in
-index c4f10a1d6..bf47ec90e 100755
---- a/cmd/arcstat.in
-+++ b/cmd/arcstat.in
-@@ -510,7 +510,7 @@ def calculate():
- v = dict()
- v["time"] = time.strftime("%H:%M:%S", time.localtime())
- v["hits"] = d["hits"] // sint
-- v["iohs"] = d["iohits"] // sint
-+ v["iohs"] = d.get("iohits", 0) // sint
- v["miss"] = d["misses"] // sint
- v["read"] = v["hits"] + v["iohs"] + v["miss"]
- v["hit%"] = 100 * v["hits"] // v["read"] if v["read"] > 0 else 0
-@@ -518,7 +518,7 @@ def calculate():
- v["miss%"] = 100 - v["hit%"] - v["ioh%"] if v["read"] > 0 else 0
-
- v["dhit"] = (d["demand_data_hits"] + d["demand_metadata_hits"]) // sint
-- v["dioh"] = (d["demand_data_iohits"] + d["demand_metadata_iohits"]) // sint
-+ v["dioh"] = (d.get("demand_data_iohits", 0) + d.get("demand_metadata_iohits", 0)) // sint
- v["dmis"] = (d["demand_data_misses"] + d["demand_metadata_misses"]) // sint
-
- v["dread"] = v["dhit"] + v["dioh"] + v["dmis"]
-@@ -527,7 +527,7 @@ def calculate():
- v["dm%"] = 100 - v["dh%"] - v["di%"] if v["dread"] > 0 else 0
-
- v["ddhit"] = d["demand_data_hits"] // sint
-- v["ddioh"] = d["demand_data_iohits"] // sint
-+ v["ddioh"] = d.get("demand_data_iohits", 0) // sint
- v["ddmis"] = d["demand_data_misses"] // sint
-
- v["ddread"] = v["ddhit"] + v["ddioh"] + v["ddmis"]
-@@ -536,7 +536,7 @@ def calculate():
- v["ddm%"] = 100 - v["ddh%"] - v["ddi%"] if v["ddread"] > 0 else 0
-
- v["dmhit"] = d["demand_metadata_hits"] // sint
-- v["dmioh"] = d["demand_metadata_iohits"] // sint
-+ v["dmioh"] = d.get("demand_metadata_iohits", 0) // sint
- v["dmmis"] = d["demand_metadata_misses"] // sint
-
- v["dmread"] = v["dmhit"] + v["dmioh"] + v["dmmis"]
-@@ -545,8 +545,8 @@ def calculate():
- v["dmm%"] = 100 - v["dmh%"] - v["dmi%"] if v["dmread"] > 0 else 0
-
- v["phit"] = (d["prefetch_data_hits"] + d["prefetch_metadata_hits"]) // sint
-- v["pioh"] = (d["prefetch_data_iohits"] +
-- d["prefetch_metadata_iohits"]) // sint
-+ v["pioh"] = (d.get("prefetch_data_iohits", 0) +
-+ d.get("prefetch_metadata_iohits", 0)) // sint
- v["pmis"] = (d["prefetch_data_misses"] +
- d["prefetch_metadata_misses"]) // sint
-
-@@ -556,7 +556,7 @@ def calculate():
- v["pm%"] = 100 - v["ph%"] - v["pi%"] if v["pread"] > 0 else 0
-
- v["pdhit"] = d["prefetch_data_hits"] // sint
-- v["pdioh"] = d["prefetch_data_iohits"] // sint
-+ v["pdioh"] = d.get("prefetch_data_iohits", 0) // sint
- v["pdmis"] = d["prefetch_data_misses"] // sint
-
- v["pdread"] = v["pdhit"] + v["pdioh"] + v["pdmis"]
-@@ -565,7 +565,7 @@ def calculate():
- v["pdm%"] = 100 - v["pdh%"] - v["pdi%"] if v["pdread"] > 0 else 0
-
- v["pmhit"] = d["prefetch_metadata_hits"] // sint
-- v["pmioh"] = d["prefetch_metadata_iohits"] // sint
-+ v["pmioh"] = d.get("prefetch_metadata_iohits", 0) // sint
- v["pmmis"] = d["prefetch_metadata_misses"] // sint
-
- v["pmread"] = v["pmhit"] + v["pmioh"] + v["pmmis"]
-@@ -575,8 +575,8 @@ def calculate():
-
- v["mhit"] = (d["prefetch_metadata_hits"] +
- d["demand_metadata_hits"]) // sint
-- v["mioh"] = (d["prefetch_metadata_iohits"] +
-- d["demand_metadata_iohits"]) // sint
-+ v["mioh"] = (d.get("prefetch_metadata_iohits", 0) +
-+ d.get("demand_metadata_iohits", 0)) // sint
- v["mmis"] = (d["prefetch_metadata_misses"] +
- d["demand_metadata_misses"]) // sint
-
-@@ -592,24 +592,24 @@ def calculate():
- v["mru"] = d["mru_hits"] // sint
- v["mrug"] = d["mru_ghost_hits"] // sint
- v["mfug"] = d["mfu_ghost_hits"] // sint
-- v["unc"] = d["uncached_hits"] // sint
-+ v["unc"] = d.get("uncached_hits", 0) // sint
- v["eskip"] = d["evict_skip"] // sint
- v["el2skip"] = d["evict_l2_skip"] // sint
- v["el2cach"] = d["evict_l2_cached"] // sint
- v["el2el"] = d["evict_l2_eligible"] // sint
-- v["el2mfu"] = d["evict_l2_eligible_mfu"] // sint
-- v["el2mru"] = d["evict_l2_eligible_mru"] // sint
-+ v["el2mfu"] = d.get("evict_l2_eligible_mfu", 0) // sint
-+ v["el2mru"] = d.get("evict_l2_eligible_mru", 0) // sint
- v["el2inel"] = d["evict_l2_ineligible"] // sint
- v["mtxmis"] = d["mutex_miss"] // sint
-- v["ztotal"] = (d["zfetch_hits"] + d["zfetch_future"] + d["zfetch_stride"] +
-- d["zfetch_past"] + d["zfetch_misses"]) // sint
-+ v["ztotal"] = (d["zfetch_hits"] + d.get("zfetch_future", 0) + d.get("zfetch_stride", 0) +
-+ d.get("zfetch_past", 0) + d["zfetch_misses"]) // sint
- v["zhits"] = d["zfetch_hits"] // sint
-- v["zahead"] = (d["zfetch_future"] + d["zfetch_stride"]) // sint
-- v["zpast"] = d["zfetch_past"] // sint
-+ v["zahead"] = (d.get("zfetch_future", 0) + d.get("zfetch_stride", 0)) // sint
-+ v["zpast"] = d.get("zfetch_past", 0) // sint
- v["zmisses"] = d["zfetch_misses"] // sint
- v["zmax"] = d["zfetch_max_streams"] // sint
-- v["zfuture"] = d["zfetch_future"] // sint
-- v["zstride"] = d["zfetch_stride"] // sint
-+ v["zfuture"] = d.get("zfetch_future", 0) // sint
-+ v["zstride"] = d.get("zfetch_stride", 0) // sint
- v["zissued"] = d["zfetch_io_issued"] // sint
- v["zactive"] = d["zfetch_io_active"] // sint
-
-@@ -624,11 +624,11 @@ def calculate():
- v["l2size"] = cur["l2_size"]
- v["l2bytes"] = d["l2_read_bytes"] // sint
-
-- v["l2pref"] = cur["l2_prefetch_asize"]
-- v["l2mfu"] = cur["l2_mfu_asize"]
-- v["l2mru"] = cur["l2_mru_asize"]
-- v["l2data"] = cur["l2_bufc_data_asize"]
-- v["l2meta"] = cur["l2_bufc_metadata_asize"]
-+ v["l2pref"] = cur.get("l2_prefetch_asize", 0)
-+ v["l2mfu"] = cur.get("l2_mfu_asize", 0)
-+ v["l2mru"] = cur.get("l2_mru_asize", 0)
-+ v["l2data"] = cur.get("l2_bufc_data_asize", 0)
-+ v["l2meta"] = cur.get("l2_bufc_metadata_asize", 0)
- v["l2pref%"] = 100 * v["l2pref"] // v["l2asize"]
- v["l2mfu%"] = 100 * v["l2mfu"] // v["l2asize"]
- v["l2mru%"] = 100 * v["l2mru"] // v["l2asize"]
diff --git a/debian/patches/0011-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch b/debian/patches/0009-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
similarity index 94%
rename from debian/patches/0011-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
rename to debian/patches/0009-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
index 29c7f9abb..7110becb4 100644
--- a/debian/patches/0011-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
+++ b/debian/patches/0009-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
@@ -51,10 +51,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c
-index ed0b8d7a1..f3acc49d0 100644
+index 5fcf0991de6623b44a5af07ad313b59017ae4484..b5d0735cd089b3286b0740e5691d3fcda54a44cb 100644
--- a/cmd/zpool/zpool_main.c
+++ b/cmd/zpool/zpool_main.c
-@@ -2663,7 +2663,8 @@ print_status_config(zpool_handle_t *zhp, status_cbdata_t *cb, const char *name,
+@@ -3116,7 +3116,8 @@ print_status_config(zpool_handle_t *zhp, status_cbdata_t *cb, const char *name,
if (vs->vs_scan_removing != 0) {
(void) printf(gettext(" (removing)"));
diff --git a/debian/patches/0010-Fix-nfs_truncate_shares-without-etc-exports.d.patch b/debian/patches/0010-Fix-nfs_truncate_shares-without-etc-exports.d.patch
deleted file mode 100644
index 3fa72205d..000000000
--- a/debian/patches/0010-Fix-nfs_truncate_shares-without-etc-exports.d.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: siv0 <github at nomore.at>
-Date: Tue, 31 Oct 2023 21:57:54 +0100
-Subject: [PATCH] Fix nfs_truncate_shares without /etc/exports.d
-
-Calling nfs_reset_shares on Linux prints a warning:
-`failed to lock /etc/exports.d/zfs.exports.lock: No such file or
-directory`
-when /etc/exports.d does not exist. The directory gets created, when a
-filesystem is actually exported through nfs_toggle_share and
-nfs_init_share. The truncation of /etc/exports.d/zfs.exports happens
-unconditionally when calling `zfs mount -a` (via zfs_do_mount and
-share_mount in `cmd/zfs/zfs_main.c`).
-
-Fixing the issue only in the Linux part, since the exports file on
-freebsd is in `/etc/zfs/`, which seems present on 2 FreeBSD systems I
-have access to (through `/etc/zfs/compatibility.d/`), while a Debian
-box does not have the directory even if `/usr/sbin/exportfs` is
-present through the `nfs-kernel-server` package.
-
-The code for exports_available is copied from nfs_available above.
-
-Fixes: ede037cda73675f42b1452187e8dd3438fafc220
-("Make zfs-share service resilient to stale exports")
-
-Reviewed-by: Brian Atkinson <batkinson at lanl.gov>
-Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
-Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
-Closes #15369
-Closes #15468
-(cherry picked from commit 41e55b476bcfc90f1ad81c02c5375367fdace9e9)
-Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
-Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
----
- lib/libshare/os/linux/nfs.c | 18 ++++++++++++++++++
- 1 file changed, 18 insertions(+)
-
-diff --git a/lib/libshare/os/linux/nfs.c b/lib/libshare/os/linux/nfs.c
-index 004946b0c..3dce81840 100644
---- a/lib/libshare/os/linux/nfs.c
-+++ b/lib/libshare/os/linux/nfs.c
-@@ -47,6 +47,7 @@
-
-
- static boolean_t nfs_available(void);
-+static boolean_t exports_available(void);
-
- typedef int (*nfs_shareopt_callback_t)(const char *opt, const char *value,
- void *cookie);
-@@ -539,6 +540,8 @@ nfs_commit_shares(void)
- static void
- nfs_truncate_shares(void)
- {
-+ if (!exports_available())
-+ return;
- nfs_reset_shares(ZFS_EXPORTS_LOCK, ZFS_EXPORTS_FILE);
- }
-
-@@ -566,3 +569,18 @@ nfs_available(void)
-
- return (avail == 1);
- }
-+
-+static boolean_t
-+exports_available(void)
-+{
-+ static int avail;
-+
-+ if (!avail) {
-+ if (access(ZFS_EXPORTS_DIR, F_OK) != 0)
-+ avail = -1;
-+ else
-+ avail = 1;
-+ }
-+
-+ return (avail == 1);
-+}
diff --git a/debian/patches/0012-linux-zvols-correctly-detect-flush-requests.patch b/debian/patches/0010-linux-zvols-correctly-detect-flush-requests-17131.patch
similarity index 88%
rename from debian/patches/0012-linux-zvols-correctly-detect-flush-requests.patch
rename to debian/patches/0010-linux-zvols-correctly-detect-flush-requests-17131.patch
index 25159efd1..b38acae03 100644
--- a/debian/patches/0012-linux-zvols-correctly-detect-flush-requests.patch
+++ b/debian/patches/0010-linux-zvols-correctly-detect-flush-requests-17131.patch
@@ -1,7 +1,7 @@
-From 4482e91446c35d4194be49b715c6bb8a3ad9ba18 Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Fabian-Gruenbichler <f.gruenbichler at proxmox.com>
Date: Wed, 12 Mar 2025 22:39:01 +0100
-Subject: [PATCH 12/12] linux: zvols: correctly detect flush requests (#17131)
+Subject: [PATCH] linux: zvols: correctly detect flush requests (#17131)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@@ -46,10 +46,10 @@ Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/os/linux/kernel/linux/blkdev_compat.h b/include/os/linux/kernel/linux/blkdev_compat.h
-index c0d377074..26e7b0b2a 100644
+index d96708c600ac6f8b07354286a0745dcdcf84cccb..9af496e8777b389733745ce37655c1ee1de67633 100644
--- a/include/os/linux/kernel/linux/blkdev_compat.h
+++ b/include/os/linux/kernel/linux/blkdev_compat.h
-@@ -356,7 +356,7 @@ bio_set_flush(struct bio *bio)
+@@ -383,7 +383,7 @@ bio_set_flush(struct bio *bio)
static inline boolean_t
bio_is_flush(struct bio *bio)
{
@@ -58,6 +58,3 @@ index c0d377074..26e7b0b2a 100644
}
/*
---
-2.39.5
-
diff --git a/debian/patches/0013-contrib-initramfs-use-LVM-autoactivation-for-activat.patch b/debian/patches/0011-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
similarity index 92%
rename from debian/patches/0013-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
rename to debian/patches/0011-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
index e51096d0a..752242791 100644
--- a/debian/patches/0013-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
+++ b/debian/patches/0011-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
@@ -1,4 +1,4 @@
-From 3726c500deffadce1012b5c5ccf19515bb58bdbb Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Friedrich Weber <f.weber at proxmox.com>
Date: Thu, 6 Mar 2025 11:44:36 +0100
Subject: [PATCH] contrib/initramfs: use LVM autoactivation for activating VGs
@@ -29,7 +29,7 @@ Signed-off-by: Friedrich Weber <f.weber at proxmox.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/contrib/initramfs/scripts/local-top/zfs b/contrib/initramfs/scripts/local-top/zfs
-index 6b80e9f43..fc455077e 100755
+index 6b80e9f43607215a377adac12936ddfa463e1d79..fc455077ec94fbd14343023ace2d7c2c7ba71159 100755
--- a/contrib/initramfs/scripts/local-top/zfs
+++ b/contrib/initramfs/scripts/local-top/zfs
@@ -41,9 +41,9 @@ activate_vg()
@@ -44,6 +44,3 @@ index 6b80e9f43..fc455077e 100755
return $?
}
---
-2.39.5
-
diff --git a/debian/patches/0014-Linux-6.14-dops-d_revalidate-now-takes-four-args.patch b/debian/patches/0014-Linux-6.14-dops-d_revalidate-now-takes-four-args.patch
deleted file mode 100644
index ccf81a2c9..000000000
--- a/debian/patches/0014-Linux-6.14-dops-d_revalidate-now-takes-four-args.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <robn at despairlabs.com>
-Date: Wed, 5 Feb 2025 17:14:20 +1100
-Subject: [PATCH] Linux 6.14: dops->d_revalidate now takes four args
-
-This is a convenience for filesystems that need the inode of their
-parent or their own name, as its often complicated to get that
-information. We don't need those things, so this is just detecting which
-prototype is expected and adjusting our callback to match.
-
-Sponsored-by: https://despairlabs.com/sponsor/
-Signed-off-by: Rob Norris <robn at despairlabs.com>
-Reviewed-by: Alexander Motin <mav at FreeBSD.org>
-Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
-(cherry picked from commit 7ef6b70e960a7cc504242952699057f0ee616449)
-Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
----
- config/kernel-automount.m4 | 41 ++++++++++++++++++++++++++++++--
- module/os/linux/zfs/zpl_ctldir.c | 6 +++++
- 2 files changed, 45 insertions(+), 2 deletions(-)
-
-diff --git a/config/kernel-automount.m4 b/config/kernel-automount.m4
-index 52f1931b7..b5f1392d0 100644
---- a/config/kernel-automount.m4
-+++ b/config/kernel-automount.m4
-@@ -5,7 +5,7 @@ dnl # solution to handling automounts. Prior to this cifs/nfs clients
- dnl # which required automount support would abuse the follow_link()
- dnl # operation on directories for this purpose.
- dnl #
--AC_DEFUN([ZFS_AC_KERNEL_SRC_AUTOMOUNT], [
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_D_AUTOMOUNT], [
- ZFS_LINUX_TEST_SRC([dentry_operations_d_automount], [
- #include <linux/dcache.h>
- static struct vfsmount *d_automount(struct path *p) { return NULL; }
-@@ -15,7 +15,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_AUTOMOUNT], [
- ])
- ])
-
--AC_DEFUN([ZFS_AC_KERNEL_AUTOMOUNT], [
-+AC_DEFUN([ZFS_AC_KERNEL_D_AUTOMOUNT], [
- AC_MSG_CHECKING([whether dops->d_automount() exists])
- ZFS_LINUX_TEST_RESULT([dentry_operations_d_automount], [
- AC_MSG_RESULT(yes)
-@@ -23,3 +23,40 @@ AC_DEFUN([ZFS_AC_KERNEL_AUTOMOUNT], [
- ZFS_LINUX_TEST_ERROR([dops->d_automount()])
- ])
- ])
-+
-+dnl #
-+dnl # 6.14 API change
-+dnl # dops->d_revalidate now has four args.
-+dnl #
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_D_REVALIDATE_4ARGS], [
-+ ZFS_LINUX_TEST_SRC([dentry_operations_d_revalidate_4args], [
-+ #include <linux/dcache.h>
-+ static int d_revalidate(struct inode *dir,
-+ const struct qstr *name, struct dentry *dentry,
-+ unsigned int fl) { return 0; }
-+ struct dentry_operations dops __attribute__ ((unused)) = {
-+ .d_revalidate = d_revalidate,
-+ };
-+ ])
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_D_REVALIDATE_4ARGS], [
-+ AC_MSG_CHECKING([whether dops->d_revalidate() takes 4 args])
-+ ZFS_LINUX_TEST_RESULT([dentry_operations_d_revalidate_4args], [
-+ AC_MSG_RESULT(yes)
-+ AC_DEFINE(HAVE_D_REVALIDATE_4ARGS, 1,
-+ [dops->d_revalidate() takes 4 args])
-+ ],[
-+ AC_MSG_RESULT(no)
-+ ])
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_SRC_AUTOMOUNT], [
-+ ZFS_AC_KERNEL_SRC_D_AUTOMOUNT
-+ ZFS_AC_KERNEL_SRC_D_REVALIDATE_4ARGS
-+])
-+
-+AC_DEFUN([ZFS_AC_KERNEL_AUTOMOUNT], [
-+ ZFS_AC_KERNEL_D_AUTOMOUNT
-+ ZFS_AC_KERNEL_D_REVALIDATE_4ARGS
-+])
-diff --git a/module/os/linux/zfs/zpl_ctldir.c b/module/os/linux/zfs/zpl_ctldir.c
-index 56a30be51..d6a755af6 100644
---- a/module/os/linux/zfs/zpl_ctldir.c
-+++ b/module/os/linux/zfs/zpl_ctldir.c
-@@ -185,8 +185,14 @@ zpl_snapdir_automount(struct path *path)
- * as of the 3.18 kernel revaliding the mountpoint dentry will result in
- * the snapshot being immediately unmounted.
- */
-+#ifdef HAVE_D_REVALIDATE_4ARGS
-+static int
-+zpl_snapdir_revalidate(struct inode *dir, const struct qstr *name,
-+ struct dentry *dentry, unsigned int flags)
-+#else
- static int
- zpl_snapdir_revalidate(struct dentry *dentry, unsigned int flags)
-+#endif
- {
- return (!!dentry->d_inode);
- }
diff --git a/debian/patches/0015-Linux-6.14-BLK_MQ_F_SHOULD_MERGE-was-removed.patch b/debian/patches/0015-Linux-6.14-BLK_MQ_F_SHOULD_MERGE-was-removed.patch
deleted file mode 100644
index c99461c32..000000000
--- a/debian/patches/0015-Linux-6.14-BLK_MQ_F_SHOULD_MERGE-was-removed.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Rob Norris <robn at despairlabs.com>
-Date: Wed, 5 Feb 2025 17:52:45 +1100
-Subject: [PATCH] Linux 6.14: BLK_MQ_F_SHOULD_MERGE was removed
-
-According to the upstream change, all callers set it, and all block
-devices either honoured it or ignored it, so removing it entirely allows
-a bunch of handling for the "unset" case to be removed, and it becomes
-effectively implied.
-
-We follow suit, and keep setting it for older kernels.
-
-Sponsored-by: https://despairlabs.com/sponsor/
-Signed-off-by: Rob Norris <robn at despairlabs.com>
-Reviewed-by: Alexander Motin <mav at FreeBSD.org>
-Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
-(cherry picked from commit 2ca91ba3cf209c6f1db42247ff2ca3f9ce4f2d4d)
-Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
----
- module/os/linux/zfs/zvol_os.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/module/os/linux/zfs/zvol_os.c b/module/os/linux/zfs/zvol_os.c
-index 01f812b8e..4c61ae232 100644
---- a/module/os/linux/zfs/zvol_os.c
-+++ b/module/os/linux/zfs/zvol_os.c
-@@ -202,7 +202,16 @@ static int zvol_blk_mq_alloc_tag_set(zvol_state_t *zv)
- * We need BLK_MQ_F_BLOCKING here since we do blocking calls in
- * zvol_request_impl()
- */
-- zso->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING;
-+ zso->tag_set.flags = BLK_MQ_F_BLOCKING;
-+
-+#ifdef BLK_MQ_F_SHOULD_MERGE
-+ /*
-+ * Linux 6.14 removed BLK_MQ_F_SHOULD_MERGE and made it implicit.
-+ * For older kernels, we set it.
-+ */
-+ zso->tag_set.flags |= BLK_MQ_F_SHOULD_MERGE;
-+#endif
-+
- zso->tag_set.driver_data = zv;
-
- return (blk_mq_alloc_tag_set(&zso->tag_set));
diff --git a/debian/patches/series b/debian/patches/series
index 7914934db..e3103f9b4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -6,10 +6,6 @@
0006-dont-symlink-zed-scripts.patch
0007-Add-systemd-unit-for-importing-specific-pools.patch
0008-Patch-move-manpage-arcstat-1-to-arcstat-8.patch
-0009-arc-stat-summary-guard-access-to-freshly-introduced-.patch
-0010-Fix-nfs_truncate_shares-without-etc-exports.d.patch
-0011-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
-0012-linux-zvols-correctly-detect-flush-requests.patch
-0013-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
-0014-Linux-6.14-dops-d_revalidate-now-takes-four-args.patch
-0015-Linux-6.14-BLK_MQ_F_SHOULD_MERGE-was-removed.patch
+0009-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
+0010-linux-zvols-correctly-detect-flush-requests-17131.patch
+0011-contrib-initramfs-use-LVM-autoactivation-for-activat.patch
diff --git a/upstream b/upstream
index e269af1b3..f3e4043a3 160000
--- a/upstream
+++ b/upstream
@@ -1 +1 @@
-Subproject commit e269af1b3c7b1b1c000d05f147a2f75e5e72e0ca
+Subproject commit f3e4043a36942e67ccbc05318479a07d242fc611
--
2.39.5
More information about the pve-devel
mailing list