summaryrefslogtreecommitdiff
path: root/pkg/zfs/patch
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2023-01-17 13:10:48 -0800
committerMichael Forney <mforney@mforney.org>2023-01-21 18:02:46 -0800
commit6b7db809b530eee3052f73377c5b0aad13a0b963 (patch)
tree317ecefa6441d49448dde7a43d4bdb761c3d98a0 /pkg/zfs/patch
parentf70b4bb807afbdaccc1daab13b8ff24459c8dfa5 (diff)
Add zfs 2.1.7
Diffstat (limited to 'pkg/zfs/patch')
-rw-r--r--pkg/zfs/patch/0001-Port-to-BearSSL.patch89
-rw-r--r--pkg/zfs/patch/0002-Use-find-exec-rm-instead-of-non-portable-delete.patch90
-rw-r--r--pkg/zfs/patch/0003-Use-AC_PROG_FGREP-to-detect-fgrep.patch41
-rw-r--r--pkg/zfs/patch/0004-Use-__asm__-instead-of-asm-to-compile-with-std-c99.patch221
-rw-r--r--pkg/zfs/patch/0005-Use-__func__-instead-of-obsolete-and-non-standard-__.patch401
-rw-r--r--pkg/zfs/patch/0006-Use-forward-declaration-instead-of-empty-struct.patch25
-rw-r--r--pkg/zfs/patch/0007-Avoid-conflict-with-C23-bool-keyword.patch25
-rw-r--r--pkg/zfs/patch/0008-Remove-stray-at-top-level.patch421
-rw-r--r--pkg/zfs/patch/0009-Avoid-use-of-long-double-function.patch34
-rw-r--r--pkg/zfs/patch/0010-Avoid-unnecessary-VLA.patch54
-rw-r--r--pkg/zfs/patch/0011-Avoid-arithmetic-on-void-pointer.patch25
11 files changed, 1426 insertions, 0 deletions
diff --git a/pkg/zfs/patch/0001-Port-to-BearSSL.patch b/pkg/zfs/patch/0001-Port-to-BearSSL.patch
new file mode 100644
index 00000000..497cdd59
--- /dev/null
+++ b/pkg/zfs/patch/0001-Port-to-BearSSL.patch
@@ -0,0 +1,89 @@
+From ec03405d2ba8eee8e95ec94e09888eaff82ad6ac Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 17 Jan 2023 12:01:13 -0800
+Subject: [PATCH] Port to BearSSL
+
+---
+ lib/libzfs/libzfs_crypto.c | 52 ++++++++++++++++++++++++++++++--------
+ 1 file changed, 42 insertions(+), 10 deletions(-)
+
+diff --git a/lib/libzfs/libzfs_crypto.c b/lib/libzfs/libzfs_crypto.c
+index f77becd6a..5eed592a4 100644
+--- a/lib/libzfs/libzfs_crypto.c
++++ b/lib/libzfs/libzfs_crypto.c
+@@ -25,7 +25,7 @@
+ #include <termios.h>
+ #include <signal.h>
+ #include <errno.h>
+-#include <openssl/evp.h>
++#include <bearssl.h>
+ #if LIBFETCH_DYNAMIC
+ #include <dlfcn.h>
+ #endif
+@@ -763,6 +763,44 @@ error:
+ return (ret);
+ }
+
++static void
++pbkdf2_hmac_sha1(unsigned char *DK, size_t DKlen, const char *P, size_t Plen, const char *S, size_t Slen, int c)
++{
++ br_hmac_key_context kc;
++ br_hmac_context hmac;
++ unsigned char F[br_sha1_SIZE], U[64];
++ int j, k;
++ unsigned long i;
++
++ assert(Slen <= sizeof U - 4);
++ br_hmac_key_init(&kc, &br_sha1_vtable, P, Plen);
++ for (i = 1;; ++i) {
++ memcpy(U, S, Slen);
++ U[Slen] = i >> 24;
++ U[Slen + 1] = i >> 16;
++ U[Slen + 2] = i >> 8;
++ U[Slen + 3] = i;
++ br_hmac_init(&hmac, &kc, 0);
++ br_hmac_update(&hmac, U, Slen + 4);
++ br_hmac_out(&hmac, U);
++ memcpy(F, U, br_sha1_SIZE);
++ for (j = 1; j < c; ++j) {
++ br_hmac_init(&hmac, &kc, 0);
++ br_hmac_update(&hmac, U, br_sha1_SIZE);
++ br_hmac_out(&hmac, U);
++ for (k = 0; k < br_sha1_SIZE; k++)
++ F[k] ^= U[k];
++ }
++ if (DKlen < sizeof F) {
++ memcpy(DK, F, DKlen);
++ break;
++ }
++ memcpy(DK, F, sizeof F);
++ DK += sizeof F;
++ DKlen -= sizeof F;
++ }
++}
++
+ static int
+ derive_key(libzfs_handle_t *hdl, zfs_keyformat_t format, uint64_t iters,
+ uint8_t *key_material, size_t key_material_len, uint64_t salt,
+@@ -793,15 +831,9 @@ derive_key(libzfs_handle_t *hdl, zfs_keyformat_t format, uint64_t iters,
+ case ZFS_KEYFORMAT_PASSPHRASE:
+ salt = LE_64(salt);
+
+- ret = PKCS5_PBKDF2_HMAC_SHA1((char *)key_material,
+- strlen((char *)key_material), ((uint8_t *)&salt),
+- sizeof (uint64_t), iters, WRAPPING_KEY_LEN, key);
+- if (ret != 1) {
+- ret = EIO;
+- zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+- "Failed to generate key from passphrase."));
+- goto error;
+- }
++ pbkdf2_hmac_sha1((unsigned char *)key, WRAPPING_KEY_LEN,
++ (char *)key_material, strlen((char *)key_material),
++ (char *)&salt, sizeof salt, iters);
+ break;
+ default:
+ ret = EINVAL;
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0002-Use-find-exec-rm-instead-of-non-portable-delete.patch b/pkg/zfs/patch/0002-Use-find-exec-rm-instead-of-non-portable-delete.patch
new file mode 100644
index 00000000..4e58fa8d
--- /dev/null
+++ b/pkg/zfs/patch/0002-Use-find-exec-rm-instead-of-non-portable-delete.patch
@@ -0,0 +1,90 @@
+From 8da3e065051442982e255786a45fd5eea01321a9 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 17 Jan 2023 12:56:34 -0800
+Subject: [PATCH] Use find -exec rm instead of non-portable -delete
+
+---
+ config/ax_code_coverage.m4 | 2 +-
+ module/Makefile.in | 4 ++--
+ .../tests/functional/cli_root/zfs_diff/zfs_diff_timestamp.ksh | 2 +-
+ .../tests/functional/cli_root/zfs_send/zfs_send_007_pos.ksh | 2 +-
+ .../tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib | 2 +-
+ 5 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/config/ax_code_coverage.m4 b/config/ax_code_coverage.m4
+index 3e3c666f3..fbe46db1f 100644
+--- a/config/ax_code_coverage.m4
++++ b/config/ax_code_coverage.m4
+@@ -153,7 +153,7 @@ distclean: code-coverage-clean
+ code-coverage-clean:
+ -$(LCOV) --directory $(top_builddir) -z
+ -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+- -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
++ -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -exec rm -- {} +
+ ']
+ ], [
+ [CODE_COVERAGE_RULES_CHECK='
+diff --git a/module/Makefile.in b/module/Makefile.in
+index b6338430e..d87fb729d 100644
+--- a/module/Makefile.in
++++ b/module/Makefile.in
+@@ -70,7 +70,7 @@ clean-Linux:
+ @CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ M="$$PWD" @KERNEL_MAKE@ clean
+
+ $(RM) @LINUX_SYMBOLS@ Module.markers
+- find . -name '*.ur-safe' -type f -delete
++ find . -name '*.ur-safe' -type f -exec $(RM) -- {} +
+
+ clean-FreeBSD:
+ +$(FMAKE) clean
+@@ -86,7 +86,7 @@ modules_install-Linux:
+ @# Remove extraneous build products when packaging
+ kmoddir=$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
+ if [ -n "$(DESTDIR)" ]; then \
+- find $$kmoddir -name 'modules.*' -delete; \
++ find $$kmoddir -name 'modules.*' -exec $(RM) -- {} +; \
+ fi
+ @# Debian ships tiny fake System.map files that are
+ @# syntactically valid but just say
+diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_diff/zfs_diff_timestamp.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_diff/zfs_diff_timestamp.ksh
+index 0d08cf629..7714d02cd 100755
+--- a/tests/zfs-tests/tests/functional/cli_root/zfs_diff/zfs_diff_timestamp.ksh
++++ b/tests/zfs-tests/tests/functional/cli_root/zfs_diff/zfs_diff_timestamp.ksh
+@@ -33,7 +33,7 @@ function cleanup
+ for snap in $TESTSNAP1 $TESTSNAP2; do
+ snapexists "$snap" && destroy_dataset "$snap"
+ done
+- find "$MNTPOINT" -type f -delete
++ find "$MNTPOINT" -type f -exec rm -- {} +
+ rm -f "$FILEDIFF"
+ }
+
+diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_send/zfs_send_007_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_send/zfs_send_007_pos.ksh
+index da0aebe6b..7d5242ee0 100755
+--- a/tests/zfs-tests/tests/functional/cli_root/zfs_send/zfs_send_007_pos.ksh
++++ b/tests/zfs-tests/tests/functional/cli_root/zfs_send/zfs_send_007_pos.ksh
+@@ -61,7 +61,7 @@ test_pool ()
+ object=$(ls -i $mntpnt | awk '{print $1}')
+ log_must zfs snapshot $POOL/fs@a
+ while true; do
+- log_must find $mntpnt/ -type f -delete
++ log_must find $mntpnt/ -type f -exec rm -- {} +
+ sync
+ log_must mkfiles "$mntpnt/" 4000
+ sync
+diff --git a/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib b/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib
+index b69d2ce02..54f3e459e 100644
+--- a/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib
++++ b/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib
+@@ -60,7 +60,7 @@ function udev_cleanup
+
+ udevadm settle
+ # find all dangling links and delete them
+- find -L "${ZVOL_DEVDIR}" -type l -print -delete
++ find -L "${ZVOL_DEVDIR}" -type l -print -exec rm -- {} +
+ # purge those links from udev database
+ udevadm info --cleanup-db
+ }
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0003-Use-AC_PROG_FGREP-to-detect-fgrep.patch b/pkg/zfs/patch/0003-Use-AC_PROG_FGREP-to-detect-fgrep.patch
new file mode 100644
index 00000000..c30e255d
--- /dev/null
+++ b/pkg/zfs/patch/0003-Use-AC_PROG_FGREP-to-detect-fgrep.patch
@@ -0,0 +1,41 @@
+From 4f4a44f8c83179ee98397faa773f2e4c1faa066b Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 17 Jan 2023 12:57:13 -0800
+Subject: [PATCH] Use AC_PROG_FGREP to detect fgrep
+
+fgrep is not standard, so use AC_PROG_FGREP to detect the appropriate
+command.
+---
+ config/kernel.m4 | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/config/kernel.m4 b/config/kernel.m4
+index 3a059b73a..3f535fdb3 100644
+--- a/config/kernel.m4
++++ b/config/kernel.m4
+@@ -324,6 +324,7 @@ dnl # and `/usr/src/linux-*` with the highest version number according
+ dnl # to `sort -V` is assumed to be both source and build directory.
+ dnl #
+ AC_DEFUN([ZFS_AC_KERNEL], [
++ AC_REQUIRE([AC_PROG_FGREP])
+ AC_ARG_WITH([linux],
+ AS_HELP_STRING([--with-linux=PATH],
+ [Path to kernel source]),
+@@ -404,11 +405,11 @@ AC_DEFUN([ZFS_AC_KERNEL], [
+ utsrelease1=$kernelbuild/include/linux/version.h
+ utsrelease2=$kernelbuild/include/linux/utsrelease.h
+ utsrelease3=$kernelbuild/include/generated/utsrelease.h
+- AS_IF([test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1], [
++ AS_IF([test -r $utsrelease1 && $FGREP -q UTS_RELEASE $utsrelease1], [
+ utsrelease=$utsrelease1
+- ], [test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2], [
++ ], [test -r $utsrelease2 && $FGREP -q UTS_RELEASE $utsrelease2], [
+ utsrelease=$utsrelease2
+- ], [test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3], [
++ ], [test -r $utsrelease3 && $FGREP -q UTS_RELEASE $utsrelease3], [
+ utsrelease=$utsrelease3
+ ])
+
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0004-Use-__asm__-instead-of-asm-to-compile-with-std-c99.patch b/pkg/zfs/patch/0004-Use-__asm__-instead-of-asm-to-compile-with-std-c99.patch
new file mode 100644
index 00000000..5bb7abe5
--- /dev/null
+++ b/pkg/zfs/patch/0004-Use-__asm__-instead-of-asm-to-compile-with-std-c99.patch
@@ -0,0 +1,221 @@
+From 6f50ce7e45a1d35ed170a22c7b465445cc5437fa Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 17 Jan 2023 13:07:11 -0800
+Subject: [PATCH] Use __asm__ instead of asm to compile with -std=c99
+
+---
+ module/zcommon/zfs_fletcher_intel.c | 44 +++++++--------
+ module/zcommon/zfs_fletcher_sse.c | 86 ++++++++++++++---------------
+ 2 files changed, 65 insertions(+), 65 deletions(-)
+
+diff --git a/module/zcommon/zfs_fletcher_intel.c b/module/zcommon/zfs_fletcher_intel.c
+index 5136a01ec..14eecb192 100644
+--- a/module/zcommon/zfs_fletcher_intel.c
++++ b/module/zcommon/zfs_fletcher_intel.c
+@@ -83,18 +83,18 @@ fletcher_4_avx2_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp)
+
+ #define FLETCHER_4_AVX2_RESTORE_CTX(ctx) \
+ { \
+- asm volatile("vmovdqu %0, %%ymm0" :: "m" ((ctx)->avx[0])); \
+- asm volatile("vmovdqu %0, %%ymm1" :: "m" ((ctx)->avx[1])); \
+- asm volatile("vmovdqu %0, %%ymm2" :: "m" ((ctx)->avx[2])); \
+- asm volatile("vmovdqu %0, %%ymm3" :: "m" ((ctx)->avx[3])); \
++ __asm__ volatile("vmovdqu %0, %%ymm0" :: "m" ((ctx)->avx[0])); \
++ __asm__ volatile("vmovdqu %0, %%ymm1" :: "m" ((ctx)->avx[1])); \
++ __asm__ volatile("vmovdqu %0, %%ymm2" :: "m" ((ctx)->avx[2])); \
++ __asm__ volatile("vmovdqu %0, %%ymm3" :: "m" ((ctx)->avx[3])); \
+ }
+
+ #define FLETCHER_4_AVX2_SAVE_CTX(ctx) \
+ { \
+- asm volatile("vmovdqu %%ymm0, %0" : "=m" ((ctx)->avx[0])); \
+- asm volatile("vmovdqu %%ymm1, %0" : "=m" ((ctx)->avx[1])); \
+- asm volatile("vmovdqu %%ymm2, %0" : "=m" ((ctx)->avx[2])); \
+- asm volatile("vmovdqu %%ymm3, %0" : "=m" ((ctx)->avx[3])); \
++ __asm__ volatile("vmovdqu %%ymm0, %0" : "=m" ((ctx)->avx[0])); \
++ __asm__ volatile("vmovdqu %%ymm1, %0" : "=m" ((ctx)->avx[1])); \
++ __asm__ volatile("vmovdqu %%ymm2, %0" : "=m" ((ctx)->avx[2])); \
++ __asm__ volatile("vmovdqu %%ymm3, %0" : "=m" ((ctx)->avx[3])); \
+ }
+
+
+@@ -109,15 +109,15 @@ fletcher_4_avx2_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)
+ FLETCHER_4_AVX2_RESTORE_CTX(ctx);
+
+ for (; ip < ipend; ip += 2) {
+- asm volatile("vpmovzxdq %0, %%ymm4"::"m" (*ip));
+- asm volatile("vpaddq %ymm4, %ymm0, %ymm0");
+- asm volatile("vpaddq %ymm0, %ymm1, %ymm1");
+- asm volatile("vpaddq %ymm1, %ymm2, %ymm2");
+- asm volatile("vpaddq %ymm2, %ymm3, %ymm3");
++ __asm__ volatile("vpmovzxdq %0, %%ymm4"::"m" (*ip));
++ __asm__ volatile("vpaddq %ymm4, %ymm0, %ymm0");
++ __asm__ volatile("vpaddq %ymm0, %ymm1, %ymm1");
++ __asm__ volatile("vpaddq %ymm1, %ymm2, %ymm2");
++ __asm__ volatile("vpaddq %ymm2, %ymm3, %ymm3");
+ }
+
+ FLETCHER_4_AVX2_SAVE_CTX(ctx);
+- asm volatile("vzeroupper");
++ __asm__ volatile("vzeroupper");
+
+ kfpu_end();
+ }
+@@ -136,20 +136,20 @@ fletcher_4_avx2_byteswap(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)
+
+ FLETCHER_4_AVX2_RESTORE_CTX(ctx);
+
+- asm volatile("vmovdqu %0, %%ymm5" :: "m" (mask));
++ __asm__ volatile("vmovdqu %0, %%ymm5" :: "m" (mask));
+
+ for (; ip < ipend; ip += 2) {
+- asm volatile("vpmovzxdq %0, %%ymm4"::"m" (*ip));
+- asm volatile("vpshufb %ymm5, %ymm4, %ymm4");
++ __asm__ volatile("vpmovzxdq %0, %%ymm4"::"m" (*ip));
++ __asm__ volatile("vpshufb %ymm5, %ymm4, %ymm4");
+
+- asm volatile("vpaddq %ymm4, %ymm0, %ymm0");
+- asm volatile("vpaddq %ymm0, %ymm1, %ymm1");
+- asm volatile("vpaddq %ymm1, %ymm2, %ymm2");
+- asm volatile("vpaddq %ymm2, %ymm3, %ymm3");
++ __asm__ volatile("vpaddq %ymm4, %ymm0, %ymm0");
++ __asm__ volatile("vpaddq %ymm0, %ymm1, %ymm1");
++ __asm__ volatile("vpaddq %ymm1, %ymm2, %ymm2");
++ __asm__ volatile("vpaddq %ymm2, %ymm3, %ymm3");
+ }
+
+ FLETCHER_4_AVX2_SAVE_CTX(ctx);
+- asm volatile("vzeroupper");
++ __asm__ volatile("vzeroupper");
+
+ kfpu_end();
+ }
+diff --git a/module/zcommon/zfs_fletcher_sse.c b/module/zcommon/zfs_fletcher_sse.c
+index 15ce9b07f..3aca5485d 100644
+--- a/module/zcommon/zfs_fletcher_sse.c
++++ b/module/zcommon/zfs_fletcher_sse.c
+@@ -82,18 +82,18 @@ fletcher_4_sse2_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp)
+
+ #define FLETCHER_4_SSE_RESTORE_CTX(ctx) \
+ { \
+- asm volatile("movdqu %0, %%xmm0" :: "m" ((ctx)->sse[0])); \
+- asm volatile("movdqu %0, %%xmm1" :: "m" ((ctx)->sse[1])); \
+- asm volatile("movdqu %0, %%xmm2" :: "m" ((ctx)->sse[2])); \
+- asm volatile("movdqu %0, %%xmm3" :: "m" ((ctx)->sse[3])); \
++ __asm__ volatile("movdqu %0, %%xmm0" :: "m" ((ctx)->sse[0])); \
++ __asm__ volatile("movdqu %0, %%xmm1" :: "m" ((ctx)->sse[1])); \
++ __asm__ volatile("movdqu %0, %%xmm2" :: "m" ((ctx)->sse[2])); \
++ __asm__ volatile("movdqu %0, %%xmm3" :: "m" ((ctx)->sse[3])); \
+ }
+
+ #define FLETCHER_4_SSE_SAVE_CTX(ctx) \
+ { \
+- asm volatile("movdqu %%xmm0, %0" : "=m" ((ctx)->sse[0])); \
+- asm volatile("movdqu %%xmm1, %0" : "=m" ((ctx)->sse[1])); \
+- asm volatile("movdqu %%xmm2, %0" : "=m" ((ctx)->sse[2])); \
+- asm volatile("movdqu %%xmm3, %0" : "=m" ((ctx)->sse[3])); \
++ __asm__ volatile("movdqu %%xmm0, %0" : "=m" ((ctx)->sse[0])); \
++ __asm__ volatile("movdqu %%xmm1, %0" : "=m" ((ctx)->sse[1])); \
++ __asm__ volatile("movdqu %%xmm2, %0" : "=m" ((ctx)->sse[2])); \
++ __asm__ volatile("movdqu %%xmm3, %0" : "=m" ((ctx)->sse[3])); \
+ }
+
+ static void
+@@ -106,21 +106,21 @@ fletcher_4_sse2_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)
+
+ FLETCHER_4_SSE_RESTORE_CTX(ctx);
+
+- asm volatile("pxor %xmm4, %xmm4");
++ __asm__ volatile("pxor %xmm4, %xmm4");
+
+ for (; ip < ipend; ip += 2) {
+- asm volatile("movdqu %0, %%xmm5" :: "m"(*ip));
+- asm volatile("movdqa %xmm5, %xmm6");
+- asm volatile("punpckldq %xmm4, %xmm5");
+- asm volatile("punpckhdq %xmm4, %xmm6");
+- asm volatile("paddq %xmm5, %xmm0");
+- asm volatile("paddq %xmm0, %xmm1");
+- asm volatile("paddq %xmm1, %xmm2");
+- asm volatile("paddq %xmm2, %xmm3");
+- asm volatile("paddq %xmm6, %xmm0");
+- asm volatile("paddq %xmm0, %xmm1");
+- asm volatile("paddq %xmm1, %xmm2");
+- asm volatile("paddq %xmm2, %xmm3");
++ __asm__ volatile("movdqu %0, %%xmm5" :: "m"(*ip));
++ __asm__ volatile("movdqa %xmm5, %xmm6");
++ __asm__ volatile("punpckldq %xmm4, %xmm5");
++ __asm__ volatile("punpckhdq %xmm4, %xmm6");
++ __asm__ volatile("paddq %xmm5, %xmm0");
++ __asm__ volatile("paddq %xmm0, %xmm1");
++ __asm__ volatile("paddq %xmm1, %xmm2");
++ __asm__ volatile("paddq %xmm2, %xmm3");
++ __asm__ volatile("paddq %xmm6, %xmm0");
++ __asm__ volatile("paddq %xmm0, %xmm1");
++ __asm__ volatile("paddq %xmm1, %xmm2");
++ __asm__ volatile("paddq %xmm2, %xmm3");
+ }
+
+ FLETCHER_4_SSE_SAVE_CTX(ctx);
+@@ -141,13 +141,13 @@ fletcher_4_sse2_byteswap(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)
+ for (; ip < ipend; ip += 2) {
+ uint32_t scratch1 = BSWAP_32(ip[0]);
+ uint32_t scratch2 = BSWAP_32(ip[1]);
+- asm volatile("movd %0, %%xmm5" :: "r"(scratch1));
+- asm volatile("movd %0, %%xmm6" :: "r"(scratch2));
+- asm volatile("punpcklqdq %xmm6, %xmm5");
+- asm volatile("paddq %xmm5, %xmm0");
+- asm volatile("paddq %xmm0, %xmm1");
+- asm volatile("paddq %xmm1, %xmm2");
+- asm volatile("paddq %xmm2, %xmm3");
++ __asm__ volatile("movd %0, %%xmm5" :: "r"(scratch1));
++ __asm__ volatile("movd %0, %%xmm6" :: "r"(scratch2));
++ __asm__ volatile("punpcklqdq %xmm6, %xmm5");
++ __asm__ volatile("paddq %xmm5, %xmm0");
++ __asm__ volatile("paddq %xmm0, %xmm1");
++ __asm__ volatile("paddq %xmm1, %xmm2");
++ __asm__ volatile("paddq %xmm2, %xmm3");
+ }
+
+ FLETCHER_4_SSE_SAVE_CTX(ctx);
+@@ -188,23 +188,23 @@ fletcher_4_ssse3_byteswap(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)
+
+ FLETCHER_4_SSE_RESTORE_CTX(ctx);
+
+- asm volatile("movdqu %0, %%xmm7"::"m" (mask));
+- asm volatile("pxor %xmm4, %xmm4");
++ __asm__ volatile("movdqu %0, %%xmm7"::"m" (mask));
++ __asm__ volatile("pxor %xmm4, %xmm4");
+
+ for (; ip < ipend; ip += 2) {
+- asm volatile("movdqu %0, %%xmm5"::"m" (*ip));
+- asm volatile("pshufb %xmm7, %xmm5");
+- asm volatile("movdqa %xmm5, %xmm6");
+- asm volatile("punpckldq %xmm4, %xmm5");
+- asm volatile("punpckhdq %xmm4, %xmm6");
+- asm volatile("paddq %xmm5, %xmm0");
+- asm volatile("paddq %xmm0, %xmm1");
+- asm volatile("paddq %xmm1, %xmm2");
+- asm volatile("paddq %xmm2, %xmm3");
+- asm volatile("paddq %xmm6, %xmm0");
+- asm volatile("paddq %xmm0, %xmm1");
+- asm volatile("paddq %xmm1, %xmm2");
+- asm volatile("paddq %xmm2, %xmm3");
++ __asm__ volatile("movdqu %0, %%xmm5"::"m" (*ip));
++ __asm__ volatile("pshufb %xmm7, %xmm5");
++ __asm__ volatile("movdqa %xmm5, %xmm6");
++ __asm__ volatile("punpckldq %xmm4, %xmm5");
++ __asm__ volatile("punpckhdq %xmm4, %xmm6");
++ __asm__ volatile("paddq %xmm5, %xmm0");
++ __asm__ volatile("paddq %xmm0, %xmm1");
++ __asm__ volatile("paddq %xmm1, %xmm2");
++ __asm__ volatile("paddq %xmm2, %xmm3");
++ __asm__ volatile("paddq %xmm6, %xmm0");
++ __asm__ volatile("paddq %xmm0, %xmm1");
++ __asm__ volatile("paddq %xmm1, %xmm2");
++ __asm__ volatile("paddq %xmm2, %xmm3");
+ }
+
+ FLETCHER_4_SSE_SAVE_CTX(ctx);
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0005-Use-__func__-instead-of-obsolete-and-non-standard-__.patch b/pkg/zfs/patch/0005-Use-__func__-instead-of-obsolete-and-non-standard-__.patch
new file mode 100644
index 00000000..a41cfddc
--- /dev/null
+++ b/pkg/zfs/patch/0005-Use-__func__-instead-of-obsolete-and-non-standard-__.patch
@@ -0,0 +1,401 @@
+From 35e48da3329aff4eee7bb3ff2ddd81d982cfa307 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:12:32 -0800
+Subject: [PATCH] Use __func__ instead of obsolete and non-standard
+ __FUNCTION__
+
+---
+ include/os/freebsd/spl/sys/debug.h | 18 +++++++++---------
+ include/os/linux/spl/sys/debug.h | 18 +++++++++---------
+ lib/libspl/include/assert.h | 18 +++++++++---------
+ module/os/freebsd/zfs/crypto_os.c | 22 +++++++++++-----------
+ module/os/freebsd/zfs/zfs_vfsops.c | 4 ++--
+ module/os/freebsd/zfs/zio_crypt.c | 6 +++---
+ 6 files changed, 43 insertions(+), 43 deletions(-)
+
+diff --git a/include/os/freebsd/spl/sys/debug.h b/include/os/freebsd/spl/sys/debug.h
+index 1f820bc33..a5c12daa5 100644
+--- a/include/os/freebsd/spl/sys/debug.h
++++ b/include/os/freebsd/spl/sys/debug.h
+@@ -66,18 +66,18 @@ void spl_dumpstack(void);
+
+ /* BEGIN CSTYLED */
+ #define PANIC(fmt, a...) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
++ spl_panic(__FILE__, __func__, __LINE__, fmt, ## a)
+
+ #define VERIFY(cond) \
+ (void) (unlikely(!(cond)) && \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "%s", "VERIFY(" #cond ") failed\n"))
+
+ #define VERIFY3B(LEFT, OP, RIGHT) do { \
+ const boolean_t _verify3_left = (boolean_t)(LEFT); \
+ const boolean_t _verify3_right = (boolean_t)(RIGHT);\
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%d " #OP " %d)\n", \
+ (boolean_t) (_verify3_left), \
+@@ -88,7 +88,7 @@ void spl_dumpstack(void);
+ const int64_t _verify3_left = (int64_t)(LEFT); \
+ const int64_t _verify3_right = (int64_t)(RIGHT); \
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%lld " #OP " %lld)\n", \
+ (long long) (_verify3_left), \
+@@ -99,7 +99,7 @@ void spl_dumpstack(void);
+ const uint64_t _verify3_left = (uint64_t)(LEFT); \
+ const uint64_t _verify3_right = (uint64_t)(RIGHT); \
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%llu " #OP " %llu)\n", \
+ (unsigned long long) (_verify3_left), \
+@@ -110,7 +110,7 @@ void spl_dumpstack(void);
+ const uintptr_t _verify3_left = (uintptr_t)(LEFT); \
+ const uintptr_t _verify3_right = (uintptr_t)(RIGHT);\
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%px " #OP " %px)\n", \
+ (void *) (_verify3_left), \
+@@ -121,7 +121,7 @@ void spl_dumpstack(void);
+ const int64_t _verify3_left = (int64_t)(0); \
+ const int64_t _verify3_right = (int64_t)(RIGHT); \
+ if (unlikely(!(_verify3_left == _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(0 == " #RIGHT ") " \
+ "failed (0 == %lld)\n", \
+ (long long) (_verify3_right)); \
+@@ -155,11 +155,11 @@ void spl_dumpstack(void);
+ #define ASSERT VERIFY
+ #define IMPLY(A, B) \
+ ((void)(likely((!(A)) || (B)) || \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "(" #A ") implies (" #B ")")))
+ #define EQUIV(A, B) \
+ ((void)(likely(!!(A) == !!(B)) || \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "(" #A ") is equivalent to (" #B ")")))
+ /* END CSTYLED */
+
+diff --git a/include/os/linux/spl/sys/debug.h b/include/os/linux/spl/sys/debug.h
+index dc6b85eeb..b46c174cd 100644
+--- a/include/os/linux/spl/sys/debug.h
++++ b/include/os/linux/spl/sys/debug.h
+@@ -60,18 +60,18 @@ void spl_dumpstack(void);
+
+ /* BEGIN CSTYLED */
+ #define PANIC(fmt, a...) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
++ spl_panic(__FILE__, __func__, __LINE__, fmt, ## a)
+
+ #define VERIFY(cond) \
+ (void) (unlikely(!(cond)) && \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "%s", "VERIFY(" #cond ") failed\n"))
+
+ #define VERIFY3B(LEFT, OP, RIGHT) do { \
+ const boolean_t _verify3_left = (boolean_t)(LEFT); \
+ const boolean_t _verify3_right = (boolean_t)(RIGHT);\
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%d " #OP " %d)\n", \
+ (boolean_t) (_verify3_left), \
+@@ -82,7 +82,7 @@ void spl_dumpstack(void);
+ const int64_t _verify3_left = (int64_t)(LEFT); \
+ const int64_t _verify3_right = (int64_t)(RIGHT); \
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%lld " #OP " %lld)\n", \
+ (long long) (_verify3_left), \
+@@ -93,7 +93,7 @@ void spl_dumpstack(void);
+ const uint64_t _verify3_left = (uint64_t)(LEFT); \
+ const uint64_t _verify3_right = (uint64_t)(RIGHT); \
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%llu " #OP " %llu)\n", \
+ (unsigned long long) (_verify3_left), \
+@@ -104,7 +104,7 @@ void spl_dumpstack(void);
+ const uintptr_t _verify3_left = (uintptr_t)(LEFT); \
+ const uintptr_t _verify3_right = (uintptr_t)(RIGHT);\
+ if (unlikely(!(_verify3_left OP _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
+ "failed (%px " #OP " %px)\n", \
+ (void *) (_verify3_left), \
+@@ -115,7 +115,7 @@ void spl_dumpstack(void);
+ const int64_t _verify3_left = (int64_t)(0); \
+ const int64_t _verify3_right = (int64_t)(RIGHT); \
+ if (unlikely(!(_verify3_left == _verify3_right))) \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "VERIFY3(0 == " #RIGHT ") " \
+ "failed (0 == %lld)\n", \
+ (long long) (_verify3_right)); \
+@@ -155,11 +155,11 @@ void spl_dumpstack(void);
+ #define ASSERT VERIFY
+ #define IMPLY(A, B) \
+ ((void)(likely((!(A)) || (B)) || \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "(" #A ") implies (" #B ")")))
+ #define EQUIV(A, B) \
+ ((void)(likely(!!(A) == !!(B)) || \
+- spl_panic(__FILE__, __FUNCTION__, __LINE__, \
++ spl_panic(__FILE__, __func__, __LINE__, \
+ "(" #A ") is equivalent to (" #B ")")))
+ /* END CSTYLED */
+
+diff --git a/lib/libspl/include/assert.h b/lib/libspl/include/assert.h
+index 0503ce492..73f33077c 100644
+--- a/lib/libspl/include/assert.h
++++ b/lib/libspl/include/assert.h
+@@ -53,17 +53,17 @@ libspl_assert(const char *buf, const char *file, const char *func, int line)
+
+ #define VERIFY(cond) \
+ (void) ((!(cond)) && \
+- libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__))
++ libspl_assert(#cond, __FILE__, __func__, __LINE__))
+ #define verify(cond) \
+ (void) ((!(cond)) && \
+- libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__))
++ libspl_assert(#cond, __FILE__, __func__, __LINE__))
+
+ #define VERIFY3B(LEFT, OP, RIGHT) \
+ do { \
+ const boolean_t __left = (boolean_t)(LEFT); \
+ const boolean_t __right = (boolean_t)(RIGHT); \
+ if (!(__left OP __right)) \
+- libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
++ libspl_assertf(__FILE__, __func__, __LINE__, \
+ "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
+ (u_longlong_t)__left, #OP, (u_longlong_t)__right); \
+ } while (0)
+@@ -73,7 +73,7 @@ do { \
+ const int64_t __left = (int64_t)(LEFT); \
+ const int64_t __right = (int64_t)(RIGHT); \
+ if (!(__left OP __right)) \
+- libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
++ libspl_assertf(__FILE__, __func__, __LINE__, \
+ "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
+ (u_longlong_t)__left, #OP, (u_longlong_t)__right); \
+ } while (0)
+@@ -83,7 +83,7 @@ do { \
+ const uint64_t __left = (uint64_t)(LEFT); \
+ const uint64_t __right = (uint64_t)(RIGHT); \
+ if (!(__left OP __right)) \
+- libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
++ libspl_assertf(__FILE__, __func__, __LINE__, \
+ "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
+ (u_longlong_t)__left, #OP, (u_longlong_t)__right); \
+ } while (0)
+@@ -93,7 +93,7 @@ do { \
+ const uintptr_t __left = (uintptr_t)(LEFT); \
+ const uintptr_t __right = (uintptr_t)(RIGHT); \
+ if (!(__left OP __right)) \
+- libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
++ libspl_assertf(__FILE__, __func__, __LINE__, \
+ "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
+ (u_longlong_t)__left, #OP, (u_longlong_t)__right); \
+ } while (0)
+@@ -102,7 +102,7 @@ do { \
+ do { \
+ const uint64_t __left = (uint64_t)(LEFT); \
+ if (!(__left == 0)) \
+- libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
++ libspl_assertf(__FILE__, __func__, __LINE__, \
+ "%s == 0 (0x%llx == 0)", #LEFT, \
+ (u_longlong_t)__left); \
+ } while (0)
+@@ -140,11 +140,11 @@ do { \
+ #define IMPLY(A, B) \
+ ((void)(((!(A)) || (B)) || \
+ libspl_assert("(" #A ") implies (" #B ")", \
+- __FILE__, __FUNCTION__, __LINE__)))
++ __FILE__, __func__, __LINE__)))
+ #define EQUIV(A, B) \
+ ((void)((!!(A) == !!(B)) || \
+ libspl_assert("(" #A ") is equivalent to (" #B ")", \
+- __FILE__, __FUNCTION__, __LINE__)))
++ __FILE__, __func__, __LINE__)))
+
+ #endif /* NDEBUG */
+
+diff --git a/module/os/freebsd/zfs/crypto_os.c b/module/os/freebsd/zfs/crypto_os.c
+index f342c5e85..0ebc56e95 100644
+--- a/module/os/freebsd/zfs/crypto_os.c
++++ b/module/os/freebsd/zfs/crypto_os.c
+@@ -229,7 +229,7 @@ freebsd_crypt_uio_debug_log(boolean_t encrypt,
+
+ printf("%s(%s, %p, { %s, %d, %d, %s }, %p, { %d, %p, %u }, "
+ "%p, %u, %u)\n",
+- __FUNCTION__, encrypt ? "encrypt" : "decrypt", input_sessionp,
++ __func__, encrypt ? "encrypt" : "decrypt", input_sessionp,
+ c_info->ci_algname, c_info->ci_crypt_type,
+ (unsigned int)c_info->ci_keylen, c_info->ci_name,
+ data_uio, key->ck_format, key->ck_data,
+@@ -265,7 +265,7 @@ freebsd_crypt_newsession(freebsd_crypt_session_t *sessp,
+
+ #ifdef FCRYPTO_DEBUG
+ printf("%s(%p, { %s, %d, %d, %s }, { %d, %p, %u })\n",
+- __FUNCTION__, sessp,
++ __func__, sessp,
+ c_info->ci_algname, c_info->ci_crypt_type,
+ (unsigned int)c_info->ci_keylen, c_info->ci_name,
+ key->ck_format, key->ck_data, (unsigned int)key->ck_length);
+@@ -331,7 +331,7 @@ freebsd_crypt_newsession(freebsd_crypt_session_t *sessp,
+ bad:
+ #ifdef FCRYPTO_DEBUG
+ if (error)
+- printf("%s: returning error %d\n", __FUNCTION__, error);
++ printf("%s: returning error %d\n", __func__, error);
+ #endif
+ return (error);
+ }
+@@ -387,7 +387,7 @@ freebsd_crypt_uio(boolean_t encrypt,
+ out:
+ #ifdef FCRYPTO_DEBUG
+ if (error)
+- printf("%s: returning error %d\n", __FUNCTION__, error);
++ printf("%s: returning error %d\n", __func__, error);
+ #endif
+ if (input_sessionp == NULL) {
+ freebsd_crypt_freesession(session);
+@@ -409,7 +409,7 @@ freebsd_crypt_newsession(freebsd_crypt_session_t *sessp,
+
+ #ifdef FCRYPTO_DEBUG
+ printf("%s(%p, { %s, %d, %d, %s }, { %d, %p, %u })\n",
+- __FUNCTION__, sessp,
++ __func__, sessp,
+ c_info->ci_algname, c_info->ci_crypt_type,
+ (unsigned int)c_info->ci_keylen, c_info->ci_name,
+ key->ck_format, key->ck_data, (unsigned int)key->ck_length);
+@@ -463,7 +463,7 @@ freebsd_crypt_newsession(freebsd_crypt_session_t *sessp,
+ #ifdef FCRYPTO_DEBUG
+ printf("%s(%d): Using crypt %s (key length %u [%u bytes]), "
+ "auth %s (key length %d)\n",
+- __FUNCTION__, __LINE__,
++ __func__, __LINE__,
+ xform->name, (unsigned int)key->ck_length,
+ (unsigned int)key->ck_length/8,
+ xauth->name, xauth->keysize);
+@@ -489,7 +489,7 @@ freebsd_crypt_newsession(freebsd_crypt_session_t *sessp,
+ CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE);
+ if (error != 0) {
+ printf("%s(%d): crypto_newsession failed with %d\n",
+- __FUNCTION__, __LINE__, error);
++ __func__, __LINE__, error);
+ goto bad;
+ }
+ sessp->fs_sid = sid;
+@@ -569,7 +569,7 @@ freebsd_crypt_uio(boolean_t encrypt,
+ #ifdef FCRYPTO_DEBUG
+ printf("%s(%d): Using crypt %s (key length %u [%u bytes]), "
+ "auth %s (key length %d)\n",
+- __FUNCTION__, __LINE__,
++ __func__, __LINE__,
+ xform->name, (unsigned int)key->ck_length,
+ (unsigned int)key->ck_length/8,
+ xauth->name, xauth->keysize);
+@@ -603,7 +603,7 @@ freebsd_crypt_uio(boolean_t encrypt,
+ auth_desc->crd_alg = xauth->type;
+ #ifdef FCRYPTO_DEBUG
+ printf("%s: auth: skip = %u, len = %u, inject = %u\n",
+- __FUNCTION__, auth_desc->crd_skip, auth_desc->crd_len,
++ __func__, auth_desc->crd_skip, auth_desc->crd_len,
+ auth_desc->crd_inject);
+ #endif
+
+@@ -617,7 +617,7 @@ freebsd_crypt_uio(boolean_t encrypt,
+
+ #ifdef FCRYPTO_DEBUG
+ printf("%s: enc: skip = %u, len = %u, inject = %u\n",
+- __FUNCTION__, enc_desc->crd_skip, enc_desc->crd_len,
++ __func__, enc_desc->crd_skip, enc_desc->crd_len,
+ enc_desc->crd_inject);
+ #endif
+
+@@ -634,7 +634,7 @@ out:
+ bad:
+ #ifdef FCRYPTO_DEBUG
+ if (error)
+- printf("%s: returning error %d\n", __FUNCTION__, error);
++ printf("%s: returning error %d\n", __func__, error);
+ #endif
+ return (error);
+ }
+diff --git a/module/os/freebsd/zfs/zfs_vfsops.c b/module/os/freebsd/zfs/zfs_vfsops.c
+index 05d41d4e3..01b12b12c 100644
+--- a/module/os/freebsd/zfs/zfs_vfsops.c
++++ b/module/os/freebsd/zfs/zfs_vfsops.c
+@@ -244,7 +244,7 @@ zfs_getquota(zfsvfs_t *zfsvfs, uid_t id, int isgroup, struct dqblk64 *dqp)
+ if ((error = zap_lookup(zfsvfs->z_os, quotaobj,
+ buf, sizeof (quota), 1, &quota)) != 0) {
+ dprintf("%s(%d): quotaobj lookup failed\n",
+- __FUNCTION__, __LINE__);
++ __func__, __LINE__);
+ goto done;
+ }
+ /*
+@@ -255,7 +255,7 @@ zfs_getquota(zfsvfs_t *zfsvfs, uid_t id, int isgroup, struct dqblk64 *dqp)
+ error = zap_lookup(zfsvfs->z_os, usedobj, buf, sizeof (used), 1, &used);
+ if (error && error != ENOENT) {
+ dprintf("%s(%d): usedobj failed; %d\n",
+- __FUNCTION__, __LINE__, error);
++ __func__, __LINE__, error);
+ goto done;
+ }
+ dqp->dqb_curblocks = btodb(used);
+diff --git a/module/os/freebsd/zfs/zio_crypt.c b/module/os/freebsd/zfs/zio_crypt.c
+index 9e0ab52a2..997f2492f 100644
+--- a/module/os/freebsd/zfs/zio_crypt.c
++++ b/module/os/freebsd/zfs/zio_crypt.c
+@@ -420,7 +420,7 @@ zio_do_crypt_uio_opencrypto(boolean_t encrypt, freebsd_crypt_session_t *sess,
+ if (ret != 0) {
+ #ifdef FCRYPTO_DEBUG
+ printf("%s(%d): Returning error %s\n",
+- __FUNCTION__, __LINE__, encrypt ? "EIO" : "ECKSUM");
++ __func__, __LINE__, encrypt ? "EIO" : "ECKSUM");
+ #endif
+ ret = SET_ERROR(encrypt ? EIO : ECKSUM);
+ }
+@@ -1195,7 +1195,7 @@ zio_crypt_do_indirect_mac_checksum_impl(boolean_t generate, void *buf,
+
+ if (bcmp(digestbuf, cksum, ZIO_DATA_MAC_LEN) != 0) {
+ #ifdef FCRYPTO_DEBUG
+- printf("%s(%d): Setting ECKSUM\n", __FUNCTION__, __LINE__);
++ printf("%s(%d): Setting ECKSUM\n", __func__, __LINE__);
+ #endif
+ return (SET_ERROR(ECKSUM));
+ }
+@@ -1700,7 +1700,7 @@ zio_do_crypt_data(boolean_t encrypt, zio_crypt_key_t *key,
+
+ #ifdef FCRYPTO_DEBUG
+ printf("%s(%s, %p, %p, %d, %p, %p, %u, %s, %p, %p, %p)\n",
+- __FUNCTION__,
++ __func__,
+ encrypt ? "encrypt" : "decrypt",
+ key, salt, ot, iv, mac, datalen,
+ byteswap ? "byteswap" : "native_endian", plainbuf,
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0006-Use-forward-declaration-instead-of-empty-struct.patch b/pkg/zfs/patch/0006-Use-forward-declaration-instead-of-empty-struct.patch
new file mode 100644
index 00000000..99c71827
--- /dev/null
+++ b/pkg/zfs/patch/0006-Use-forward-declaration-instead-of-empty-struct.patch
@@ -0,0 +1,25 @@
+From 50878832d41ef03d61f5db2dc7a89039b2ba5889 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:15:47 -0800
+Subject: [PATCH] Use forward declaration instead of empty struct
+
+---
+ include/sys/zfs_context.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h
+index a6ff94317..42384d83a 100644
+--- a/include/sys/zfs_context.h
++++ b/include/sys/zfs_context.h
+@@ -380,7 +380,7 @@ typedef struct procfs_list {
+ } procfs_list_t;
+
+ #ifndef __cplusplus
+-struct seq_file { };
++struct seq_file;
+ void seq_printf(struct seq_file *m, const char *fmt, ...);
+
+ typedef struct procfs_list_node {
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0007-Avoid-conflict-with-C23-bool-keyword.patch b/pkg/zfs/patch/0007-Avoid-conflict-with-C23-bool-keyword.patch
new file mode 100644
index 00000000..1bde5c95
--- /dev/null
+++ b/pkg/zfs/patch/0007-Avoid-conflict-with-C23-bool-keyword.patch
@@ -0,0 +1,25 @@
+From bf9e24e3fe87474e71555b3421bfaa7d0c5e1882 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:18:50 -0800
+Subject: [PATCH] Avoid conflict with C23 bool keyword
+
+---
+ cmd/zed/agents/fmd_api.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmd/zed/agents/fmd_api.h b/cmd/zed/agents/fmd_api.h
+index 4f06fb244..45c1f2ce2 100644
+--- a/cmd/zed/agents/fmd_api.h
++++ b/cmd/zed/agents/fmd_api.h
+@@ -109,7 +109,7 @@ typedef struct fmd_stat {
+ uint_t fmds_type; /* statistic type (see above) */
+ char fmds_desc[64]; /* statistic description */
+ union {
+- int bool; /* FMD_TYPE_BOOL */
++ int b; /* FMD_TYPE_BOOL */
+ int32_t i32; /* FMD_TYPE_INT32 */
+ uint32_t ui32; /* FMD_TYPE_UINT32 */
+ int64_t i64; /* FMD_TYPE_INT64 */
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0008-Remove-stray-at-top-level.patch b/pkg/zfs/patch/0008-Remove-stray-at-top-level.patch
new file mode 100644
index 00000000..87ed8de0
--- /dev/null
+++ b/pkg/zfs/patch/0008-Remove-stray-at-top-level.patch
@@ -0,0 +1,421 @@
+From 54212b1aebdb3c5ffa7904eed7b9a09490aca1e1 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:17:48 -0800
+Subject: [PATCH] Remove stray ';' at top-level
+
+---
+ module/avl/avl.c | 46 +++----
+ module/nvpair/nvpair.c | 240 ++++++++++++++++-----------------
+ module/zcommon/zfs_namecheck.c | 20 +--
+ module/zcommon/zfs_prop.c | 50 +++----
+ 4 files changed, 178 insertions(+), 178 deletions(-)
+
+diff --git a/module/avl/avl.c b/module/avl/avl.c
+index f761a8ae7..18dbe1b99 100644
+--- a/module/avl/avl.c
++++ b/module/avl/avl.c
+@@ -1052,26 +1052,26 @@ module_init(avl_init);
+ module_exit(avl_fini);
+ #endif
+
+-ZFS_MODULE_DESCRIPTION("Generic AVL tree implementation");
+-ZFS_MODULE_AUTHOR(ZFS_META_AUTHOR);
+-ZFS_MODULE_LICENSE(ZFS_META_LICENSE);
+-ZFS_MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE);
+-
+-EXPORT_SYMBOL(avl_create);
+-EXPORT_SYMBOL(avl_find);
+-EXPORT_SYMBOL(avl_insert);
+-EXPORT_SYMBOL(avl_insert_here);
+-EXPORT_SYMBOL(avl_walk);
+-EXPORT_SYMBOL(avl_first);
+-EXPORT_SYMBOL(avl_last);
+-EXPORT_SYMBOL(avl_nearest);
+-EXPORT_SYMBOL(avl_add);
+-EXPORT_SYMBOL(avl_swap);
+-EXPORT_SYMBOL(avl_is_empty);
+-EXPORT_SYMBOL(avl_remove);
+-EXPORT_SYMBOL(avl_numnodes);
+-EXPORT_SYMBOL(avl_destroy_nodes);
+-EXPORT_SYMBOL(avl_destroy);
+-EXPORT_SYMBOL(avl_update_lt);
+-EXPORT_SYMBOL(avl_update_gt);
+-EXPORT_SYMBOL(avl_update);
++ZFS_MODULE_DESCRIPTION("Generic AVL tree implementation")
++ZFS_MODULE_AUTHOR(ZFS_META_AUTHOR)
++ZFS_MODULE_LICENSE(ZFS_META_LICENSE)
++ZFS_MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE)
++
++EXPORT_SYMBOL(avl_create)
++EXPORT_SYMBOL(avl_find)
++EXPORT_SYMBOL(avl_insert)
++EXPORT_SYMBOL(avl_insert_here)
++EXPORT_SYMBOL(avl_walk)
++EXPORT_SYMBOL(avl_first)
++EXPORT_SYMBOL(avl_last)
++EXPORT_SYMBOL(avl_nearest)
++EXPORT_SYMBOL(avl_add)
++EXPORT_SYMBOL(avl_swap)
++EXPORT_SYMBOL(avl_is_empty)
++EXPORT_SYMBOL(avl_remove)
++EXPORT_SYMBOL(avl_numnodes)
++EXPORT_SYMBOL(avl_destroy_nodes)
++EXPORT_SYMBOL(avl_destroy)
++EXPORT_SYMBOL(avl_update_lt)
++EXPORT_SYMBOL(avl_update_gt)
++EXPORT_SYMBOL(avl_update)
+diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c
+index 9834dedd8..6dfebb0ec 100644
+--- a/module/nvpair/nvpair.c
++++ b/module/nvpair/nvpair.c
+@@ -3256,13 +3256,13 @@ nvs_xdr_nvp_##type(XDR *xdrs, void *ptr, ...) \
+ #endif
+
+ /* BEGIN CSTYLED */
+-NVS_BUILD_XDRPROC_T(char);
+-NVS_BUILD_XDRPROC_T(short);
+-NVS_BUILD_XDRPROC_T(u_short);
+-NVS_BUILD_XDRPROC_T(int);
+-NVS_BUILD_XDRPROC_T(u_int);
+-NVS_BUILD_XDRPROC_T(longlong_t);
+-NVS_BUILD_XDRPROC_T(u_longlong_t);
++NVS_BUILD_XDRPROC_T(char)
++NVS_BUILD_XDRPROC_T(short)
++NVS_BUILD_XDRPROC_T(u_short)
++NVS_BUILD_XDRPROC_T(int)
++NVS_BUILD_XDRPROC_T(u_int)
++NVS_BUILD_XDRPROC_T(longlong_t)
++NVS_BUILD_XDRPROC_T(u_longlong_t)
+ /* END CSTYLED */
+
+ /*
+@@ -3672,121 +3672,121 @@ module_init(nvpair_init);
+ module_exit(nvpair_fini);
+ #endif
+
+-ZFS_MODULE_DESCRIPTION("Generic name/value pair implementation");
+-ZFS_MODULE_AUTHOR(ZFS_META_AUTHOR);
+-ZFS_MODULE_LICENSE(ZFS_META_LICENSE);
+-ZFS_MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE);
++ZFS_MODULE_DESCRIPTION("Generic name/value pair implementation")
++ZFS_MODULE_AUTHOR(ZFS_META_AUTHOR)
++ZFS_MODULE_LICENSE(ZFS_META_LICENSE)
++ZFS_MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE)
+
+-EXPORT_SYMBOL(nv_alloc_init);
+-EXPORT_SYMBOL(nv_alloc_reset);
+-EXPORT_SYMBOL(nv_alloc_fini);
++EXPORT_SYMBOL(nv_alloc_init)
++EXPORT_SYMBOL(nv_alloc_reset)
++EXPORT_SYMBOL(nv_alloc_fini)
+
+ /* list management */
+-EXPORT_SYMBOL(nvlist_alloc);
+-EXPORT_SYMBOL(nvlist_free);
+-EXPORT_SYMBOL(nvlist_size);
+-EXPORT_SYMBOL(nvlist_pack);
+-EXPORT_SYMBOL(nvlist_unpack);
+-EXPORT_SYMBOL(nvlist_dup);
+-EXPORT_SYMBOL(nvlist_merge);
+-
+-EXPORT_SYMBOL(nvlist_xalloc);
+-EXPORT_SYMBOL(nvlist_xpack);
+-EXPORT_SYMBOL(nvlist_xunpack);
+-EXPORT_SYMBOL(nvlist_xdup);
+-EXPORT_SYMBOL(nvlist_lookup_nv_alloc);
+-
+-EXPORT_SYMBOL(nvlist_add_nvpair);
+-EXPORT_SYMBOL(nvlist_add_boolean);
+-EXPORT_SYMBOL(nvlist_add_boolean_value);
+-EXPORT_SYMBOL(nvlist_add_byte);
+-EXPORT_SYMBOL(nvlist_add_int8);
+-EXPORT_SYMBOL(nvlist_add_uint8);
+-EXPORT_SYMBOL(nvlist_add_int16);
+-EXPORT_SYMBOL(nvlist_add_uint16);
+-EXPORT_SYMBOL(nvlist_add_int32);
+-EXPORT_SYMBOL(nvlist_add_uint32);
+-EXPORT_SYMBOL(nvlist_add_int64);
+-EXPORT_SYMBOL(nvlist_add_uint64);
+-EXPORT_SYMBOL(nvlist_add_string);
+-EXPORT_SYMBOL(nvlist_add_nvlist);
+-EXPORT_SYMBOL(nvlist_add_boolean_array);
+-EXPORT_SYMBOL(nvlist_add_byte_array);
+-EXPORT_SYMBOL(nvlist_add_int8_array);
+-EXPORT_SYMBOL(nvlist_add_uint8_array);
+-EXPORT_SYMBOL(nvlist_add_int16_array);
+-EXPORT_SYMBOL(nvlist_add_uint16_array);
+-EXPORT_SYMBOL(nvlist_add_int32_array);
+-EXPORT_SYMBOL(nvlist_add_uint32_array);
+-EXPORT_SYMBOL(nvlist_add_int64_array);
+-EXPORT_SYMBOL(nvlist_add_uint64_array);
+-EXPORT_SYMBOL(nvlist_add_string_array);
+-EXPORT_SYMBOL(nvlist_add_nvlist_array);
+-EXPORT_SYMBOL(nvlist_next_nvpair);
+-EXPORT_SYMBOL(nvlist_prev_nvpair);
+-EXPORT_SYMBOL(nvlist_empty);
+-EXPORT_SYMBOL(nvlist_add_hrtime);
+-
+-EXPORT_SYMBOL(nvlist_remove);
+-EXPORT_SYMBOL(nvlist_remove_nvpair);
+-EXPORT_SYMBOL(nvlist_remove_all);
+-
+-EXPORT_SYMBOL(nvlist_lookup_boolean);
+-EXPORT_SYMBOL(nvlist_lookup_boolean_value);
+-EXPORT_SYMBOL(nvlist_lookup_byte);
+-EXPORT_SYMBOL(nvlist_lookup_int8);
+-EXPORT_SYMBOL(nvlist_lookup_uint8);
+-EXPORT_SYMBOL(nvlist_lookup_int16);
+-EXPORT_SYMBOL(nvlist_lookup_uint16);
+-EXPORT_SYMBOL(nvlist_lookup_int32);
+-EXPORT_SYMBOL(nvlist_lookup_uint32);
+-EXPORT_SYMBOL(nvlist_lookup_int64);
+-EXPORT_SYMBOL(nvlist_lookup_uint64);
+-EXPORT_SYMBOL(nvlist_lookup_string);
+-EXPORT_SYMBOL(nvlist_lookup_nvlist);
+-EXPORT_SYMBOL(nvlist_lookup_boolean_array);
+-EXPORT_SYMBOL(nvlist_lookup_byte_array);
+-EXPORT_SYMBOL(nvlist_lookup_int8_array);
+-EXPORT_SYMBOL(nvlist_lookup_uint8_array);
+-EXPORT_SYMBOL(nvlist_lookup_int16_array);
+-EXPORT_SYMBOL(nvlist_lookup_uint16_array);
+-EXPORT_SYMBOL(nvlist_lookup_int32_array);
+-EXPORT_SYMBOL(nvlist_lookup_uint32_array);
+-EXPORT_SYMBOL(nvlist_lookup_int64_array);
+-EXPORT_SYMBOL(nvlist_lookup_uint64_array);
+-EXPORT_SYMBOL(nvlist_lookup_string_array);
+-EXPORT_SYMBOL(nvlist_lookup_nvlist_array);
+-EXPORT_SYMBOL(nvlist_lookup_hrtime);
+-EXPORT_SYMBOL(nvlist_lookup_pairs);
+-
+-EXPORT_SYMBOL(nvlist_lookup_nvpair);
+-EXPORT_SYMBOL(nvlist_exists);
++EXPORT_SYMBOL(nvlist_alloc)
++EXPORT_SYMBOL(nvlist_free)
++EXPORT_SYMBOL(nvlist_size)
++EXPORT_SYMBOL(nvlist_pack)
++EXPORT_SYMBOL(nvlist_unpack)
++EXPORT_SYMBOL(nvlist_dup)
++EXPORT_SYMBOL(nvlist_merge)
++
++EXPORT_SYMBOL(nvlist_xalloc)
++EXPORT_SYMBOL(nvlist_xpack)
++EXPORT_SYMBOL(nvlist_xunpack)
++EXPORT_SYMBOL(nvlist_xdup)
++EXPORT_SYMBOL(nvlist_lookup_nv_alloc)
++
++EXPORT_SYMBOL(nvlist_add_nvpair)
++EXPORT_SYMBOL(nvlist_add_boolean)
++EXPORT_SYMBOL(nvlist_add_boolean_value)
++EXPORT_SYMBOL(nvlist_add_byte)
++EXPORT_SYMBOL(nvlist_add_int8)
++EXPORT_SYMBOL(nvlist_add_uint8)
++EXPORT_SYMBOL(nvlist_add_int16)
++EXPORT_SYMBOL(nvlist_add_uint16)
++EXPORT_SYMBOL(nvlist_add_int32)
++EXPORT_SYMBOL(nvlist_add_uint32)
++EXPORT_SYMBOL(nvlist_add_int64)
++EXPORT_SYMBOL(nvlist_add_uint64)
++EXPORT_SYMBOL(nvlist_add_string)
++EXPORT_SYMBOL(nvlist_add_nvlist)
++EXPORT_SYMBOL(nvlist_add_boolean_array)
++EXPORT_SYMBOL(nvlist_add_byte_array)
++EXPORT_SYMBOL(nvlist_add_int8_array)
++EXPORT_SYMBOL(nvlist_add_uint8_array)
++EXPORT_SYMBOL(nvlist_add_int16_array)
++EXPORT_SYMBOL(nvlist_add_uint16_array)
++EXPORT_SYMBOL(nvlist_add_int32_array)
++EXPORT_SYMBOL(nvlist_add_uint32_array)
++EXPORT_SYMBOL(nvlist_add_int64_array)
++EXPORT_SYMBOL(nvlist_add_uint64_array)
++EXPORT_SYMBOL(nvlist_add_string_array)
++EXPORT_SYMBOL(nvlist_add_nvlist_array)
++EXPORT_SYMBOL(nvlist_next_nvpair)
++EXPORT_SYMBOL(nvlist_prev_nvpair)
++EXPORT_SYMBOL(nvlist_empty)
++EXPORT_SYMBOL(nvlist_add_hrtime)
++
++EXPORT_SYMBOL(nvlist_remove)
++EXPORT_SYMBOL(nvlist_remove_nvpair)
++EXPORT_SYMBOL(nvlist_remove_all)
++
++EXPORT_SYMBOL(nvlist_lookup_boolean)
++EXPORT_SYMBOL(nvlist_lookup_boolean_value)
++EXPORT_SYMBOL(nvlist_lookup_byte)
++EXPORT_SYMBOL(nvlist_lookup_int8)
++EXPORT_SYMBOL(nvlist_lookup_uint8)
++EXPORT_SYMBOL(nvlist_lookup_int16)
++EXPORT_SYMBOL(nvlist_lookup_uint16)
++EXPORT_SYMBOL(nvlist_lookup_int32)
++EXPORT_SYMBOL(nvlist_lookup_uint32)
++EXPORT_SYMBOL(nvlist_lookup_int64)
++EXPORT_SYMBOL(nvlist_lookup_uint64)
++EXPORT_SYMBOL(nvlist_lookup_string)
++EXPORT_SYMBOL(nvlist_lookup_nvlist)
++EXPORT_SYMBOL(nvlist_lookup_boolean_array)
++EXPORT_SYMBOL(nvlist_lookup_byte_array)
++EXPORT_SYMBOL(nvlist_lookup_int8_array)
++EXPORT_SYMBOL(nvlist_lookup_uint8_array)
++EXPORT_SYMBOL(nvlist_lookup_int16_array)
++EXPORT_SYMBOL(nvlist_lookup_uint16_array)
++EXPORT_SYMBOL(nvlist_lookup_int32_array)
++EXPORT_SYMBOL(nvlist_lookup_uint32_array)
++EXPORT_SYMBOL(nvlist_lookup_int64_array)
++EXPORT_SYMBOL(nvlist_lookup_uint64_array)
++EXPORT_SYMBOL(nvlist_lookup_string_array)
++EXPORT_SYMBOL(nvlist_lookup_nvlist_array)
++EXPORT_SYMBOL(nvlist_lookup_hrtime)
++EXPORT_SYMBOL(nvlist_lookup_pairs)
++
++EXPORT_SYMBOL(nvlist_lookup_nvpair)
++EXPORT_SYMBOL(nvlist_exists)
+
+ /* processing nvpair */
+-EXPORT_SYMBOL(nvpair_name);
+-EXPORT_SYMBOL(nvpair_type);
+-EXPORT_SYMBOL(nvpair_value_boolean_value);
+-EXPORT_SYMBOL(nvpair_value_byte);
+-EXPORT_SYMBOL(nvpair_value_int8);
+-EXPORT_SYMBOL(nvpair_value_uint8);
+-EXPORT_SYMBOL(nvpair_value_int16);
+-EXPORT_SYMBOL(nvpair_value_uint16);
+-EXPORT_SYMBOL(nvpair_value_int32);
+-EXPORT_SYMBOL(nvpair_value_uint32);
+-EXPORT_SYMBOL(nvpair_value_int64);
+-EXPORT_SYMBOL(nvpair_value_uint64);
+-EXPORT_SYMBOL(nvpair_value_string);
+-EXPORT_SYMBOL(nvpair_value_nvlist);
+-EXPORT_SYMBOL(nvpair_value_boolean_array);
+-EXPORT_SYMBOL(nvpair_value_byte_array);
+-EXPORT_SYMBOL(nvpair_value_int8_array);
+-EXPORT_SYMBOL(nvpair_value_uint8_array);
+-EXPORT_SYMBOL(nvpair_value_int16_array);
+-EXPORT_SYMBOL(nvpair_value_uint16_array);
+-EXPORT_SYMBOL(nvpair_value_int32_array);
+-EXPORT_SYMBOL(nvpair_value_uint32_array);
+-EXPORT_SYMBOL(nvpair_value_int64_array);
+-EXPORT_SYMBOL(nvpair_value_uint64_array);
+-EXPORT_SYMBOL(nvpair_value_string_array);
+-EXPORT_SYMBOL(nvpair_value_nvlist_array);
+-EXPORT_SYMBOL(nvpair_value_hrtime);
++EXPORT_SYMBOL(nvpair_name)
++EXPORT_SYMBOL(nvpair_type)
++EXPORT_SYMBOL(nvpair_value_boolean_value)
++EXPORT_SYMBOL(nvpair_value_byte)
++EXPORT_SYMBOL(nvpair_value_int8)
++EXPORT_SYMBOL(nvpair_value_uint8)
++EXPORT_SYMBOL(nvpair_value_int16)
++EXPORT_SYMBOL(nvpair_value_uint16)
++EXPORT_SYMBOL(nvpair_value_int32)
++EXPORT_SYMBOL(nvpair_value_uint32)
++EXPORT_SYMBOL(nvpair_value_int64)
++EXPORT_SYMBOL(nvpair_value_uint64)
++EXPORT_SYMBOL(nvpair_value_string)
++EXPORT_SYMBOL(nvpair_value_nvlist)
++EXPORT_SYMBOL(nvpair_value_boolean_array)
++EXPORT_SYMBOL(nvpair_value_byte_array)
++EXPORT_SYMBOL(nvpair_value_int8_array)
++EXPORT_SYMBOL(nvpair_value_uint8_array)
++EXPORT_SYMBOL(nvpair_value_int16_array)
++EXPORT_SYMBOL(nvpair_value_uint16_array)
++EXPORT_SYMBOL(nvpair_value_int32_array)
++EXPORT_SYMBOL(nvpair_value_uint32_array)
++EXPORT_SYMBOL(nvpair_value_int64_array)
++EXPORT_SYMBOL(nvpair_value_uint64_array)
++EXPORT_SYMBOL(nvpair_value_string_array)
++EXPORT_SYMBOL(nvpair_value_nvlist_array)
++EXPORT_SYMBOL(nvpair_value_hrtime)
+diff --git a/module/zcommon/zfs_namecheck.c b/module/zcommon/zfs_namecheck.c
+index 7ecce451b..5f6b8a3b9 100644
+--- a/module/zcommon/zfs_namecheck.c
++++ b/module/zcommon/zfs_namecheck.c
+@@ -453,15 +453,15 @@ pool_namecheck(const char *pool, namecheck_err_t *why, char *what)
+ return (0);
+ }
+
+-EXPORT_SYMBOL(entity_namecheck);
+-EXPORT_SYMBOL(pool_namecheck);
+-EXPORT_SYMBOL(dataset_namecheck);
+-EXPORT_SYMBOL(bookmark_namecheck);
+-EXPORT_SYMBOL(snapshot_namecheck);
+-EXPORT_SYMBOL(zfs_component_namecheck);
+-EXPORT_SYMBOL(dataset_nestcheck);
+-EXPORT_SYMBOL(get_dataset_depth);
+-EXPORT_SYMBOL(zfs_max_dataset_nesting);
++EXPORT_SYMBOL(entity_namecheck)
++EXPORT_SYMBOL(pool_namecheck)
++EXPORT_SYMBOL(dataset_namecheck)
++EXPORT_SYMBOL(bookmark_namecheck)
++EXPORT_SYMBOL(snapshot_namecheck)
++EXPORT_SYMBOL(zfs_component_namecheck)
++EXPORT_SYMBOL(dataset_nestcheck)
++EXPORT_SYMBOL(get_dataset_depth)
++EXPORT_SYMBOL(zfs_max_dataset_nesting)
+
+ ZFS_MODULE_PARAM(zfs, zfs_, max_dataset_nesting, INT, ZMOD_RW,
+- "Limit to the amount of nesting a path can have. Defaults to 50.");
++ "Limit to the amount of nesting a path can have. Defaults to 50.")
+diff --git a/module/zcommon/zfs_prop.c b/module/zcommon/zfs_prop.c
+index b4e8fcf1f..9de54aa44 100644
+--- a/module/zcommon/zfs_prop.c
++++ b/module/zcommon/zfs_prop.c
+@@ -1054,32 +1054,32 @@ module_exit(zcommon_fini);
+
+ #endif
+
+-ZFS_MODULE_DESCRIPTION("Generic ZFS support");
+-ZFS_MODULE_AUTHOR(ZFS_META_AUTHOR);
+-ZFS_MODULE_LICENSE(ZFS_META_LICENSE);
+-ZFS_MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE);
++ZFS_MODULE_DESCRIPTION("Generic ZFS support")
++ZFS_MODULE_AUTHOR(ZFS_META_AUTHOR)
++ZFS_MODULE_LICENSE(ZFS_META_LICENSE)
++ZFS_MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE)
+
+ /* zfs dataset property functions */
+-EXPORT_SYMBOL(zfs_userquota_prop_prefixes);
+-EXPORT_SYMBOL(zfs_prop_init);
+-EXPORT_SYMBOL(zfs_prop_get_type);
+-EXPORT_SYMBOL(zfs_prop_get_table);
+-EXPORT_SYMBOL(zfs_prop_delegatable);
+-EXPORT_SYMBOL(zfs_prop_visible);
++EXPORT_SYMBOL(zfs_userquota_prop_prefixes)
++EXPORT_SYMBOL(zfs_prop_init)
++EXPORT_SYMBOL(zfs_prop_get_type)
++EXPORT_SYMBOL(zfs_prop_get_table)
++EXPORT_SYMBOL(zfs_prop_delegatable)
++EXPORT_SYMBOL(zfs_prop_visible)
+
+ /* Dataset property functions shared between libzfs and kernel. */
+-EXPORT_SYMBOL(zfs_prop_default_string);
+-EXPORT_SYMBOL(zfs_prop_default_numeric);
+-EXPORT_SYMBOL(zfs_prop_readonly);
+-EXPORT_SYMBOL(zfs_prop_inheritable);
+-EXPORT_SYMBOL(zfs_prop_encryption_key_param);
+-EXPORT_SYMBOL(zfs_prop_valid_keylocation);
+-EXPORT_SYMBOL(zfs_prop_setonce);
+-EXPORT_SYMBOL(zfs_prop_to_name);
+-EXPORT_SYMBOL(zfs_name_to_prop);
+-EXPORT_SYMBOL(zfs_prop_user);
+-EXPORT_SYMBOL(zfs_prop_userquota);
+-EXPORT_SYMBOL(zfs_prop_index_to_string);
+-EXPORT_SYMBOL(zfs_prop_string_to_index);
+-EXPORT_SYMBOL(zfs_prop_valid_for_type);
+-EXPORT_SYMBOL(zfs_prop_written);
++EXPORT_SYMBOL(zfs_prop_default_string)
++EXPORT_SYMBOL(zfs_prop_default_numeric)
++EXPORT_SYMBOL(zfs_prop_readonly)
++EXPORT_SYMBOL(zfs_prop_inheritable)
++EXPORT_SYMBOL(zfs_prop_encryption_key_param)
++EXPORT_SYMBOL(zfs_prop_valid_keylocation)
++EXPORT_SYMBOL(zfs_prop_setonce)
++EXPORT_SYMBOL(zfs_prop_to_name)
++EXPORT_SYMBOL(zfs_name_to_prop)
++EXPORT_SYMBOL(zfs_prop_user)
++EXPORT_SYMBOL(zfs_prop_userquota)
++EXPORT_SYMBOL(zfs_prop_index_to_string)
++EXPORT_SYMBOL(zfs_prop_string_to_index)
++EXPORT_SYMBOL(zfs_prop_valid_for_type)
++EXPORT_SYMBOL(zfs_prop_written)
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0009-Avoid-use-of-long-double-function.patch b/pkg/zfs/patch/0009-Avoid-use-of-long-double-function.patch
new file mode 100644
index 00000000..ea4ca5a9
--- /dev/null
+++ b/pkg/zfs/patch/0009-Avoid-use-of-long-double-function.patch
@@ -0,0 +1,34 @@
+From 36c4199b3392557bffc375444696bdc6ec36ebae Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:30:39 -0800
+Subject: [PATCH] Avoid use of long double function
+
+---
+ lib/libzutil/zutil_nicenum.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/libzutil/zutil_nicenum.c b/lib/libzutil/zutil_nicenum.c
+index 4dcac1f85..5bde425f4 100644
+--- a/lib/libzutil/zutil_nicenum.c
++++ b/lib/libzutil/zutil_nicenum.c
+@@ -102,7 +102,7 @@ zfs_nicenum_format(uint64_t num, char *buf, size_t buflen,
+ if ((format == ZFS_NICENUM_TIME) && (num == 0)) {
+ (void) snprintf(buf, buflen, "-");
+ } else if ((index == 0) || ((num %
+- (uint64_t)powl(k_unit[format], index)) == 0)) {
++ (uint64_t)pow(k_unit[format], index)) == 0)) {
+ /*
+ * If this is an even multiple of the base, always display
+ * without any decimal precision.
+@@ -122,7 +122,7 @@ zfs_nicenum_format(uint64_t num, char *buf, size_t buflen,
+ int i;
+ for (i = 2; i >= 0; i--) {
+ val = (double)num /
+- (uint64_t)powl(k_unit[format], index);
++ (uint64_t)pow(k_unit[format], index);
+
+ /*
+ * Don't print floating point values for time. Note,
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0010-Avoid-unnecessary-VLA.patch b/pkg/zfs/patch/0010-Avoid-unnecessary-VLA.patch
new file mode 100644
index 00000000..13a902da
--- /dev/null
+++ b/pkg/zfs/patch/0010-Avoid-unnecessary-VLA.patch
@@ -0,0 +1,54 @@
+From 2218ade9b12bc42f61d96a4613328a6f627805a1 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:41:15 -0800
+Subject: [PATCH] Avoid unnecessary VLA
+
+---
+ cmd/zpool/zpool_vdev.c | 17 ++++++++---------
+ 1 file changed, 8 insertions(+), 9 deletions(-)
+
+diff --git a/cmd/zpool/zpool_vdev.c b/cmd/zpool/zpool_vdev.c
+index 3d83da641..521086366 100644
+--- a/cmd/zpool/zpool_vdev.c
++++ b/cmd/zpool/zpool_vdev.c
+@@ -891,8 +891,7 @@ check_replication(nvlist_t *config, nvlist_t *newroot)
+ static int
+ zero_label(char *path)
+ {
+- const int size = 4096;
+- char buf[size];
++ char buf[4096];
+ int err, fd;
+
+ if ((fd = open(path, O_WRONLY|O_EXCL)) < 0) {
+@@ -901,20 +900,20 @@ zero_label(char *path)
+ return (-1);
+ }
+
+- memset(buf, 0, size);
+- err = write(fd, buf, size);
++ memset(buf, 0, sizeof (buf));
++ err = write(fd, buf, sizeof (buf));
+ (void) fdatasync(fd);
+ (void) close(fd);
+
+ if (err == -1) {
+- (void) fprintf(stderr, gettext("cannot zero first %d bytes "
+- "of '%s': %s\n"), size, path, strerror(errno));
++ (void) fprintf(stderr, gettext("cannot zero first %zu bytes "
++ "of '%s': %s\n"), sizeof (buf), path, strerror(errno));
+ return (-1);
+ }
+
+- if (err != size) {
+- (void) fprintf(stderr, gettext("could only zero %d/%d bytes "
+- "of '%s'\n"), err, size, path);
++ if (err != sizeof (buf)) {
++ (void) fprintf(stderr, gettext("could only zero %d/%zu bytes "
++ "of '%s'\n"), err, sizeof (buf), path);
+ return (-1);
+ }
+
+--
+2.37.3
+
diff --git a/pkg/zfs/patch/0011-Avoid-arithmetic-on-void-pointer.patch b/pkg/zfs/patch/0011-Avoid-arithmetic-on-void-pointer.patch
new file mode 100644
index 00000000..662c4b11
--- /dev/null
+++ b/pkg/zfs/patch/0011-Avoid-arithmetic-on-void-pointer.patch
@@ -0,0 +1,25 @@
+From 8a2689c718e4fdf96a5b73e4095866ddf4826135 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Sat, 21 Jan 2023 17:52:40 -0800
+Subject: [PATCH] Avoid arithmetic on void pointer
+
+---
+ module/zcommon/zfs_fletcher.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/module/zcommon/zfs_fletcher.c b/module/zcommon/zfs_fletcher.c
+index 7a9de4a43..2faee46fe 100644
+--- a/module/zcommon/zfs_fletcher.c
++++ b/module/zcommon/zfs_fletcher.c
+@@ -569,7 +569,7 @@ fletcher_4_incremental_impl(boolean_t native, const void *buf, uint64_t size,
+ fletcher_4_incremental_combine(zcp, len, &nzc);
+
+ size -= len;
+- buf += len;
++ buf = (char *)buf + len;
+ }
+ }
+
+--
+2.37.3
+