The branch releng/14.1 has been updated by mm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=78c9d8f1ce655f10368c06272f5e320b8a263612

commit 78c9d8f1ce655f10368c06272f5e320b8a263612
Author:     Martin Matuska <m...@freebsd.org>
AuthorDate: 2024-05-03 21:51:01 +0000
Commit:     Martin Matuska <m...@freebsd.org>
CommitDate: 2024-05-08 15:24:29 +0000

    zfs: merge openzfs/zfs@256659204 (zfs-2.2-release) into stable/14
    
    OpenZFS release 2.2.4
    
    Notable upstream pull request merges:
     #15076 fdd97e009 Refactor dmu_prefetch()
     #15225 5972bb856 Use ASSERT0P() to check that a pointer is NULL
     #15381 7ea833100 ZIL: Detect single-threaded workloads
     #15515 8b1a132de ZIO: Optimize zio_flush()
     #15225 d6da6cbd7 Clean up existing VERIFY*() macros
     #15225 5dda8c091 Add VERIFY0P() and ASSERT0P() macros
     #15436 61f3638a3 Add prefetch property
     #15509 6f323353d Add ashift validation when adding devices to a pool
     #15539 ea3f7c12a Extend import_progress kstat with a notes field
     #15635 25ea8ce94 ZIL: Improve next log block size prediction
     #15784 16c223eec Do no use .cfi_negate_ra_state within the assembly on
                      Arm64
     #15839 706307445 vdev probe to slow disk can stall mmp write checker
     #15879 86b39b41a zpool: Fix locale-specific time
     #15927 fa5de0c5c Update resume token at object receive
     #15941 fdd8c0aea BRT: Skip duplicate BRT prefetches
     #15942 889152ce4 Give better message from 'zpool get' with invalid pool
                      name
     #15950 3e91a9c52 BRT: Skip getting length in brt_entry_lookup()
     #15951 19bf54b76 ZAP: Massively switch to _by_dnode() interfaces
     #15954 f7c1db636 BRT: Change brt_pending_tree sorting order
     #15955 457e62d7c BRT: Relax brt_pending_apply() locking
     #15967 c94f73007 BRT: Make BRT block sizes configurable
     #15976 dced953b6 ZAP: Some cleanups/micro-optimizations
     #15983 531572b59 Fix panics when truncating/deleting files
     #15992 5fc134ff2 zvol: use multiple taskq
     #16007 2ea370a4e BRT: Fix holes cloning
     #16008 67995229a zpool: Fix option string, adding -e and fixing order
     #16015 8a5604713 Add support for zfs mount -R <filesystem>
     #16022 026fe7964 Speculative prefetch for reordered requests
     #16040 575872cc3 L2ARC: Relax locking during write
     #16042 d5fb6abd3 Improve dbuf_read() error reporting
     #16051 5d859a2e2 xdr: header cleanup
     #16052 602b5dca7 Fix read errors race after block cloning
     #16057 97d7228f4 Remove db_state DB_NOFILL checks from syncing context
     #16072 f4ce02ae4 Small fix to prefetch ranges aggregation
     #16074 97889c037 return NULL at end of send_progress_thread
     #16086 7aaf6ce9d Add the BTI elf note to the AArch64 SHA2 assembly
     #16094 4d17e200d Add zfetch stats in arcstats
     #16128 3d4d61988 Fix updating the zvol_htable when renaming a zvol
     #16141 b3b37b84e Fix arcstats for FreeBSD after zfetch support
    
    Obtained from:  OpenZFS
    OpenZFS commit: 2566592045780e7be7afc899c2496b1ae3af4f4d
    OpenZFS tag:    zfs-2.2.4
    Approved by:    re (cperciva)
    
    (cherry picked from commit 9a5f0cb5b639f8e0435103d44b17eb8a352af990)
---
 cddl/lib/libnvpair/Makefile                        |   2 -
 sys/contrib/openzfs/.mailmap                       |  18 +
 sys/contrib/openzfs/AUTHORS                        |  35 +
 sys/contrib/openzfs/META                           |   4 +-
 sys/contrib/openzfs/cmd/arc_summary                |  11 +-
 sys/contrib/openzfs/cmd/arcstat.in                 |  57 +-
 sys/contrib/openzfs/cmd/zed/agents/fmd_api.c       |  57 +-
 sys/contrib/openzfs/cmd/zed/agents/fmd_api.h       |   3 +-
 sys/contrib/openzfs/cmd/zed/agents/fmd_serd.c      |   3 +-
 sys/contrib/openzfs/cmd/zed/agents/fmd_serd.h      |   2 +-
 sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c | 143 +++-
 sys/contrib/openzfs/cmd/zed/agents/zfs_retire.c    |   3 +
 sys/contrib/openzfs/cmd/zfs/zfs_main.c             |  75 +-
 sys/contrib/openzfs/cmd/zinject/zinject.c          |  16 +
 .../openzfs/cmd/zpool/os/linux/zpool_vdev_os.c     |   4 +-
 sys/contrib/openzfs/cmd/zpool/zpool_main.c         | 146 ++--
 sys/contrib/openzfs/cmd/ztest.c                    |   8 +-
 sys/contrib/openzfs/config/Substfiles.am           |   3 +-
 sys/contrib/openzfs/config/always-pyzfs.m4         |   9 +-
 sys/contrib/openzfs/config/ax_python_devel.m4      | 341 +++++---
 sys/contrib/openzfs/config/kernel-blk-queue.m4     |  15 +
 sys/contrib/openzfs/config/kernel-blkdev.m4        | 159 +++-
 sys/contrib/openzfs/config/kernel-filemap.m4       |   1 +
 .../openzfs/config/kernel-make-request-fn.m4       |  33 +
 sys/contrib/openzfs/config/kernel-mm-page-size.m4  |  17 +
 .../openzfs/config/kernel-vfs-file_range.m4        |  27 +
 sys/contrib/openzfs/config/kernel.m4               |   4 +
 sys/contrib/openzfs/config/zfs-build.m4            |   8 +-
 sys/contrib/openzfs/contrib/debian/control         |   2 +-
 sys/contrib/openzfs/etc/init.d/README.md           |   6 +-
 sys/contrib/openzfs/etc/init.d/zfs-import.in       |   2 +-
 sys/contrib/openzfs/etc/init.d/zfs-load-key.in     |   2 +-
 sys/contrib/openzfs/etc/init.d/zfs-mount.in        |   2 +-
 sys/contrib/openzfs/etc/init.d/zfs-share.in        |   3 +-
 sys/contrib/openzfs/etc/init.d/zfs-zed.in          |   3 +-
 sys/contrib/openzfs/include/libzfs.h               |   6 +-
 sys/contrib/openzfs/include/os/freebsd/Makefile.am |   4 +-
 .../openzfs/include/os/freebsd/spl/rpc/xdr.h       |  71 --
 .../openzfs/include/os/freebsd/spl/sys/debug.h     |  40 +-
 sys/contrib/openzfs/include/os/linux/Makefile.am   |   2 +
 .../include/os/linux/kernel/linux/blkdev_compat.h  |   6 +-
 .../include/os/linux/kernel/linux/mm_compat.h      |  36 +
 .../include/os/linux/kernel/linux/mod_compat.h     |   1 +
 .../openzfs/include/os/linux/spl/rpc/types.h       |  30 +
 sys/contrib/openzfs/include/os/linux/spl/rpc/xdr.h |   2 -
 .../openzfs/include/os/linux/spl/sys/debug.h       |  38 +-
 .../openzfs/include/os/linux/spl/sys/taskq.h       |   2 +-
 .../openzfs/include/os/linux/zfs/sys/trace_zil.h   |  14 +-
 sys/contrib/openzfs/include/sys/abd.h              |   9 +
 sys/contrib/openzfs/include/sys/abd_impl.h         |  26 +-
 sys/contrib/openzfs/include/sys/dmu.h              |   5 +-
 sys/contrib/openzfs/include/sys/dmu_objset.h       |   1 +
 sys/contrib/openzfs/include/sys/dmu_zfetch.h       |  16 +-
 sys/contrib/openzfs/include/sys/fm/fs/zfs.h        |   2 +
 sys/contrib/openzfs/include/sys/fs/zfs.h           |  14 +-
 sys/contrib/openzfs/include/sys/multilist.h        |   5 +-
 sys/contrib/openzfs/include/sys/spa.h              |  12 +-
 sys/contrib/openzfs/include/sys/uberblock_impl.h   |  16 +-
 sys/contrib/openzfs/include/sys/vdev_impl.h        |   7 +-
 sys/contrib/openzfs/include/sys/zap.h              |   8 +
 sys/contrib/openzfs/include/sys/zap_impl.h         |   1 +
 sys/contrib/openzfs/include/sys/zap_leaf.h         |  10 +-
 sys/contrib/openzfs/include/sys/zil_impl.h         |  10 +-
 sys/contrib/openzfs/lib/libspl/include/assert.h    |  15 +-
 sys/contrib/openzfs/lib/libuutil/uu_list.c         |  14 +-
 sys/contrib/openzfs/lib/libzfs/libzfs.abi          |  84 +-
 sys/contrib/openzfs/lib/libzfs/libzfs_pool.c       |  13 +-
 sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c   |   1 +
 sys/contrib/openzfs/lib/libzfs/libzfs_util.c       |  12 +-
 .../openzfs/lib/libzfs/os/linux/libzfs_pool_os.c   |  10 +
 sys/contrib/openzfs/man/Makefile.am                |   4 +-
 sys/contrib/openzfs/man/man4/spl.4                 |  18 +-
 sys/contrib/openzfs/man/man4/zfs.4                 |  83 +-
 sys/contrib/openzfs/man/man7/vdevprops.7           |  12 +-
 sys/contrib/openzfs/man/man7/zfsprops.7            |  17 +
 sys/contrib/openzfs/man/man7/zpoolconcepts.7       |   4 +-
 sys/contrib/openzfs/man/man8/zfs-mount.8           |   6 +-
 sys/contrib/openzfs/man/man8/zinject.8             |   1 +
 sys/contrib/openzfs/man/man8/zpool-add.8           |  18 +-
 sys/contrib/openzfs/man/man8/zpool-clear.8         |   7 +-
 sys/contrib/openzfs/man/man8/zpool-status.8        |  18 +-
 .../icp/asm-aarch64/blake3/b3_aarch64_sse2.S       |  14 +-
 .../icp/asm-aarch64/blake3/b3_aarch64_sse41.S      |  12 +-
 .../module/icp/asm-aarch64/sha2/sha256-armv8.S     |  10 +
 .../module/icp/asm-aarch64/sha2/sha512-armv8.S     |  10 +
 sys/contrib/openzfs/module/nvpair/nvpair.c         |   1 +
 sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c |   4 +-
 .../openzfs/module/os/freebsd/zfs/zfs_vnops_os.c   |   4 +-
 .../openzfs/module/os/freebsd/zfs/zvol_os.c        |   2 +-
 .../openzfs/module/os/linux/spl/spl-taskq.c        |  85 +-
 sys/contrib/openzfs/module/os/linux/spl/spl-xdr.c  |   1 +
 sys/contrib/openzfs/module/os/linux/zfs/abd_os.c   | 123 ++-
 .../openzfs/module/os/linux/zfs/vdev_disk.c        | 913 ++++++++++++++++-----
 .../openzfs/module/os/linux/zfs/zfs_vnops_os.c     |  12 +-
 sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c |   8 +-
 .../openzfs/module/os/linux/zfs/zpl_file_range.c   |  16 +-
 sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c  | 140 +++-
 sys/contrib/openzfs/module/zcommon/zfs_prop.c      |  11 +
 sys/contrib/openzfs/module/zcommon/zpool_prop.c    |   6 +
 sys/contrib/openzfs/module/zfs/abd.c               |  42 +
 sys/contrib/openzfs/module/zfs/arc.c               | 179 ++--
 sys/contrib/openzfs/module/zfs/brt.c               | 147 +---
 sys/contrib/openzfs/module/zfs/dbuf.c              | 160 ++--
 sys/contrib/openzfs/module/zfs/dmu.c               | 149 ++--
 sys/contrib/openzfs/module/zfs/dmu_objset.c        |  29 +-
 sys/contrib/openzfs/module/zfs/dmu_recv.c          |  17 +-
 sys/contrib/openzfs/module/zfs/dmu_zfetch.c        | 296 +++++--
 sys/contrib/openzfs/module/zfs/dsl_deadlist.c      |   8 +-
 sys/contrib/openzfs/module/zfs/metaslab.c          |   8 +-
 sys/contrib/openzfs/module/zfs/mmp.c               |   5 +-
 sys/contrib/openzfs/module/zfs/multilist.c         |  26 +-
 sys/contrib/openzfs/module/zfs/spa.c               | 149 +++-
 sys/contrib/openzfs/module/zfs/spa_log_spacemap.c  |  16 +-
 sys/contrib/openzfs/module/zfs/spa_misc.c          |  74 +-
 sys/contrib/openzfs/module/zfs/txg.c               |   9 +
 sys/contrib/openzfs/module/zfs/vdev.c              |  52 +-
 sys/contrib/openzfs/module/zfs/vdev_label.c        |   4 +-
 sys/contrib/openzfs/module/zfs/vdev_raidz.c        |   5 +-
 sys/contrib/openzfs/module/zfs/zap.c               |  43 +-
 sys/contrib/openzfs/module/zfs/zap_leaf.c          |  77 +-
 sys/contrib/openzfs/module/zfs/zap_micro.c         | 206 +++--
 sys/contrib/openzfs/module/zfs/zfs_fm.c            |  26 +
 sys/contrib/openzfs/module/zfs/zfs_ioctl.c         |  13 +-
 sys/contrib/openzfs/module/zfs/zfs_vnops.c         |   6 +-
 sys/contrib/openzfs/module/zfs/zil.c               | 352 +++++---
 sys/contrib/openzfs/module/zfs/zio.c               |  42 +-
 sys/contrib/openzfs/module/zfs/zio_inject.c        |   6 +
 sys/contrib/openzfs/module/zfs/zvol.c              |   2 +-
 sys/contrib/openzfs/rpm/redhat/zfs-kmod.spec.in    |   2 +-
 sys/contrib/openzfs/tests/runfiles/common.run      |   8 +-
 sys/contrib/openzfs/tests/runfiles/linux.run       |   5 +-
 sys/contrib/openzfs/tests/runfiles/sanity.run      |   3 +-
 .../openzfs/tests/zfs-tests/tests/Makefile.am      |   5 +
 .../tests/functional/bclone/bclone_common.kshlib   |  47 +-
 .../functional/bclone/bclone_corner_cases.kshlib   |  20 +-
 .../functional/cli_root/zfs_mount/zfs_mount.cfg    |   1 +
 .../cli_root/zfs_mount/zfs_mount_recursive.ksh     | 146 ++++
 .../functional/cli_root/zpool_add/add-o_ashift.ksh |  17 +-
 .../cli_root/zpool_add/add_prop_ashift.ksh         |  16 +-
 .../zpool_add/zpool_add--allow-ashift-mismatch.ksh |   0
 .../cli_root/zpool_add/zpool_add_002_pos.ksh       |  11 +
 .../cli_root/zpool_add/zpool_add_004_pos.ksh       |   2 +-
 .../cli_root/zpool_add/zpool_add_005_pos.ksh       |   2 +
 .../cli_root/zpool_add/zpool_add_009_neg.ksh       |   2 +
 .../cli_root/zpool_add/zpool_add_010_pos.ksh       |   2 +-
 .../functional/cli_root/zpool_get/vdev_get.cfg     |   2 +
 .../cli_root/zpool_import/zpool_import_status.ksh  | 132 +++
 .../tests/functional/cp_files/cp_files_002_pos.ksh |   6 +-
 .../zfs-tests/tests/functional/events/cleanup.ksh  |   4 +-
 .../tests/functional/events/zed_slow_io.ksh        | 205 +++++
 .../functional/events/zed_slow_io_many_vdevs.ksh   | 177 ++++
 .../zfs-tests/tests/functional/fault/cleanup.ksh   |   1 +
 .../zfs-tests/tests/functional/fault/setup.ksh     |   1 +
 .../tests/functional/mmp/mmp_write_slow_disk.ksh   |  97 +++
 .../user_namespace/user_namespace_004.ksh          |   4 +-
 sys/contrib/openzfs/udev/zvol_id.c                 |   9 +-
 sys/modules/zfs/zfs_config.h                       |  50 +-
 sys/modules/zfs/zfs_gitrev.h                       |   2 +-
 158 files changed, 4808 insertions(+), 1646 deletions(-)

diff --git a/cddl/lib/libnvpair/Makefile b/cddl/lib/libnvpair/Makefile
index fb80d7c22ea5..a93ffcbd00de 100644
--- a/cddl/lib/libnvpair/Makefile
+++ b/cddl/lib/libnvpair/Makefile
@@ -27,6 +27,4 @@ CFLAGS+= -I${SRCTOP}/cddl/compat/opensolaris/include
 CFLAGS+= -include 
${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompile.h
 CFLAGS+= -DHAVE_ISSETUGID  -DHAVE_CONFIG_H -DHAVE_XDR_BYTESREC
 
-
-CFLAGS.nvpair.c+= -UHAVE_RPC_TYPES
 .include <bsd.lib.mk>
diff --git a/sys/contrib/openzfs/.mailmap b/sys/contrib/openzfs/.mailmap
index 46ef016b93f8..32bdb5209613 100644
--- a/sys/contrib/openzfs/.mailmap
+++ b/sys/contrib/openzfs/.mailmap
@@ -30,6 +30,7 @@ Andreas Dilger <adil...@dilger.ca>
 Andrew Walker <awal...@ixsystems.com>
 Benedikt Neuffer <git...@itfriend.de>
 Chengfei Zhu <chengfeix....@intel.com>
+ChenHao Lu <18302010...@fudan.edu.cn>
 Chris Lindee <chris.lindee+git...@gmail.com>
 Colm Buckley <c...@tuatha.org>
 Crag Wang <crag0...@gmail.com>
@@ -43,6 +44,7 @@ Glenn Washburn <developm...@efficientek.com>
 Gordan Bobic <gordan.bo...@gmail.com>
 Gregory Bartholomew <gregory.lee.bartholo...@gmail.com>
 hedong zhang <h_d_zh...@163.com>
+Ilkka Sovanto <git...@ilkka.kapsi.fi>
 InsanePrawn <insane.pra...@gmail.com>
 Jason Cohen <jwittlinco...@gmail.com>
 Jason Harmening <jason.harmen...@gmail.com>
@@ -57,6 +59,7 @@ KernelOfTruth <kerneloftr...@gmail.com>
 Liu Hua <liu.hua...@zte.com.cn>
 Liu Qing <win...@gmail.com>
 loli10K <ezomori.noz...@gmail.com>
+Mart Frauenlob <allk...@fastest.cc>
 Matthias Blankertz <matth...@blankertz.org>
 Michael Gmelin <gre...@freebsd.org>
 Olivier Mazouffre <olivier.mazouf...@ims-bordeaux.fr>
@@ -73,6 +76,9 @@ WHR <msl0000023...@gmail.com>
 Yanping Gao <yanping....@xtaotech.com>
 Youzhong Yang <youzh...@gmail.com>
 
+# Signed-off-by: overriding Author:
+Yuxin Wang <yuxinwang9...@gmail.com> <bi11gates9...@gmail.com>
+
 # Commits from strange places, long ago
 Brian Behlendorf <behlendo...@llnl.gov> 
<behlendo@7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c>
 Brian Behlendorf <behlendo...@llnl.gov> <behlendo@fedora-17-amd64.(none)>
@@ -102,12 +108,15 @@ Brandon Thetford <bran...@dodecatec.com> 
<dodexahed...@users.noreply.github.com>
 buzzingwires <buzzingwi...@outlook.com> 
<131118055+buzzingwi...@users.noreply.github.com>
 Cedric Maunoury <cedric.mauno...@gmail.com> 
<38213715+cedricmauno...@users.noreply.github.com>
 Charles Suh <charles....@gmail.com> <charles...@users.noreply.github.com>
+Chris Peredun <chris.pere...@ixsystems.com> 
<126915832+chrispere...@users.noreply.github.com>
 Dacian Reece-Stremtan <dacianstrem...@gmail.com> 
<35844628+dacianstrem...@users.noreply.github.com>
 Damian Szuberski <szuberskidam...@gmail.com> 
<30863496+szube...@users.noreply.github.com>
 Daniel Hiepler <d-...@coderdu.de> <32984777+hee...@users.noreply.github.com>
 Daniel Kobras <d.kob...@science-computing.de> 
<sckob...@users.noreply.github.com>
 Daniel Reichelt <hack...@nachtgeist.net> <nachtge...@users.noreply.github.com>
 David Quigley <david.quig...@intel.com> <dpqu...@users.noreply.github.com>
+Dennis R. Friedrichsen <dennis.r.friedrich...@gmail.com> 
<31087738+dennisfriedrich...@users.noreply.github.com>
+Dex Wood <slash2...@gmail.com> <slash2...@users.noreply.github.com>
 DHE <g...@dehacked.net> <dehac...@users.noreply.github.com>
 Dmitri John Ledkov <dimitri.led...@canonical.com> 
<19779+x...@users.noreply.github.com>
 Dries Michiels <driesm.michi...@gmail.com> 
<32487486+drie...@users.noreply.github.com>
@@ -128,6 +137,7 @@ Harry Mallon <hjmal...@gmail.com> 
<1816667+hjmal...@users.noreply.github.com>
 Hiếu Lê <leorize+...@disroot.org> <alav...@users.noreply.github.com>
 Jake Howard <g...@theorangeone.net> <realorange...@users.noreply.github.com>
 James Cowgill <james.cowg...@mips.com> <jcowg...@users.noreply.github.com>
+Jaron Kent-Dobias <ja...@kent-dobias.com> <kentdob...@users.noreply.github.com>
 Jason King <jason.k...@joyent.com> <jasonbk...@users.noreply.github.com>
 Jeff Dike <jd...@akamai.com> <52420226+jd...@users.noreply.github.com>
 Jitendra Patidar <jitendra.pati...@nutanix.com> 
<53164267+jsa...@users.noreply.github.com>
@@ -137,7 +147,9 @@ John L. Hammond <john.hamm...@intel.com> 
<35266395+jhammond-intel@users.noreply.
 John-Mark Gurney <j...@funkthat.com> <jmgur...@users.noreply.github.com>
 John Ramsden <johnrams...@riseup.net> <johnrams...@users.noreply.github.com>
 Jonathon Fernyhough <jonat...@m2x.dev> 
<559369+jonath...@users.noreply.github.com>
+Jose Luis Duran <jldu...@gmail.com> <jldu...@users.noreply.github.com>
 Justin Hibbits <chmeeed...@gmail.com> <chmeeed...@users.noreply.github.com>
+Kevin Greene <kevin.gre...@delphix.com> 
<104801862+kxgre...@users.noreply.github.com>
 Kevin Jin <lostking2...@hotmail.com> 
<33590050+jxdk...@users.noreply.github.com>
 Kevin P. Fleming <ke...@km6g.us> <kpflem...@users.noreply.github.com>
 Krzysztof Piecuch <piec...@kpiecuch.pl> 
<3964215+pikrzysz...@users.noreply.github.com>
@@ -148,9 +160,11 @@ Lorenz Hüdepohl <d...@stellardeath.org> 
<lhuedep...@users.noreply.github.com>
 Luís Henriques <hen...@camandro.org> 
<73643340+lumi...@users.noreply.github.com>
 Marcin Skarbek <g...@skarbek.name> <mskar...@users.noreply.github.com>
 Matt Fiddaman <git...@m.fiddaman.uk> 
<81489167+matt-f...@users.noreply.github.com>
+Maxim Filimonov <c...@bein.link> <part1z...@users.noreply.github.com>
 Max Zettlmeißl <m...@zettlmeissl.de> <6818198+m...@users.noreply.github.com>
 Michael Niewöhner <f...@mniewoehner.de> <c0d3z...@users.noreply.github.com>
 Michael Zhivich <mzhiv...@akamai.com> 
<33133421+mzhiv...@users.noreply.github.com>
+MigeljanImeri <imerimi...@gmail.com> 
<78048439+migeljanim...@users.noreply.github.com>
 Mo Zhou <cdlumin...@gmail.com> <5723047+cdlumin...@users.noreply.github.com>
 Nick Mattis <nickm...@gmail.com> <nmat...@users.noreply.github.com>
 omni <omni+vag...@hack.org> <79493359+omnivag...@users.noreply.github.com>
@@ -164,6 +178,7 @@ Ping Huang <huangp...@smartx.com> 
<101400146+hpin...@users.noreply.github.com>
 Piotr P. Stefaniak <ps...@freebsd.org> <ps...@users.noreply.github.com>
 Richard Allen <belper...@gmail.com> 
<33836503+belper...@users.noreply.github.com>
 Rich Ercolani <rincebr...@gmail.com> 
<214141+rincebr...@users.noreply.github.com>
+Rick Macklem <rmack...@uoguelph.ca> 
<64620010+rmack...@users.noreply.github.com>
 Rob Wing <rob.w...@klarasystems.com> 
<98866084+rob-w...@users.noreply.github.com>
 Roman Strashkin <roman.strash...@nexenta.com> <ram...@users.noreply.github.com>
 Ryan Hirasaki <ryanhiras...@gmail.com> 
<4690732+ryan...@users.noreply.github.com>
@@ -174,6 +189,8 @@ Scott Colby <sc...@scolby.com> 
<scolb...@users.noreply.github.com>
 Sean Eric Fagan <kith...@mac.com> <kith...@users.noreply.github.com>
 Spencer Kinny <spencerkinny1...@gmail.com> 
<30333052+spencer-ki...@users.noreply.github.com>
 Srikanth N S <srikanth.nagasubbaraoseethara...@hpe.com> 
<75025422+nssrika...@users.noreply.github.com>
+Stefan Lendl <s.le...@proxmox.com> <1321542+s...@users.noreply.github.com>
+Thomas Bertschinger <bertschin...@lanl.gov> 
<101425190+bertschin...@users.noreply.github.com>
 Thomas Geppert <ge...@digitx.de> <ge...@users.noreply.github.com>
 Tim Crawford <tcrawf...@datto.com> <crawf...@users.noreply.github.com>
 Tom Matthews <t...@axiom-partners.com> <tomtas...@users.noreply.github.com>
@@ -181,6 +198,7 @@ Tony Perkins <tperk...@datto.com> 
<62951051+tony-...@users.noreply.github.com>
 Torsten Wörtwein <twoertw...@gmail.com> <twoertw...@users.noreply.github.com>
 Tulsi Jain <tulsi.j...@delphix.com> <tulsij...@users.noreply.github.com>
 Václav Skála <sk...@vshosting.cz> 
<33496485+vaclavsk...@users.noreply.github.com>
+Vaibhav Bhanawat <vaibhav.bhana...@delphix.com> 
<88050553+vaibhav-delp...@users.noreply.github.com>
 Violet Purcell <vimpro...@inventati.org> 
<66446404+vimpro...@users.noreply.github.com>
 Vipin Kumar Verma <vipin.ve...@hpe.com> 
<75025470+vermavipinku...@users.noreply.github.com>
 Wolfgang Bumiller <w.bumil...@proxmox.com> <b...@users.noreply.github.com>
diff --git a/sys/contrib/openzfs/AUTHORS b/sys/contrib/openzfs/AUTHORS
index be1efb87b34c..d7d55f42d2e7 100644
--- a/sys/contrib/openzfs/AUTHORS
+++ b/sys/contrib/openzfs/AUTHORS
@@ -88,9 +88,11 @@ CONTRIBUTORS:
     Bassu <ba...@phi9.com>
     Ben Allen <bsal...@alcf.anl.gov>
     Ben Cordero <benco...@condi.me>
+    Benda Xu <o...@debian.org>
     Benedikt Neuffer <git...@itfriend.de>
     Benjamin Albrecht <g...@albrecht.io>
     Benjamin Gentil <benjgentil....@gmail.com>
+    Benjamin Sherman <benja...@holyarmy.org>
     Ben McGough <bmcgo...@fredhutch.org>
     Ben Rubson <ben.rub...@gmail.com>
     Ben Wolsieffer <benwolsief...@gmail.com>
@@ -111,6 +113,7 @@ CONTRIBUTORS:
     bzzz77 <bzzz.to...@gmail.com>
     cable2999 <cable2...@users.noreply.github.com>
     Caleb James DeLisle <calebdeli...@lavabit.com>
+    Cameron Harr <ha...@llnl.gov>
     Cao Xuewen <cao.xue...@zte.com.cn>
     Carlo Landmeter <clandme...@gmail.com>
     Carlos Alberto Lopez Perez <clo...@igalia.com>
@@ -120,12 +123,15 @@ CONTRIBUTORS:
     Chen Can <chen.c...@zte.com.cn>
     Chengfei Zhu <chengfeix....@intel.com>
     Chen Haiquan <o...@yunify.com>
+    ChenHao Lu <18302010...@fudan.edu.cn>
     Chip Parker <apar...@enthought.com>
     Chris Burroughs <chris.burrou...@gmail.com>
+    Chris Davidson <christopher.david...@gmail.com>
     Chris Dunlap <cdun...@llnl.gov>
     Chris Dunlop <ch...@onthe.net.au>
     Chris Lindee <chris.lindee+git...@gmail.com>
     Chris McDonough <chr...@plope.com>
+    Chris Peredun <chris.pere...@ixsystems.com>
     Chris Siden <chris.si...@delphix.com>
     Chris Siebenmann <cks.git...@cs.toronto.edu>
     Christer Ekholm <c...@chrekh.se>
@@ -144,6 +150,7 @@ CONTRIBUTORS:
     Clint Armstrong <cl...@clintarmstrong.net>
     Coleman Kane <ck...@colemankane.org>
     Colin Ian King <colin.k...@canonical.com>
+    Colin Percival <cperc...@tarsnap.com>
     Colm Buckley <c...@tuatha.org>
     Crag Wang <crag0...@gmail.com>
     Craig Loomis <cloo...@astro.princeton.edu>
@@ -156,6 +163,7 @@ CONTRIBUTORS:
     Damiano Albani <damiano.alb...@gmail.com>
     Damian Szuberski <szuberskidam...@gmail.com>
     Damian Wojsław <dam...@wojslaw.pl>
+    Daniel Berlin <dber...@dberlin.org>
     Daniel Hiepler <d-...@coderdu.de>
     Daniel Hoffman <dj.hoff...@delphix.com>
     Daniel Kobras <d.kob...@science-computing.de>
@@ -176,8 +184,10 @@ CONTRIBUTORS:
     David Quigley <david.quig...@intel.com>
     Debabrata Banerjee <dbane...@akamai.com>
     D. Ebdrup <debd...@freebsd.org>
+    Dennis R. Friedrichsen <dennis.r.friedrich...@gmail.com>
     Denys Rtveliashvili <de...@rtveliashvili.name>
     Derek Dai <daide...@gmail.com>
+    Dex Wood <slash2...@gmail.com>
     DHE <g...@dehacked.net>
     Didier Roche <didro...@ubuntu.com>
     Dimitri John Ledkov <x...@ubuntu.com>
@@ -235,9 +245,11 @@ CONTRIBUTORS:
     Gionatan Danti <g.da...@assyoma.it>
     Giuseppe Di Natale <gus...@gmail.com>
     Glenn Washburn <developm...@efficientek.com>
+    gofaster <felix.gofas...@gmail.com>
     Gordan Bobic <gor...@redsleeve.org>
     Gordon Bergling <gbergl...@googlemail.com>
     Gordon Ross <g...@nexenta.com>
+    Gordon Tetlow <gor...@freebsd.org>
     Graham Christensen <gra...@grahamc.com>
     Graham Perrin <grahamper...@gmail.com>
     Gregor Kopka <gre...@kopka.net>
@@ -265,6 +277,7 @@ CONTRIBUTORS:
     Igor Kozhukhov <ikozhuk...@gmail.com>
     Igor Lvovsky <ilvov...@gmail.com>
     ilbsmart <wgqi...@gmail.com>
+    Ilkka Sovanto <git...@ilkka.kapsi.fi>
     illiliti <illil...@protonmail.com>
     ilovezfs <ilove...@icloud.com>
     InsanePrawn <insane.pra...@gmail.com>
@@ -280,9 +293,11 @@ CONTRIBUTORS:
     Jan Engelhardt <jeng...@inai.de>
     Jan Kryl <jan.k...@nexenta.com>
     Jan Sanislo <oy...@cs.washington.edu>
+    Jaron Kent-Dobias <ja...@kent-dobias.com>
     Jason Cohen <jwittlinco...@gmail.com>
     Jason Harmening <jason.harmen...@gmail.com>
     Jason King <jason.brian.k...@gmail.com>
+    Jason Lee <jason...@lanl.gov>
     Jason Zaman <jasonza...@gmail.com>
     Javen Wu <wu.ja...@gmail.com>
     Jean-Baptiste Lallement <jean-bapti...@ubuntu.com>
@@ -313,6 +328,7 @@ CONTRIBUTORS:
     Jonathon Fernyhough <jonat...@m2x.dev>
     Jorgen Lundman <lund...@lundman.net>
     Josef 'Jeff' Sipek <josef.si...@nexenta.com>
+    Jose Luis Duran <jldu...@gmail.com>
     Josh Soref <jso...@users.noreply.github.com>
     Joshua M. Clulow <j...@sysmgr.org>
     José Luis Salvador Rufo <salvador.josel...@gmail.com>
@@ -336,8 +352,10 @@ CONTRIBUTORS:
     Kash Pande <k...@tripleback.net>
     Kay Pedersen <christianp...@gmail.com>
     Keith M Wesolowski <wesol...@foobazco.org>
+    Kent Ross <k...@mad.cash>
     KernelOfTruth <kerneloftr...@gmail.com>
     Kevin Bowling <kevin.bowl...@kev009.com>
+    Kevin Greene <kevin.gre...@delphix.com>
     Kevin Jin <lostking2...@hotmail.com>
     Kevin P. Fleming <ke...@km6g.us>
     Kevin Tanguy <kevin.tan...@ovh.net>
@@ -389,6 +407,7 @@ CONTRIBUTORS:
     Mark Shellenbaum <mark.shellenb...@oracle.com>
     marku89 <ma...@kola.li>
     Mark Wright <markwri...@internode.on.net>
+    Mart Frauenlob <allk...@fastest.cc>
     Martin Matuska <m...@freebsd.org>
     Martin Rüegg <martin.rue...@metaworx.ch>
     Massimo Maggi <m...@massimo-maggi.eu>
@@ -405,6 +424,7 @@ CONTRIBUTORS:
     Matus Kral <matusk...@me.com>
     Mauricio Faria de Oliveira <m...@canonical.com>
     Max Grossman <max.gross...@delphix.com>
+    Maxim Filimonov <c...@bein.link>
     Maximilian Mehnert <maximilian.mehn...@gmx.de>
     Max Zettlmeißl <m...@zettlmeissl.de>
     Md Islam <mdnah...@outlook.com>
@@ -417,6 +437,7 @@ CONTRIBUTORS:
     Michael Niewöhner <f...@mniewoehner.de>
     Michael Zhivich <mzhiv...@akamai.com>
     Michal Vasilek <mic...@vasilek.cz>
+    MigeljanImeri <imerimi...@gmail.com>
     Mike Gerdts <mike.ger...@joyent.com>
     Mike Harsch <m...@harschsystems.com>
     Mike Leddy <mike.le...@gmail.com>
@@ -448,6 +469,7 @@ CONTRIBUTORS:
     Olaf Faaland <faala...@llnl.gov>
     Oleg Drokin <gr...@linuxhacker.ru>
     Oleg Stepura <o...@stepura.com>
+    Olivier Certner <olce.free...@certner.fr>
     Olivier Mazouffre <olivier.mazouf...@ims-bordeaux.fr>
     omni <omni+vag...@hack.org>
     Orivej Desh <ori...@gmx.fr>
@@ -479,6 +501,7 @@ CONTRIBUTORS:
     Prasad Joshi <prasadjoshi...@gmail.com>
     privb0x23 <privb0...@users.noreply.github.com>
     P.SCH <p...@yahoo.com>
+    Quartz <yyh...@163.com>
     Quentin Zdanis <zdan...@gmail.com>
     Rafael Kitover <rkito...@gmail.com>
     RageLtMan <sempervic...@users.noreply.github.com>
@@ -491,11 +514,15 @@ CONTRIBUTORS:
     Riccardo Schirone <rschiron...@gmail.com>
     Richard Allen <belper...@gmail.com>
     Richard Elling <richard.ell...@richardelling.com>
+    Richard Kojedzinszky <rich...@kojedz.in>
     Richard Laager <rlaa...@wiktel.com>
     Richard Lowe <richl...@richlowe.net>
     Richard Sharpe <rsha...@samba.org>
     Richard Yao <r...@gentoo.org>
     Rich Ercolani <rincebr...@gmail.com>
+    Rick Macklem <rmack...@uoguelph.ca>
+    rilysh <nightqu...@proton.me>
+    Robert Evans <eva...@google.com>
     Robert Novak <sailnf...@gmail.com>
     Roberto Ricci <ri...@disroot.org>
     Rob Norris <r...@despairlabs.com>
@@ -509,7 +536,9 @@ CONTRIBUTORS:
     Ryan Lahfa <masteran...@gmail.com>
     Ryan Libby <rli...@freebsd.org>
     Ryan Moeller <freql...@freebsd.org>
+    Sam Atkinson <sam...@amazon.com>
     Sam Hathaway <github....@munkynet.org>
+    Sam James <s...@gentoo.org>
     Sam Lunt <samuel.j.l...@gmail.com>
     Samuel VERSCHELDE <stormi-git...@ylix.fr>
     Samuel Wycliffe <samuelwycli...@gmail.com>
@@ -530,6 +559,8 @@ CONTRIBUTORS:
     Shaan Nobee <sniper...@gmail.com>
     Shampavman <sham.pav...@nexenta.com>
     Shaun Tancheff <sh...@aeonazure.com>
+    Shawn Bayern <sbay...@law.fsu.edu>
+    Shengqi Chen <harry-c...@outlook.com>
     Shen Yan <shenyanx...@qq.com>
     Simon Guest <simon.gu...@tesujimath.org>
     Simon Klinkert <simon.klink...@gmail.com>
@@ -537,6 +568,7 @@ CONTRIBUTORS:
     Spencer Kinny <spencerkinny1...@gmail.com>
     Srikanth N S <srikanth.nagasubbaraoseethara...@hpe.com>
     Stanislav Seletskiy <s.selets...@gmail.com>
+    Stefan Lendl <s.le...@proxmox.com>
     Steffen Müthing <steffen.mueth...@iwr.uni-heidelberg.de>
     Stephen Blinick <stephen.blin...@delphix.com>
     sterlingjensen <sterlingjen...@users.noreply.github.com>
@@ -557,6 +589,7 @@ CONTRIBUTORS:
     Teodor Spæren <teodor_spae...@riseup.net>
     TerraTech <terrat...@users.noreply.github.com>
     Thijs Cramer <thijs.cra...@gmail.com>
+    Thomas Bertschinger <bertschin...@lanl.gov>
     Thomas Geppert <ge...@digitx.de>
     Thomas Lamprecht <guggen...@hotmail.de>
     Till Maas <opensou...@till.name>
@@ -586,6 +619,7 @@ CONTRIBUTORS:
     Turbo Fredriksson <tu...@bayour.com>
     Tyler J. Stachecki <stachecki.ty...@gmail.com>
     Umer Saleem <usal...@ixsystems.com>
+    Vaibhav Bhanawat <vaibhav.bhana...@delphix.com>
     Valmiky Arquissandas <kayv...@gmail.com>
     Val Packett <v...@packett.cool>
     Vince van Oosten <techhaz...@codeforyouand.me>
@@ -614,6 +648,7 @@ CONTRIBUTORS:
     yuina822 <ayui...@club.kyutech.ac.jp>
     YunQiang Su <s...@debian.org>
     Yuri Pankov <yuri.pan...@gmail.com>
+    Yuxin Wang <yuxinwang9...@gmail.com>
     Yuxuan Shui <yshu...@gmail.com>
     Zachary Bedell <z...@thebedells.org>
     Zach Dykstra <dykstra.zach...@gmail.com>
diff --git a/sys/contrib/openzfs/META b/sys/contrib/openzfs/META
index d64414e32225..383fa37fd42a 100644
--- a/sys/contrib/openzfs/META
+++ b/sys/contrib/openzfs/META
@@ -1,10 +1,10 @@
 Meta:          1
 Name:          zfs
 Branch:        1.0
-Version:       2.2.3
+Version:       2.2.4
 Release:       1
 Release-Tags:  relext
 License:       CDDL
 Author:        OpenZFS
-Linux-Maximum: 6.7
+Linux-Maximum: 6.8
 Linux-Minimum: 3.10
diff --git a/sys/contrib/openzfs/cmd/arc_summary 
b/sys/contrib/openzfs/cmd/arc_summary
index 9c69ec4f8ccc..100fb1987a8b 100755
--- a/sys/contrib/openzfs/cmd/arc_summary
+++ b/sys/contrib/openzfs/cmd/arc_summary
@@ -793,18 +793,27 @@ def section_dmu(kstats_dict):
 
     zfetch_stats = isolate_section('zfetchstats', kstats_dict)
 
-    zfetch_access_total = int(zfetch_stats['hits'])+int(zfetch_stats['misses'])
+    zfetch_access_total = int(zfetch_stats['hits']) +\
+        int(zfetch_stats['future']) + int(zfetch_stats['stride']) +\
+        int(zfetch_stats['past']) + 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'])
+    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']))
     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('Prefetches issued', f_hits(zfetch_stats['io_issued']))
     print()
 
diff --git a/sys/contrib/openzfs/cmd/arcstat.in 
b/sys/contrib/openzfs/cmd/arcstat.in
index 8df1c62f7e86..c4f10a1d6d3b 100755
--- a/sys/contrib/openzfs/cmd/arcstat.in
+++ b/sys/contrib/openzfs/cmd/arcstat.in
@@ -157,6 +157,16 @@ cols = {
     "free":       [5, 1024, "ARC free memory"],
     "avail":      [5, 1024, "ARC available memory"],
     "waste":      [5, 1024, "Wasted memory due to round up to pagesize"],
+    "ztotal":     [6, 1000, "zfetch total prefetcher calls per second"],
+    "zhits":      [5, 1000, "zfetch stream hits per second"],
+    "zahead":     [6, 1000, "zfetch hits ahead of streams per second"],
+    "zpast":      [5, 1000, "zfetch hits behind streams per second"],
+    "zmisses":    [7, 1000, "zfetch stream misses per second"],
+    "zmax":       [4, 1000, "zfetch limit reached per second"],
+    "zfuture":    [7, 1000, "zfetch stream future per second"],
+    "zstride":    [7, 1000, "zfetch stream strides per second"],
+    "zissued":    [7, 1000, "zfetch prefetches issued per second"],
+    "zactive":    [7, 1000, "zfetch prefetches active per second"],
 }
 
 v = {}
@@ -164,6 +174,8 @@ hdr = ["time", "read", "ddread", "ddh%", "dmread", "dmh%", 
"pread", "ph%",
        "size", "c", "avail"]
 xhdr = ["time", "mfu", "mru", "mfug", "mrug", "unc", "eskip", "mtxmis",
         "dread", "pread", "read"]
+zhdr = ["time", "ztotal", "zhits", "zahead", "zpast", "zmisses", "zmax",
+        "zfuture", "zstride", "zissued", "zactive"]
 sint = 1               # Default interval is 1 second
 count = 1              # Default count is 1
 hdr_intr = 20          # Print header every 20 lines of output
@@ -188,6 +200,8 @@ if sys.platform.startswith('freebsd'):
 
         k = [ctl for ctl in sysctl.filter('kstat.zfs.misc.arcstats')
              if ctl.type != sysctl.CTLTYPE_NODE]
+        k += [ctl for ctl in sysctl.filter('kstat.zfs.misc.zfetchstats')
+             if ctl.type != sysctl.CTLTYPE_NODE]
 
         if not k:
             sys.exit(1)
@@ -199,19 +213,28 @@ if sys.platform.startswith('freebsd'):
                 continue
 
             name, value = s.name, s.value
-            # Trims 'kstat.zfs.misc.arcstats' from the name
-            kstat[name[24:]] = int(value)
+
+            if "arcstats" in name:
+                # Trims 'kstat.zfs.misc.arcstats' from the name
+                kstat[name[24:]] = int(value)
+            else:
+                kstat["zfetch_" + name[27:]] = int(value)
 
 elif sys.platform.startswith('linux'):
     def kstat_update():
         global kstat
 
-        k = [line.strip() for line in open('/proc/spl/kstat/zfs/arcstats')]
+        k1 = [line.strip() for line in open('/proc/spl/kstat/zfs/arcstats')]
 
-        if not k:
+        k2 = ["zfetch_" + line.strip() for line in
+             open('/proc/spl/kstat/zfs/zfetchstats')]
+
+        if k1 is None or k2 is None:
             sys.exit(1)
 
-        del k[0:2]
+        del k1[0:2]
+        del k2[0:2]
+        k = k1 + k2
         kstat = {}
 
         for s in k:
@@ -239,6 +262,7 @@ def usage():
     sys.stderr.write("\t -v : List all possible field headers and definitions"
                      "\n")
     sys.stderr.write("\t -x : Print extended stats\n")
+    sys.stderr.write("\t -z : Print zfetch stats\n")
     sys.stderr.write("\t -f : Specify specific fields to print (see -v)\n")
     sys.stderr.write("\t -o : Redirect output to the specified file\n")
     sys.stderr.write("\t -s : Override default field separator with custom "
@@ -357,6 +381,7 @@ def init():
     global count
     global hdr
     global xhdr
+    global zhdr
     global opfile
     global sep
     global out
@@ -368,15 +393,17 @@ def init():
     xflag = False
     hflag = False
     vflag = False
+    zflag = False
     i = 1
 
     try:
         opts, args = getopt.getopt(
             sys.argv[1:],
-            "axo:hvs:f:p",
+            "axzo:hvs:f:p",
             [
                 "all",
                 "extended",
+                "zfetch",
                 "outfile",
                 "help",
                 "verbose",
@@ -410,13 +437,15 @@ def init():
             i += 1
         if opt in ('-p', '--parsable'):
             pretty_print = False
+        if opt in ('-z', '--zfetch'):
+            zflag = True
         i += 1
 
     argv = sys.argv[i:]
     sint = int(argv[0]) if argv else sint
     count = int(argv[1]) if len(argv) > 1 else (0 if len(argv) > 0 else 1)
 
-    if hflag or (xflag and desired_cols):
+    if hflag or (xflag and zflag) or ((zflag or xflag) and desired_cols):
         usage()
 
     if vflag:
@@ -425,6 +454,9 @@ def init():
     if xflag:
         hdr = xhdr
 
+    if zflag:
+        hdr = zhdr
+
     update_hdr_intr()
 
     # check if L2ARC exists
@@ -569,6 +601,17 @@ def calculate():
     v["el2mru"] = d["evict_l2_eligible_mru"] // 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["zhits"] = d["zfetch_hits"] // sint
+    v["zahead"] = (d["zfetch_future"] + d["zfetch_stride"]) // sint
+    v["zpast"] = d["zfetch_past"] // 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["zissued"] = d["zfetch_io_issued"] // sint
+    v["zactive"] = d["zfetch_io_active"] // sint
 
     if l2exist:
         v["l2hits"] = d["l2_hits"] // sint
diff --git a/sys/contrib/openzfs/cmd/zed/agents/fmd_api.c 
b/sys/contrib/openzfs/cmd/zed/agents/fmd_api.c
index 4a6cfbf8c05c..fe43e2ab971e 100644
--- a/sys/contrib/openzfs/cmd/zed/agents/fmd_api.c
+++ b/sys/contrib/openzfs/cmd/zed/agents/fmd_api.c
@@ -22,6 +22,7 @@
  * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
  *
  * Copyright (c) 2016, Intel Corporation.
+ * Copyright (c) 2023, Klara Inc.
  */
 
 /*
@@ -231,28 +232,6 @@ fmd_prop_get_int32(fmd_hdl_t *hdl, const char *name)
        if (strcmp(name, "spare_on_remove") == 0)
                return (1);
 
-       if (strcmp(name, "io_N") == 0 || strcmp(name, "checksum_N") == 0)
-               return (10);    /* N = 10 events */
-
-       return (0);
-}
-
-int64_t
-fmd_prop_get_int64(fmd_hdl_t *hdl, const char *name)
-{
-       (void) hdl;
-
-       /*
-        * These can be looked up in mp->modinfo->fmdi_props
-        * For now we just hard code for phase 2. In the
-        * future, there can be a ZED based override.
-        */
-       if (strcmp(name, "remove_timeout") == 0)
-               return (15ULL * 1000ULL * 1000ULL * 1000ULL);   /* 15 sec */
-
-       if (strcmp(name, "io_T") == 0 || strcmp(name, "checksum_T") == 0)
-               return (1000ULL * 1000ULL * 1000ULL * 600ULL);  /* 10 min */
-
        return (0);
 }
 
@@ -535,20 +514,31 @@ fmd_serd_exists(fmd_hdl_t *hdl, const char *name)
        return (fmd_serd_eng_lookup(&mp->mod_serds, name) != NULL);
 }
 
-void
-fmd_serd_reset(fmd_hdl_t *hdl, const char *name)
+int
+fmd_serd_active(fmd_hdl_t *hdl, const char *name)
 {
        fmd_module_t *mp = (fmd_module_t *)hdl;
        fmd_serd_eng_t *sgp;
 
        if ((sgp = fmd_serd_eng_lookup(&mp->mod_serds, name)) == NULL) {
                zed_log_msg(LOG_ERR, "serd engine '%s' does not exist", name);
-               return;
+               return (0);
        }
+       return (fmd_serd_eng_fired(sgp) || !fmd_serd_eng_empty(sgp));
+}
 
-       fmd_serd_eng_reset(sgp);
+void
+fmd_serd_reset(fmd_hdl_t *hdl, const char *name)
+{
+       fmd_module_t *mp = (fmd_module_t *)hdl;
+       fmd_serd_eng_t *sgp;
 
-       fmd_hdl_debug(hdl, "serd_reset %s", name);
+       if ((sgp = fmd_serd_eng_lookup(&mp->mod_serds, name)) == NULL) {
+               zed_log_msg(LOG_ERR, "serd engine '%s' does not exist", name);
+       } else {
+               fmd_serd_eng_reset(sgp);
+               fmd_hdl_debug(hdl, "serd_reset %s", name);
+       }
 }
 
 int
@@ -556,16 +546,21 @@ fmd_serd_record(fmd_hdl_t *hdl, const char *name, 
fmd_event_t *ep)
 {
        fmd_module_t *mp = (fmd_module_t *)hdl;
        fmd_serd_eng_t *sgp;
-       int err;
 
        if ((sgp = fmd_serd_eng_lookup(&mp->mod_serds, name)) == NULL) {
                zed_log_msg(LOG_ERR, "failed to add record to SERD engine '%s'",
                    name);
                return (0);
        }
-       err = fmd_serd_eng_record(sgp, ep->ev_hrt);
+       return (fmd_serd_eng_record(sgp, ep->ev_hrt));
+}
+
+void
+fmd_serd_gc(fmd_hdl_t *hdl)
+{
+       fmd_module_t *mp = (fmd_module_t *)hdl;
 
-       return (err);
+       fmd_serd_hash_apply(&mp->mod_serds, fmd_serd_eng_gc, NULL);
 }
 
 /* FMD Timers */
@@ -579,7 +574,7 @@ _timer_notify(union sigval sv)
        const fmd_hdl_ops_t *ops = mp->mod_info->fmdi_ops;
        struct itimerspec its;
 
-       fmd_hdl_debug(hdl, "timer fired (%p)", ftp->ft_tid);
+       fmd_hdl_debug(hdl, "%s timer fired (%p)", mp->mod_name, ftp->ft_tid);
 
        /* disarm the timer */
        memset(&its, 0, sizeof (struct itimerspec));
diff --git a/sys/contrib/openzfs/cmd/zed/agents/fmd_api.h 
b/sys/contrib/openzfs/cmd/zed/agents/fmd_api.h
index b940d0d395ec..8471feecf33f 100644
--- a/sys/contrib/openzfs/cmd/zed/agents/fmd_api.h
+++ b/sys/contrib/openzfs/cmd/zed/agents/fmd_api.h
@@ -151,7 +151,6 @@ extern void fmd_hdl_vdebug(fmd_hdl_t *, const char *, 
va_list);
 extern void fmd_hdl_debug(fmd_hdl_t *, const char *, ...);
 
 extern int32_t fmd_prop_get_int32(fmd_hdl_t *, const char *);
-extern int64_t fmd_prop_get_int64(fmd_hdl_t *, const char *);
 
 #define        FMD_STAT_NOALLOC        0x0     /* fmd should use caller's 
memory */
 #define        FMD_STAT_ALLOC          0x1     /* fmd should allocate stats 
memory */
@@ -195,10 +194,12 @@ extern size_t fmd_buf_size(fmd_hdl_t *, fmd_case_t *, 
const char *);
 extern void fmd_serd_create(fmd_hdl_t *, const char *, uint_t, hrtime_t);
 extern void fmd_serd_destroy(fmd_hdl_t *, const char *);
 extern int fmd_serd_exists(fmd_hdl_t *, const char *);
+extern int fmd_serd_active(fmd_hdl_t *, const char *);
 extern void fmd_serd_reset(fmd_hdl_t *, const char *);
 extern int fmd_serd_record(fmd_hdl_t *, const char *, fmd_event_t *);
 extern int fmd_serd_fired(fmd_hdl_t *, const char *);
 extern int fmd_serd_empty(fmd_hdl_t *, const char *);
+extern void fmd_serd_gc(fmd_hdl_t *);
 
 extern id_t fmd_timer_install(fmd_hdl_t *, void *, fmd_event_t *, hrtime_t);
 extern void fmd_timer_remove(fmd_hdl_t *, id_t);
diff --git a/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.c 
b/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.c
index 0bb2c535f094..f942e62b3f48 100644
--- a/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.c
+++ b/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.c
@@ -310,8 +310,9 @@ fmd_serd_eng_reset(fmd_serd_eng_t *sgp)
 }
 
 void
-fmd_serd_eng_gc(fmd_serd_eng_t *sgp)
+fmd_serd_eng_gc(fmd_serd_eng_t *sgp, void *arg)
 {
+       (void) arg;
        fmd_serd_elem_t *sep, *nep;
        hrtime_t hrt;
 
diff --git a/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.h 
b/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.h
index 25b6888e61f2..80ff9a3b25b8 100644
--- a/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.h
+++ b/sys/contrib/openzfs/cmd/zed/agents/fmd_serd.h
@@ -77,7 +77,7 @@ extern int fmd_serd_eng_fired(fmd_serd_eng_t *);
 extern int fmd_serd_eng_empty(fmd_serd_eng_t *);
 
 extern void fmd_serd_eng_reset(fmd_serd_eng_t *);
-extern void fmd_serd_eng_gc(fmd_serd_eng_t *);
+extern void fmd_serd_eng_gc(fmd_serd_eng_t *, void *);
 
 #ifdef __cplusplus
 }
diff --git a/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c 
b/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c
index f6ba334a3ba3..e0ad00800add 100644
--- a/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c
+++ b/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c
@@ -23,6 +23,7 @@
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 2016, Intel Corporation.
+ * Copyright (c) 2023, Klara Inc.
  */
 
 #include <stddef.h>
@@ -47,11 +48,16 @@
 #define        DEFAULT_CHECKSUM_T      600     /* seconds */
 #define        DEFAULT_IO_N            10      /* events */
 #define        DEFAULT_IO_T            600     /* seconds */
+#define        DEFAULT_SLOW_IO_N       10      /* events */
+#define        DEFAULT_SLOW_IO_T       30      /* seconds */
+
+#define        CASE_GC_TIMEOUT_SECS    43200   /* 12 hours */
 
 /*
- * Our serd engines are named 'zfs_<pool_guid>_<vdev_guid>_{checksum,io}'.  
This
- * #define reserves enough space for two 64-bit hex values plus the length of
- * the longest string.
+ * Our serd engines are named in the following format:
+ *     'zfs_<pool_guid>_<vdev_guid>_{checksum,io,slow_io}'
+ * This #define reserves enough space for two 64-bit hex values plus the
+ * length of the longest string.
  */
 #define        MAX_SERDLEN     (16 * 2 + sizeof ("zfs___checksum"))
 
@@ -68,6 +74,7 @@ typedef struct zfs_case_data {
        int             zc_pool_state;
        char            zc_serd_checksum[MAX_SERDLEN];
        char            zc_serd_io[MAX_SERDLEN];
+       char            zc_serd_slow_io[MAX_SERDLEN];
        int             zc_has_remove_timer;
 } zfs_case_data_t;
 
@@ -114,7 +121,8 @@ zfs_de_stats_t zfs_stats = {
        { "resource_drops", FMD_TYPE_UINT64, "resource related ereports" }
 };
 
-static hrtime_t zfs_remove_timeout;
+/* wait 15 seconds after a removal */
+static hrtime_t zfs_remove_timeout = SEC2NSEC(15);
 
 uu_list_pool_t *zfs_case_pool;
*** 11838 LINES SKIPPED ***

Reply via email to