diff options
121 files changed, 2615 insertions, 2595 deletions
diff --git a/cddl/usr.sbin/zfsd/Makefile.common b/cddl/usr.sbin/zfsd/Makefile.common index 5e9257d7b37e..68d921c90e37 100644 --- a/cddl/usr.sbin/zfsd/Makefile.common +++ b/cddl/usr.sbin/zfsd/Makefile.common @@ -24,7 +24,7 @@ CFLAGS+= -include ${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccomp CFLAGS+= -I${SRCTOP}/cddl/usr.sbin # use issetugid(2) -CFLAGS+= -D_MACHINE_FLOAT_H_ -DHAVE_ISSETUGID +CFLAGS+= -DHAVE_ISSETUGID LIBADD+= devdctl zfs util geom bsdxml sbuf nvpair avl uutil zutil diff --git a/stand/libsa/zfs/Makefile.inc b/stand/libsa/zfs/Makefile.inc index 0b51fff8a698..2a06db0d2f5d 100644 --- a/stand/libsa/zfs/Makefile.inc +++ b/stand/libsa/zfs/Makefile.inc @@ -84,7 +84,7 @@ CFLAGS.zstd_decompress.c= -U__BMI__ CFLAGS.zstd_decompress.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} CFLAGS.zstd_decompress_block.c= -U__BMI__ CFLAGS.zstd_decompress_block.c+= ${NO_WBITWISE_INSTEAD_OF_LOGICAL} -CFLAGS.zstd_shim.c+= -DIN_BASE -I${OZFS}/include +CFLAGS.zstd_shim.c+= -DIN_BASE -DIN_LIBSA -I${OZFS}/include # Do not unroll skein loops, reduce code size CFLAGS.skein_block.c+= -DSKEIN_LOOP=111 diff --git a/sys/contrib/openzfs/.github/workflows/zfs-tests-functional.yml b/sys/contrib/openzfs/.github/workflows/zfs-tests-functional.yml index 0273610af045..328cb97f10e4 100644 --- a/sys/contrib/openzfs/.github/workflows/zfs-tests-functional.yml +++ b/sys/contrib/openzfs/.github/workflows/zfs-tests-functional.yml @@ -28,7 +28,7 @@ jobs: ./autogen.sh - name: Configure run: | - ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan + ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan --with-config=dist - name: Make run: | make -j$(nproc) --no-print-directory --silent pkg-utils pkg-kmod diff --git a/sys/contrib/openzfs/.github/workflows/zfs-tests-sanity.yml b/sys/contrib/openzfs/.github/workflows/zfs-tests-sanity.yml index 73606f909e10..4c15cecf58d8 100644 --- a/sys/contrib/openzfs/.github/workflows/zfs-tests-sanity.yml +++ b/sys/contrib/openzfs/.github/workflows/zfs-tests-sanity.yml @@ -24,7 +24,7 @@ jobs: ./autogen.sh - name: Configure run: | - ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan + ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan --with-config=dist - name: Make run: | make -j$(nproc) --no-print-directory --silent pkg-utils pkg-kmod diff --git a/sys/contrib/openzfs/.github/workflows/zloop.yml b/sys/contrib/openzfs/.github/workflows/zloop.yml index d49eeae1653c..64fe96a3ab6b 100644 --- a/sys/contrib/openzfs/.github/workflows/zloop.yml +++ b/sys/contrib/openzfs/.github/workflows/zloop.yml @@ -23,7 +23,7 @@ jobs: ./autogen.sh - name: Configure run: | - ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan + ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan --with-config=dist - name: Make run: | make -j$(nproc) --no-print-directory --silent pkg-utils pkg-kmod diff --git a/sys/contrib/openzfs/META b/sys/contrib/openzfs/META index e95803505873..f16f7972575f 100644 --- a/sys/contrib/openzfs/META +++ b/sys/contrib/openzfs/META @@ -6,5 +6,5 @@ Release: 1 Release-Tags: relext License: CDDL Author: OpenZFS -Linux-Maximum: 5.17 +Linux-Maximum: 5.18 Linux-Minimum: 3.10 diff --git a/sys/contrib/openzfs/Makefile.am b/sys/contrib/openzfs/Makefile.am index ebb385fabc06..54d300e7d40b 100644 --- a/sys/contrib/openzfs/Makefile.am +++ b/sys/contrib/openzfs/Makefile.am @@ -1,5 +1,5 @@ CLEANFILES = -EXTRA_DIST = +dist_noinst_DATA = INSTALL_DATA_HOOKS = ALL_LOCAL = CLEAN_LOCAL = @@ -37,26 +37,26 @@ extradir = $(prefix)/src/zfs-$(VERSION) extra_HEADERS = zfs.release.in zfs_config.h.in endif -EXTRA_DIST += autogen.sh copy-builtin -EXTRA_DIST += AUTHORS CODE_OF_CONDUCT.md COPYRIGHT LICENSE META NEWS NOTICE -EXTRA_DIST += README.md RELEASES.md -EXTRA_DIST += module/lua/README.zfs module/os/linux/spl/README.md +dist_noinst_DATA += autogen.sh copy-builtin +dist_noinst_DATA += AUTHORS CODE_OF_CONDUCT.md COPYRIGHT LICENSE META NEWS NOTICE +dist_noinst_DATA += README.md RELEASES.md +dist_noinst_DATA += module/lua/README.zfs module/os/linux/spl/README.md # Include all the extra licensing information for modules -EXTRA_DIST += module/icp/algs/skein/THIRDPARTYLICENSE -EXTRA_DIST += module/icp/algs/skein/THIRDPARTYLICENSE.descrip -EXTRA_DIST += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman -EXTRA_DIST += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman.descrip -EXTRA_DIST += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl -EXTRA_DIST += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl.descrip -EXTRA_DIST += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.cryptogams -EXTRA_DIST += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.cryptogams.descrip -EXTRA_DIST += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.openssl -EXTRA_DIST += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.openssl.descrip -EXTRA_DIST += module/os/linux/spl/THIRDPARTYLICENSE.gplv2 -EXTRA_DIST += module/os/linux/spl/THIRDPARTYLICENSE.gplv2.descrip -EXTRA_DIST += module/zfs/THIRDPARTYLICENSE.cityhash -EXTRA_DIST += module/zfs/THIRDPARTYLICENSE.cityhash.descrip +dist_noinst_DATA += module/icp/algs/skein/THIRDPARTYLICENSE +dist_noinst_DATA += module/icp/algs/skein/THIRDPARTYLICENSE.descrip +dist_noinst_DATA += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman +dist_noinst_DATA += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman.descrip +dist_noinst_DATA += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl +dist_noinst_DATA += module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl.descrip +dist_noinst_DATA += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.cryptogams +dist_noinst_DATA += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.cryptogams.descrip +dist_noinst_DATA += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.openssl +dist_noinst_DATA += module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.openssl.descrip +dist_noinst_DATA += module/os/linux/spl/THIRDPARTYLICENSE.gplv2 +dist_noinst_DATA += module/os/linux/spl/THIRDPARTYLICENSE.gplv2.descrip +dist_noinst_DATA += module/zfs/THIRDPARTYLICENSE.cityhash +dist_noinst_DATA += module/zfs/THIRDPARTYLICENSE.cityhash.descrip @CODE_COVERAGE_RULES@ @@ -170,6 +170,10 @@ flake8: echo "skipping flake8 because flake8 is not installed"; \ fi +PHONY += regen-tests +regen-tests: + @$(MAKE) -C tests/zfs-tests/tests regen + PHONY += ctags ctags: $(RM) tags diff --git a/sys/contrib/openzfs/cmd/Makefile.am b/sys/contrib/openzfs/cmd/Makefile.am index 9959760b523e..65de980da308 100644 --- a/sys/contrib/openzfs/cmd/Makefile.am +++ b/sys/contrib/openzfs/cmd/Makefile.am @@ -10,7 +10,7 @@ mounthelper_PROGRAMS = sbin_SCRIPTS += fsck.zfs SHELLCHECKSCRIPTS += fsck.zfs CLEANFILES += fsck.zfs -EXTRA_DIST += %D%/fsck.zfs.in +dist_noinst_DATA += %D%/fsck.zfs.in $(call SUBST,fsck.zfs,%D%/) @@ -100,9 +100,9 @@ endif if USING_PYTHON -bin_SCRIPTS += arc_summary arcstat dbufstat -CLEANFILES += arc_summary arcstat dbufstat -EXTRA_DIST += %D%/arc_summary %D%/arcstat.in %D%/dbufstat.in +bin_SCRIPTS += arc_summary arcstat dbufstat +CLEANFILES += arc_summary arcstat dbufstat +dist_noinst_DATA += %D%/arc_summary %D%/arcstat.in %D%/dbufstat.in $(call SUBST,arcstat,%D%/) $(call SUBST,dbufstat,%D%/) diff --git a/sys/contrib/openzfs/cmd/zdb/zdb.c b/sys/contrib/openzfs/cmd/zdb/zdb.c index 3d4d956e5698..ce95759dc708 100644 --- a/sys/contrib/openzfs/cmd/zdb/zdb.c +++ b/sys/contrib/openzfs/cmd/zdb/zdb.c @@ -3194,13 +3194,18 @@ dump_znode_symlink(sa_handle_t *hdl) { int sa_symlink_size = 0; char linktarget[MAXPATHLEN]; - linktarget[0] = '\0'; int error; error = sa_size(hdl, sa_attr_table[ZPL_SYMLINK], &sa_symlink_size); if (error || sa_symlink_size == 0) { return; } + if (sa_symlink_size >= sizeof (linktarget)) { + (void) printf("symlink size %d is too large\n", + sa_symlink_size); + return; + } + linktarget[sa_symlink_size] = '\0'; if (sa_lookup(hdl, sa_attr_table[ZPL_SYMLINK], &linktarget, sa_symlink_size) == 0) (void) printf("\ttarget %s\n", linktarget); diff --git a/sys/contrib/openzfs/cmd/zed/Makefile.am b/sys/contrib/openzfs/cmd/zed/Makefile.am index 6eea1a135f56..c437ff51dd2b 100644 --- a/sys/contrib/openzfs/cmd/zed/Makefile.am +++ b/sys/contrib/openzfs/cmd/zed/Makefile.am @@ -43,4 +43,4 @@ zed_LDADD = \ zed_LDADD += -lrt $(LIBATOMIC_LIBS) $(LIBUDEV_LIBS) $(LIBUUID_LIBS) zed_LDFLAGS = -pthread -EXTRA_DIST += $(addprefix %D%/,agents/README.md) +dist_noinst_DATA += %D%/agents/README.md diff --git a/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c b/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c index 4fe9ee2bc5b2..813916d2e82c 100644 --- a/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c +++ b/sys/contrib/openzfs/cmd/zed/agents/zfs_diagnosis.c @@ -34,6 +34,7 @@ #include <sys/fs/zfs.h> #include <sys/fm/protocol.h> #include <sys/fm/fs/zfs.h> +#include <sys/zio.h> #include "zfs_agents.h" #include "fmd_api.h" @@ -770,6 +771,8 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class) ZFS_MAKE_EREPORT(FM_EREPORT_ZFS_PROBE_FAILURE))) { char *failmode = NULL; boolean_t checkremove = B_FALSE; + uint32_t pri = 0; + int32_t flags = 0; /* * If this is a checksum or I/O error, then toss it into the @@ -792,6 +795,23 @@ zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class) checkremove = B_TRUE; } else if (fmd_nvl_class_match(hdl, nvl, ZFS_MAKE_EREPORT(FM_EREPORT_ZFS_CHECKSUM))) { + /* + * We ignore ereports for checksum errors generated by + * scrub/resilver I/O to avoid potentially further + * degrading the pool while it's being repaired. + */ + if (((nvlist_lookup_uint32(nvl, + FM_EREPORT_PAYLOAD_ZFS_ZIO_PRIORITY, &pri) == 0) && + (pri == ZIO_PRIORITY_SCRUB || + pri == ZIO_PRIORITY_REBUILD)) || + ((nvlist_lookup_int32(nvl, + FM_EREPORT_PAYLOAD_ZFS_ZIO_FLAGS, &flags) == 0) && + (flags & (ZIO_FLAG_SCRUB | ZIO_FLAG_RESILVER)))) { + fmd_hdl_debug(hdl, "ignoring '%s' for " + "scrub/resilver I/O", class); + return; + } + if (zcp->zc_data.zc_serd_checksum[0] == '\0') { zfs_serd_name(zcp->zc_data.zc_serd_checksum, pool_guid, vdev_guid, "checksum"); diff --git a/sys/contrib/openzfs/cmd/zed/agents/zfs_mod.c b/sys/contrib/openzfs/cmd/zed/agents/zfs_mod.c index 59d8182c0b2e..17e47873ebb7 100644 --- a/sys/contrib/openzfs/cmd/zed/agents/zfs_mod.c +++ b/sys/contrib/openzfs/cmd/zed/agents/zfs_mod.c @@ -1073,7 +1073,7 @@ zfs_enum_pools(void *arg) * For now, each agent has its own libzfs instance */ int -zfs_slm_init() +zfs_slm_init(void) { if ((g_zfshdl = libzfs_init()) == NULL) return (-1); @@ -1099,7 +1099,7 @@ zfs_slm_init() } void -zfs_slm_fini() +zfs_slm_fini(void) { unavailpool_t *pool; pendingdev_t *device; diff --git a/sys/contrib/openzfs/cmd/zed/zed.d/Makefile.am b/sys/contrib/openzfs/cmd/zed/zed.d/Makefile.am index 122d2c0c51bc..c65b43fb027e 100644 --- a/sys/contrib/openzfs/cmd/zed/zed.d/Makefile.am +++ b/sys/contrib/openzfs/cmd/zed/zed.d/Makefile.am @@ -38,7 +38,7 @@ zedconfdefaults = \ vdev_attach-led.sh \ vdev_clear-led.sh -EXTRA_DIST += $(addprefix %D%/,README) +dist_noinst_DATA += %D%/README INSTALL_DATA_HOOKS += zed-install-data-hook zed-install-data-hook: diff --git a/sys/contrib/openzfs/cmd/zed/zed.d/zed-functions.sh b/sys/contrib/openzfs/cmd/zed/zed.d/zed-functions.sh index 70a7113c6580..49b6b54029aa 100644 --- a/sys/contrib/openzfs/cmd/zed/zed.d/zed-functions.sh +++ b/sys/contrib/openzfs/cmd/zed/zed.d/zed-functions.sh @@ -223,6 +223,8 @@ zed_notify() # ZED_EMAIL_OPTS. This undergoes the following keyword substitutions: # - @ADDRESS@ is replaced with the space-delimited recipient email address(es) # - @SUBJECT@ is replaced with the notification subject +# If @SUBJECT@ was omited here, a "Subject: ..." header will be added to notification +# # # Arguments # subject: notification subject @@ -240,7 +242,7 @@ zed_notify() # zed_notify_email() { - local subject="$1" + local subject="${1:-"ZED notification"}" local pathname="${2:-"/dev/null"}" : "${ZED_EMAIL_PROG:="mail"}" @@ -261,12 +263,23 @@ zed_notify_email() return 1 fi - ZED_EMAIL_OPTS="$(echo "${ZED_EMAIL_OPTS}" \ + # construct cmdline options + ZED_EMAIL_OPTS_PARSED="$(echo "${ZED_EMAIL_OPTS}" \ | sed -e "s/@ADDRESS@/${ZED_EMAIL_ADDR}/g" \ -e "s/@SUBJECT@/${subject}/g")" + # pipe message to email prog # shellcheck disable=SC2086,SC2248 - eval ${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS} < "${pathname}" >/dev/null 2>&1 + { + # no subject passed as option? + if [ "${ZED_EMAIL_OPTS%@SUBJECT@*}" = "${ZED_EMAIL_OPTS}" ] ; then + # inject subject header + printf "Subject: %s\n" "${subject}" + fi + # output message + cat "${pathname}" + } | + eval ${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS_PARSED} >/dev/null 2>&1 rv=$? if [ "${rv}" -ne 0 ]; then zed_log_err "${ZED_EMAIL_PROG##*/} exit=${rv}" diff --git a/sys/contrib/openzfs/cmd/zed/zed.d/zed.rc b/sys/contrib/openzfs/cmd/zed/zed.d/zed.rc index 3c58a2c281f5..c55a70c79f75 100644 --- a/sys/contrib/openzfs/cmd/zed/zed.d/zed.rc +++ b/sys/contrib/openzfs/cmd/zed/zed.d/zed.rc @@ -29,6 +29,7 @@ ZED_EMAIL_ADDR="root" # The string @SUBJECT@ will be replaced with the notification subject; # this should be protected with quotes to prevent word-splitting. # Email will only be sent if ZED_EMAIL_ADDR is defined. +# If @SUBJECT@ was omited here, a "Subject: ..." header will be added to notification # #ZED_EMAIL_OPTS="-s '@SUBJECT@' @ADDRESS@" diff --git a/sys/contrib/openzfs/cmd/zed/zed_disk_event.c b/sys/contrib/openzfs/cmd/zed/zed_disk_event.c index 52b80d8c4c93..c4ca5452354b 100644 --- a/sys/contrib/openzfs/cmd/zed/zed_disk_event.c +++ b/sys/contrib/openzfs/cmd/zed/zed_disk_event.c @@ -362,7 +362,7 @@ zed_udev_monitor(void *arg) } int -zed_disk_event_init() +zed_disk_event_init(void) { int fd, fflags; @@ -398,7 +398,7 @@ zed_disk_event_init() } void -zed_disk_event_fini() +zed_disk_event_fini(void) { /* cancel monitor thread at recvmsg() */ (void) pthread_cancel(g_mon_tid); @@ -416,13 +416,13 @@ zed_disk_event_fini() #include "zed_disk_event.h" int -zed_disk_event_init() +zed_disk_event_init(void) { return (0); } void -zed_disk_event_fini() +zed_disk_event_fini(void) { } diff --git a/sys/contrib/openzfs/cmd/zfs/zfs_main.c b/sys/contrib/openzfs/cmd/zfs/zfs_main.c index 69f5bdf4d494..6282d894638e 100644 --- a/sys/contrib/openzfs/cmd/zfs/zfs_main.c +++ b/sys/contrib/openzfs/cmd/zfs/zfs_main.c @@ -8577,11 +8577,7 @@ static int zfs_do_version(int argc, char **argv) { (void) argc, (void) argv; - - if (zfs_version_print() == -1) - return (1); - - return (0); + return (zfs_version_print() != 0); } int diff --git a/sys/contrib/openzfs/cmd/zpool/Makefile.am b/sys/contrib/openzfs/cmd/zpool/Makefile.am index 9ba72eadf3a7..3c7c8a9aebe2 100644 --- a/sys/contrib/openzfs/cmd/zpool/Makefile.am +++ b/sys/contrib/openzfs/cmd/zpool/Makefile.am @@ -38,7 +38,7 @@ zpool_LDADD += -lgeom endif zpool_LDADD += -lm $(LIBBLKID_LIBS) $(LIBUUID_LIBS) -EXTRA_DIST += $(addprefix %D%/,zpool.d/README compatibility.d) +dist_noinst_DATA += %D%/zpool.d/README SHELLCHECKSCRIPTS += $(dist_zpoolexec_SCRIPTS) zpoolexecdir = $(zfsexecdir)/zpool.d diff --git a/sys/contrib/openzfs/cmd/zpool/zpool_main.c b/sys/contrib/openzfs/cmd/zpool/zpool_main.c index ac4a0b23adad..598d8b1bbb65 100644 --- a/sys/contrib/openzfs/cmd/zpool/zpool_main.c +++ b/sys/contrib/openzfs/cmd/zpool/zpool_main.c @@ -10818,11 +10818,7 @@ static int zpool_do_version(int argc, char **argv) { (void) argc, (void) argv; - - if (zfs_version_print() == -1) - return (1); - - return (0); + return (zfs_version_print() != 0); } /* diff --git a/sys/contrib/openzfs/config/Substfiles.am b/sys/contrib/openzfs/config/Substfiles.am index 733073dd20ca..38e870b2f501 100644 --- a/sys/contrib/openzfs/config/Substfiles.am +++ b/sys/contrib/openzfs/config/Substfiles.am @@ -41,6 +41,6 @@ endef SUBSTFILES = CLEANFILES += $(SUBSTFILES) -EXTRA_DIST += $(SUBSTFILES:=.in) +dist_noinst_DATA += $(SUBSTFILES:=.in) $(call SUBST,%,) diff --git a/sys/contrib/openzfs/config/kernel-bio.m4 b/sys/contrib/openzfs/config/kernel-bio.m4 index b5d25448155f..18620ca5b7e4 100644 --- a/sys/contrib/openzfs/config/kernel-bio.m4 +++ b/sys/contrib/openzfs/config/kernel-bio.m4 @@ -464,7 +464,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER], [ ]) AC_DEFUN([ZFS_AC_KERNEL_BLK_CGROUP_HEADER], [ - AC_MSG_CHECKING([for existence of linux/blk-cgroup.h]) + AC_MSG_CHECKING([whether linux/blk-cgroup.h exists]) ZFS_LINUX_TEST_RESULT([blk_cgroup_header],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_LINUX_BLK_CGROUP_HEADER, 1, @@ -500,7 +500,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG], [ ]) AC_DEFUN([ZFS_AC_KERNEL_BIO_ALLOC_4ARG], [ - AC_MSG_CHECKING([for 4-argument bio_alloc()]) + AC_MSG_CHECKING([whether bio_alloc() wants 4 args]) ZFS_LINUX_TEST_RESULT([bio_alloc_4arg],[ AC_MSG_RESULT(yes) AC_DEFINE([HAVE_BIO_ALLOC_4ARG], 1, [bio_alloc() takes 4 arguments]) diff --git a/sys/contrib/openzfs/config/kernel-blk-queue.m4 b/sys/contrib/openzfs/config/kernel-blk-queue.m4 index 2472c49dda4b..6f42b98125cd 100644 --- a/sys/contrib/openzfs/config/kernel-blk-queue.m4 +++ b/sys/contrib/openzfs/config/kernel-blk-queue.m4 @@ -74,6 +74,8 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ AC_DEFINE(HAVE_BLK_QUEUE_UPDATE_READAHEAD, 1, [blk_queue_update_readahead() exists]) ],[ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether disk_update_readahead() exists]) ZFS_LINUX_TEST_RESULT([disk_update_readahead], [ AC_MSG_RESULT(yes) @@ -86,10 +88,19 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ ]) dnl # -dnl # 2.6.32 API, -dnl # blk_queue_discard() +dnl # 5.19: bdev_max_discard_sectors() available +dnl # 2.6.32: blk_queue_discard() available dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [ + ZFS_LINUX_TEST_SRC([bdev_max_discard_sectors], [ + #include <linux/blkdev.h> + ],[ + struct block_device *bdev __attribute__ ((unused)) = NULL; + unsigned int error __attribute__ ((unused)); + + error = bdev_max_discard_sectors(bdev); + ]) + ZFS_LINUX_TEST_SRC([blk_queue_discard], [ #include <linux/blkdev.h> ],[ @@ -102,22 +113,40 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [ ]) AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISCARD], [ - AC_MSG_CHECKING([whether blk_queue_discard() is available]) - ZFS_LINUX_TEST_RESULT([blk_queue_discard], [ + AC_MSG_CHECKING([whether bdev_max_discard_sectors() is available]) + ZFS_LINUX_TEST_RESULT([bdev_max_discard_sectors], [ AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BDEV_MAX_DISCARD_SECTORS, 1, + [bdev_max_discard_sectors() is available]) ],[ - ZFS_LINUX_TEST_ERROR([blk_queue_discard]) + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([whether blk_queue_discard() is available]) + ZFS_LINUX_TEST_RESULT([blk_queue_discard], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_DISCARD, 1, + [blk_queue_discard() is available]) + ],[ + ZFS_LINUX_TEST_ERROR([blk_queue_discard]) + ]) ]) ]) dnl # -dnl # 4.8 API, -dnl # blk_queue_secure_erase() -dnl # -dnl # 2.6.36 - 4.7 API, -dnl # blk_queue_secdiscard() +dnl # 5.19: bdev_max_secure_erase_sectors() available +dnl # 4.8: blk_queue_secure_erase() available +dnl # 2.6.36: blk_queue_secdiscard() available dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE], [ + ZFS_LINUX_TEST_SRC([bdev_max_secure_erase_sectors], [ + #include <linux/blkdev.h> + ],[ + struct block_device *bdev __attribute__ ((unused)) = NULL; + unsigned int error __attribute__ ((unused)); + + error = bdev_max_secure_erase_sectors(bdev); + ]) + ZFS_LINUX_TEST_SRC([blk_queue_secure_erase], [ #include <linux/blkdev.h> ],[ @@ -140,21 +169,30 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE], [ ]) AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE], [ - AC_MSG_CHECKING([whether blk_queue_secure_erase() is available]) - ZFS_LINUX_TEST_RESULT([blk_queue_secure_erase], [ + AC_MSG_CHECKING([whether bdev_max_secure_erase_sectors() is available]) + ZFS_LINUX_TEST_RESULT([bdev_max_secure_erase_sectors], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_BLK_QUEUE_SECURE_ERASE, 1, - [blk_queue_secure_erase() is available]) + AC_DEFINE(HAVE_BDEV_MAX_SECURE_ERASE_SECTORS, 1, + [bdev_max_secure_erase_sectors() is available]) ],[ AC_MSG_RESULT(no) - AC_MSG_CHECKING([whether blk_queue_secdiscard() is available]) - ZFS_LINUX_TEST_RESULT([blk_queue_secdiscard], [ + AC_MSG_CHECKING([whether blk_queue_secure_erase() is available]) + ZFS_LINUX_TEST_RESULT([blk_queue_secure_erase], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_BLK_QUEUE_SECDISCARD, 1, - [blk_queue_secdiscard() is available]) + AC_DEFINE(HAVE_BLK_QUEUE_SECURE_ERASE, 1, + [blk_queue_secure_erase() is available]) ],[ - ZFS_LINUX_TEST_ERROR([blk_queue_secure_erase]) + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([whether blk_queue_secdiscard() is available]) + ZFS_LINUX_TEST_RESULT([blk_queue_secdiscard], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_SECDISCARD, 1, + [blk_queue_secdiscard() is available]) + ],[ + ZFS_LINUX_TEST_ERROR([blk_queue_secure_erase]) + ]) ]) ]) ]) diff --git a/sys/contrib/openzfs/config/kernel-blkdev.m4 b/sys/contrib/openzfs/config/kernel-blkdev.m4 index 9c60e5dd4210..fb7b1a458638 100644 --- a/sys/contrib/openzfs/config/kernel-blkdev.m4 +++ b/sys/contrib/openzfs/config/kernel-blkdev.m4 @@ -295,6 +295,57 @@ AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [ ]) dnl # +dnl # 5.19 API: blkdev_issue_secure_erase() +dnl # 3.10 API: blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_SECURE_ERASE], [ + ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [ + #include <linux/blkdev.h> + ],[ + struct block_device *bdev = NULL; + sector_t sector = 0; + sector_t nr_sects = 0; + int error __attribute__ ((unused)); + + error = blkdev_issue_secure_erase(bdev, + sector, nr_sects, GFP_KERNEL); + ]) + + ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [ + #include <linux/blkdev.h> + ],[ + struct block_device *bdev = NULL; + sector_t sector = 0; + sector_t nr_sects = 0; + unsigned long flags = 0; + int error __attribute__ ((unused)); + + error = blkdev_issue_discard(bdev, + sector, nr_sects, GFP_KERNEL, flags); + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_SECURE_ERASE], [ + AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available]) + ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1, + [blkdev_issue_secure_erase() is available]) + ],[ + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([whether blkdev_issue_discard() is available]) + ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD, 1, + [blkdev_issue_discard() is available]) + ],[ + ZFS_LINUX_TEST_ERROR([blkdev_issue_discard()]) + ]) + ]) +]) + +dnl # dnl # 5.13 API change dnl # blkdev_get_by_path() no longer handles ERESTARTSYS dnl # @@ -326,6 +377,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [ ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE + ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_SECURE_ERASE ]) AC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [ @@ -340,4 +392,5 @@ AC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [ ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS + ZFS_AC_KERNEL_BLKDEV_ISSUE_SECURE_ERASE ]) diff --git a/sys/contrib/openzfs/config/kernel-fpu.m4 b/sys/contrib/openzfs/config/kernel-fpu.m4 index eb9520c60a7c..c6efebd8cf61 100644 --- a/sys/contrib/openzfs/config/kernel-fpu.m4 +++ b/sys/contrib/openzfs/config/kernel-fpu.m4 @@ -2,6 +2,9 @@ dnl # dnl # Handle differences in kernel FPU code. dnl # dnl # Kernel +dnl # 5.19: The asm/fpu/internal.h header was removed, it has been +dnl # effectively empty since the 5.16 kernel. +dnl # dnl # 5.11: kernel_fpu_begin() is an inlined function now, so don't check dnl # for it inside the kernel symbols. dnl # @@ -27,10 +30,22 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU_HEADER], [ ],[ AC_DEFINE(HAVE_KERNEL_FPU_API_HEADER, 1, [kernel has asm/fpu/api.h]) - AC_MSG_RESULT(asm/fpu/api.h) + + ZFS_LINUX_TRY_COMPILE([ + #include <linux/module.h> + #include <asm/fpu/internal.h> + ],[ + ],[ + AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL_HEADER, 1, + [kernel has asm/fpu/internal.h]) + AC_MSG_RESULT([asm/fpu/api.h asm/fpu/internal.h]) + ],[ + AC_MSG_RESULT([asm/fpu/api.h]) + ]) ],[ - AC_MSG_RESULT(i387.h) + AC_MSG_RESULT([i387.h]) ]) + ]) AC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [ @@ -38,7 +53,9 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [ #include <linux/types.h> #ifdef HAVE_KERNEL_FPU_API_HEADER #include <asm/fpu/api.h> + #ifdef HAVE_KERNEL_FPU_INTERNAL_HEADER #include <asm/fpu/internal.h> + #endif #else #include <asm/i387.h> #endif @@ -51,7 +68,9 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [ #include <linux/types.h> #ifdef HAVE_KERNEL_FPU_API_HEADER #include <asm/fpu/api.h> + #ifdef HAVE_KERNEL_FPU_INTERNAL_HEADER #include <asm/fpu/internal.h> + #endif #else #include <asm/i387.h> #endif diff --git a/sys/contrib/openzfs/config/kernel-generic_io_acct.m4 b/sys/contrib/openzfs/config/kernel-generic_io_acct.m4 index 0f4381db4c5e..a8a448c6fe96 100644 --- a/sys/contrib/openzfs/config/kernel-generic_io_acct.m4 +++ b/sys/contrib/openzfs/config/kernel-generic_io_acct.m4 @@ -2,6 +2,19 @@ dnl # dnl # Check for generic io accounting interface. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [ + ZFS_LINUX_TEST_SRC([bdev_io_acct], [ + #include <linux/blkdev.h> + ], [ + struct block_device *bdev = NULL; + struct bio *bio = NULL; + unsigned long passed_time = 0; + unsigned long start_time; + + start_time = bdev_start_io_acct(bdev, bio_sectors(bio), + bio_op(bio), passed_time); + bdev_end_io_acct(bdev, bio_op(bio), start_time); + ]) + ZFS_LINUX_TEST_SRC([disk_io_acct], [ #include <linux/blkdev.h> ], [ @@ -50,61 +63,75 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [ AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [ dnl # - dnl # 5.12 API, + dnl # 5.19 API, dnl # - dnl # bio_start_io_acct() and bio_end_io_acct() became GPL-exported - dnl # so use disk_start_io_acct() and disk_end_io_acct() instead + dnl # disk_start_io_acct() and disk_end_io_acct() have been replaced by + dnl # bdev_start_io_acct() and bdev_end_io_acct(). dnl # - AC_MSG_CHECKING([whether generic disk_*_io_acct() are available]) - ZFS_LINUX_TEST_RESULT([disk_io_acct], [ + AC_MSG_CHECKING([whether generic bdev_*_io_acct() are available]) + ZFS_LINUX_TEST_RESULT([bdev_io_acct], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_DISK_IO_ACCT, 1, [disk_*_io_acct() available]) + AC_DEFINE(HAVE_BDEV_IO_ACCT, 1, [bdev_*_io_acct() available]) ], [ AC_MSG_RESULT(no) dnl # - dnl # 5.7 API, + dnl # 5.12 API, dnl # - dnl # Added bio_start_io_acct() and bio_end_io_acct() helpers. + dnl # bio_start_io_acct() and bio_end_io_acct() became GPL-exported + dnl # so use disk_start_io_acct() and disk_end_io_acct() instead dnl # - AC_MSG_CHECKING([whether generic bio_*_io_acct() are available]) - ZFS_LINUX_TEST_RESULT([bio_io_acct], [ + AC_MSG_CHECKING([whether generic disk_*_io_acct() are available]) + ZFS_LINUX_TEST_RESULT([disk_io_acct], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_BIO_IO_ACCT, 1, [bio_*_io_acct() available]) + AC_DEFINE(HAVE_DISK_IO_ACCT, 1, [disk_*_io_acct() available]) ], [ AC_MSG_RESULT(no) dnl # - dnl # 4.14 API, + dnl # 5.7 API, dnl # - dnl # generic_start_io_acct/generic_end_io_acct now require - dnl # request_queue to be provided. No functional changes, - dnl # but preparation for inflight accounting. + dnl # Added bio_start_io_acct() and bio_end_io_acct() helpers. dnl # - AC_MSG_CHECKING([whether generic_*_io_acct wants 4 args]) - ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_4args], - [generic_start_io_acct], [block/bio.c], [ + AC_MSG_CHECKING([whether generic bio_*_io_acct() are available]) + ZFS_LINUX_TEST_RESULT([bio_io_acct], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_GENERIC_IO_ACCT_4ARG, 1, - [generic_*_io_acct() 4 arg available]) + AC_DEFINE(HAVE_BIO_IO_ACCT, 1, [bio_*_io_acct() available]) ], [ AC_MSG_RESULT(no) dnl # - dnl # 3.19 API addition + dnl # 4.14 API, dnl # - dnl # torvalds/linux@394ffa50 allows us to increment - dnl # iostat counters without generic_make_request(). + dnl # generic_start_io_acct/generic_end_io_acct now require + dnl # request_queue to be provided. No functional changes, + dnl # but preparation for inflight accounting. dnl # - AC_MSG_CHECKING( - [whether generic_*_io_acct wants 3 args]) - ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_3args], + AC_MSG_CHECKING([whether generic_*_io_acct wants 4 args]) + ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_4args], [generic_start_io_acct], [block/bio.c], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_GENERIC_IO_ACCT_3ARG, 1, - [generic_*_io_acct() 3 arg available]) + AC_DEFINE(HAVE_GENERIC_IO_ACCT_4ARG, 1, + [generic_*_io_acct() 4 arg available]) ], [ AC_MSG_RESULT(no) + + dnl # + dnl # 3.19 API addition + dnl # + dnl # torvalds/linux@394ffa50 allows us to increment + dnl # iostat counters without generic_make_request(). + dnl # + AC_MSG_CHECKING( + [whether generic_*_io_acct wants 3 args]) + ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_3args], + [generic_start_io_acct], [block/bio.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GENERIC_IO_ACCT_3ARG, 1, + [generic_*_io_acct() 3 arg available]) + ], [ + AC_MSG_RESULT(no) + ]) ]) ]) ]) diff --git a/sys/contrib/openzfs/config/kernel-pagemap-folio_wait_bit.m4 b/sys/contrib/openzfs/config/kernel-pagemap-folio_wait_bit.m4 index e0aaa4a57411..12d8841f51e6 100644 --- a/sys/contrib/openzfs/config/kernel-pagemap-folio_wait_bit.m4 +++ b/sys/contrib/openzfs/config/kernel-pagemap-folio_wait_bit.m4 @@ -15,7 +15,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT], [ ]) AC_DEFUN([ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT], [ - AC_MSG_CHECKING([folio_wait_bit() exists]) + AC_MSG_CHECKING([whether folio_wait_bit() exists]) ZFS_LINUX_TEST_RESULT([pagemap_has_folio_wait_bit], [ AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_PAGEMAP_FOLIO_WAIT_BIT, 1, diff --git a/sys/contrib/openzfs/config/kernel-readpages.m4 b/sys/contrib/openzfs/config/kernel-readpages.m4 index 0bf67ffd933d..be65a0d5e4b4 100644 --- a/sys/contrib/openzfs/config/kernel-readpages.m4 +++ b/sys/contrib/openzfs/config/kernel-readpages.m4 @@ -14,7 +14,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_READPAGES], [ ]) AC_DEFUN([ZFS_AC_KERNEL_VFS_READPAGES], [ - AC_MSG_CHECKING([address_space_operations->readpages exists]) + AC_MSG_CHECKING([whether aops->readpages exists]) ZFS_LINUX_TEST_RESULT([vfs_has_readpages], [ AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_VFS_READPAGES, 1, diff --git a/sys/contrib/openzfs/config/kernel-shrink.m4 b/sys/contrib/openzfs/config/kernel-shrink.m4 index a40c86d5c57f..8cf0f2761bde 100644 --- a/sys/contrib/openzfs/config/kernel-shrink.m4 +++ b/sys/contrib/openzfs/config/kernel-shrink.m4 @@ -84,7 +84,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_SHRINKER_CALLBACK], [ AC_DEFUN([ZFS_AC_KERNEL_SHRINKER_CALLBACK],[ dnl # dnl # 3.0 - 3.11 API change - dnl # ->shrink(struct shrinker *, struct shrink_control *sc) + dnl # cs->shrink(struct shrinker *, struct shrink_control *sc) dnl # AC_MSG_CHECKING([whether new 2-argument shrinker exists]) ZFS_LINUX_TEST_RESULT([shrinker_cb_shrink_control], [ @@ -96,14 +96,14 @@ AC_DEFUN([ZFS_AC_KERNEL_SHRINKER_CALLBACK],[ dnl # dnl # 3.12 API change, - dnl # ->shrink() is logically split in to - dnl # ->count_objects() and ->scan_objects() + dnl # cs->shrink() is logically split in to + dnl # cs->count_objects() and cs->scan_objects() dnl # - AC_MSG_CHECKING([whether ->count_objects callback exists]) + AC_MSG_CHECKING([whether cs->count_objects callback exists]) ZFS_LINUX_TEST_RESULT([shrinker_cb_shrink_control_split], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, 1, - [->count_objects exists]) + [cs->count_objects exists]) ],[ ZFS_LINUX_TEST_ERROR([shrinker]) ]) diff --git a/sys/contrib/openzfs/config/kernel-sysfs.m4 b/sys/contrib/openzfs/config/kernel-sysfs.m4 index 668def5fe6bf..bbc77c8fc5c0 100644 --- a/sys/contrib/openzfs/config/kernel-sysfs.m4 +++ b/sys/contrib/openzfs/config/kernel-sysfs.m4 @@ -19,7 +19,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_SYSFS_DEFAULT_GROUPS], [ ]) AC_DEFUN([ZFS_AC_KERNEL_SYSFS_DEFAULT_GROUPS], [ - AC_MSG_CHECKING([for struct kobj_type.default_groups]) + AC_MSG_CHECKING([whether struct kobj_type.default_groups exists]) ZFS_LINUX_TEST_RESULT([sysfs_default_groups],[ AC_MSG_RESULT(yes) AC_DEFINE([HAVE_SYSFS_DEFAULT_GROUPS], 1, [struct kobj_type has default_groups]) diff --git a/sys/contrib/openzfs/config/kernel-vfs-filemap_dirty_folio.m4 b/sys/contrib/openzfs/config/kernel-vfs-filemap_dirty_folio.m4 index 872879002928..729ca670da03 100644 --- a/sys/contrib/openzfs/config/kernel-vfs-filemap_dirty_folio.m4 +++ b/sys/contrib/openzfs/config/kernel-vfs-filemap_dirty_folio.m4 @@ -19,7 +19,7 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_FILEMAP_DIRTY_FOLIO], [ dnl # Linux 5.18 uses filemap_dirty_folio in lieu of dnl # ___set_page_dirty_nobuffers dnl # - AC_MSG_CHECKING([filemap_dirty_folio exists]) + AC_MSG_CHECKING([whether filemap_dirty_folio exists]) ZFS_LINUX_TEST_RESULT([vfs_has_filemap_dirty_folio], [ AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_VFS_FILEMAP_DIRTY_FOLIO, 1, diff --git a/sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 b/sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 index 57f78745a24b..e0617faab02c 100644 --- a/sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 +++ b/sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 @@ -134,6 +134,8 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [ AC_DEFINE(HAVE_IOV_ITER_FAULT_IN_READABLE, 1, [iov_iter_fault_in_readable() is available]) ],[ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether fault_in_iov_iter_readable() is available]) ZFS_LINUX_TEST_RESULT([fault_in_iov_iter_readable], [ AC_MSG_RESULT(yes) diff --git a/sys/contrib/openzfs/config/kernel-vfs-read_folio.m4 b/sys/contrib/openzfs/config/kernel-vfs-read_folio.m4 new file mode 100644 index 000000000000..9ca0faff218d --- /dev/null +++ b/sys/contrib/openzfs/config/kernel-vfs-read_folio.m4 @@ -0,0 +1,32 @@ +dnl # +dnl # Linux 5.19 uses read_folio in lieu of readpage +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_READ_FOLIO], [ + ZFS_LINUX_TEST_SRC([vfs_has_read_folio], [ + #include <linux/fs.h> + + static int + test_read_folio(struct file *file, struct folio *folio) { + (void) file; (void) folio; + return (0); + } + + static const struct address_space_operations + aops __attribute__ ((unused)) = { + .read_folio = test_read_folio, + }; + ],[]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_VFS_READ_FOLIO], [ + dnl # + dnl # Linux 5.19 uses read_folio in lieu of readpage + dnl # + AC_MSG_CHECKING([whether read_folio exists]) + ZFS_LINUX_TEST_RESULT([vfs_has_read_folio], [ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_VFS_READ_FOLIO, 1, [read_folio exists]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) diff --git a/sys/contrib/openzfs/config/kernel-vfs-set_page_dirty.m4 b/sys/contrib/openzfs/config/kernel-vfs-set_page_dirty.m4 index a9d252e4e01e..90cb28f3682c 100644 --- a/sys/contrib/openzfs/config/kernel-vfs-set_page_dirty.m4 +++ b/sys/contrib/openzfs/config/kernel-vfs-set_page_dirty.m4 @@ -23,7 +23,7 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS], [ dnl # Linux 5.14 change requires set_page_dirty() to be assigned dnl # in address_space_operations() dnl # - AC_MSG_CHECKING([__set_page_dirty_nobuffers exists]) + AC_MSG_CHECKING([whether __set_page_dirty_nobuffers exists]) ZFS_LINUX_TEST_RESULT([vfs_has_set_page_dirty_nobuffers], [ AC_MSG_RESULT([yes]) AC_DEFINE(HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS, 1, diff --git a/sys/contrib/openzfs/config/kernel.m4 b/sys/contrib/openzfs/config/kernel.m4 index a70db91a8364..9530367507d6 100644 --- a/sys/contrib/openzfs/config/kernel.m4 +++ b/sys/contrib/openzfs/config/kernel.m4 @@ -102,10 +102,13 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ ZFS_AC_KERNEL_SRC_SGET ZFS_AC_KERNEL_SRC_LSEEK_EXECUTE ZFS_AC_KERNEL_SRC_VFS_FILEMAP_DIRTY_FOLIO + ZFS_AC_KERNEL_SRC_VFS_READ_FOLIO ZFS_AC_KERNEL_SRC_VFS_GETATTR ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS ZFS_AC_KERNEL_SRC_VFS_ITERATE ZFS_AC_KERNEL_SRC_VFS_DIRECT_IO + ZFS_AC_KERNEL_SRC_VFS_READPAGES + ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS ZFS_AC_KERNEL_SRC_VFS_RW_ITERATE ZFS_AC_KERNEL_SRC_VFS_GENERIC_WRITE_CHECKS ZFS_AC_KERNEL_SRC_VFS_IOV_ITER @@ -136,8 +139,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ ZFS_AC_KERNEL_SRC_SIGINFO ZFS_AC_KERNEL_SRC_SYSFS ZFS_AC_KERNEL_SRC_SET_SPECIAL_STATE - ZFS_AC_KERNEL_SRC_VFS_READPAGES - ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS ZFS_AC_KERNEL_SRC_STANDALONE_LINUX_STDARG ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT ZFS_AC_KERNEL_SRC_ADD_DISK @@ -219,10 +220,13 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ ZFS_AC_KERNEL_SGET ZFS_AC_KERNEL_LSEEK_EXECUTE ZFS_AC_KERNEL_VFS_FILEMAP_DIRTY_FOLIO + ZFS_AC_KERNEL_VFS_READ_FOLIO ZFS_AC_KERNEL_VFS_GETATTR ZFS_AC_KERNEL_VFS_FSYNC_2ARGS ZFS_AC_KERNEL_VFS_ITERATE ZFS_AC_KERNEL_VFS_DIRECT_IO + ZFS_AC_KERNEL_VFS_READPAGES + ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS ZFS_AC_KERNEL_VFS_RW_ITERATE ZFS_AC_KERNEL_VFS_GENERIC_WRITE_CHECKS ZFS_AC_KERNEL_VFS_IOV_ITER @@ -253,8 +257,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ ZFS_AC_KERNEL_SIGINFO ZFS_AC_KERNEL_SYSFS ZFS_AC_KERNEL_SET_SPECIAL_STATE - ZFS_AC_KERNEL_VFS_READPAGES - ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS ZFS_AC_KERNEL_STANDALONE_LINUX_STDARG ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT ZFS_AC_KERNEL_ADD_DISK diff --git a/sys/contrib/openzfs/config/zfs-build.m4 b/sys/contrib/openzfs/config/zfs-build.m4 index 59bca5579252..b40776da7a70 100644 --- a/sys/contrib/openzfs/config/zfs-build.m4 +++ b/sys/contrib/openzfs/config/zfs-build.m4 @@ -268,6 +268,7 @@ AC_DEFUN([ZFS_AC_CONFIG], [ user) ZFS_AC_CONFIG_USER ;; all) ZFS_AC_CONFIG_USER ZFS_AC_CONFIG_KERNEL ;; + dist) ;; srpm) ;; *) AC_MSG_RESULT([Error!]) @@ -333,6 +334,10 @@ AC_DEFUN([ZFS_AC_RPM], [ RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(ASAN_ZFS) 1"' RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(UBSAN_ZFS) 1"' + AS_IF([test "x$enable_debuginfo" = xyes], [ + RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "__strip /bin/true"' + ]) + RPM_DEFINE_UTIL=' --define "_initconfdir $(initconfdir)"' dnl # Make the next three RPM_DEFINE_UTIL additions conditional, since diff --git a/sys/contrib/openzfs/configure.ac b/sys/contrib/openzfs/configure.ac index 7e356cbd20b2..64974aa32925 100644 --- a/sys/contrib/openzfs/configure.ac +++ b/sys/contrib/openzfs/configure.ac @@ -43,7 +43,7 @@ AM_INIT_AUTOMAKE([subdir-objects foreign]) # Remove default macros from config.h: # PACKAGE, PACKAGE_{BUGREPORT,NAME,STRING,TARNAME,VERSION}, STDC_HEADERS, VERSION AC_CONFIG_HEADERS([zfs_config.h], [ - sed -nEi~ -e '/^$/be' -e 'N;N;/#define (PACKAGE|VERSION|STDC_HEADERS)/d' -e ':e' -e 'p' zfs_config.h && rm zfs_config.h~ || exit]) + sed -nri~ -e '/^$/be' -e 'N;N;/#define (PACKAGE|VERSION|STDC_HEADERS)/d' -e ':e' -e 'p' zfs_config.h && rm zfs_config.h~ || exit]) LT_INIT AC_PROG_INSTALL diff --git a/sys/contrib/openzfs/contrib/bpftrace/Makefile.am b/sys/contrib/openzfs/contrib/bpftrace/Makefile.am index 5382f1e1de42..4f649cf5433e 100644 --- a/sys/contrib/openzfs/contrib/bpftrace/Makefile.am +++ b/sys/contrib/openzfs/contrib/bpftrace/Makefile.am @@ -1,5 +1,3 @@ -EXTRA_DIST += $(addprefix %D%/, \ - taskqlatency.bt \ - zfs-trace.sh) +dist_noinst_DATA += %D%/taskqlatency.bt %D%/zfs-trace.sh SHELLCHECKSCRIPTS += %D%/zfs-trace.sh diff --git a/sys/contrib/openzfs/contrib/dracut/Makefile.am b/sys/contrib/openzfs/contrib/dracut/Makefile.am index f0c103b0a4da..73ca52b66316 100644 --- a/sys/contrib/openzfs/contrib/dracut/Makefile.am +++ b/sys/contrib/openzfs/contrib/dracut/Makefile.am @@ -24,4 +24,4 @@ SHELLCHECKSCRIPTS += $(pkgdracut_02_SCRIPTS) $(pkgdracut_90_SCRIPTS) # Provided by /bin/sleep, and, again, every implementation of that supports this $(call SHELLCHECK_OPTS,$(pkgdracut_90_SCRIPTS)): CHECKBASHISMS_IGNORE = -e 'sleep only takes one integer' -e 'sleep 0.' -EXTRA_DIST += $(addprefix %D%/,README.md) +dist_noinst_DATA += %D%/README.md diff --git a/sys/contrib/openzfs/contrib/initramfs/Makefile.am b/sys/contrib/openzfs/contrib/initramfs/Makefile.am index 6917b517f330..a583341ea2b1 100644 --- a/sys/contrib/openzfs/contrib/initramfs/Makefile.am +++ b/sys/contrib/openzfs/contrib/initramfs/Makefile.am @@ -36,4 +36,4 @@ SHELLCHECKSCRIPTS += $(i_t_check_scripts) $(call SHELLCHECK_OPTS,$(i_t_check_scripts)): SHELLCHECK_SHELL = sh -EXTRA_DIST += $(addprefix %D%/,README.md) +dist_noinst_DATA += %D%/README.md diff --git a/sys/contrib/openzfs/contrib/pyzfs/Makefile.am b/sys/contrib/openzfs/contrib/pyzfs/Makefile.am index 505cd3c8b355..06d9a09d7f1e 100644 --- a/sys/contrib/openzfs/contrib/pyzfs/Makefile.am +++ b/sys/contrib/openzfs/contrib/pyzfs/Makefile.am @@ -1,4 +1,4 @@ -EXTRA_DIST += $(addprefix %D%/,libzfs_core README LICENSE docs) +dist_noinst_DATA += %D%/libzfs_core %D%/README %D%/LICENSE %D%/docs SUBSTFILES += %D%/setup.py if PYZFS_ENABLED diff --git a/sys/contrib/openzfs/contrib/zcp/Makefile.am b/sys/contrib/openzfs/contrib/zcp/Makefile.am index 759a9d529dc8..fc3f01a233cb 100644 --- a/sys/contrib/openzfs/contrib/zcp/Makefile.am +++ b/sys/contrib/openzfs/contrib/zcp/Makefile.am @@ -1 +1 @@ -EXTRA_DIST += $(addprefix %D%/,autosnap.lua) +dist_noinst_DATA += %D%/autosnap.lua diff --git a/sys/contrib/openzfs/etc/Makefile.am b/sys/contrib/openzfs/etc/Makefile.am index ffe5fad2b4a9..53064eb6f6ea 100644 --- a/sys/contrib/openzfs/etc/Makefile.am +++ b/sys/contrib/openzfs/etc/Makefile.am @@ -2,7 +2,7 @@ sudoersddir = $(sysconfdir)/sudoers.d sudoersd_DATA = \ %D%/sudoers.d/zfs -EXTRA_DIST += $(sudoersd_DATA) +dist_noinst_DATA += $(sudoersd_DATA) sysconf_zfsdir = $(sysconfdir)/zfs @@ -14,25 +14,25 @@ dist_sysconf_zfs_DATA = \ %D%/zfs/vdev_id.conf.sas_switch.example \ %D%/zfs/vdev_id.conf.scsi.example -sysconf_zfs_SCRIPTS = \ +sysconf_zfs_DATA = \ %D%/zfs/zfs-functions -SUBSTFILES += $(sysconf_zfs_SCRIPTS) -SHELLCHECKSCRIPTS += $(sysconf_zfs_SCRIPTS) -$(call SHELLCHECK_OPTS,$(sysconf_zfs_SCRIPTS)): SHELLCHECK_SHELL = sh +SUBSTFILES += $(sysconf_zfs_DATA) +SHELLCHECKSCRIPTS += $(sysconf_zfs_DATA) +$(call SHELLCHECK_OPTS,$(sysconf_zfs_DATA)): SHELLCHECK_SHELL = sh if BUILD_LINUX -initconf_SCRIPTS = \ +initconf_DATA = \ %D%/default/zfs -SUBSTFILES += $(initconf_SCRIPTS) -SHELLCHECKSCRIPTS += $(initconf_SCRIPTS) -$(call SHELLCHECK_OPTS,$(initconf_SCRIPTS)): SHELLCHECK_SHELL = sh +SUBSTFILES += $(initconf_DATA) +SHELLCHECKSCRIPTS += $(initconf_DATA) +$(call SHELLCHECK_OPTS,$(initconf_DATA)): SHELLCHECK_SHELL = sh if INIT_SYSV -EXTRA_DIST += $(addprefix %D%/,init.d/README.md) +dist_noinst_DATA += %D%/init.d/README.md init_SCRIPTS = \ %D%/init.d/zfs-import \ diff --git a/sys/contrib/openzfs/include/libzfs.h b/sys/contrib/openzfs/include/libzfs.h index 04f464d12faf..2c2aa3faf14b 100644 --- a/sys/contrib/openzfs/include/libzfs.h +++ b/sys/contrib/openzfs/include/libzfs.h @@ -40,10 +40,8 @@ #include <sys/mnttab.h> #include <sys/param.h> #include <sys/types.h> -#include <sys/varargs.h> #include <sys/fs/zfs.h> #include <sys/avl.h> -#include <ucred.h> #include <libzfs_core.h> #ifdef __cplusplus @@ -916,8 +914,8 @@ _LIBZFS_H int libzfs_envvar_is_set(char *); /* * Utility functions for zfs version */ -_LIBZFS_H void zfs_version_userland(char *, int); -_LIBZFS_H int zfs_version_kernel(char *, int); +_LIBZFS_H const char *zfs_version_userland(void); +_LIBZFS_H char *zfs_version_kernel(void); _LIBZFS_H int zfs_version_print(void); /* diff --git a/sys/contrib/openzfs/include/os/linux/kernel/linux/blkdev_compat.h b/sys/contrib/openzfs/include/os/linux/kernel/linux/blkdev_compat.h index 9fa8884bb7a1..fd91560a3cc4 100644 --- a/sys/contrib/openzfs/include/os/linux/kernel/linux/blkdev_compat.h +++ b/sys/contrib/openzfs/include/os/linux/kernel/linux/blkdev_compat.h @@ -495,21 +495,45 @@ blk_queue_discard_granularity(struct request_queue *q, unsigned int dg) } /* + * 5.19 API, + * bdev_max_discard_sectors() + * + * 2.6.32 API, + * blk_queue_discard() + */ +static inline boolean_t +bdev_discard_supported(struct block_device *bdev) +{ +#if defined(HAVE_BDEV_MAX_DISCARD_SECTORS) + return (!!bdev_max_discard_sectors(bdev)); +#elif defined(HAVE_BLK_QUEUE_DISCARD) + return (!!blk_queue_discard(bdev_get_queue(bdev))); +#else +#error "Unsupported kernel" +#endif +} + +/* + * 5.19 API, + * bdev_max_secure_erase_sectors() + * * 4.8 API, * blk_queue_secure_erase() * * 2.6.36 - 4.7 API, * blk_queue_secdiscard() */ -static inline int -blk_queue_discard_secure(struct request_queue *q) +static inline boolean_t +bdev_secure_discard_supported(struct block_device *bdev) { -#if defined(HAVE_BLK_QUEUE_SECURE_ERASE) - return (blk_queue_secure_erase(q)); +#if defined(HAVE_BDEV_MAX_SECURE_ERASE_SECTORS) + return (!!bdev_max_secure_erase_sectors(bdev)); +#elif defined(HAVE_BLK_QUEUE_SECURE_ERASE) + return (!!blk_queue_secure_erase(bdev_get_queue(bdev))); #elif defined(HAVE_BLK_QUEUE_SECDISCARD) - return (blk_queue_secdiscard(q)); + return (!!blk_queue_secdiscard(bdev_get_queue(bdev))); #else - return (0); +#error "Unsupported kernel" #endif } @@ -527,7 +551,10 @@ blk_generic_start_io_acct(struct request_queue *q __attribute__((unused)), struct gendisk *disk __attribute__((unused)), int rw __attribute__((unused)), struct bio *bio) { -#if defined(HAVE_DISK_IO_ACCT) +#if defined(HAVE_BDEV_IO_ACCT) + return (bdev_start_io_acct(bio->bi_bdev, bio_sectors(bio), + bio_op(bio), jiffies)); +#elif defined(HAVE_DISK_IO_ACCT) return (disk_start_io_acct(disk, bio_sectors(bio), bio_op(bio))); #elif defined(HAVE_BIO_IO_ACCT) return (bio_start_io_acct(bio)); @@ -550,7 +577,9 @@ blk_generic_end_io_acct(struct request_queue *q __attribute__((unused)), struct gendisk *disk __attribute__((unused)), int rw __attribute__((unused)), struct bio *bio, unsigned long start_time) { -#if defined(HAVE_DISK_IO_ACCT) +#if defined(HAVE_BDEV_IO_ACCT) + bdev_end_io_acct(bio->bi_bdev, bio_op(bio), start_time); +#elif defined(HAVE_DISK_IO_ACCT) disk_end_io_acct(disk, bio_op(bio), start_time); #elif defined(HAVE_BIO_IO_ACCT) bio_end_io_acct(bio, start_time); diff --git a/sys/contrib/openzfs/include/os/linux/kernel/linux/simd_x86.h b/sys/contrib/openzfs/include/os/linux/kernel/linux/simd_x86.h index 0fc4168b74e0..3564ea7f1391 100644 --- a/sys/contrib/openzfs/include/os/linux/kernel/linux/simd_x86.h +++ b/sys/contrib/openzfs/include/os/linux/kernel/linux/simd_x86.h @@ -93,7 +93,9 @@ #if defined(HAVE_KERNEL_FPU_API_HEADER) #include <asm/fpu/api.h> +#if defined(HAVE_KERNEL_FPU_INTERNAL_HEADER) #include <asm/fpu/internal.h> +#endif #else #include <asm/i387.h> #endif diff --git a/sys/contrib/openzfs/include/sys/dbuf.h b/sys/contrib/openzfs/include/sys/dbuf.h index deaab82b797d..60f8d5d74d6e 100644 --- a/sys/contrib/openzfs/include/sys/dbuf.h +++ b/sys/contrib/openzfs/include/sys/dbuf.h @@ -329,7 +329,7 @@ typedef struct dbuf_hash_table { krwlock_t hash_rwlocks[DBUF_RWLOCKS] ____cacheline_aligned; } dbuf_hash_table_t; -typedef void (*dbuf_prefetch_fn)(void *, boolean_t); +typedef void (*dbuf_prefetch_fn)(void *, uint64_t, uint64_t, boolean_t); uint64_t dbuf_whichblock(const struct dnode *di, const int64_t level, const uint64_t offset); diff --git a/sys/contrib/openzfs/include/sys/dmu_tx.h b/sys/contrib/openzfs/include/sys/dmu_tx.h index 71a9ac7ca7bf..ad3f1b0e47ca 100644 --- a/sys/contrib/openzfs/include/sys/dmu_tx.h +++ b/sys/contrib/openzfs/include/sys/dmu_tx.h @@ -124,8 +124,8 @@ typedef struct dmu_tx_stats { kstat_named_t dmu_tx_dirty_throttle; kstat_named_t dmu_tx_dirty_delay; kstat_named_t dmu_tx_dirty_over_max; - kstat_named_t dmu_tx_wrlog_over_max; kstat_named_t dmu_tx_dirty_frees_delay; + kstat_named_t dmu_tx_wrlog_delay; kstat_named_t dmu_tx_quota; } dmu_tx_stats_t; diff --git a/sys/contrib/openzfs/include/sys/dmu_zfetch.h b/sys/contrib/openzfs/include/sys/dmu_zfetch.h index 4c220b0c79e5..cd1b79eb8e44 100644 --- a/sys/contrib/openzfs/include/sys/dmu_zfetch.h +++ b/sys/contrib/openzfs/include/sys/dmu_zfetch.h @@ -49,20 +49,18 @@ typedef struct zfetch { typedef struct zstream { uint64_t zs_blkid; /* expect next access at this blkid */ - uint64_t zs_pf_blkid1; /* first block to prefetch */ - uint64_t zs_pf_blkid; /* block to prefetch up to */ - - /* - * We will next prefetch the L1 indirect block of this level-0 - * block id. - */ - uint64_t zs_ipf_blkid1; /* first block to prefetch */ - uint64_t zs_ipf_blkid; /* block to prefetch up to */ + unsigned int zs_pf_dist; /* data prefetch distance in bytes */ + unsigned int zs_ipf_dist; /* L1 prefetch distance in bytes */ + uint64_t zs_pf_start; /* first data block to prefetch */ + uint64_t zs_pf_end; /* data block to prefetch up to */ + uint64_t zs_ipf_start; /* first data block to prefetch L1 */ + uint64_t zs_ipf_end; /* data block to prefetch L1 up to */ list_node_t zs_node; /* link for zf_stream */ hrtime_t zs_atime; /* time last prefetch issued */ zfetch_t *zs_fetch; /* parent fetch */ boolean_t zs_missed; /* stream saw cache misses */ + boolean_t zs_more; /* need more distant prefetch */ zfs_refcount_t zs_callers; /* number of pending callers */ /* * Number of stream references: dnode, callers and pending blocks. diff --git a/sys/contrib/openzfs/include/sys/dnode.h b/sys/contrib/openzfs/include/sys/dnode.h index 3f5fcc958c36..33d9389d5a38 100644 --- a/sys/contrib/openzfs/include/sys/dnode.h +++ b/sys/contrib/openzfs/include/sys/dnode.h @@ -616,7 +616,7 @@ extern dnode_stats_t dnode_stats; #else #define dprintf_dnode(db, fmt, ...) -#define DNODE_VERIFY(dn) +#define DNODE_VERIFY(dn) ((void) sizeof ((uintptr_t)(dn))) #define FREE_VERIFY(db, start, end, tx) #endif diff --git a/sys/contrib/openzfs/include/sys/dsl_pool.h b/sys/contrib/openzfs/include/sys/dsl_pool.h index 32d973f09810..9270fb7d0b16 100644 --- a/sys/contrib/openzfs/include/sys/dsl_pool.h +++ b/sys/contrib/openzfs/include/sys/dsl_pool.h @@ -164,7 +164,7 @@ uint64_t dsl_pool_unreserved_space(dsl_pool_t *dp, zfs_space_check_t slop_policy); uint64_t dsl_pool_deferred_space(dsl_pool_t *dp); void dsl_pool_wrlog_count(dsl_pool_t *dp, int64_t size, uint64_t txg); -boolean_t dsl_pool_wrlog_over_max(dsl_pool_t *dp); +boolean_t dsl_pool_need_wrlog_delay(dsl_pool_t *dp); void dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx); void dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg); void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp); diff --git a/sys/contrib/openzfs/include/sys/fs/zfs.h b/sys/contrib/openzfs/include/sys/fs/zfs.h index f9fd5cf676e2..9cd1e32cd053 100644 --- a/sys/contrib/openzfs/include/sys/fs/zfs.h +++ b/sys/contrib/openzfs/include/sys/fs/zfs.h @@ -1292,6 +1292,7 @@ typedef struct ddt_histogram { #define ZVOL_DRIVER "zvol" #define ZFS_DRIVER "zfs" #define ZFS_DEV "/dev/zfs" +#define ZFS_DEVDIR "/dev" #define ZFS_SUPER_MAGIC 0x2fc12fc1 diff --git a/sys/contrib/openzfs/include/sys/spa.h b/sys/contrib/openzfs/include/sys/spa.h index 232855449c17..442bc7792b2b 100644 --- a/sys/contrib/openzfs/include/sys/spa.h +++ b/sys/contrib/openzfs/include/sys/spa.h @@ -898,6 +898,7 @@ typedef struct spa_stats { spa_history_kstat_t tx_assign_histogram; spa_history_list_t mmp_history; spa_history_kstat_t state; /* pool state */ + spa_history_kstat_t guid; /* pool guid */ spa_history_kstat_t iostats; } spa_stats_t; diff --git a/sys/contrib/openzfs/include/sys/zap.h b/sys/contrib/openzfs/include/sys/zap.h index b19b4643879c..fd7a3a1599bc 100644 --- a/sys/contrib/openzfs/include/sys/zap.h +++ b/sys/contrib/openzfs/include/sys/zap.h @@ -110,7 +110,12 @@ typedef enum zap_flags { * already randomly distributed. */ ZAP_FLAG_PRE_HASHED_KEY = 1 << 2, +#if defined(__linux__) && defined(_KERNEL) +} zfs_zap_flags_t; +#define zap_flags_t zfs_zap_flags_t +#else } zap_flags_t; +#endif /* * Create a new zapobj with no attributes and return its object number. diff --git a/sys/contrib/openzfs/include/sys/zil_impl.h b/sys/contrib/openzfs/include/sys/zil_impl.h index d2f4018653a6..8409ce864e90 100644 --- a/sys/contrib/openzfs/include/sys/zil_impl.h +++ b/sys/contrib/openzfs/include/sys/zil_impl.h @@ -99,7 +99,7 @@ typedef struct lwb { char *lwb_buf; /* log write buffer */ zio_t *lwb_write_zio; /* zio for the lwb buffer */ zio_t *lwb_root_zio; /* root zio for lwb write and flushes */ - dmu_tx_t *lwb_tx; /* tx for log block allocation */ + uint64_t lwb_issued_txg; /* the txg when the write is issued */ uint64_t lwb_max_txg; /* highest txg in this lwb */ list_node_t lwb_node; /* zilog->zl_lwb_list linkage */ list_t lwb_itxs; /* list of itx's */ @@ -209,6 +209,12 @@ struct zilog { uint_t zl_prev_rotor; /* rotor for zl_prev[] */ txg_node_t zl_dirty_link; /* protected by dp_dirty_zilogs list */ uint64_t zl_dirty_max_txg; /* highest txg used to dirty zilog */ + + kmutex_t zl_lwb_io_lock; /* protect following members */ + uint64_t zl_lwb_inflight[TXG_SIZE]; /* io issued, but not done */ + kcondvar_t zl_lwb_io_cv; /* signal when the flush is done */ + uint64_t zl_lwb_max_issued_txg; /* max txg when lwb io issued */ + /* * Max block size for this ZIL. Note that this can not be changed * while the ZIL is in use because consumers (ZPL/zvol) need to take diff --git a/sys/contrib/openzfs/include/sys/zstd/zstd.h b/sys/contrib/openzfs/include/sys/zstd/zstd.h index ca32a7464556..d8c3fa86dce3 100644 --- a/sys/contrib/openzfs/include/sys/zstd/zstd.h +++ b/sys/contrib/openzfs/include/sys/zstd/zstd.h @@ -78,6 +78,8 @@ typedef struct zfs_zstd_meta { * kstat helper macros */ #define ZSTDSTAT(stat) (zstd_stats.stat.value.ui64) +#define ZSTDSTAT_ZERO(stat) \ + atomic_store_64(&zstd_stats.stat.value.ui64, 0) #define ZSTDSTAT_ADD(stat, val) \ atomic_add_64(&zstd_stats.stat.value.ui64, (val)) #define ZSTDSTAT_SUB(stat, val) \ @@ -90,6 +92,8 @@ void zstd_fini(void); size_t zfs_zstd_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int level); +size_t zfs_zstd_compress_wrap(void *s_start, void *d_start, size_t s_len, + size_t d_len, int level); int zfs_zstd_get_level(void *s_start, size_t s_len, uint8_t *level); int zfs_zstd_decompress_level(void *s_start, void *d_start, size_t s_len, size_t d_len, uint8_t *level); diff --git a/sys/contrib/openzfs/include/thread_pool.h b/sys/contrib/openzfs/include/thread_pool.h index 43090c3c6644..19edebd7da36 100644 --- a/sys/contrib/openzfs/include/thread_pool.h +++ b/sys/contrib/openzfs/include/thread_pool.h @@ -28,7 +28,6 @@ #define _THREAD_POOL_H_ extern __attribute__((visibility("default"))) #include <sys/types.h> -#include <thread.h> #include <pthread.h> #ifdef __cplusplus diff --git a/sys/contrib/openzfs/lib/libnvpair/Makefile.am b/sys/contrib/openzfs/lib/libnvpair/Makefile.am index 6d9345f5289e..87b8d32aa175 100644 --- a/sys/contrib/openzfs/lib/libnvpair/Makefile.am +++ b/sys/contrib/openzfs/lib/libnvpair/Makefile.am @@ -32,4 +32,4 @@ endif libnvpair_la_LDFLAGS += -version-info 3:0:0 -EXTRA_DIST += $(addprefix %D%/,libnvpair.abi libnvpair.suppr) +dist_noinst_DATA += %D%/libnvpair.abi %D%/libnvpair.suppr diff --git a/sys/contrib/openzfs/lib/libshare/os/linux/smb.c b/sys/contrib/openzfs/lib/libshare/os/linux/smb.c index 2a2b32bc10e9..57965ebfaad1 100644 --- a/sys/contrib/openzfs/lib/libshare/os/linux/smb.c +++ b/sys/contrib/openzfs/lib/libshare/os/linux/smb.c @@ -248,7 +248,7 @@ smb_enable_share_one(const char *sharename, const char *sharepath) NULL, }; - if (libzfs_run_process(argv[0], argv, 0) < 0) + if (libzfs_run_process(argv[0], argv, 0) != 0) return (SA_SYSTEM_ERR); /* Reload the share file */ @@ -297,7 +297,7 @@ smb_disable_share_one(const char *sharename) NULL, }; - if (libzfs_run_process(argv[0], argv, 0) < 0) + if (libzfs_run_process(argv[0], argv, 0) != 0) return (SA_SYSTEM_ERR); else return (SA_OK); diff --git a/sys/contrib/openzfs/lib/libspl/include/Makefile.am b/sys/contrib/openzfs/lib/libspl/include/Makefile.am index 2c0284310723..6f0e1818d22e 100644 --- a/sys/contrib/openzfs/lib/libspl/include/Makefile.am +++ b/sys/contrib/openzfs/lib/libspl/include/Makefile.am @@ -2,18 +2,11 @@ libspldir = $(includedir)/libspl libspl_HEADERS = \ %D%/assert.h \ %D%/atomic.h \ - %D%/libdevinfo.h \ %D%/libgen.h \ %D%/libshare.h \ - %D%/limits.h \ - %D%/locale.h \ %D%/statcommon.h \ %D%/stdlib.h \ %D%/string.h \ - %D%/stropts.h \ - %D%/thread.h \ - %D%/tzfile.h \ - %D%/ucred.h \ %D%/umem.h \ %D%/unistd.h \ %D%/zone.h @@ -40,8 +33,6 @@ libspl_sys_HEADERS = \ %D%/sys/dkio.h \ %D%/sys/dklabel.h \ %D%/sys/feature_tests.h \ - %D%/sys/int_limits.h \ - %D%/sys/int_types.h \ %D%/sys/inttypes.h \ %D%/sys/isa_defs.h \ %D%/sys/kmem.h \ @@ -59,7 +50,6 @@ libspl_sys_HEADERS = \ %D%/sys/stack.h \ %D%/sys/stdtypes.h \ %D%/sys/string.h \ - %D%/sys/stropts.h \ %D%/sys/sunddi.h \ %D%/sys/systeminfo.h \ %D%/sys/time.h \ @@ -67,10 +57,7 @@ libspl_sys_HEADERS = \ %D%/sys/trace_zfs.h \ %D%/sys/types.h \ %D%/sys/types32.h \ - %D%/sys/tzfile.h \ %D%/sys/uio.h \ - %D%/sys/va_list.h \ - %D%/sys/varargs.h \ %D%/sys/vnode.h \ %D%/sys/wmsum.h \ %D%/sys/zone.h diff --git a/sys/contrib/openzfs/lib/libspl/include/libdevinfo.h b/sys/contrib/openzfs/lib/libspl/include/libdevinfo.h deleted file mode 100644 index be1d291f4051..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/libdevinfo.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_LIBDEVINFO_H -#define _LIBSPL_LIBDEVINFO_H - -#endif /* _LIBSPL_LIBDEVINFO_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/limits.h b/sys/contrib/openzfs/lib/libspl/include/limits.h deleted file mode 100644 index 5d996eb846d1..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/limits.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include_next <limits.h> -#include <float.h> - -#ifndef _LIBSPL_LIMITS_H -#define _LIBSPL_LIMITS_H - -#ifndef DBL_DIG -#define DBL_DIG 15 -#define DBL_MAX 1.7976931348623157081452E+308 -#define DBL_MIN 2.2250738585072013830903E-308 -#endif - -#ifndef FLT_DIG -#define FLT_DIG 6 -#define FLT_MAX 3.4028234663852885981170E+38F -#define FLT_MIN 1.1754943508222875079688E-38F -#endif - -#endif /* _LIBSPL_LIMITS_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/locale.h b/sys/contrib/openzfs/lib/libspl/include/locale.h deleted file mode 100644 index 6c74df72072e..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/locale.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include_next <locale.h> - -#ifndef _LIBSPL_LOCALE_H -#define _LIBSPL_LOCALE_H - -#include <time.h> -#include <sys/time.h> - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/byteorder.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/byteorder.h index cd692d3616e0..d4227ddc5465 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/byteorder.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/byteorder.h @@ -43,7 +43,7 @@ #include <sys/endian.h> #include <netinet/in.h> #include <sys/isa_defs.h> -#include <sys/int_types.h> +#include <inttypes.h> #if defined(__GNUC__) && defined(_ASM_INLINES) && \ (defined(__i386) || defined(__amd64)) diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mnttab.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mnttab.h index c08349bdf9bd..54c1bc59ab56 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mnttab.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mnttab.h @@ -79,7 +79,7 @@ extern int _sol_getmntent(FILE *fp, struct mnttab *mp); extern int getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf); extern void statfs2mnttab(struct statfs *sfs, struct mnttab *mp); -char *hasmntopt(struct mnttab *mnt, char *opt); -int getmntent(FILE *fp, struct mnttab *mp); +extern char *hasmntopt(struct mnttab *mnt, char *opt); +extern int getmntent(FILE *fp, struct mnttab *mp); #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/zfs_context_os.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/zfs_context_os.h index b9bf487c2aef..9b9d69bddcf7 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/zfs_context_os.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/zfs_context_os.h @@ -30,6 +30,5 @@ #define ZFS_CONTEXT_OS_H_ #define HAVE_LARGE_STACKS 1 -#define ZFS_EXPORTS_PATH "/etc/zfs/exports" #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/byteorder.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/byteorder.h index d5ee3e26f5a5..47af7700f031 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/byteorder.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/byteorder.h @@ -46,7 +46,7 @@ #endif #include <sys/isa_defs.h> -#include <sys/int_types.h> +#include <inttypes.h> #ifdef __cplusplus extern "C" { diff --git a/sys/contrib/openzfs/lib/libspl/include/stropts.h b/sys/contrib/openzfs/lib/libspl/include/stropts.h deleted file mode 100644 index 37acd4052b0b..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/stropts.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ - -#ifndef _LIBSPL_STROPTS_H -#define _LIBSPL_STROPTS_H - -#endif /* _LIBSPL_STROPTS_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/int_limits.h b/sys/contrib/openzfs/lib/libspl/include/sys/int_limits.h deleted file mode 100644 index 7af68cdb2998..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/int_limits.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_SYS_INT_LIMITS_H -#define _LIBSPL_SYS_INT_LIMITS_H - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/int_types.h b/sys/contrib/openzfs/lib/libspl/include/sys/int_types.h deleted file mode 100644 index 51e9e0285490..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/int_types.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _SOL_SYS_INT_TYPES_H -#define _SOL_SYS_INT_TYPES_H - -#include <inttypes.h> - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h b/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h index 7f9aa6d8dbd7..c2de0778485c 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h @@ -92,39 +92,6 @@ typedef struct kstat { void *ks_lock; /* protects this kstat's data */ } kstat_t; -#ifdef _SYSCALL32 - -typedef int32_t kid32_t; - -typedef struct kstat32 { - /* - * Fields relevant to both kernel and user - */ - hrtime_t ks_crtime; - caddr32_t ks_next; /* struct kstat pointer */ - kid32_t ks_kid; - char ks_module[KSTAT_STRLEN]; - uint8_t ks_resv; - int32_t ks_instance; - char ks_name[KSTAT_STRLEN]; - uint8_t ks_type; - char ks_class[KSTAT_STRLEN]; - uint8_t ks_flags; - caddr32_t ks_data; /* type-specific data */ - uint32_t ks_ndata; - size32_t ks_data_size; - hrtime_t ks_snaptime; - /* - * Fields relevant to kernel only (only needed here for padding) - */ - int32_t _ks_update; - caddr32_t _ks_private; - int32_t _ks_snapshot; - caddr32_t _ks_lock; -} kstat32_t; - -#endif /* _SYSCALL32 */ - /* * kstat structure and locking strategy * @@ -467,7 +434,7 @@ typedef struct kstat_named { * 64-bit compilation environments or 32-bit non-maximally conformant * C89 or C90 ANSI C compilation environments (cc -Xt and cc -Xa). In the * C99 ANSI C compilation environment, the long long type is supported. - * The _INT64_TYPE is defined by the implementation (see sys/int_types.h). + * The _INT64_TYPE is defined by the implementation (see sys/inttypes.h). */ #if defined(_INT64_TYPE) int64_t i64; diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/stropts.h b/sys/contrib/openzfs/lib/libspl/include/sys/stropts.h deleted file mode 100644 index 08c2e79bc53c..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/stropts.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_SYS_STROPTS_H -#define _LIBSPL_SYS_STROPTS_H - -#endif /* _LIBSPL_SYS_STROPTS_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/types.h b/sys/contrib/openzfs/lib/libspl/include/sys/types.h index ea02ffac93ac..f32c2188a111 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/types.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/types.h @@ -37,7 +37,7 @@ #include <sys/feature_tests.h> #include_next <sys/types.h> #include <sys/types32.h> -#include <sys/va_list.h> +#include <stdarg.h> #include <sys/stdtypes.h> #ifndef HAVE_INTTYPES diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/tzfile.h b/sys/contrib/openzfs/lib/libspl/include/sys/tzfile.h deleted file mode 100644 index e30e7566366e..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/tzfile.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -/* - * from Arthur Olson's 6.1 - */ - -#ifndef _LIBSPL_SYS_TZFILE_H -#define _LIBSPL_SYS_TZFILE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Information about time zone files. - */ - -#define TZDIR "/usr/share/lib/zoneinfo" /* Time zone object file directory */ - -#define TZDEFAULT (getenv("TZ")) - -#define TZDEFRULES "posixrules" - -/* - * Each file begins with. . . - */ - -struct tzhead { - char tzh_reserved[24]; /* reserved for future use */ - char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ - char tzh_leapcnt[4]; /* coded number of leap seconds */ - char tzh_timecnt[4]; /* coded number of transition times */ - char tzh_typecnt[4]; /* coded number of local time types */ - char tzh_charcnt[4]; /* coded number of abbr. chars */ -}; - -/* - * . . .followed by. . . - * - * tzh_timecnt (char [4])s coded transition times a la time(2) - * tzh_timecnt (unsigned char)s types of local time starting at above - * tzh_typecnt repetitions of - * one (char [4]) coded GMT offset in seconds - * one (unsigned char) used to set tm_isdst - * one (unsigned char) that's an abbreviation list index - * tzh_charcnt (char)s '\0'-terminated zone abbreviations - * tzh_leapcnt repetitions of - * one (char [4]) coded leap second transition times - * one (char [4]) total correction after above - * tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition - * time is standard time, if FALSE, - * transition time is wall clock time - * if absent, transition times are - * assumed to be wall clock time - */ - -/* - * In the current implementation, "tzset()" refuses to deal with files that - * exceed any of the limits below. - */ - -/* - * The TZ_MAX_TIMES value below is enough to handle a bit more than a - * year's worth of solar time (corrected daily to the nearest second) or - * 138 years of Pacific Presidential Election time - * (where there are three time zone transitions every fourth year). - */ -#define TZ_MAX_TIMES 370 - -#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ - -#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ - -#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ - -#define SECSPERMIN 60 -#define MINSPERHOUR 60 -#define HOURSPERDAY 24 -#define DAYSPERWEEK 7 -#define DAYSPERNYEAR 365 -#define DAYSPERLYEAR 366 -#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) -#define SECSPERDAY ((long)SECSPERHOUR * HOURSPERDAY) -#define MONSPERYEAR 12 - -#define TM_SUNDAY 0 -#define TM_MONDAY 1 -#define TM_TUESDAY 2 -#define TM_WEDNESDAY 3 -#define TM_THURSDAY 4 -#define TM_FRIDAY 5 -#define TM_SATURDAY 6 - -#define TM_JANUARY 0 -#define TM_FEBRUARY 1 -#define TM_MARCH 2 -#define TM_APRIL 3 -#define TM_MAY 4 -#define TM_JUNE 5 -#define TM_JULY 6 -#define TM_AUGUST 7 -#define TM_SEPTEMBER 8 -#define TM_OCTOBER 9 -#define TM_NOVEMBER 10 -#define TM_DECEMBER 11 - -#define TM_YEAR_BASE 1900 - -#define EPOCH_YEAR 1970 -#define EPOCH_WDAY TM_THURSDAY - -/* - * Accurate only for the past couple of centuries; - * that will probably do. - */ - -#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0) - -/* - * Use of the underscored variants may cause problems if you move your code to - * certain System-V-based systems; for maximum portability, use the - * underscore-free variants. The underscored variants are provided for - * backward compatibility only; they may disappear from future versions of - * this file. - */ - -#define SECS_PER_MIN SECSPERMIN -#define MINS_PER_HOUR MINSPERHOUR -#define HOURS_PER_DAY HOURSPERDAY -#define DAYS_PER_WEEK DAYSPERWEEK -#define DAYS_PER_NYEAR DAYSPERNYEAR -#define DAYS_PER_LYEAR DAYSPERLYEAR -#define SECS_PER_HOUR SECSPERHOUR -#define SECS_PER_DAY SECSPERDAY -#define MONS_PER_YEAR MONSPERYEAR - -#ifdef __cplusplus -} -#endif - -#endif /* _LIBSPL_SYS_TZFILE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/va_list.h b/sys/contrib/openzfs/lib/libspl/include/sys/va_list.h deleted file mode 100644 index a36f5c77daa9..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/va_list.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _SYS_VA_LIST_H -#define _SYS_VA_LIST_H - -#include <stdarg.h> - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/varargs.h b/sys/contrib/openzfs/lib/libspl/include/sys/varargs.h deleted file mode 100644 index 3d00a3361d87..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/varargs.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_SYS_VARARGS_H -#define _LIBSPL_SYS_VARARGS_H - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/thread.h b/sys/contrib/openzfs/lib/libspl/include/thread.h deleted file mode 100644 index 74694e23eed5..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/thread.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_THREAD_H -#define _LIBSPL_THREAD_H - -#endif /* _LIBSPL_THREAD_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/tzfile.h b/sys/contrib/openzfs/lib/libspl/include/tzfile.h deleted file mode 100644 index 7bd4087cd5d1..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/tzfile.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_TZFILE_H -#define _LIBSPL_TZFILE_H - -#include <sys/tzfile.h> - -#endif /* _LIBSPL_TZFILE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/ucred.h b/sys/contrib/openzfs/lib/libspl/include/ucred.h deleted file mode 100644 index 8178fdec4c74..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/ucred.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSPL_UCRED_H -#define _LIBSPL_UCRED_H - -typedef int ucred_t; - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c b/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c index d830257fbd16..a240ca70ba8d 100644 --- a/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c +++ b/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c @@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include <ctype.h> #include <errno.h> +#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -136,6 +137,7 @@ statfs2mnttab(struct statfs *sfs, struct mnttab *mp) mp->mnt_mntopts = gmntopts; } +static pthread_rwlock_t gsfs_lock = PTHREAD_RWLOCK_INITIALIZER; static struct statfs *gsfs = NULL; static int allfs = 0; @@ -145,6 +147,8 @@ statfs_init(void) struct statfs *sfs; int error; + (void) pthread_rwlock_wrlock(&gsfs_lock); + if (gsfs != NULL) { free(gsfs); gsfs = NULL; @@ -162,6 +166,7 @@ statfs_init(void) sfs = realloc(gsfs, allfs * sizeof (gsfs[0])); if (sfs != NULL) gsfs = sfs; + (void) pthread_rwlock_unlock(&gsfs_lock); return (0); fail: error = errno; @@ -169,6 +174,7 @@ fail: free(gsfs); gsfs = NULL; allfs = 0; + (void) pthread_rwlock_unlock(&gsfs_lock); return (error); } @@ -181,6 +187,8 @@ getmntany(FILE *fd __unused, struct mnttab *mgetp, struct mnttab *mrefp) if (error != 0) return (error); + (void) pthread_rwlock_rdlock(&gsfs_lock); + for (i = 0; i < allfs; i++) { if (mrefp->mnt_special != NULL && strcmp(mrefp->mnt_special, gsfs[i].f_mntfromname) != 0) { @@ -195,8 +203,10 @@ getmntany(FILE *fd __unused, struct mnttab *mgetp, struct mnttab *mrefp) continue; } statfs2mnttab(&gsfs[i], mgetp); + (void) pthread_rwlock_unlock(&gsfs_lock); return (0); } + (void) pthread_rwlock_unlock(&gsfs_lock); return (-1); } @@ -214,9 +224,13 @@ getmntent(FILE *fp, struct mnttab *mp) if (error != 0) return (error); } - if (nfs >= allfs) + (void) pthread_rwlock_rdlock(&gsfs_lock); + if (nfs >= allfs) { + (void) pthread_rwlock_unlock(&gsfs_lock); return (-1); + } statfs2mnttab(&gsfs[nfs], mp); + (void) pthread_rwlock_unlock(&gsfs_lock); if (lseek(fileno(fp), 1, SEEK_CUR) == -1) return (errno); return (0); diff --git a/sys/contrib/openzfs/lib/libuutil/Makefile.am b/sys/contrib/openzfs/lib/libuutil/Makefile.am index cb89d423dc48..339f9a064745 100644 --- a/sys/contrib/openzfs/lib/libuutil/Makefile.am +++ b/sys/contrib/openzfs/lib/libuutil/Makefile.am @@ -26,4 +26,4 @@ endif libuutil_la_LDFLAGS += -version-info 3:0:0 -EXTRA_DIST += $(addprefix %D%/,libuutil.abi libuutil.suppr) +dist_noinst_DATA += %D%/libuutil.abi %D%/libuutil.suppr diff --git a/sys/contrib/openzfs/lib/libzfs/Makefile.am b/sys/contrib/openzfs/lib/libzfs/Makefile.am index 07414c4a308b..f5eb84679204 100644 --- a/sys/contrib/openzfs/lib/libzfs/Makefile.am +++ b/sys/contrib/openzfs/lib/libzfs/Makefile.am @@ -76,5 +76,5 @@ libzfs_la_LDFLAGS += -version-info 5:0:1 pkgconfig_DATA += %D%/libzfs.pc -EXTRA_DIST += $(addprefix %D%/,libzfs.abi libzfs.suppr) -EXTRA_DIST += $(addprefix %D%/,THIRDPARTYLICENSE.openssl THIRDPARTYLICENSE.openssl.descrip) +dist_noinst_DATA += %D%/libzfs.abi %D%/libzfs.suppr +dist_noinst_DATA += %D%/THIRDPARTYLICENSE.openssl %D%/THIRDPARTYLICENSE.openssl.descrip diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs.abi b/sys/contrib/openzfs/lib/libzfs/libzfs.abi index 1c7695275f56..8a71da95148e 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs.abi +++ b/sys/contrib/openzfs/lib/libzfs/libzfs.abi @@ -590,110 +590,7 @@ <elf-symbol name='zfs_max_dataset_nesting' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_userquota_prop_prefixes' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> </elf-variable-symbols> - <abi-instr address-size='64' path='../../module/avl/avl.c' language='LANG_C99'> - <typedef-decl name='avl_index_t' type-id='e475ab95' id='fba6cb51'/> - <pointer-type-def type-id='fba6cb51' size-in-bits='64' id='32adbf30'/> - <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> - <function-decl name='avl_walk' mangled-name='avl_walk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_walk'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='eaa32e2f' name='oldnode'/> - <parameter type-id='95e97e5e' name='left'/> - <return type-id='eaa32e2f'/> - </function-decl> - <function-decl name='avl_first' mangled-name='avl_first' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_first'> - <parameter type-id='a3681dea' name='tree'/> - <return type-id='eaa32e2f'/> - </function-decl> - <function-decl name='avl_last' mangled-name='avl_last' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_last'> - <parameter type-id='a3681dea' name='tree'/> - <return type-id='eaa32e2f'/> - </function-decl> - <function-decl name='avl_nearest' mangled-name='avl_nearest' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_nearest'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='fba6cb51' name='where'/> - <parameter type-id='95e97e5e' name='direction'/> - <return type-id='eaa32e2f'/> - </function-decl> - <function-decl name='avl_find' mangled-name='avl_find' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_find'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='eaa32e2f' name='value'/> - <parameter type-id='32adbf30' name='where'/> - <return type-id='eaa32e2f'/> - </function-decl> - <function-decl name='avl_insert' mangled-name='avl_insert' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_insert'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='eaa32e2f' name='new_data'/> - <parameter type-id='fba6cb51' name='where'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_insert_here' mangled-name='avl_insert_here' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_insert_here'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='eaa32e2f' name='new_data'/> - <parameter type-id='eaa32e2f' name='here'/> - <parameter type-id='95e97e5e' name='direction'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_add' mangled-name='avl_add' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_add'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='eaa32e2f' name='new_node'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_remove' mangled-name='avl_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_remove'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='eaa32e2f' name='data'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_update_lt' mangled-name='avl_update_lt' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_update_lt'> - <parameter type-id='a3681dea' name='t'/> - <parameter type-id='eaa32e2f' name='obj'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='avl_update_gt' mangled-name='avl_update_gt' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_update_gt'> - <parameter type-id='a3681dea' name='t'/> - <parameter type-id='eaa32e2f' name='obj'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='avl_update' mangled-name='avl_update' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_update'> - <parameter type-id='a3681dea' name='t'/> - <parameter type-id='eaa32e2f' name='obj'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='avl_swap' mangled-name='avl_swap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_swap'> - <parameter type-id='a3681dea' name='tree1'/> - <parameter type-id='a3681dea' name='tree2'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_create' mangled-name='avl_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_create'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='585e1de9' name='compar'/> - <parameter type-id='b59d7dce' name='size'/> - <parameter type-id='b59d7dce' name='offset'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_destroy' mangled-name='avl_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_destroy'> - <parameter type-id='a3681dea' name='tree'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='avl_numnodes' mangled-name='avl_numnodes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_numnodes'> - <parameter type-id='a3681dea' name='tree'/> - <return type-id='ee1f298e'/> - </function-decl> - <function-decl name='avl_is_empty' mangled-name='avl_is_empty' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_is_empty'> - <parameter type-id='a3681dea' name='tree'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='avl_destroy_nodes' mangled-name='avl_destroy_nodes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_destroy_nodes'> - <parameter type-id='a3681dea' name='tree'/> - <parameter type-id='63e171df' name='cookie'/> - <return type-id='eaa32e2f'/> - </function-decl> - <function-type size-in-bits='64' id='96ee24a5'> - <parameter type-id='eaa32e2f'/> - <parameter type-id='eaa32e2f'/> - <return type-id='95e97e5e'/> - </function-type> - </abi-instr> - <abi-instr address-size='64' path='rdwr_efi.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libefi/rdwr_efi.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='288' id='16e6f2c6'> <subrange length='36' type-id='7359adad' id='ae666bde'/> </array-type-def> @@ -835,7 +732,7 @@ <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> </abi-instr> - <abi-instr address-size='64' path='libshare.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libshare/libshare.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='b99c00c9' size-in-bits='128' id='2d6895a3'> <subrange length='2' type-id='7359adad' id='52efc4ef'/> </array-type-def> @@ -877,7 +774,7 @@ <enumerator name='SA_PROTOCOL_COUNT' value='2'/> </enum-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/nfs.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libshare/os/linux/nfs.c' language='LANG_C99'> <class-decl name='sa_share_impl' size-in-bits='192' is-struct='yes' visibility='default' id='72b09bf8'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='sa_zfsname' type-id='80f4b756' visibility='default'/> @@ -936,10 +833,10 @@ <return type-id='c19b74c3'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='os/linux/smb.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libshare/os/linux/smb.c' language='LANG_C99'> <var-decl name='libshare_smb_type' type-id='d19dbca9' visibility='default'/> </abi-instr> - <abi-instr address-size='64' path='assert.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/assert.c' language='LANG_C99'> <function-decl name='libspl_set_assert_ok' mangled-name='libspl_set_assert_ok' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_set_assert_ok'> <parameter type-id='c19b74c3' name='val'/> <return type-id='48b5725f'/> @@ -953,7 +850,7 @@ <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='atomic.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/atomic.c' language='LANG_C99'> <type-decl name='signed char' size-in-bits='8' id='28577a57'/> <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> <typedef-decl name='int8_t' type-id='2171a512' id='ee31ee44'/> @@ -1291,12 +1188,12 @@ <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='getexecname.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/getexecname.c' language='LANG_C99'> <function-decl name='getexecname' mangled-name='getexecname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getexecname'> <return type-id='80f4b756'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='list.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/list.c' language='LANG_C99'> <typedef-decl name='list_node_t' type-id='b0b5e45e' id='b21843b2'/> <typedef-decl name='list_t' type-id='e824dae9' id='0899125f'/> <class-decl name='list_node' size-in-bits='128' is-struct='yes' visibility='default' id='b0b5e45e'> @@ -1407,7 +1304,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='mkdirp.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/mkdirp.c' language='LANG_C99'> <typedef-decl name='mode_t' type-id='e1c52942' id='d50d396c'/> <function-decl name='mkdirp' mangled-name='mkdirp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mkdirp'> <parameter type-id='80f4b756' name='d'/> @@ -1415,12 +1312,12 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/gethostid.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/os/linux/gethostid.c' language='LANG_C99'> <function-decl name='get_system_hostid' mangled-name='get_system_hostid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_system_hostid'> <return type-id='7359adad'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/getmntany.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/os/linux/getmntany.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='03085adc' size-in-bits='192' id='083f8d58'> <subrange length='3' type-id='7359adad' id='56f209d2'/> </array-type-def> @@ -1639,18 +1536,18 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/zone.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/os/linux/zone.c' language='LANG_C99'> <typedef-decl name='zoneid_t' type-id='95e97e5e' id='4da03624'/> <function-decl name='getzoneid' mangled-name='getzoneid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getzoneid'> <return type-id='4da03624'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='page.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/page.c' language='LANG_C99'> <function-decl name='spl_pagesize' mangled-name='spl_pagesize' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spl_pagesize'> <return type-id='b59d7dce'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='strlcat.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/strlcat.c' language='LANG_C99'> <function-decl name='strlcat' mangled-name='strlcat' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcat'> <parameter type-id='26a90f95' name='dst'/> <parameter type-id='80f4b756' name='src'/> @@ -1658,7 +1555,7 @@ <return type-id='b59d7dce'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='strlcpy.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/strlcpy.c' language='LANG_C99'> <function-decl name='strlcpy' mangled-name='strlcpy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'> <parameter type-id='26a90f95' name='dst'/> <parameter type-id='80f4b756' name='src'/> @@ -1666,13 +1563,13 @@ <return type-id='b59d7dce'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='timestamp.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/timestamp.c' language='LANG_C99'> <function-decl name='print_timestamp' mangled-name='print_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='print_timestamp'> <parameter type-id='3502e3ff' name='timestamp_fmt'/> <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='thread_pool.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libtpool/thread_pool.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='384' id='36d7f119'> <subrange length='48' type-id='7359adad' id='8f6d2a81'/> </array-type-def> @@ -1684,6 +1581,75 @@ <subrange length='2' type-id='7359adad' id='52efc4ef'/> </array-type-def> <typedef-decl name='tpool_t' type-id='88d1b7f9' id='b1bbf10d'/> + <typedef-decl name='pthread_t' type-id='7359adad' id='4051f5e7'/> + <union-decl name='pthread_attr_t' size-in-bits='448' visibility='default' id='b63afacd'> + <data-member access='public'> + <var-decl name='__size' type-id='6093ff7c' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='bd54fe1a' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_attr_t' type-id='b63afacd' id='7d8569fd'/> + <union-decl name='pthread_cond_t' size-in-bits='384' naming-typedef-id='62fab762' visibility='default' id='cbb12c12'> + <data-member access='public'> + <var-decl name='__data' type-id='c987b47c' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__size' type-id='36d7f119' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='1eb56b1e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_cond_t' type-id='cbb12c12' id='62fab762'/> + <class-decl name='__pthread_cond_s' size-in-bits='384' is-struct='yes' visibility='default' id='c987b47c'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='' type-id='ac5ab595' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='' type-id='ac5ab596' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='__g_refs' type-id='0d532ec1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='__g_size' type-id='0d532ec1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='__g1_orig_size' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='__wrefs' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='__g_signals' type-id='0d532ec1' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab595'> + <data-member access='public'> + <var-decl name='__wseq' type-id='3a47d82b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__wseq32' type-id='e7f43f72' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f72'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__low' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='__high' type-id='f0981eeb' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab596'> + <data-member access='public'> + <var-decl name='__g1_start' type-id='3a47d82b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__g1_start32' type-id='e7f43f72' visibility='default'/> + </data-member> + </union-decl> <typedef-decl name='tpool_job_t' type-id='3b8579e5' id='66a0afc9'/> <class-decl name='tpool_job' size-in-bits='192' is-struct='yes' visibility='default' id='3b8579e5'> <data-member access='public' layout-offset-in-bits='0'> @@ -1758,75 +1724,6 @@ <var-decl name='tp_idle' type-id='95e97e5e' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='pthread_t' type-id='7359adad' id='4051f5e7'/> - <union-decl name='pthread_attr_t' size-in-bits='448' visibility='default' id='b63afacd'> - <data-member access='public'> - <var-decl name='__size' type-id='6093ff7c' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__align' type-id='bd54fe1a' visibility='default'/> - </data-member> - </union-decl> - <typedef-decl name='pthread_attr_t' type-id='b63afacd' id='7d8569fd'/> - <union-decl name='pthread_cond_t' size-in-bits='384' naming-typedef-id='62fab762' visibility='default' id='cbb12c12'> - <data-member access='public'> - <var-decl name='__data' type-id='c987b47c' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__size' type-id='36d7f119' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__align' type-id='1eb56b1e' visibility='default'/> - </data-member> - </union-decl> - <typedef-decl name='pthread_cond_t' type-id='cbb12c12' id='62fab762'/> - <class-decl name='__pthread_cond_s' size-in-bits='384' is-struct='yes' visibility='default' id='c987b47c'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='' type-id='ac5ab595' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='' type-id='ac5ab596' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='__g_refs' type-id='0d532ec1' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='__g_size' type-id='0d532ec1' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='__g1_orig_size' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='288'> - <var-decl name='__wrefs' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='__g_signals' type-id='0d532ec1' visibility='default'/> - </data-member> - </class-decl> - <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab595'> - <data-member access='public'> - <var-decl name='__wseq' type-id='3a47d82b' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__wseq32' type-id='e7f43f72' visibility='default'/> - </data-member> - </union-decl> - <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f72'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='__low' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32'> - <var-decl name='__high' type-id='f0981eeb' visibility='default'/> - </data-member> - </class-decl> - <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab596'> - <data-member access='public'> - <var-decl name='__g1_start' type-id='3a47d82b' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__g1_start32' type-id='e7f43f72' visibility='default'/> - </data-member> - </union-decl> <pointer-type-def type-id='7d8569fd' size-in-bits='64' id='7347a39e'/> <pointer-type-def type-id='6fcda10e' size-in-bits='64' id='ad33e5e7'/> <pointer-type-def type-id='66a0afc9' size-in-bits='64' id='f32b30e4'/> @@ -1878,1074 +1775,10 @@ <return type-id='48b5725f'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/cityhash.c' language='LANG_C99'> - <function-decl name='cityhash4' mangled-name='cityhash4' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cityhash4'> - <parameter type-id='9c313c2d' name='w1'/> - <parameter type-id='9c313c2d' name='w2'/> - <parameter type-id='9c313c2d' name='w3'/> - <parameter type-id='9c313c2d' name='w4'/> - <return type-id='9c313c2d'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfeature_common.c' language='LANG_C99'> - <array-type-def dimensions='1' type-id='83f29ca2' size-in-bits='16128' id='9d5e9e2e'> - <subrange length='36' type-id='7359adad' id='ae666bde'/> - </array-type-def> - <enum-decl name='spa_feature' id='33ecb627'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='SPA_FEATURE_NONE' value='-1'/> - <enumerator name='SPA_FEATURE_ASYNC_DESTROY' value='0'/> - <enumerator name='SPA_FEATURE_EMPTY_BPOBJ' value='1'/> - <enumerator name='SPA_FEATURE_LZ4_COMPRESS' value='2'/> - <enumerator name='SPA_FEATURE_MULTI_VDEV_CRASH_DUMP' value='3'/> - <enumerator name='SPA_FEATURE_SPACEMAP_HISTOGRAM' value='4'/> - <enumerator name='SPA_FEATURE_ENABLED_TXG' value='5'/> - <enumerator name='SPA_FEATURE_HOLE_BIRTH' value='6'/> - <enumerator name='SPA_FEATURE_EXTENSIBLE_DATASET' value='7'/> - <enumerator name='SPA_FEATURE_EMBEDDED_DATA' value='8'/> - <enumerator name='SPA_FEATURE_BOOKMARKS' value='9'/> - <enumerator name='SPA_FEATURE_FS_SS_LIMIT' value='10'/> - <enumerator name='SPA_FEATURE_LARGE_BLOCKS' value='11'/> - <enumerator name='SPA_FEATURE_LARGE_DNODE' value='12'/> - <enumerator name='SPA_FEATURE_SHA512' value='13'/> - <enumerator name='SPA_FEATURE_SKEIN' value='14'/> - <enumerator name='SPA_FEATURE_EDONR' value='15'/> - <enumerator name='SPA_FEATURE_USEROBJ_ACCOUNTING' value='16'/> - <enumerator name='SPA_FEATURE_ENCRYPTION' value='17'/> - <enumerator name='SPA_FEATURE_PROJECT_QUOTA' value='18'/> - <enumerator name='SPA_FEATURE_DEVICE_REMOVAL' value='19'/> - <enumerator name='SPA_FEATURE_OBSOLETE_COUNTS' value='20'/> - <enumerator name='SPA_FEATURE_POOL_CHECKPOINT' value='21'/> - <enumerator name='SPA_FEATURE_SPACEMAP_V2' value='22'/> - <enumerator name='SPA_FEATURE_ALLOCATION_CLASSES' value='23'/> - <enumerator name='SPA_FEATURE_RESILVER_DEFER' value='24'/> - <enumerator name='SPA_FEATURE_BOOKMARK_V2' value='25'/> - <enumerator name='SPA_FEATURE_REDACTION_BOOKMARKS' value='26'/> - <enumerator name='SPA_FEATURE_REDACTED_DATASETS' value='27'/> - <enumerator name='SPA_FEATURE_BOOKMARK_WRITTEN' value='28'/> - <enumerator name='SPA_FEATURE_LOG_SPACEMAP' value='29'/> - <enumerator name='SPA_FEATURE_LIVELIST' value='30'/> - <enumerator name='SPA_FEATURE_DEVICE_REBUILD' value='31'/> - <enumerator name='SPA_FEATURE_ZSTD_COMPRESS' value='32'/> - <enumerator name='SPA_FEATURE_DRAID' value='33'/> - <enumerator name='SPA_FEATURE_ZILSAXATTR' value='34'/> - <enumerator name='SPA_FEATURE_HEAD_ERRLOG' value='35'/> - <enumerator name='SPA_FEATURES' value='36'/> - </enum-decl> - <typedef-decl name='spa_feature_t' type-id='33ecb627' id='d6618c78'/> - <enum-decl name='zfeature_flags' id='6db816a4'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZFEATURE_FLAG_READONLY_COMPAT' value='1'/> - <enumerator name='ZFEATURE_FLAG_MOS' value='2'/> - <enumerator name='ZFEATURE_FLAG_ACTIVATE_ON_ENABLE' value='4'/> - <enumerator name='ZFEATURE_FLAG_PER_DATASET' value='8'/> - </enum-decl> - <typedef-decl name='zfeature_flags_t' type-id='6db816a4' id='fc329033'/> - <enum-decl name='zfeature_type' id='c4fa2355'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZFEATURE_TYPE_BOOLEAN' value='0'/> - <enumerator name='ZFEATURE_TYPE_UINT64_ARRAY' value='1'/> - <enumerator name='ZFEATURE_NUM_TYPES' value='2'/> - </enum-decl> - <typedef-decl name='zfeature_type_t' type-id='c4fa2355' id='732d2bb2'/> - <class-decl name='zfeature_info' size-in-bits='448' is-struct='yes' visibility='default' id='1178d146'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='fi_feature' type-id='d6618c78' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='fi_uname' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='fi_guid' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='fi_desc' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='fi_flags' type-id='fc329033' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='288'> - <var-decl name='fi_zfs_mod_supported' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='fi_type' type-id='732d2bb2' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='fi_depends' type-id='1acff326' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfeature_info_t' type-id='1178d146' id='83f29ca2'/> - <class-decl name='zfs_mod_supported_features' size-in-bits='128' is-struct='yes' visibility='default' id='3eee3342'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='tree' type-id='eaa32e2f' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='all_features' type-id='c19b74c3' visibility='default'/> - </data-member> - </class-decl> - <qualified-type-def type-id='d6618c78' const='yes' id='81a65028'/> - <pointer-type-def type-id='81a65028' size-in-bits='64' id='1acff326'/> - <qualified-type-def type-id='3eee3342' const='yes' id='0c1d5bbb'/> - <pointer-type-def type-id='0c1d5bbb' size-in-bits='64' id='a3372543'/> - <pointer-type-def type-id='d6618c78' size-in-bits='64' id='a8425263'/> - <var-decl name='spa_feature_table' type-id='9d5e9e2e' mangled-name='spa_feature_table' visibility='default' elf-symbol-id='spa_feature_table'/> - <var-decl name='zfeature_checks_disable' type-id='c19b74c3' mangled-name='zfeature_checks_disable' visibility='default' elf-symbol-id='zfeature_checks_disable'/> - <function-decl name='zfeature_is_valid_guid' mangled-name='zfeature_is_valid_guid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_is_valid_guid'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfeature_is_supported' mangled-name='zfeature_is_supported' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_is_supported'> - <parameter type-id='80f4b756' name='guid'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfeature_lookup_guid' mangled-name='zfeature_lookup_guid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_lookup_guid'> - <parameter type-id='80f4b756' name='guid'/> - <parameter type-id='a8425263' name='res'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfeature_lookup_name' mangled-name='zfeature_lookup_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_lookup_name'> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a8425263' name='res'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfeature_depends_on' mangled-name='zfeature_depends_on' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_depends_on'> - <parameter type-id='d6618c78' name='fid'/> - <parameter type-id='d6618c78' name='check'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_mod_supported' mangled-name='zfs_mod_supported' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mod_supported'> - <parameter type-id='80f4b756' name='scope'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a3372543' name='sfeatures'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zpool_feature_init' mangled-name='zpool_feature_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_feature_init'> - <return type-id='48b5725f'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_comutil.c' language='LANG_C99'> - <array-type-def dimensions='1' type-id='b99c00c9' size-in-bits='2624' id='5ce15418'> - <subrange length='41' type-id='7359adad' id='cb834f44'/> - </array-type-def> - <class-decl name='zpool_load_policy' size-in-bits='256' is-struct='yes' visibility='default' id='2f65b36f'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zlp_rewind' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='zlp_maxmeta' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='zlp_maxdata' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='zlp_txg' type-id='9c313c2d' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zpool_load_policy_t' type-id='2f65b36f' id='d11b7617'/> - <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/> - <pointer-type-def type-id='d11b7617' size-in-bits='64' id='23432aaa'/> - <var-decl name='zfs_history_event_names' type-id='5ce15418' mangled-name='zfs_history_event_names' visibility='default' elf-symbol-id='zfs_history_event_names'/> - <function-decl name='zfs_allocatable_devs' mangled-name='zfs_allocatable_devs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_allocatable_devs'> - <parameter type-id='5ce45b60' name='nv'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_special_devs' mangled-name='zfs_special_devs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_special_devs'> - <parameter type-id='5ce45b60' name='nv'/> - <parameter type-id='26a90f95' name='type'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zpool_get_load_policy' mangled-name='zpool_get_load_policy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_load_policy'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='23432aaa' name='zlpp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zfs_zpl_version_map' mangled-name='zfs_zpl_version_map' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_zpl_version_map'> - <parameter type-id='95e97e5e' name='spa_version'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_spa_version_map' mangled-name='zfs_spa_version_map' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_spa_version_map'> - <parameter type-id='95e97e5e' name='zpl_version'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_dataset_name_hidden' mangled-name='zfs_dataset_name_hidden' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dataset_name_hidden'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_deleg.c' language='LANG_C99'> - <array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='infinite' id='7c00e69d'> - <subrange length='infinite' id='031f2035'/> - </array-type-def> - <enum-decl name='zfs_deleg_who_type_t' naming-typedef-id='36d4bd5a' id='b5fa5816'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZFS_DELEG_WHO_UNKNOWN' value='0'/> - <enumerator name='ZFS_DELEG_USER' value='117'/> - <enumerator name='ZFS_DELEG_USER_SETS' value='85'/> - <enumerator name='ZFS_DELEG_GROUP' value='103'/> - <enumerator name='ZFS_DELEG_GROUP_SETS' value='71'/> - <enumerator name='ZFS_DELEG_EVERYONE' value='101'/> - <enumerator name='ZFS_DELEG_EVERYONE_SETS' value='69'/> - <enumerator name='ZFS_DELEG_CREATE' value='99'/> - <enumerator name='ZFS_DELEG_CREATE_SETS' value='67'/> - <enumerator name='ZFS_DELEG_NAMED_SET' value='115'/> - <enumerator name='ZFS_DELEG_NAMED_SET_SETS' value='83'/> - </enum-decl> - <typedef-decl name='zfs_deleg_who_type_t' type-id='b5fa5816' id='36d4bd5a'/> - <enum-decl name='zfs_deleg_note_t' naming-typedef-id='4613c173' id='729d4547'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZFS_DELEG_NOTE_CREATE' value='0'/> - <enumerator name='ZFS_DELEG_NOTE_DESTROY' value='1'/> - <enumerator name='ZFS_DELEG_NOTE_SNAPSHOT' value='2'/> - <enumerator name='ZFS_DELEG_NOTE_ROLLBACK' value='3'/> - <enumerator name='ZFS_DELEG_NOTE_CLONE' value='4'/> - <enumerator name='ZFS_DELEG_NOTE_PROMOTE' value='5'/> - <enumerator name='ZFS_DELEG_NOTE_RENAME' value='6'/> - <enumerator name='ZFS_DELEG_NOTE_SEND' value='7'/> - <enumerator name='ZFS_DELEG_NOTE_RECEIVE' value='8'/> - <enumerator name='ZFS_DELEG_NOTE_ALLOW' value='9'/> - <enumerator name='ZFS_DELEG_NOTE_USERPROP' value='10'/> - <enumerator name='ZFS_DELEG_NOTE_MOUNT' value='11'/> - <enumerator name='ZFS_DELEG_NOTE_SHARE' value='12'/> - <enumerator name='ZFS_DELEG_NOTE_USERQUOTA' value='13'/> - <enumerator name='ZFS_DELEG_NOTE_GROUPQUOTA' value='14'/> - <enumerator name='ZFS_DELEG_NOTE_USERUSED' value='15'/> - <enumerator name='ZFS_DELEG_NOTE_GROUPUSED' value='16'/> - <enumerator name='ZFS_DELEG_NOTE_USEROBJQUOTA' value='17'/> - <enumerator name='ZFS_DELEG_NOTE_GROUPOBJQUOTA' value='18'/> - <enumerator name='ZFS_DELEG_NOTE_USEROBJUSED' value='19'/> - <enumerator name='ZFS_DELEG_NOTE_GROUPOBJUSED' value='20'/> - <enumerator name='ZFS_DELEG_NOTE_HOLD' value='21'/> - <enumerator name='ZFS_DELEG_NOTE_RELEASE' value='22'/> - <enumerator name='ZFS_DELEG_NOTE_DIFF' value='23'/> - <enumerator name='ZFS_DELEG_NOTE_BOOKMARK' value='24'/> - <enumerator name='ZFS_DELEG_NOTE_LOAD_KEY' value='25'/> - <enumerator name='ZFS_DELEG_NOTE_CHANGE_KEY' value='26'/> - <enumerator name='ZFS_DELEG_NOTE_PROJECTUSED' value='27'/> - <enumerator name='ZFS_DELEG_NOTE_PROJECTQUOTA' value='28'/> - <enumerator name='ZFS_DELEG_NOTE_PROJECTOBJUSED' value='29'/> - <enumerator name='ZFS_DELEG_NOTE_PROJECTOBJQUOTA' value='30'/> - <enumerator name='ZFS_DELEG_NOTE_NONE' value='31'/> - </enum-decl> - <typedef-decl name='zfs_deleg_note_t' type-id='729d4547' id='4613c173'/> - <class-decl name='zfs_deleg_perm_tab' size-in-bits='128' is-struct='yes' visibility='default' id='5aa05c1f'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='z_perm' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='z_note' type-id='4613c173' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_deleg_perm_tab_t' type-id='5aa05c1f' id='f3f851ad'/> - <qualified-type-def type-id='f3f851ad' const='yes' id='fa1870fd'/> - <var-decl name='zfs_deleg_perm_tab' type-id='7c00e69d' mangled-name='zfs_deleg_perm_tab' visibility='default' elf-symbol-id='zfs_deleg_perm_tab'/> - <function-decl name='zfs_deleg_canonicalize_perm' mangled-name='zfs_deleg_canonicalize_perm' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_deleg_canonicalize_perm'> - <parameter type-id='80f4b756' name='perm'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zfs_deleg_verify_nvlist' mangled-name='zfs_deleg_verify_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_deleg_verify_nvlist'> - <parameter type-id='5ce45b60' name='nvp'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_deleg_whokey' mangled-name='zfs_deleg_whokey' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_deleg_whokey'> - <parameter type-id='26a90f95' name='attr'/> - <parameter type-id='36d4bd5a' name='type'/> - <parameter type-id='a84c031d' name='inheritchr'/> - <parameter type-id='eaa32e2f' name='data'/> - <return type-id='48b5725f'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_fletcher.c' language='LANG_C99'> - <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='256' id='85c64d26'> - <subrange length='4' type-id='7359adad' id='16fe7105'/> - </array-type-def> - <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='512' id='c5d13f42'> - <subrange length='8' type-id='7359adad' id='56e0c0b1'/> - </array-type-def> - <array-type-def dimensions='1' type-id='90dbb6d6' size-in-bits='2048' id='16582e69'> - <subrange length='4' type-id='7359adad' id='16fe7105'/> - </array-type-def> - <array-type-def dimensions='1' type-id='8240361c' size-in-bits='1024' id='481f90b1'> - <subrange length='4' type-id='7359adad' id='16fe7105'/> - </array-type-def> - <array-type-def dimensions='1' type-id='7c1ab40c' size-in-bits='512' id='cbd91ec1'> - <subrange length='4' type-id='7359adad' id='16fe7105'/> - </array-type-def> - <array-type-def dimensions='1' type-id='6d059eaa' size-in-bits='1024' id='729b6ebb'> - <subrange length='4' type-id='7359adad' id='16fe7105'/> - </array-type-def> - <class-decl name='zio_cksum' size-in-bits='256' is-struct='yes' visibility='default' id='1d53e28b'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zc_word' type-id='85c64d26' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zio_cksum_t' type-id='1d53e28b' id='39730d0b'/> - <enum-decl name='zio_byteorder_t' naming-typedef-id='595a65ec' id='fc861be0'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZIO_CHECKSUM_NATIVE' value='0'/> - <enumerator name='ZIO_CHECKSUM_BYTESWAP' value='1'/> - </enum-decl> - <typedef-decl name='zio_byteorder_t' type-id='fc861be0' id='595a65ec'/> - <class-decl name='zio_abd_checksum_data' size-in-bits='256' is-struct='yes' visibility='default' id='4bf4b004'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='acd_byteorder' type-id='595a65ec' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='acd_ctx' type-id='0f7df99e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='acd_zcp' type-id='c24fc2ee' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='acd_private' type-id='eaa32e2f' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zio_abd_checksum_data_t' type-id='4bf4b004' id='74e39470'/> - <typedef-decl name='zio_abd_checksum_init_t' type-id='a5444274' id='029a8ebe'/> - <typedef-decl name='zio_abd_checksum_fini_t' type-id='a5444274' id='d6fd5c6c'/> - <typedef-decl name='zio_abd_checksum_iter_t' type-id='f4a1892e' id='cefa0f4a'/> - <class-decl name='zio_abd_checksum_func' size-in-bits='192' is-struct='yes' visibility='default' id='aa14691a'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='acf_init' type-id='0bcca125' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='acf_fini' type-id='bfe36153' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='acf_iter' type-id='1e276399' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zio_abd_checksum_func_t' type-id='3f8e8d11' id='c2eb138a'/> - <class-decl name='zfs_fletcher_superscalar' size-in-bits='256' is-struct='yes' visibility='default' id='28efb250'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='v' type-id='85c64d26' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_fletcher_superscalar_t' type-id='28efb250' id='6d059eaa'/> - <class-decl name='zfs_fletcher_sse' size-in-bits='128' is-struct='yes' visibility='default' id='acd4019a'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='v' type-id='c1c22e6c' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_fletcher_sse_t' type-id='acd4019a' id='7c1ab40c'/> - <class-decl name='zfs_fletcher_avx' size-in-bits='256' is-struct='yes' visibility='default' id='8c208dfa'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='v' type-id='85c64d26' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_fletcher_avx_t' type-id='8c208dfa' id='8240361c'/> - <class-decl name='zfs_fletcher_avx512' size-in-bits='512' is-struct='yes' visibility='default' id='c6d0c382'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='v' type-id='c5d13f42' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_fletcher_avx512_t' type-id='c6d0c382' id='90dbb6d6'/> - <union-decl name='fletcher_4_ctx' size-in-bits='2048' visibility='default' id='1f951ade'> - <data-member access='public'> - <var-decl name='scalar' type-id='39730d0b' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='superscalar' type-id='729b6ebb' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='sse' type-id='cbd91ec1' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='avx' type-id='481f90b1' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='avx512' type-id='16582e69' visibility='default'/> - </data-member> - </union-decl> - <typedef-decl name='fletcher_4_ctx_t' type-id='1f951ade' id='4b675395'/> - <qualified-type-def type-id='aa14691a' const='yes' id='3f8e8d11'/> - <pointer-type-def type-id='4b675395' size-in-bits='64' id='0f7df99e'/> - <pointer-type-def type-id='74e39470' size-in-bits='64' id='eefe7427'/> - <pointer-type-def type-id='d6fd5c6c' size-in-bits='64' id='bfe36153'/> - <pointer-type-def type-id='029a8ebe' size-in-bits='64' id='0bcca125'/> - <pointer-type-def type-id='cefa0f4a' size-in-bits='64' id='1e276399'/> - <pointer-type-def type-id='39730d0b' size-in-bits='64' id='c24fc2ee'/> - <var-decl name='fletcher_4_abd_ops' type-id='c2eb138a' mangled-name='fletcher_4_abd_ops' visibility='default' elf-symbol-id='fletcher_4_abd_ops'/> - <function-decl name='fletcher_init' mangled-name='fletcher_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_init'> - <parameter type-id='c24fc2ee' name='zcp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_2_incremental_native' mangled-name='fletcher_2_incremental_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_incremental_native'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='b59d7dce' name='size'/> - <parameter type-id='eaa32e2f' name='data'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='fletcher_2_native' mangled-name='fletcher_2_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_native'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='9c313c2d' name='size'/> - <parameter type-id='eaa32e2f' name='ctx_template'/> - <parameter type-id='c24fc2ee' name='zcp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_2_incremental_byteswap' mangled-name='fletcher_2_incremental_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_incremental_byteswap'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='b59d7dce' name='size'/> - <parameter type-id='eaa32e2f' name='data'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='fletcher_2_byteswap' mangled-name='fletcher_2_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_byteswap'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='9c313c2d' name='size'/> - <parameter type-id='eaa32e2f' name='ctx_template'/> - <parameter type-id='c24fc2ee' name='zcp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_4_impl_set' mangled-name='fletcher_4_impl_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_impl_set'> - <parameter type-id='80f4b756' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='fletcher_4_native' mangled-name='fletcher_4_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_native'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='9c313c2d' name='size'/> - <parameter type-id='eaa32e2f' name='ctx_template'/> - <parameter type-id='c24fc2ee' name='zcp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_4_native_varsize' mangled-name='fletcher_4_native_varsize' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_native_varsize'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='9c313c2d' name='size'/> - <parameter type-id='c24fc2ee' name='zcp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_4_byteswap' mangled-name='fletcher_4_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_byteswap'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='9c313c2d' name='size'/> - <parameter type-id='eaa32e2f' name='ctx_template'/> - <parameter type-id='c24fc2ee' name='zcp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_4_incremental_native' mangled-name='fletcher_4_incremental_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_incremental_native'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='b59d7dce' name='size'/> - <parameter type-id='eaa32e2f' name='data'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='fletcher_4_incremental_byteswap' mangled-name='fletcher_4_incremental_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_incremental_byteswap'> - <parameter type-id='eaa32e2f' name='buf'/> - <parameter type-id='b59d7dce' name='size'/> - <parameter type-id='eaa32e2f' name='data'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='fletcher_4_init' mangled-name='fletcher_4_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_init'> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fletcher_4_fini' mangled-name='fletcher_4_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_fini'> - <return type-id='48b5725f'/> - </function-decl> - <function-type size-in-bits='64' id='f4a1892e'> - <parameter type-id='eaa32e2f'/> - <parameter type-id='b59d7dce'/> - <parameter type-id='eaa32e2f'/> - <return type-id='95e97e5e'/> - </function-type> - <function-type size-in-bits='64' id='a5444274'> - <parameter type-id='eefe7427'/> - <return type-id='48b5725f'/> - </function-type> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_fletcher_avx512.c' language='LANG_C99'> - <typedef-decl name='fletcher_4_init_f' type-id='173aa527' id='b9ae1656'/> - <typedef-decl name='fletcher_4_fini_f' type-id='0ad5b8a8' id='c4c1f4fc'/> - <typedef-decl name='fletcher_4_compute_f' type-id='38147eff' id='ad1dc4cb'/> - <class-decl name='fletcher_4_func' size-in-bits='512' is-struct='yes' visibility='default' id='57f479a0'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='init_native' type-id='b9ae1656' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='fini_native' type-id='c4c1f4fc' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='compute_native' type-id='ad1dc4cb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='init_byteswap' type-id='b9ae1656' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='fini_byteswap' type-id='c4c1f4fc' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='compute_byteswap' type-id='ad1dc4cb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='valid' type-id='297d38bc' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='name' type-id='80f4b756' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='fletcher_4_ops_t' type-id='57f479a0' id='eba91718'/> - <qualified-type-def type-id='eba91718' const='yes' id='9eeabdc8'/> - <pointer-type-def type-id='e9e61702' size-in-bits='64' id='297d38bc'/> - <pointer-type-def type-id='fe40251b' size-in-bits='64' id='173aa527'/> - <pointer-type-def type-id='17fb1f83' size-in-bits='64' id='38147eff'/> - <pointer-type-def type-id='fb39e25e' size-in-bits='64' id='0ad5b8a8'/> - <var-decl name='fletcher_4_avx512f_ops' type-id='9eeabdc8' mangled-name='fletcher_4_avx512f_ops' visibility='default' elf-symbol-id='fletcher_4_avx512f_ops'/> - <var-decl name='fletcher_4_avx512bw_ops' type-id='9eeabdc8' mangled-name='fletcher_4_avx512bw_ops' visibility='default' elf-symbol-id='fletcher_4_avx512bw_ops'/> - <function-type size-in-bits='64' id='e9e61702'> - <return type-id='c19b74c3'/> - </function-type> - <function-type size-in-bits='64' id='fe40251b'> - <parameter type-id='0f7df99e'/> - <return type-id='48b5725f'/> - </function-type> - <function-type size-in-bits='64' id='17fb1f83'> - <parameter type-id='0f7df99e'/> - <parameter type-id='eaa32e2f'/> - <parameter type-id='9c313c2d'/> - <return type-id='48b5725f'/> - </function-type> - <function-type size-in-bits='64' id='fb39e25e'> - <parameter type-id='0f7df99e'/> - <parameter type-id='c24fc2ee'/> - <return type-id='48b5725f'/> - </function-type> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_fletcher_intel.c' language='LANG_C99'> - <var-decl name='fletcher_4_avx2_ops' type-id='9eeabdc8' mangled-name='fletcher_4_avx2_ops' visibility='default' elf-symbol-id='fletcher_4_avx2_ops'/> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_fletcher_sse.c' language='LANG_C99'> - <var-decl name='fletcher_4_sse2_ops' type-id='9eeabdc8' mangled-name='fletcher_4_sse2_ops' visibility='default' elf-symbol-id='fletcher_4_sse2_ops'/> - <var-decl name='fletcher_4_ssse3_ops' type-id='9eeabdc8' mangled-name='fletcher_4_ssse3_ops' visibility='default' elf-symbol-id='fletcher_4_ssse3_ops'/> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_fletcher_superscalar.c' language='LANG_C99'> - <var-decl name='fletcher_4_superscalar_ops' type-id='9eeabdc8' mangled-name='fletcher_4_superscalar_ops' visibility='default' elf-symbol-id='fletcher_4_superscalar_ops'/> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_fletcher_superscalar4.c' language='LANG_C99'> - <var-decl name='fletcher_4_superscalar4_ops' type-id='9eeabdc8' mangled-name='fletcher_4_superscalar4_ops' visibility='default' elf-symbol-id='fletcher_4_superscalar4_ops'/> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_namecheck.c' language='LANG_C99'> - <enum-decl name='namecheck_err_t' naming-typedef-id='8e0af06e' id='f43bbcda'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='NAME_ERR_LEADING_SLASH' value='0'/> - <enumerator name='NAME_ERR_EMPTY_COMPONENT' value='1'/> - <enumerator name='NAME_ERR_TRAILING_SLASH' value='2'/> - <enumerator name='NAME_ERR_INVALCHAR' value='3'/> - <enumerator name='NAME_ERR_MULTIPLE_DELIMITERS' value='4'/> - <enumerator name='NAME_ERR_NOLETTER' value='5'/> - <enumerator name='NAME_ERR_RESERVED' value='6'/> - <enumerator name='NAME_ERR_DISKLIKE' value='7'/> - <enumerator name='NAME_ERR_TOOLONG' value='8'/> - <enumerator name='NAME_ERR_SELF_REF' value='9'/> - <enumerator name='NAME_ERR_PARENT_REF' value='10'/> - <enumerator name='NAME_ERR_NO_AT' value='11'/> - <enumerator name='NAME_ERR_NO_POUND' value='12'/> - </enum-decl> - <typedef-decl name='namecheck_err_t' type-id='f43bbcda' id='8e0af06e'/> - <pointer-type-def type-id='8e0af06e' size-in-bits='64' id='053457bd'/> - <var-decl name='zfs_max_dataset_nesting' type-id='95e97e5e' mangled-name='zfs_max_dataset_nesting' visibility='default' elf-symbol-id='zfs_max_dataset_nesting'/> - <function-decl name='get_dataset_depth' mangled-name='get_dataset_depth' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_dataset_depth'> - <parameter type-id='80f4b756' name='path'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_component_namecheck' mangled-name='zfs_component_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_component_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='permset_namecheck' mangled-name='permset_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='permset_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='dataset_nestcheck' mangled-name='dataset_nestcheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dataset_nestcheck'> - <parameter type-id='80f4b756' name='path'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='entity_namecheck' mangled-name='entity_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='entity_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='dataset_namecheck' mangled-name='dataset_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dataset_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='bookmark_namecheck' mangled-name='bookmark_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bookmark_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='snapshot_namecheck' mangled-name='snapshot_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snapshot_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='mountpoint_namecheck' mangled-name='mountpoint_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mountpoint_namecheck'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='053457bd' name='why'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='pool_namecheck' mangled-name='pool_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pool_namecheck'> - <parameter type-id='80f4b756' name='pool'/> - <parameter type-id='053457bd' name='why'/> - <parameter type-id='26a90f95' name='what'/> - <return type-id='95e97e5e'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zfs_prop.c' language='LANG_C99'> - <array-type-def dimensions='1' type-id='b99c00c9' size-in-bits='768' id='bcc77e38'> - <subrange length='12' type-id='7359adad' id='84827bdc'/> - </array-type-def> - <enum-decl name='zprop_type_t' naming-typedef-id='31429eff' id='87676253'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='PROP_TYPE_NUMBER' value='0'/> - <enumerator name='PROP_TYPE_STRING' value='1'/> - <enumerator name='PROP_TYPE_INDEX' value='2'/> - </enum-decl> - <typedef-decl name='zprop_type_t' type-id='87676253' id='31429eff'/> - <enum-decl name='zprop_attr_t' naming-typedef-id='999701cc' id='77d05200'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='PROP_DEFAULT' value='0'/> - <enumerator name='PROP_READONLY' value='1'/> - <enumerator name='PROP_INHERIT' value='2'/> - <enumerator name='PROP_ONETIME' value='3'/> - <enumerator name='PROP_ONETIME_DEFAULT' value='4'/> - </enum-decl> - <typedef-decl name='zprop_attr_t' type-id='77d05200' id='999701cc'/> - <class-decl name='zfs_index' size-in-bits='128' is-struct='yes' visibility='default' id='87957af9'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='pi_name' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='pi_value' type-id='9c313c2d' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zprop_index_t' type-id='87957af9' id='64636ce3'/> - <class-decl name='zprop_desc_t' size-in-bits='640' is-struct='yes' naming-typedef-id='ffa52b96' visibility='default' id='bbff5e4b'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='pd_name' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='pd_propnum' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='96'> - <var-decl name='pd_proptype' type-id='31429eff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='pd_strdefault' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='pd_numdefault' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='pd_attr' type-id='999701cc' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='288'> - <var-decl name='pd_types' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='pd_values' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='pd_colname' type-id='80f4b756' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='pd_rightalign' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='449'> - <var-decl name='pd_visible' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='450'> - <var-decl name='pd_zfs_mod_supported' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='451'> - <var-decl name='pd_always_flex' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='pd_table' type-id='c8bc397b' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='pd_table_size' type-id='b59d7dce' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zprop_desc_t' type-id='bbff5e4b' id='ffa52b96'/> - <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/> - <qualified-type-def type-id='64636ce3' const='yes' id='072f7953'/> - <pointer-type-def type-id='072f7953' size-in-bits='64' id='c8bc397b'/> - <pointer-type-def type-id='ffa52b96' size-in-bits='64' id='76c8174b'/> - <var-decl name='zfs_userquota_prop_prefixes' type-id='bcc77e38' mangled-name='zfs_userquota_prop_prefixes' visibility='default' elf-symbol-id='zfs_userquota_prop_prefixes'/> - <function-decl name='zfs_prop_get_table' mangled-name='zfs_prop_get_table' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_table'> - <return type-id='76c8174b'/> - </function-decl> - <function-decl name='zfs_prop_init' mangled-name='zfs_prop_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_init'> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zfs_prop_delegatable' mangled-name='zfs_prop_delegatable' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_delegatable'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_name_to_prop' mangled-name='zfs_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_name_to_prop'> - <parameter type-id='80f4b756' name='propname'/> - <return type-id='58603c44'/> - </function-decl> - <function-decl name='zfs_prop_user' mangled-name='zfs_prop_user' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_user'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_userquota' mangled-name='zfs_prop_userquota' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_userquota'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_written' mangled-name='zfs_prop_written' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_written'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_string_to_index' mangled-name='zfs_prop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_string_to_index'> - <parameter type-id='58603c44' name='prop'/> - <parameter type-id='80f4b756' name='string'/> - <parameter type-id='5d6479ae' name='index'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_prop_index_to_string' mangled-name='zfs_prop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_index_to_string'> - <parameter type-id='58603c44' name='prop'/> - <parameter type-id='9c313c2d' name='index'/> - <parameter type-id='7d3cd834' name='string'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_prop_random_value' mangled-name='zfs_prop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_random_value'> - <parameter type-id='58603c44' name='prop'/> - <parameter type-id='9c313c2d' name='seed'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='zfs_prop_valid_for_type' mangled-name='zfs_prop_valid_for_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_valid_for_type'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='2e45de5d' name='types'/> - <parameter type-id='c19b74c3' name='headcheck'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_get_type' mangled-name='zfs_prop_get_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_type'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='31429eff'/> - </function-decl> - <function-decl name='zfs_prop_readonly' mangled-name='zfs_prop_readonly' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_readonly'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_visible' mangled-name='zfs_prop_visible' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_visible'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_setonce' mangled-name='zfs_prop_setonce' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_setonce'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_default_string' mangled-name='zfs_prop_default_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_default_string'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zfs_prop_default_numeric' mangled-name='zfs_prop_default_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_default_numeric'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='zfs_prop_to_name' mangled-name='zfs_prop_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_to_name'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zfs_prop_inheritable' mangled-name='zfs_prop_inheritable' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_inheritable'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_encryption_key_param' mangled-name='zfs_prop_encryption_key_param' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_encryption_key_param'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_valid_keylocation' mangled-name='zfs_prop_valid_keylocation' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_valid_keylocation'> - <parameter type-id='80f4b756' name='str'/> - <parameter type-id='c19b74c3' name='encrypted'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_prop_values' mangled-name='zfs_prop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_values'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zfs_prop_is_string' mangled-name='zfs_prop_is_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_is_string'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_prop_column_name' mangled-name='zfs_prop_column_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_column_name'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zfs_prop_align_right' mangled-name='zfs_prop_align_right' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_align_right'> - <parameter type-id='58603c44' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zpool_prop.c' language='LANG_C99'> - <function-decl name='zpool_prop_get_table' mangled-name='zpool_prop_get_table' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_get_table'> - <return type-id='76c8174b'/> - </function-decl> - <function-decl name='zpool_prop_init' mangled-name='zpool_prop_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_init'> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zpool_name_to_prop' mangled-name='zpool_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_name_to_prop'> - <parameter type-id='80f4b756' name='propname'/> - <return type-id='5d0c23fb'/> - </function-decl> - <function-decl name='zpool_prop_to_name' mangled-name='zpool_prop_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_to_name'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zpool_prop_get_type' mangled-name='zpool_prop_get_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_get_type'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='31429eff'/> - </function-decl> - <function-decl name='zpool_prop_readonly' mangled-name='zpool_prop_readonly' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_readonly'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zpool_prop_setonce' mangled-name='zpool_prop_setonce' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_setonce'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zpool_prop_default_string' mangled-name='zpool_prop_default_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_default_string'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zpool_prop_default_numeric' mangled-name='zpool_prop_default_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_default_numeric'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='zpool_prop_feature' mangled-name='zpool_prop_feature' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_feature'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zpool_prop_unsupported' mangled-name='zpool_prop_unsupported' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_unsupported'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zpool_prop_string_to_index' mangled-name='zpool_prop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_string_to_index'> - <parameter type-id='5d0c23fb' name='prop'/> - <parameter type-id='80f4b756' name='string'/> - <parameter type-id='5d6479ae' name='index'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zpool_prop_index_to_string' mangled-name='zpool_prop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_index_to_string'> - <parameter type-id='5d0c23fb' name='prop'/> - <parameter type-id='9c313c2d' name='index'/> - <parameter type-id='7d3cd834' name='string'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zpool_prop_random_value' mangled-name='zpool_prop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_random_value'> - <parameter type-id='5d0c23fb' name='prop'/> - <parameter type-id='9c313c2d' name='seed'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='zpool_prop_values' mangled-name='zpool_prop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_values'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zpool_prop_column_name' mangled-name='zpool_prop_column_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_column_name'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zpool_prop_align_right' mangled-name='zpool_prop_align_right' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_align_right'> - <parameter type-id='5d0c23fb' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='vdev_prop_get_table' mangled-name='vdev_prop_get_table' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_get_table'> - <return type-id='76c8174b'/> - </function-decl> - <function-decl name='vdev_prop_init' mangled-name='vdev_prop_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_init'> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='vdev_name_to_prop' mangled-name='vdev_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_name_to_prop'> - <parameter type-id='80f4b756' name='propname'/> - <return type-id='5aa5c90c'/> - </function-decl> - <function-decl name='vdev_prop_user' mangled-name='vdev_prop_user' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_user'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='vdev_prop_to_name' mangled-name='vdev_prop_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_to_name'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='vdev_prop_get_type' mangled-name='vdev_prop_get_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_get_type'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='31429eff'/> - </function-decl> - <function-decl name='vdev_prop_readonly' mangled-name='vdev_prop_readonly' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_readonly'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='vdev_prop_default_string' mangled-name='vdev_prop_default_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_default_string'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='vdev_prop_default_numeric' mangled-name='vdev_prop_default_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_default_numeric'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='vdev_prop_string_to_index' mangled-name='vdev_prop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_string_to_index'> - <parameter type-id='5aa5c90c' name='prop'/> - <parameter type-id='80f4b756' name='string'/> - <parameter type-id='5d6479ae' name='index'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='vdev_prop_index_to_string' mangled-name='vdev_prop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_index_to_string'> - <parameter type-id='5aa5c90c' name='prop'/> - <parameter type-id='9c313c2d' name='index'/> - <parameter type-id='7d3cd834' name='string'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zpool_prop_vdev' mangled-name='zpool_prop_vdev' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_vdev'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='vdev_prop_random_value' mangled-name='vdev_prop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_random_value'> - <parameter type-id='5aa5c90c' name='prop'/> - <parameter type-id='9c313c2d' name='seed'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='vdev_prop_values' mangled-name='vdev_prop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_values'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='vdev_prop_column_name' mangled-name='vdev_prop_column_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_column_name'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='vdev_prop_align_right' mangled-name='vdev_prop_align_right' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_align_right'> - <parameter type-id='5aa5c90c' name='prop'/> - <return type-id='c19b74c3'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/zcommon/zprop_common.c' language='LANG_C99'> - <function-decl name='zprop_register_impl' mangled-name='zprop_register_impl' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_impl'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='31429eff' name='type'/> - <parameter type-id='9c313c2d' name='numdefault'/> - <parameter type-id='80f4b756' name='strdefault'/> - <parameter type-id='999701cc' name='attr'/> - <parameter type-id='95e97e5e' name='objset_types'/> - <parameter type-id='80f4b756' name='values'/> - <parameter type-id='80f4b756' name='colname'/> - <parameter type-id='c19b74c3' name='rightalign'/> - <parameter type-id='c19b74c3' name='visible'/> - <parameter type-id='c19b74c3' name='flex'/> - <parameter type-id='c8bc397b' name='idx_tbl'/> - <parameter type-id='a3372543' name='sfeatures'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zprop_register_string' mangled-name='zprop_register_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_string'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='80f4b756' name='def'/> - <parameter type-id='999701cc' name='attr'/> - <parameter type-id='95e97e5e' name='objset_types'/> - <parameter type-id='80f4b756' name='values'/> - <parameter type-id='80f4b756' name='colname'/> - <parameter type-id='a3372543' name='sfeatures'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zprop_register_number' mangled-name='zprop_register_number' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_number'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9c313c2d' name='def'/> - <parameter type-id='999701cc' name='attr'/> - <parameter type-id='95e97e5e' name='objset_types'/> - <parameter type-id='80f4b756' name='values'/> - <parameter type-id='80f4b756' name='colname'/> - <parameter type-id='c19b74c3' name='flex'/> - <parameter type-id='a3372543' name='sfeatures'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zprop_register_index' mangled-name='zprop_register_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_index'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9c313c2d' name='def'/> - <parameter type-id='999701cc' name='attr'/> - <parameter type-id='95e97e5e' name='objset_types'/> - <parameter type-id='80f4b756' name='values'/> - <parameter type-id='80f4b756' name='colname'/> - <parameter type-id='c8bc397b' name='idx_tbl'/> - <parameter type-id='a3372543' name='sfeatures'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zprop_register_hidden' mangled-name='zprop_register_hidden' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_hidden'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='31429eff' name='type'/> - <parameter type-id='999701cc' name='attr'/> - <parameter type-id='95e97e5e' name='objset_types'/> - <parameter type-id='80f4b756' name='colname'/> - <parameter type-id='c19b74c3' name='flex'/> - <parameter type-id='a3372543' name='sfeatures'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zprop_iter_common' mangled-name='zprop_iter_common' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_iter_common'> - <parameter type-id='1ec3747a' name='func'/> - <parameter type-id='eaa32e2f' name='cb'/> - <parameter type-id='c19b74c3' name='show_all'/> - <parameter type-id='c19b74c3' name='ordered'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zprop_name_to_prop' mangled-name='zprop_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_name_to_prop'> - <parameter type-id='80f4b756' name='propname'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zprop_string_to_index' mangled-name='zprop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_string_to_index'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='80f4b756' name='string'/> - <parameter type-id='5d6479ae' name='index'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zprop_index_to_string' mangled-name='zprop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_index_to_string'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='9c313c2d' name='index'/> - <parameter type-id='7d3cd834' name='string'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zprop_random_value' mangled-name='zprop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_random_value'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='9c313c2d' name='seed'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='zprop_values' mangled-name='zprop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_values'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='zprop_valid_for_type' mangled-name='zprop_valid_for_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_valid_for_type'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='2e45de5d' name='type'/> - <parameter type-id='c19b74c3' name='headcheck'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zprop_valid_char' mangled-name='zprop_valid_char' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_valid_char'> - <parameter type-id='a84c031d' name='c'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zprop_width' mangled-name='zprop_width' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_width'> - <parameter type-id='95e97e5e' name='prop'/> - <parameter type-id='37e3bd22' name='fixed'/> - <parameter type-id='2e45de5d' name='type'/> - <return type-id='b59d7dce'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='libzfs_changelist.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_changelist.c' language='LANG_C99'> <type-decl name='void' id='48b5725f'/> </abi-instr> - <abi-instr address-size='64' path='libzfs_config.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_config.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='bf311473' size-in-bits='128' id='f0f65199'> <subrange length='2' type-id='7359adad' id='52efc4ef'/> </array-type-def> @@ -3079,6 +1912,110 @@ <typedef-decl name='ulong_t' type-id='7359adad' id='ee1f298e'/> <typedef-decl name='longlong_t' type-id='1eb56b1e' id='9b3ff54f'/> <typedef-decl name='diskaddr_t' type-id='9b3ff54f' id='804dc465'/> + <typedef-decl name='__re_long_size_t' type-id='7359adad' id='ba516949'/> + <typedef-decl name='reg_syntax_t' type-id='7359adad' id='1b72c3b3'/> + <class-decl name='re_pattern_buffer' size-in-bits='512' is-struct='yes' visibility='default' id='19fc9a8c'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='buffer' type-id='33976309' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='allocated' type-id='ba516949' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='used' type-id='ba516949' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='syntax' type-id='1b72c3b3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='fastmap' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='translate' type-id='cf536864' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='re_nsub' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='can_be_null' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='449'> + <var-decl name='regs_allocated' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='451'> + <var-decl name='fastmap_accurate' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='452'> + <var-decl name='no_sub' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='453'> + <var-decl name='not_bol' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='454'> + <var-decl name='not_eol' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='455'> + <var-decl name='newline_anchor' type-id='f0981eeb' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='regex_t' type-id='19fc9a8c' id='aca3bac8'/> + <typedef-decl name='uintptr_t' type-id='7359adad' id='e475ab95'/> + <union-decl name='pthread_mutex_t' size-in-bits='320' naming-typedef-id='7a6844eb' visibility='default' id='70681f9b'> + <data-member access='public'> + <var-decl name='__data' type-id='4c734837' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__size' type-id='36c46961' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='bd54fe1a' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_mutex_t' type-id='70681f9b' id='7a6844eb'/> + <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/> + <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/> + <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/> + <typedef-decl name='uint64_t' type-id='8910171f' id='9c313c2d'/> + <class-decl name='__pthread_mutex_s' size-in-bits='320' is-struct='yes' visibility='default' id='4c734837'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__lock' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='__count' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='__owner' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='__nusers' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='__kind' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='__spins' type-id='a2185560' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='176'> + <var-decl name='__elision' type-id='a2185560' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='__list' type-id='518fb49c' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__pthread_internal_list' size-in-bits='128' is-struct='yes' visibility='default' id='0e01899c'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__prev' type-id='4d98cd5a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='__next' type-id='4d98cd5a' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__pthread_list_t' type-id='0e01899c' id='518fb49c'/> + <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/> + <typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/> + <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/> + <typedef-decl name='__uint64_t' type-id='7359adad' id='8910171f'/> + <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <class-decl name='libzfs_handle' size-in-bits='18240' is-struct='yes' visibility='default' id='c8a9d9d8'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='libzfs_error' type-id='95e97e5e' visibility='default'/> @@ -3205,110 +2142,6 @@ <var-decl name='zpool_start_block' type-id='804dc465' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='__re_long_size_t' type-id='7359adad' id='ba516949'/> - <typedef-decl name='reg_syntax_t' type-id='7359adad' id='1b72c3b3'/> - <class-decl name='re_pattern_buffer' size-in-bits='512' is-struct='yes' visibility='default' id='19fc9a8c'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='buffer' type-id='33976309' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='allocated' type-id='ba516949' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='used' type-id='ba516949' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='syntax' type-id='1b72c3b3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='fastmap' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='translate' type-id='cf536864' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='re_nsub' type-id='b59d7dce' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='can_be_null' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='449'> - <var-decl name='regs_allocated' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='451'> - <var-decl name='fastmap_accurate' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='452'> - <var-decl name='no_sub' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='453'> - <var-decl name='not_bol' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='454'> - <var-decl name='not_eol' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='455'> - <var-decl name='newline_anchor' type-id='f0981eeb' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='regex_t' type-id='19fc9a8c' id='aca3bac8'/> - <typedef-decl name='uintptr_t' type-id='7359adad' id='e475ab95'/> - <union-decl name='pthread_mutex_t' size-in-bits='320' naming-typedef-id='7a6844eb' visibility='default' id='70681f9b'> - <data-member access='public'> - <var-decl name='__data' type-id='4c734837' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__size' type-id='36c46961' visibility='default'/> - </data-member> - <data-member access='public'> - <var-decl name='__align' type-id='bd54fe1a' visibility='default'/> - </data-member> - </union-decl> - <typedef-decl name='pthread_mutex_t' type-id='70681f9b' id='7a6844eb'/> - <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/> - <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/> - <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/> - <typedef-decl name='uint64_t' type-id='8910171f' id='9c313c2d'/> - <class-decl name='__pthread_mutex_s' size-in-bits='320' is-struct='yes' visibility='default' id='4c734837'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='__lock' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32'> - <var-decl name='__count' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='__owner' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='96'> - <var-decl name='__nusers' type-id='f0981eeb' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='__kind' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='160'> - <var-decl name='__spins' type-id='a2185560' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='176'> - <var-decl name='__elision' type-id='a2185560' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='__list' type-id='518fb49c' visibility='default'/> - </data-member> - </class-decl> - <class-decl name='__pthread_internal_list' size-in-bits='128' is-struct='yes' visibility='default' id='0e01899c'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='__prev' type-id='4d98cd5a' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='__next' type-id='4d98cd5a' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='__pthread_list_t' type-id='0e01899c' id='518fb49c'/> - <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/> - <typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/> - <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/> - <typedef-decl name='__uint64_t' type-id='7359adad' id='8910171f'/> - <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <pointer-type-def type-id='0e01899c' size-in-bits='64' id='4d98cd5a'/> <pointer-type-def type-id='428b67b3' size-in-bits='64' id='bf311473'/> <pointer-type-def type-id='c19b74c3' size-in-bits='64' id='37e3bd22'/> @@ -3362,6 +2195,11 @@ <parameter type-id='eaa32e2f' name='data'/> <return type-id='95e97e5e'/> </function-decl> + <function-type size-in-bits='64' id='96ee24a5'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> <function-type size-in-bits='64' id='cb9628fa'> <parameter type-id='9200a744'/> <parameter type-id='eaa32e2f'/> @@ -3373,7 +2211,7 @@ <return type-id='95e97e5e'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='libzfs_crypto.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_crypto.c' language='LANG_C99'> <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> <pointer-type-def type-id='ae3e8ca6' size-in-bits='64' id='d8774064'/> <pointer-type-def type-id='3502e3ff' size-in-bits='64' id='4dd26a40'/> @@ -3422,7 +2260,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_dataset.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_dataset.c' language='LANG_C99'> <class-decl name='zprop_list' size-in-bits='448' is-struct='yes' visibility='default' id='bd9b4291'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='pl_prop' type-id='95e97e5e' visibility='default'/> @@ -4001,7 +2839,7 @@ <return type-id='95e97e5e'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='libzfs_diff.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_diff.c' language='LANG_C99'> <function-decl name='zfs_show_diffs' mangled-name='zfs_show_diffs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_show_diffs'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='95e97e5e' name='outfd'/> @@ -4011,7 +2849,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_import.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_import.c' language='LANG_C99'> <typedef-decl name='refresh_config_func_t' type-id='29f040d2' id='b7c58eaa'/> <typedef-decl name='pool_active_func_t' type-id='baa42fef' id='de5d1d8f'/> <class-decl name='pool_config_ops' size-in-bits='128' is-struct='yes' visibility='default' id='8b092c69'> @@ -4065,7 +2903,7 @@ <return type-id='5ce45b60'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='libzfs_iter.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_iter.c' language='LANG_C99'> <function-decl name='zfs_iter_filesystems' mangled-name='zfs_iter_filesystems' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_filesystems'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='d8e49ab9' name='func'/> @@ -4122,7 +2960,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_mount.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_mount.c' language='LANG_C99'> <class-decl name='get_all_cb' size-in-bits='192' is-struct='yes' visibility='default' id='803dac95'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='cb_handles' type-id='4507922a' visibility='default'/> @@ -4232,7 +3070,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_pool.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_pool.c' language='LANG_C99'> <class-decl name='splitflags' size-in-bits='64' is-struct='yes' visibility='default' id='dc01bf52'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='dryrun' type-id='95e97e5e' visibility='default'/> @@ -4861,7 +3699,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_sendrecv.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_sendrecv.c' language='LANG_C99'> <class-decl name='sendflags' size-in-bits='544' is-struct='yes' visibility='default' id='f6aa15be'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='verbosity' type-id='95e97e5e' visibility='default'/> @@ -5023,7 +3861,7 @@ <return type-id='c19b74c3'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='libzfs_status.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_status.c' language='LANG_C99'> <enum-decl name='zpool_status_t' naming-typedef-id='d3dd6294' id='5e770b40'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZPOOL_STATUS_CORRUPT_CACHE' value='0'/> @@ -5084,7 +3922,7 @@ <return type-id='d3dd6294'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_util.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/libzfs_util.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='192' id='e41bdf22'> <subrange length='6' type-id='7359adad' id='52fa524b'/> </array-type-def> @@ -5263,9 +4101,7 @@ <return type-id='95e97e5e'/> </function-decl> <function-decl name='zfs_version_userland' mangled-name='zfs_version_userland' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_version_userland'> - <parameter type-id='26a90f95' name='version'/> - <parameter type-id='95e97e5e' name='len'/> - <return type-id='48b5725f'/> + <return type-id='80f4b756'/> </function-decl> <function-decl name='zfs_version_print' mangled-name='zfs_version_print' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_version_print'> <return type-id='95e97e5e'/> @@ -5289,7 +4125,7 @@ <return type-id='95e97e5e'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='os/linux/libzfs_mount_os.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/os/linux/libzfs_mount_os.c' language='LANG_C99'> <pointer-type-def type-id='7359adad' size-in-bits='64' id='1d2c2b85'/> <function-decl name='zfs_parse_mount_options' mangled-name='zfs_parse_mount_options' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_parse_mount_options'> <parameter type-id='26a90f95' name='mntopts'/> @@ -5320,7 +4156,7 @@ <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/libzfs_pool_os.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/os/linux/libzfs_pool_os.c' language='LANG_C99'> <function-decl name='zpool_label_disk' mangled-name='zpool_label_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_label_disk'> <parameter type-id='b0382bb3' name='hdl'/> <parameter type-id='4c81de99' name='zhp'/> @@ -5328,7 +4164,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/libzfs_util_os.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfs/os/linux/libzfs_util_os.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'> <subrange length='4096' type-id='7359adad' id='bc1b5ddc'/> </array-type-def> @@ -5576,12 +4412,10 @@ <return type-id='95e97e5e'/> </function-decl> <function-decl name='zfs_version_kernel' mangled-name='zfs_version_kernel' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_version_kernel'> - <parameter type-id='26a90f95' name='version'/> - <parameter type-id='95e97e5e' name='len'/> - <return type-id='95e97e5e'/> + <return type-id='26a90f95'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/zutil_device_path_os.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzutil/os/linux/zutil_device_path_os.c' language='LANG_C99'> <function-decl name='zfs_append_partition' mangled-name='zfs_append_partition' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_append_partition'> <parameter type-id='26a90f95' name='path'/> <parameter type-id='b59d7dce' name='max_len'/> @@ -5616,7 +4450,7 @@ <return type-id='c19b74c3'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='os/linux/zutil_import_os.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzutil/os/linux/zutil_import_os.c' language='LANG_C99'> <class-decl name='udev_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='640b33ca'/> <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/> <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/> @@ -5652,7 +4486,7 @@ <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='zutil_device_path.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzutil/zutil_device_path.c' language='LANG_C99'> <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/> <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/> <function-decl name='zfs_basename' mangled-name='zfs_basename' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_basename'> @@ -5676,7 +4510,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='zutil_import.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzutil/zutil_import.c' language='LANG_C99'> <class-decl name='importargs' size-in-bits='448' is-struct='yes' visibility='default' id='7ac83801'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='path' type-id='9b23c9ad' visibility='default'/> @@ -5727,7 +4561,7 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='zutil_nicenum.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzutil/zutil_nicenum.c' language='LANG_C99'> <enum-decl name='zfs_nicenum_format' id='29cf1969'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZFS_NICENUM_1024' value='0'/> @@ -5772,7 +4606,7 @@ <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='zutil_pool.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzutil/zutil_pool.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='853fd5dc' size-in-bits='32768' id='b505fc2f'> <subrange length='64' type-id='7359adad' id='b10be967'/> </array-type-def> @@ -5828,4 +4662,1166 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> + <abi-instr address-size='64' path='module/avl/avl.c' language='LANG_C99'> + <typedef-decl name='avl_index_t' type-id='e475ab95' id='fba6cb51'/> + <pointer-type-def type-id='fba6cb51' size-in-bits='64' id='32adbf30'/> + <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> + <function-decl name='avl_walk' mangled-name='avl_walk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_walk'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='eaa32e2f' name='oldnode'/> + <parameter type-id='95e97e5e' name='left'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='avl_first' mangled-name='avl_first' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_first'> + <parameter type-id='a3681dea' name='tree'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='avl_last' mangled-name='avl_last' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_last'> + <parameter type-id='a3681dea' name='tree'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='avl_nearest' mangled-name='avl_nearest' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_nearest'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='fba6cb51' name='where'/> + <parameter type-id='95e97e5e' name='direction'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='avl_find' mangled-name='avl_find' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_find'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='eaa32e2f' name='value'/> + <parameter type-id='32adbf30' name='where'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='avl_insert' mangled-name='avl_insert' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_insert'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='eaa32e2f' name='new_data'/> + <parameter type-id='fba6cb51' name='where'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_insert_here' mangled-name='avl_insert_here' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_insert_here'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='eaa32e2f' name='new_data'/> + <parameter type-id='eaa32e2f' name='here'/> + <parameter type-id='95e97e5e' name='direction'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_add' mangled-name='avl_add' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_add'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='eaa32e2f' name='new_node'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_remove' mangled-name='avl_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_remove'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_update_lt' mangled-name='avl_update_lt' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_update_lt'> + <parameter type-id='a3681dea' name='t'/> + <parameter type-id='eaa32e2f' name='obj'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='avl_update_gt' mangled-name='avl_update_gt' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_update_gt'> + <parameter type-id='a3681dea' name='t'/> + <parameter type-id='eaa32e2f' name='obj'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='avl_update' mangled-name='avl_update' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_update'> + <parameter type-id='a3681dea' name='t'/> + <parameter type-id='eaa32e2f' name='obj'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='avl_swap' mangled-name='avl_swap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_swap'> + <parameter type-id='a3681dea' name='tree1'/> + <parameter type-id='a3681dea' name='tree2'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_create' mangled-name='avl_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_create'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='585e1de9' name='compar'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='b59d7dce' name='offset'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_destroy' mangled-name='avl_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_destroy'> + <parameter type-id='a3681dea' name='tree'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='avl_numnodes' mangled-name='avl_numnodes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_numnodes'> + <parameter type-id='a3681dea' name='tree'/> + <return type-id='ee1f298e'/> + </function-decl> + <function-decl name='avl_is_empty' mangled-name='avl_is_empty' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_is_empty'> + <parameter type-id='a3681dea' name='tree'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='avl_destroy_nodes' mangled-name='avl_destroy_nodes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='avl_destroy_nodes'> + <parameter type-id='a3681dea' name='tree'/> + <parameter type-id='63e171df' name='cookie'/> + <return type-id='eaa32e2f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/cityhash.c' language='LANG_C99'> + <function-decl name='cityhash4' mangled-name='cityhash4' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cityhash4'> + <parameter type-id='9c313c2d' name='w1'/> + <parameter type-id='9c313c2d' name='w2'/> + <parameter type-id='9c313c2d' name='w3'/> + <parameter type-id='9c313c2d' name='w4'/> + <return type-id='9c313c2d'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfeature_common.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='83f29ca2' size-in-bits='16128' id='9d5e9e2e'> + <subrange length='36' type-id='7359adad' id='ae666bde'/> + </array-type-def> + <enum-decl name='spa_feature' id='33ecb627'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='SPA_FEATURE_NONE' value='-1'/> + <enumerator name='SPA_FEATURE_ASYNC_DESTROY' value='0'/> + <enumerator name='SPA_FEATURE_EMPTY_BPOBJ' value='1'/> + <enumerator name='SPA_FEATURE_LZ4_COMPRESS' value='2'/> + <enumerator name='SPA_FEATURE_MULTI_VDEV_CRASH_DUMP' value='3'/> + <enumerator name='SPA_FEATURE_SPACEMAP_HISTOGRAM' value='4'/> + <enumerator name='SPA_FEATURE_ENABLED_TXG' value='5'/> + <enumerator name='SPA_FEATURE_HOLE_BIRTH' value='6'/> + <enumerator name='SPA_FEATURE_EXTENSIBLE_DATASET' value='7'/> + <enumerator name='SPA_FEATURE_EMBEDDED_DATA' value='8'/> + <enumerator name='SPA_FEATURE_BOOKMARKS' value='9'/> + <enumerator name='SPA_FEATURE_FS_SS_LIMIT' value='10'/> + <enumerator name='SPA_FEATURE_LARGE_BLOCKS' value='11'/> + <enumerator name='SPA_FEATURE_LARGE_DNODE' value='12'/> + <enumerator name='SPA_FEATURE_SHA512' value='13'/> + <enumerator name='SPA_FEATURE_SKEIN' value='14'/> + <enumerator name='SPA_FEATURE_EDONR' value='15'/> + <enumerator name='SPA_FEATURE_USEROBJ_ACCOUNTING' value='16'/> + <enumerator name='SPA_FEATURE_ENCRYPTION' value='17'/> + <enumerator name='SPA_FEATURE_PROJECT_QUOTA' value='18'/> + <enumerator name='SPA_FEATURE_DEVICE_REMOVAL' value='19'/> + <enumerator name='SPA_FEATURE_OBSOLETE_COUNTS' value='20'/> + <enumerator name='SPA_FEATURE_POOL_CHECKPOINT' value='21'/> + <enumerator name='SPA_FEATURE_SPACEMAP_V2' value='22'/> + <enumerator name='SPA_FEATURE_ALLOCATION_CLASSES' value='23'/> + <enumerator name='SPA_FEATURE_RESILVER_DEFER' value='24'/> + <enumerator name='SPA_FEATURE_BOOKMARK_V2' value='25'/> + <enumerator name='SPA_FEATURE_REDACTION_BOOKMARKS' value='26'/> + <enumerator name='SPA_FEATURE_REDACTED_DATASETS' value='27'/> + <enumerator name='SPA_FEATURE_BOOKMARK_WRITTEN' value='28'/> + <enumerator name='SPA_FEATURE_LOG_SPACEMAP' value='29'/> + <enumerator name='SPA_FEATURE_LIVELIST' value='30'/> + <enumerator name='SPA_FEATURE_DEVICE_REBUILD' value='31'/> + <enumerator name='SPA_FEATURE_ZSTD_COMPRESS' value='32'/> + <enumerator name='SPA_FEATURE_DRAID' value='33'/> + <enumerator name='SPA_FEATURE_ZILSAXATTR' value='34'/> + <enumerator name='SPA_FEATURE_HEAD_ERRLOG' value='35'/> + <enumerator name='SPA_FEATURES' value='36'/> + </enum-decl> + <typedef-decl name='spa_feature_t' type-id='33ecb627' id='d6618c78'/> + <enum-decl name='zfeature_flags' id='6db816a4'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZFEATURE_FLAG_READONLY_COMPAT' value='1'/> + <enumerator name='ZFEATURE_FLAG_MOS' value='2'/> + <enumerator name='ZFEATURE_FLAG_ACTIVATE_ON_ENABLE' value='4'/> + <enumerator name='ZFEATURE_FLAG_PER_DATASET' value='8'/> + </enum-decl> + <typedef-decl name='zfeature_flags_t' type-id='6db816a4' id='fc329033'/> + <enum-decl name='zfeature_type' id='c4fa2355'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZFEATURE_TYPE_BOOLEAN' value='0'/> + <enumerator name='ZFEATURE_TYPE_UINT64_ARRAY' value='1'/> + <enumerator name='ZFEATURE_NUM_TYPES' value='2'/> + </enum-decl> + <typedef-decl name='zfeature_type_t' type-id='c4fa2355' id='732d2bb2'/> + <class-decl name='zfeature_info' size-in-bits='448' is-struct='yes' visibility='default' id='1178d146'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='fi_feature' type-id='d6618c78' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='fi_uname' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='fi_guid' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='fi_desc' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='fi_flags' type-id='fc329033' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='fi_zfs_mod_supported' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='fi_type' type-id='732d2bb2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='fi_depends' type-id='1acff326' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfeature_info_t' type-id='1178d146' id='83f29ca2'/> + <class-decl name='zfs_mod_supported_features' size-in-bits='128' is-struct='yes' visibility='default' id='3eee3342'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tree' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='all_features' type-id='c19b74c3' visibility='default'/> + </data-member> + </class-decl> + <qualified-type-def type-id='d6618c78' const='yes' id='81a65028'/> + <pointer-type-def type-id='81a65028' size-in-bits='64' id='1acff326'/> + <qualified-type-def type-id='3eee3342' const='yes' id='0c1d5bbb'/> + <pointer-type-def type-id='0c1d5bbb' size-in-bits='64' id='a3372543'/> + <pointer-type-def type-id='d6618c78' size-in-bits='64' id='a8425263'/> + <var-decl name='spa_feature_table' type-id='9d5e9e2e' mangled-name='spa_feature_table' visibility='default' elf-symbol-id='spa_feature_table'/> + <var-decl name='zfeature_checks_disable' type-id='c19b74c3' mangled-name='zfeature_checks_disable' visibility='default' elf-symbol-id='zfeature_checks_disable'/> + <function-decl name='zfeature_is_valid_guid' mangled-name='zfeature_is_valid_guid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_is_valid_guid'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfeature_is_supported' mangled-name='zfeature_is_supported' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_is_supported'> + <parameter type-id='80f4b756' name='guid'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfeature_lookup_guid' mangled-name='zfeature_lookup_guid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_lookup_guid'> + <parameter type-id='80f4b756' name='guid'/> + <parameter type-id='a8425263' name='res'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfeature_lookup_name' mangled-name='zfeature_lookup_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_lookup_name'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a8425263' name='res'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfeature_depends_on' mangled-name='zfeature_depends_on' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfeature_depends_on'> + <parameter type-id='d6618c78' name='fid'/> + <parameter type-id='d6618c78' name='check'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_mod_supported' mangled-name='zfs_mod_supported' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mod_supported'> + <parameter type-id='80f4b756' name='scope'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a3372543' name='sfeatures'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_feature_init' mangled-name='zpool_feature_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_feature_init'> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_comutil.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='b99c00c9' size-in-bits='2624' id='5ce15418'> + <subrange length='41' type-id='7359adad' id='cb834f44'/> + </array-type-def> + <class-decl name='zpool_load_policy' size-in-bits='256' is-struct='yes' visibility='default' id='2f65b36f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zlp_rewind' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='zlp_maxmeta' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='zlp_maxdata' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='zlp_txg' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zpool_load_policy_t' type-id='2f65b36f' id='d11b7617'/> + <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/> + <pointer-type-def type-id='d11b7617' size-in-bits='64' id='23432aaa'/> + <var-decl name='zfs_history_event_names' type-id='5ce15418' mangled-name='zfs_history_event_names' visibility='default' elf-symbol-id='zfs_history_event_names'/> + <function-decl name='zfs_allocatable_devs' mangled-name='zfs_allocatable_devs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_allocatable_devs'> + <parameter type-id='5ce45b60' name='nv'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_special_devs' mangled-name='zfs_special_devs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_special_devs'> + <parameter type-id='5ce45b60' name='nv'/> + <parameter type-id='26a90f95' name='type'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_get_load_policy' mangled-name='zpool_get_load_policy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_load_policy'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='23432aaa' name='zlpp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_zpl_version_map' mangled-name='zfs_zpl_version_map' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_zpl_version_map'> + <parameter type-id='95e97e5e' name='spa_version'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_spa_version_map' mangled-name='zfs_spa_version_map' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_spa_version_map'> + <parameter type-id='95e97e5e' name='zpl_version'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_dataset_name_hidden' mangled-name='zfs_dataset_name_hidden' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dataset_name_hidden'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_deleg.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='infinite' id='7c00e69d'> + <subrange length='infinite' id='031f2035'/> + </array-type-def> + <enum-decl name='zfs_deleg_who_type_t' naming-typedef-id='36d4bd5a' id='b5fa5816'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZFS_DELEG_WHO_UNKNOWN' value='0'/> + <enumerator name='ZFS_DELEG_USER' value='117'/> + <enumerator name='ZFS_DELEG_USER_SETS' value='85'/> + <enumerator name='ZFS_DELEG_GROUP' value='103'/> + <enumerator name='ZFS_DELEG_GROUP_SETS' value='71'/> + <enumerator name='ZFS_DELEG_EVERYONE' value='101'/> + <enumerator name='ZFS_DELEG_EVERYONE_SETS' value='69'/> + <enumerator name='ZFS_DELEG_CREATE' value='99'/> + <enumerator name='ZFS_DELEG_CREATE_SETS' value='67'/> + <enumerator name='ZFS_DELEG_NAMED_SET' value='115'/> + <enumerator name='ZFS_DELEG_NAMED_SET_SETS' value='83'/> + </enum-decl> + <typedef-decl name='zfs_deleg_who_type_t' type-id='b5fa5816' id='36d4bd5a'/> + <enum-decl name='zfs_deleg_note_t' naming-typedef-id='4613c173' id='729d4547'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZFS_DELEG_NOTE_CREATE' value='0'/> + <enumerator name='ZFS_DELEG_NOTE_DESTROY' value='1'/> + <enumerator name='ZFS_DELEG_NOTE_SNAPSHOT' value='2'/> + <enumerator name='ZFS_DELEG_NOTE_ROLLBACK' value='3'/> + <enumerator name='ZFS_DELEG_NOTE_CLONE' value='4'/> + <enumerator name='ZFS_DELEG_NOTE_PROMOTE' value='5'/> + <enumerator name='ZFS_DELEG_NOTE_RENAME' value='6'/> + <enumerator name='ZFS_DELEG_NOTE_SEND' value='7'/> + <enumerator name='ZFS_DELEG_NOTE_RECEIVE' value='8'/> + <enumerator name='ZFS_DELEG_NOTE_ALLOW' value='9'/> + <enumerator name='ZFS_DELEG_NOTE_USERPROP' value='10'/> + <enumerator name='ZFS_DELEG_NOTE_MOUNT' value='11'/> + <enumerator name='ZFS_DELEG_NOTE_SHARE' value='12'/> + <enumerator name='ZFS_DELEG_NOTE_USERQUOTA' value='13'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPQUOTA' value='14'/> + <enumerator name='ZFS_DELEG_NOTE_USERUSED' value='15'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPUSED' value='16'/> + <enumerator name='ZFS_DELEG_NOTE_USEROBJQUOTA' value='17'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPOBJQUOTA' value='18'/> + <enumerator name='ZFS_DELEG_NOTE_USEROBJUSED' value='19'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPOBJUSED' value='20'/> + <enumerator name='ZFS_DELEG_NOTE_HOLD' value='21'/> + <enumerator name='ZFS_DELEG_NOTE_RELEASE' value='22'/> + <enumerator name='ZFS_DELEG_NOTE_DIFF' value='23'/> + <enumerator name='ZFS_DELEG_NOTE_BOOKMARK' value='24'/> + <enumerator name='ZFS_DELEG_NOTE_LOAD_KEY' value='25'/> + <enumerator name='ZFS_DELEG_NOTE_CHANGE_KEY' value='26'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTUSED' value='27'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTQUOTA' value='28'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTOBJUSED' value='29'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTOBJQUOTA' value='30'/> + <enumerator name='ZFS_DELEG_NOTE_NONE' value='31'/> + </enum-decl> + <typedef-decl name='zfs_deleg_note_t' type-id='729d4547' id='4613c173'/> + <class-decl name='zfs_deleg_perm_tab' size-in-bits='128' is-struct='yes' visibility='default' id='5aa05c1f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='z_perm' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='z_note' type-id='4613c173' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_deleg_perm_tab_t' type-id='5aa05c1f' id='f3f851ad'/> + <qualified-type-def type-id='f3f851ad' const='yes' id='fa1870fd'/> + <var-decl name='zfs_deleg_perm_tab' type-id='7c00e69d' mangled-name='zfs_deleg_perm_tab' visibility='default' elf-symbol-id='zfs_deleg_perm_tab'/> + <function-decl name='zfs_deleg_canonicalize_perm' mangled-name='zfs_deleg_canonicalize_perm' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_deleg_canonicalize_perm'> + <parameter type-id='80f4b756' name='perm'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_deleg_verify_nvlist' mangled-name='zfs_deleg_verify_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_deleg_verify_nvlist'> + <parameter type-id='5ce45b60' name='nvp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_deleg_whokey' mangled-name='zfs_deleg_whokey' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_deleg_whokey'> + <parameter type-id='26a90f95' name='attr'/> + <parameter type-id='36d4bd5a' name='type'/> + <parameter type-id='a84c031d' name='inheritchr'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_fletcher.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='256' id='85c64d26'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='512' id='c5d13f42'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='90dbb6d6' size-in-bits='2048' id='16582e69'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8240361c' size-in-bits='1024' id='481f90b1'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='7c1ab40c' size-in-bits='512' id='cbd91ec1'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='6d059eaa' size-in-bits='1024' id='729b6ebb'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <class-decl name='zio_cksum' size-in-bits='256' is-struct='yes' visibility='default' id='1d53e28b'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zc_word' type-id='85c64d26' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zio_cksum_t' type-id='1d53e28b' id='39730d0b'/> + <enum-decl name='zio_byteorder_t' naming-typedef-id='595a65ec' id='fc861be0'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZIO_CHECKSUM_NATIVE' value='0'/> + <enumerator name='ZIO_CHECKSUM_BYTESWAP' value='1'/> + </enum-decl> + <typedef-decl name='zio_byteorder_t' type-id='fc861be0' id='595a65ec'/> + <class-decl name='zio_abd_checksum_data' size-in-bits='256' is-struct='yes' visibility='default' id='4bf4b004'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='acd_byteorder' type-id='595a65ec' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='acd_ctx' type-id='0f7df99e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='acd_zcp' type-id='c24fc2ee' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='acd_private' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zio_abd_checksum_data_t' type-id='4bf4b004' id='74e39470'/> + <typedef-decl name='zio_abd_checksum_init_t' type-id='a5444274' id='029a8ebe'/> + <typedef-decl name='zio_abd_checksum_fini_t' type-id='a5444274' id='d6fd5c6c'/> + <typedef-decl name='zio_abd_checksum_iter_t' type-id='f4a1892e' id='cefa0f4a'/> + <class-decl name='zio_abd_checksum_func' size-in-bits='192' is-struct='yes' visibility='default' id='aa14691a'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='acf_init' type-id='0bcca125' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='acf_fini' type-id='bfe36153' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='acf_iter' type-id='1e276399' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zio_abd_checksum_func_t' type-id='3f8e8d11' id='c2eb138a'/> + <class-decl name='zfs_fletcher_superscalar' size-in-bits='256' is-struct='yes' visibility='default' id='28efb250'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='v' type-id='85c64d26' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_fletcher_superscalar_t' type-id='28efb250' id='6d059eaa'/> + <class-decl name='zfs_fletcher_sse' size-in-bits='128' is-struct='yes' visibility='default' id='acd4019a'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='v' type-id='c1c22e6c' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_fletcher_sse_t' type-id='acd4019a' id='7c1ab40c'/> + <class-decl name='zfs_fletcher_avx' size-in-bits='256' is-struct='yes' visibility='default' id='8c208dfa'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='v' type-id='85c64d26' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_fletcher_avx_t' type-id='8c208dfa' id='8240361c'/> + <class-decl name='zfs_fletcher_avx512' size-in-bits='512' is-struct='yes' visibility='default' id='c6d0c382'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='v' type-id='c5d13f42' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_fletcher_avx512_t' type-id='c6d0c382' id='90dbb6d6'/> + <union-decl name='fletcher_4_ctx' size-in-bits='2048' visibility='default' id='1f951ade'> + <data-member access='public'> + <var-decl name='scalar' type-id='39730d0b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='superscalar' type-id='729b6ebb' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='sse' type-id='cbd91ec1' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='avx' type-id='481f90b1' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='avx512' type-id='16582e69' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='fletcher_4_ctx_t' type-id='1f951ade' id='4b675395'/> + <qualified-type-def type-id='aa14691a' const='yes' id='3f8e8d11'/> + <pointer-type-def type-id='4b675395' size-in-bits='64' id='0f7df99e'/> + <pointer-type-def type-id='74e39470' size-in-bits='64' id='eefe7427'/> + <pointer-type-def type-id='d6fd5c6c' size-in-bits='64' id='bfe36153'/> + <pointer-type-def type-id='029a8ebe' size-in-bits='64' id='0bcca125'/> + <pointer-type-def type-id='cefa0f4a' size-in-bits='64' id='1e276399'/> + <pointer-type-def type-id='39730d0b' size-in-bits='64' id='c24fc2ee'/> + <var-decl name='fletcher_4_abd_ops' type-id='c2eb138a' mangled-name='fletcher_4_abd_ops' visibility='default' elf-symbol-id='fletcher_4_abd_ops'/> + <function-decl name='fletcher_init' mangled-name='fletcher_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_init'> + <parameter type-id='c24fc2ee' name='zcp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_2_incremental_native' mangled-name='fletcher_2_incremental_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_incremental_native'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fletcher_2_native' mangled-name='fletcher_2_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_native'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='9c313c2d' name='size'/> + <parameter type-id='eaa32e2f' name='ctx_template'/> + <parameter type-id='c24fc2ee' name='zcp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_2_incremental_byteswap' mangled-name='fletcher_2_incremental_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_incremental_byteswap'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fletcher_2_byteswap' mangled-name='fletcher_2_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_2_byteswap'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='9c313c2d' name='size'/> + <parameter type-id='eaa32e2f' name='ctx_template'/> + <parameter type-id='c24fc2ee' name='zcp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_4_impl_set' mangled-name='fletcher_4_impl_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_impl_set'> + <parameter type-id='80f4b756' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fletcher_4_native' mangled-name='fletcher_4_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_native'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='9c313c2d' name='size'/> + <parameter type-id='eaa32e2f' name='ctx_template'/> + <parameter type-id='c24fc2ee' name='zcp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_4_native_varsize' mangled-name='fletcher_4_native_varsize' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_native_varsize'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='9c313c2d' name='size'/> + <parameter type-id='c24fc2ee' name='zcp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_4_byteswap' mangled-name='fletcher_4_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_byteswap'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='9c313c2d' name='size'/> + <parameter type-id='eaa32e2f' name='ctx_template'/> + <parameter type-id='c24fc2ee' name='zcp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_4_incremental_native' mangled-name='fletcher_4_incremental_native' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_incremental_native'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fletcher_4_incremental_byteswap' mangled-name='fletcher_4_incremental_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_incremental_byteswap'> + <parameter type-id='eaa32e2f' name='buf'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fletcher_4_init' mangled-name='fletcher_4_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fletcher_4_fini' mangled-name='fletcher_4_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_fini'> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='f4a1892e'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='a5444274'> + <parameter type-id='eefe7427'/> + <return type-id='48b5725f'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_fletcher_avx512.c' language='LANG_C99'> + <typedef-decl name='fletcher_4_init_f' type-id='173aa527' id='b9ae1656'/> + <typedef-decl name='fletcher_4_fini_f' type-id='0ad5b8a8' id='c4c1f4fc'/> + <typedef-decl name='fletcher_4_compute_f' type-id='38147eff' id='ad1dc4cb'/> + <class-decl name='fletcher_4_func' size-in-bits='512' is-struct='yes' visibility='default' id='57f479a0'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='init_native' type-id='b9ae1656' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='fini_native' type-id='c4c1f4fc' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='compute_native' type-id='ad1dc4cb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='init_byteswap' type-id='b9ae1656' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='fini_byteswap' type-id='c4c1f4fc' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='compute_byteswap' type-id='ad1dc4cb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='valid' type-id='297d38bc' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='name' type-id='80f4b756' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='fletcher_4_ops_t' type-id='57f479a0' id='eba91718'/> + <qualified-type-def type-id='eba91718' const='yes' id='9eeabdc8'/> + <pointer-type-def type-id='e9e61702' size-in-bits='64' id='297d38bc'/> + <pointer-type-def type-id='fe40251b' size-in-bits='64' id='173aa527'/> + <pointer-type-def type-id='17fb1f83' size-in-bits='64' id='38147eff'/> + <pointer-type-def type-id='fb39e25e' size-in-bits='64' id='0ad5b8a8'/> + <var-decl name='fletcher_4_avx512f_ops' type-id='9eeabdc8' mangled-name='fletcher_4_avx512f_ops' visibility='default' elf-symbol-id='fletcher_4_avx512f_ops'/> + <var-decl name='fletcher_4_avx512bw_ops' type-id='9eeabdc8' mangled-name='fletcher_4_avx512bw_ops' visibility='default' elf-symbol-id='fletcher_4_avx512bw_ops'/> + <function-type size-in-bits='64' id='e9e61702'> + <return type-id='c19b74c3'/> + </function-type> + <function-type size-in-bits='64' id='fe40251b'> + <parameter type-id='0f7df99e'/> + <return type-id='48b5725f'/> + </function-type> + <function-type size-in-bits='64' id='17fb1f83'> + <parameter type-id='0f7df99e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='9c313c2d'/> + <return type-id='48b5725f'/> + </function-type> + <function-type size-in-bits='64' id='fb39e25e'> + <parameter type-id='0f7df99e'/> + <parameter type-id='c24fc2ee'/> + <return type-id='48b5725f'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_fletcher_intel.c' language='LANG_C99'> + <var-decl name='fletcher_4_avx2_ops' type-id='9eeabdc8' mangled-name='fletcher_4_avx2_ops' visibility='default' elf-symbol-id='fletcher_4_avx2_ops'/> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_fletcher_sse.c' language='LANG_C99'> + <var-decl name='fletcher_4_sse2_ops' type-id='9eeabdc8' mangled-name='fletcher_4_sse2_ops' visibility='default' elf-symbol-id='fletcher_4_sse2_ops'/> + <var-decl name='fletcher_4_ssse3_ops' type-id='9eeabdc8' mangled-name='fletcher_4_ssse3_ops' visibility='default' elf-symbol-id='fletcher_4_ssse3_ops'/> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_fletcher_superscalar.c' language='LANG_C99'> + <var-decl name='fletcher_4_superscalar_ops' type-id='9eeabdc8' mangled-name='fletcher_4_superscalar_ops' visibility='default' elf-symbol-id='fletcher_4_superscalar_ops'/> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_fletcher_superscalar4.c' language='LANG_C99'> + <var-decl name='fletcher_4_superscalar4_ops' type-id='9eeabdc8' mangled-name='fletcher_4_superscalar4_ops' visibility='default' elf-symbol-id='fletcher_4_superscalar4_ops'/> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_namecheck.c' language='LANG_C99'> + <enum-decl name='namecheck_err_t' naming-typedef-id='8e0af06e' id='f43bbcda'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='NAME_ERR_LEADING_SLASH' value='0'/> + <enumerator name='NAME_ERR_EMPTY_COMPONENT' value='1'/> + <enumerator name='NAME_ERR_TRAILING_SLASH' value='2'/> + <enumerator name='NAME_ERR_INVALCHAR' value='3'/> + <enumerator name='NAME_ERR_MULTIPLE_DELIMITERS' value='4'/> + <enumerator name='NAME_ERR_NOLETTER' value='5'/> + <enumerator name='NAME_ERR_RESERVED' value='6'/> + <enumerator name='NAME_ERR_DISKLIKE' value='7'/> + <enumerator name='NAME_ERR_TOOLONG' value='8'/> + <enumerator name='NAME_ERR_SELF_REF' value='9'/> + <enumerator name='NAME_ERR_PARENT_REF' value='10'/> + <enumerator name='NAME_ERR_NO_AT' value='11'/> + <enumerator name='NAME_ERR_NO_POUND' value='12'/> + </enum-decl> + <typedef-decl name='namecheck_err_t' type-id='f43bbcda' id='8e0af06e'/> + <pointer-type-def type-id='8e0af06e' size-in-bits='64' id='053457bd'/> + <var-decl name='zfs_max_dataset_nesting' type-id='95e97e5e' mangled-name='zfs_max_dataset_nesting' visibility='default' elf-symbol-id='zfs_max_dataset_nesting'/> + <function-decl name='get_dataset_depth' mangled-name='get_dataset_depth' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_dataset_depth'> + <parameter type-id='80f4b756' name='path'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_component_namecheck' mangled-name='zfs_component_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_component_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='permset_namecheck' mangled-name='permset_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='permset_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='dataset_nestcheck' mangled-name='dataset_nestcheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dataset_nestcheck'> + <parameter type-id='80f4b756' name='path'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='entity_namecheck' mangled-name='entity_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='entity_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='dataset_namecheck' mangled-name='dataset_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dataset_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='bookmark_namecheck' mangled-name='bookmark_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bookmark_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='snapshot_namecheck' mangled-name='snapshot_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snapshot_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mountpoint_namecheck' mangled-name='mountpoint_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mountpoint_namecheck'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='053457bd' name='why'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pool_namecheck' mangled-name='pool_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pool_namecheck'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='053457bd' name='why'/> + <parameter type-id='26a90f95' name='what'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zfs_prop.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='b99c00c9' size-in-bits='768' id='bcc77e38'> + <subrange length='12' type-id='7359adad' id='84827bdc'/> + </array-type-def> + <enum-decl name='zprop_type_t' naming-typedef-id='31429eff' id='87676253'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='PROP_TYPE_NUMBER' value='0'/> + <enumerator name='PROP_TYPE_STRING' value='1'/> + <enumerator name='PROP_TYPE_INDEX' value='2'/> + </enum-decl> + <typedef-decl name='zprop_type_t' type-id='87676253' id='31429eff'/> + <enum-decl name='zprop_attr_t' naming-typedef-id='999701cc' id='77d05200'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='PROP_DEFAULT' value='0'/> + <enumerator name='PROP_READONLY' value='1'/> + <enumerator name='PROP_INHERIT' value='2'/> + <enumerator name='PROP_ONETIME' value='3'/> + <enumerator name='PROP_ONETIME_DEFAULT' value='4'/> + </enum-decl> + <typedef-decl name='zprop_attr_t' type-id='77d05200' id='999701cc'/> + <class-decl name='zfs_index' size-in-bits='128' is-struct='yes' visibility='default' id='87957af9'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='pi_name' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='pi_value' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zprop_index_t' type-id='87957af9' id='64636ce3'/> + <class-decl name='zprop_desc_t' size-in-bits='640' is-struct='yes' naming-typedef-id='ffa52b96' visibility='default' id='bbff5e4b'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='pd_name' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='pd_propnum' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='pd_proptype' type-id='31429eff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='pd_strdefault' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='pd_numdefault' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='pd_attr' type-id='999701cc' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='pd_types' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='pd_values' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='pd_colname' type-id='80f4b756' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='pd_rightalign' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='449'> + <var-decl name='pd_visible' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='450'> + <var-decl name='pd_zfs_mod_supported' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='451'> + <var-decl name='pd_always_flex' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='pd_table' type-id='c8bc397b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='pd_table_size' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zprop_desc_t' type-id='bbff5e4b' id='ffa52b96'/> + <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/> + <qualified-type-def type-id='64636ce3' const='yes' id='072f7953'/> + <pointer-type-def type-id='072f7953' size-in-bits='64' id='c8bc397b'/> + <pointer-type-def type-id='ffa52b96' size-in-bits='64' id='76c8174b'/> + <var-decl name='zfs_userquota_prop_prefixes' type-id='bcc77e38' mangled-name='zfs_userquota_prop_prefixes' visibility='default' elf-symbol-id='zfs_userquota_prop_prefixes'/> + <function-decl name='zfs_prop_get_table' mangled-name='zfs_prop_get_table' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_table'> + <return type-id='76c8174b'/> + </function-decl> + <function-decl name='zfs_prop_init' mangled-name='zfs_prop_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_prop_delegatable' mangled-name='zfs_prop_delegatable' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_delegatable'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_name_to_prop' mangled-name='zfs_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_name_to_prop'> + <parameter type-id='80f4b756' name='propname'/> + <return type-id='58603c44'/> + </function-decl> + <function-decl name='zfs_prop_user' mangled-name='zfs_prop_user' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_user'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_userquota' mangled-name='zfs_prop_userquota' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_userquota'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_written' mangled-name='zfs_prop_written' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_written'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_string_to_index' mangled-name='zfs_prop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_string_to_index'> + <parameter type-id='58603c44' name='prop'/> + <parameter type-id='80f4b756' name='string'/> + <parameter type-id='5d6479ae' name='index'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_prop_index_to_string' mangled-name='zfs_prop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_index_to_string'> + <parameter type-id='58603c44' name='prop'/> + <parameter type-id='9c313c2d' name='index'/> + <parameter type-id='7d3cd834' name='string'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_prop_random_value' mangled-name='zfs_prop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_random_value'> + <parameter type-id='58603c44' name='prop'/> + <parameter type-id='9c313c2d' name='seed'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zfs_prop_valid_for_type' mangled-name='zfs_prop_valid_for_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_valid_for_type'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='2e45de5d' name='types'/> + <parameter type-id='c19b74c3' name='headcheck'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_get_type' mangled-name='zfs_prop_get_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_type'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='31429eff'/> + </function-decl> + <function-decl name='zfs_prop_readonly' mangled-name='zfs_prop_readonly' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_readonly'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_visible' mangled-name='zfs_prop_visible' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_visible'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_setonce' mangled-name='zfs_prop_setonce' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_setonce'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_default_string' mangled-name='zfs_prop_default_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_default_string'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_prop_default_numeric' mangled-name='zfs_prop_default_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_default_numeric'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zfs_prop_to_name' mangled-name='zfs_prop_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_to_name'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_prop_inheritable' mangled-name='zfs_prop_inheritable' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_inheritable'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_encryption_key_param' mangled-name='zfs_prop_encryption_key_param' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_encryption_key_param'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_valid_keylocation' mangled-name='zfs_prop_valid_keylocation' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_valid_keylocation'> + <parameter type-id='80f4b756' name='str'/> + <parameter type-id='c19b74c3' name='encrypted'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_prop_values' mangled-name='zfs_prop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_values'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_prop_is_string' mangled-name='zfs_prop_is_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_is_string'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_prop_column_name' mangled-name='zfs_prop_column_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_column_name'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_prop_align_right' mangled-name='zfs_prop_align_right' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_align_right'> + <parameter type-id='58603c44' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zpool_prop.c' language='LANG_C99'> + <function-decl name='zpool_prop_get_table' mangled-name='zpool_prop_get_table' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_get_table'> + <return type-id='76c8174b'/> + </function-decl> + <function-decl name='zpool_prop_init' mangled-name='zpool_prop_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zpool_name_to_prop' mangled-name='zpool_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_name_to_prop'> + <parameter type-id='80f4b756' name='propname'/> + <return type-id='5d0c23fb'/> + </function-decl> + <function-decl name='zpool_prop_to_name' mangled-name='zpool_prop_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_to_name'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zpool_prop_get_type' mangled-name='zpool_prop_get_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_get_type'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='31429eff'/> + </function-decl> + <function-decl name='zpool_prop_readonly' mangled-name='zpool_prop_readonly' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_readonly'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_prop_setonce' mangled-name='zpool_prop_setonce' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_setonce'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_prop_default_string' mangled-name='zpool_prop_default_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_default_string'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zpool_prop_default_numeric' mangled-name='zpool_prop_default_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_default_numeric'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zpool_prop_feature' mangled-name='zpool_prop_feature' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_feature'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_prop_unsupported' mangled-name='zpool_prop_unsupported' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_unsupported'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_prop_string_to_index' mangled-name='zpool_prop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_string_to_index'> + <parameter type-id='5d0c23fb' name='prop'/> + <parameter type-id='80f4b756' name='string'/> + <parameter type-id='5d6479ae' name='index'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_prop_index_to_string' mangled-name='zpool_prop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_index_to_string'> + <parameter type-id='5d0c23fb' name='prop'/> + <parameter type-id='9c313c2d' name='index'/> + <parameter type-id='7d3cd834' name='string'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_prop_random_value' mangled-name='zpool_prop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_random_value'> + <parameter type-id='5d0c23fb' name='prop'/> + <parameter type-id='9c313c2d' name='seed'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zpool_prop_values' mangled-name='zpool_prop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_values'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zpool_prop_column_name' mangled-name='zpool_prop_column_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_column_name'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zpool_prop_align_right' mangled-name='zpool_prop_align_right' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_align_right'> + <parameter type-id='5d0c23fb' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='vdev_prop_get_table' mangled-name='vdev_prop_get_table' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_get_table'> + <return type-id='76c8174b'/> + </function-decl> + <function-decl name='vdev_prop_init' mangled-name='vdev_prop_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='vdev_name_to_prop' mangled-name='vdev_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_name_to_prop'> + <parameter type-id='80f4b756' name='propname'/> + <return type-id='5aa5c90c'/> + </function-decl> + <function-decl name='vdev_prop_user' mangled-name='vdev_prop_user' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_user'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='vdev_prop_to_name' mangled-name='vdev_prop_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_to_name'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='vdev_prop_get_type' mangled-name='vdev_prop_get_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_get_type'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='31429eff'/> + </function-decl> + <function-decl name='vdev_prop_readonly' mangled-name='vdev_prop_readonly' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_readonly'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='vdev_prop_default_string' mangled-name='vdev_prop_default_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_default_string'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='vdev_prop_default_numeric' mangled-name='vdev_prop_default_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_default_numeric'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='vdev_prop_string_to_index' mangled-name='vdev_prop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_string_to_index'> + <parameter type-id='5aa5c90c' name='prop'/> + <parameter type-id='80f4b756' name='string'/> + <parameter type-id='5d6479ae' name='index'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='vdev_prop_index_to_string' mangled-name='vdev_prop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_index_to_string'> + <parameter type-id='5aa5c90c' name='prop'/> + <parameter type-id='9c313c2d' name='index'/> + <parameter type-id='7d3cd834' name='string'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_prop_vdev' mangled-name='zpool_prop_vdev' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prop_vdev'> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='vdev_prop_random_value' mangled-name='vdev_prop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_random_value'> + <parameter type-id='5aa5c90c' name='prop'/> + <parameter type-id='9c313c2d' name='seed'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='vdev_prop_values' mangled-name='vdev_prop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_values'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='vdev_prop_column_name' mangled-name='vdev_prop_column_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_column_name'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='vdev_prop_align_right' mangled-name='vdev_prop_align_right' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vdev_prop_align_right'> + <parameter type-id='5aa5c90c' name='prop'/> + <return type-id='c19b74c3'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zprop_common.c' language='LANG_C99'> + <function-decl name='zprop_register_impl' mangled-name='zprop_register_impl' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_impl'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='31429eff' name='type'/> + <parameter type-id='9c313c2d' name='numdefault'/> + <parameter type-id='80f4b756' name='strdefault'/> + <parameter type-id='999701cc' name='attr'/> + <parameter type-id='95e97e5e' name='objset_types'/> + <parameter type-id='80f4b756' name='values'/> + <parameter type-id='80f4b756' name='colname'/> + <parameter type-id='c19b74c3' name='rightalign'/> + <parameter type-id='c19b74c3' name='visible'/> + <parameter type-id='c19b74c3' name='flex'/> + <parameter type-id='c8bc397b' name='idx_tbl'/> + <parameter type-id='a3372543' name='sfeatures'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_register_string' mangled-name='zprop_register_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_string'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='80f4b756' name='def'/> + <parameter type-id='999701cc' name='attr'/> + <parameter type-id='95e97e5e' name='objset_types'/> + <parameter type-id='80f4b756' name='values'/> + <parameter type-id='80f4b756' name='colname'/> + <parameter type-id='a3372543' name='sfeatures'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_register_number' mangled-name='zprop_register_number' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_number'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9c313c2d' name='def'/> + <parameter type-id='999701cc' name='attr'/> + <parameter type-id='95e97e5e' name='objset_types'/> + <parameter type-id='80f4b756' name='values'/> + <parameter type-id='80f4b756' name='colname'/> + <parameter type-id='c19b74c3' name='flex'/> + <parameter type-id='a3372543' name='sfeatures'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_register_index' mangled-name='zprop_register_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_index'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9c313c2d' name='def'/> + <parameter type-id='999701cc' name='attr'/> + <parameter type-id='95e97e5e' name='objset_types'/> + <parameter type-id='80f4b756' name='values'/> + <parameter type-id='80f4b756' name='colname'/> + <parameter type-id='c8bc397b' name='idx_tbl'/> + <parameter type-id='a3372543' name='sfeatures'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_register_hidden' mangled-name='zprop_register_hidden' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_register_hidden'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='31429eff' name='type'/> + <parameter type-id='999701cc' name='attr'/> + <parameter type-id='95e97e5e' name='objset_types'/> + <parameter type-id='80f4b756' name='colname'/> + <parameter type-id='c19b74c3' name='flex'/> + <parameter type-id='a3372543' name='sfeatures'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_iter_common' mangled-name='zprop_iter_common' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_iter_common'> + <parameter type-id='1ec3747a' name='func'/> + <parameter type-id='eaa32e2f' name='cb'/> + <parameter type-id='c19b74c3' name='show_all'/> + <parameter type-id='c19b74c3' name='ordered'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zprop_name_to_prop' mangled-name='zprop_name_to_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_name_to_prop'> + <parameter type-id='80f4b756' name='propname'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zprop_string_to_index' mangled-name='zprop_string_to_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_string_to_index'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='80f4b756' name='string'/> + <parameter type-id='5d6479ae' name='index'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zprop_index_to_string' mangled-name='zprop_index_to_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_index_to_string'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='9c313c2d' name='index'/> + <parameter type-id='7d3cd834' name='string'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zprop_random_value' mangled-name='zprop_random_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_random_value'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='9c313c2d' name='seed'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zprop_values' mangled-name='zprop_values' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_values'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zprop_valid_for_type' mangled-name='zprop_valid_for_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_valid_for_type'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='2e45de5d' name='type'/> + <parameter type-id='c19b74c3' name='headcheck'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zprop_valid_char' mangled-name='zprop_valid_char' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_valid_char'> + <parameter type-id='a84c031d' name='c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zprop_width' mangled-name='zprop_width' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_width'> + <parameter type-id='95e97e5e' name='prop'/> + <parameter type-id='37e3bd22' name='fixed'/> + <parameter type-id='2e45de5d' name='type'/> + <return type-id='b59d7dce'/> + </function-decl> + </abi-instr> </abi-corpus> diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c b/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c index 50053e35f0d5..1f6addcae58a 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c @@ -49,7 +49,6 @@ #include <sys/mount.h> #include <pwd.h> #include <grp.h> -#include <ucred.h> #ifdef HAVE_IDMAP #include <idmap.h> #include <aclutils.h> diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c b/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c index e8b8a1dfc398..a414024bb427 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c @@ -41,7 +41,6 @@ #include <unistd.h> #include <stdio.h> #include <stdlib.h> -#include <stropts.h> #include <pthread.h> #include <sys/zfs_ioctl.h> #include <libzfs.h> diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_util.c b/sys/contrib/openzfs/lib/libzfs/libzfs_util.c index c47a5782c8fb..1c067e214800 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_util.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_util.c @@ -1910,37 +1910,30 @@ zprop_iter(zprop_func func, void *cb, boolean_t show_all, boolean_t ordered, return (zprop_iter_common(func, cb, show_all, ordered, type)); } -/* - * Fill given version buffer with zfs userland version - */ -void -zfs_version_userland(char *version, int len) +const char * +zfs_version_userland(void) { - (void) strlcpy(version, ZFS_META_ALIAS, len); + return (ZFS_META_ALIAS); } /* * Prints both zfs userland and kernel versions - * Returns 0 on success, and -1 on error (with errno set) + * Returns 0 on success, and -1 on error */ int zfs_version_print(void) { - char zver_userland[128]; - char zver_kernel[128]; + (void) puts(ZFS_META_ALIAS); - zfs_version_userland(zver_userland, sizeof (zver_userland)); - - (void) printf("%s\n", zver_userland); - - if (zfs_version_kernel(zver_kernel, sizeof (zver_kernel)) == -1) { + char *kver = zfs_version_kernel(); + if (kver == NULL) { fprintf(stderr, "zfs_version_kernel() failed: %s\n", strerror(errno)); return (-1); } - (void) printf("zfs-kmod-%s\n", zver_kernel); - + (void) printf("zfs-kmod-%s\n", kver); + free(kver); return (0); } diff --git a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c index d2bc6ddfc23a..289c6703c2dd 100644 --- a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c +++ b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c @@ -351,14 +351,22 @@ zpool_nextboot(libzfs_handle_t *hdl, uint64_t pool_guid, uint64_t dev_guid, } /* - * Fill given version buffer with zfs kernel version. - * Returns 0 on success, and -1 on error (with errno set) + * Return allocated loaded module version, or NULL on error (with errno set) */ -int -zfs_version_kernel(char *version, int len) +char * +zfs_version_kernel(void) { - size_t l = len; - - return (sysctlbyname("vfs.zfs.version.module", - version, &l, NULL, 0)); + size_t l; + if (sysctlbyname("vfs.zfs.version.module", + NULL, &l, NULL, 0) == -1) + return (NULL); + char *version = malloc(l); + if (version == NULL) + return (NULL); + if (sysctlbyname("vfs.zfs.version.module", + version, &l, NULL, 0) == -1) { + free(version); + return (NULL); + } + return (version); } diff --git a/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_util_os.c b/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_util_os.c index a32aa1513b39..9d6f574a5546 100644 --- a/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_util_os.c +++ b/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_util_os.c @@ -20,20 +20,24 @@ */ +#include <alloca.h> #include <errno.h> #include <fcntl.h> #include <libintl.h> +#include <math.h> +#include <poll.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> -#include <unistd.h> -#include <math.h> -#include <sys/stat.h> -#include <sys/mnttab.h> +#include <sys/inotify.h> #include <sys/mntent.h> +#include <sys/mnttab.h> +#include <sys/stat.h> +#include <sys/timerfd.h> #include <sys/types.h> #include <sys/wait.h> +#include <unistd.h> #include <libzfs.h> #include <libzfs_core.h> @@ -57,7 +61,7 @@ libzfs_error_init(int error) switch (error) { case ENXIO: return (dgettext(TEXT_DOMAIN, "The ZFS modules are not " - "loaded.\nTry running '/sbin/modprobe zfs' as root " + "loaded.\nTry running 'modprobe zfs' as root " "to load them.")); case ENOENT: return (dgettext(TEXT_DOMAIN, "/dev/zfs and /proc/self/mounts " @@ -65,7 +69,7 @@ libzfs_error_init(int error) "-t proc proc /proc' as root.")); case ENOEXEC: return (dgettext(TEXT_DOMAIN, "The ZFS modules cannot be " - "auto-loaded.\nTry running '/sbin/modprobe zfs' as " + "auto-loaded.\nTry running 'modprobe zfs' as " "root to manually load them.")); case EACCES: return (dgettext(TEXT_DOMAIN, "Permission denied the " @@ -76,93 +80,80 @@ libzfs_error_init(int error) } } -static int -libzfs_module_loaded(const char *module) -{ - const char path_prefix[] = "/sys/module/"; - char path[256]; - - memcpy(path, path_prefix, sizeof (path_prefix) - 1); - strcpy(path + sizeof (path_prefix) - 1, module); - - return (access(path, F_OK) == 0); -} - /* - * Verify the required ZFS_DEV device is available and optionally attempt - * to load the ZFS modules. Under normal circumstances the modules - * should already have been loaded by some external mechanism. + * zfs(4) is loaded by udev if there's a fstype=zfs device present, + * but if there isn't, load them automatically; + * always wait for ZFS_DEV to appear via udev. * * Environment variables: - * - ZFS_MODULE_LOADING="YES|yes|ON|on" - Attempt to load modules. - * - ZFS_MODULE_TIMEOUT="<seconds>" - Seconds to wait for ZFS_DEV + * - ZFS_MODULE_TIMEOUT="<seconds>" - Seconds to wait for ZFS_DEV, + * defaults to 10, max. 10 min. */ -static int -libzfs_load_module_impl(const char *module) +int +libzfs_load_module(void) { - char *argv[4] = {"/sbin/modprobe", "-q", (char *)module, (char *)0}; - char *load_str, *timeout_str; - long timeout = 10; /* seconds */ - long busy_timeout = 10; /* milliseconds */ - int load = 0, fd; - hrtime_t start; - - /* Optionally request module loading */ - if (!libzfs_module_loaded(module)) { - load_str = getenv("ZFS_MODULE_LOADING"); - if (load_str) { - if (!strncasecmp(load_str, "YES", strlen("YES")) || - !strncasecmp(load_str, "ON", strlen("ON"))) - load = 1; - else - load = 0; - } + if (access(ZFS_DEV, F_OK) == 0) + return (0); - if (load) { - if (libzfs_run_process("/sbin/modprobe", argv, 0)) - return (ENOEXEC); - } + if (access(ZFS_SYSFS_DIR, F_OK) != 0) { + char *argv[] = {"modprobe", "zfs", NULL}; + if (libzfs_run_process("modprobe", argv, 0)) + return (ENOEXEC); - if (!libzfs_module_loaded(module)) + if (access(ZFS_SYSFS_DIR, F_OK) != 0) return (ENXIO); } - /* - * Device creation by udev is asynchronous and waiting may be - * required. Busy wait for 10ms and then fall back to polling every - * 10ms for the allowed timeout (default 10s, max 10m). This is - * done to optimize for the common case where the device is - * immediately available and to avoid penalizing the possible - * case where udev is slow or unable to create the device. - */ - timeout_str = getenv("ZFS_MODULE_TIMEOUT"); - if (timeout_str) { - timeout = strtol(timeout_str, NULL, 0); - timeout = MAX(MIN(timeout, (10 * 60)), 0); /* 0 <= N <= 600 */ + const char *timeout_str = getenv("ZFS_MODULE_TIMEOUT"); + int seconds = 10; + if (timeout_str) + seconds = MIN(strtol(timeout_str, NULL, 0), 600); + struct itimerspec timeout = {.it_value.tv_sec = MAX(seconds, 0)}; + + int ino = inotify_init1(IN_CLOEXEC); + if (ino == -1) + return (ENOENT); + inotify_add_watch(ino, ZFS_DEVDIR, IN_CREATE); + + if (access(ZFS_DEV, F_OK) == 0) { + close(ino); + return (0); + } else if (seconds == 0) { + close(ino); + return (ENOENT); } - start = gethrtime(); - do { - fd = open(ZFS_DEV, O_RDWR | O_CLOEXEC); - if (fd >= 0) { - (void) close(fd); - return (0); - } else if (errno != ENOENT) { - return (errno); - } else if (NSEC2MSEC(gethrtime() - start) < busy_timeout) { - sched_yield(); - } else { - usleep(10 * MILLISEC); - } - } while (NSEC2MSEC(gethrtime() - start) < (timeout * MILLISEC)); - - return (ENOENT); -} + size_t evsz = sizeof (struct inotify_event) + NAME_MAX + 1; + struct inotify_event *ev = alloca(evsz); -int -libzfs_load_module(void) -{ - return (libzfs_load_module_impl(ZFS_DRIVER)); + int tout = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); + if (tout == -1) { + close(ino); + return (ENOENT); + } + timerfd_settime(tout, 0, &timeout, NULL); + + int ret = ENOENT; + struct pollfd pfds[] = { + {.fd = ino, .events = POLLIN}, + {.fd = tout, .events = POLLIN}, + }; + while (poll(pfds, ARRAY_SIZE(pfds), -1) != -1) { + if (pfds[0].revents & POLLIN) { + verify(read(ino, ev, evsz) > + sizeof (struct inotify_event)); + if (strcmp(ev->name, &ZFS_DEV[sizeof (ZFS_DEVDIR)]) + == 0) { + ret = 0; + break; + } + } + if (pfds[1].revents & POLLIN) + break; + } + close(tout); + close(ino); + return (ret); } int @@ -192,31 +183,27 @@ zfs_destroy_snaps_nvl_os(libzfs_handle_t *hdl, nvlist_t *snaps) } /* - * Fill given version buffer with zfs kernel version read from ZFS_SYSFS_DIR - * Returns 0 on success, and -1 on error (with errno set) + * Return allocated loaded module version, or NULL on error (with errno set) */ -int -zfs_version_kernel(char *version, int len) +char * +zfs_version_kernel(void) { - int _errno; - int fd; - int rlen; - - if ((fd = open(ZFS_SYSFS_DIR "/version", O_RDONLY | O_CLOEXEC)) == -1) - return (-1); - - if ((rlen = read(fd, version, len)) == -1) { - version[0] = '\0'; - _errno = errno; - (void) close(fd); - errno = _errno; - return (-1); + FILE *f = fopen(ZFS_SYSFS_DIR "/version", "re"); + if (f == NULL) + return (NULL); + + char *ret = NULL; + size_t l; + ssize_t read; + if ((read = getline(&ret, &l, f)) == -1) { + int err = errno; + fclose(f); + errno = err; + return (NULL); } - version[rlen-1] = '\0'; /* discard '\n' */ - - if (close(fd) == -1) - return (-1); - - return (0); + fclose(f); + if (ret[read - 1] == '\n') + ret[read - 1] = '\0'; + return (ret); } diff --git a/sys/contrib/openzfs/lib/libzfs_core/Makefile.am b/sys/contrib/openzfs/lib/libzfs_core/Makefile.am index 9370da4e3e74..d1c6fb86d186 100644 --- a/sys/contrib/openzfs/lib/libzfs_core/Makefile.am +++ b/sys/contrib/openzfs/lib/libzfs_core/Makefile.am @@ -43,4 +43,4 @@ libzfs_core_la_LDFLAGS += -version-info 3:0:0 pkgconfig_DATA += %D%/libzfs_core.pc -EXTRA_DIST += $(addprefix %D%/,libzfs_core.abi libzfs_core.suppr) +dist_noinst_DATA += %D%/libzfs_core.abi %D%/libzfs_core.suppr diff --git a/sys/contrib/openzfs/lib/libzfsbootenv/Makefile.am b/sys/contrib/openzfs/lib/libzfsbootenv/Makefile.am index 7b87bfe6786b..118f154821fc 100644 --- a/sys/contrib/openzfs/lib/libzfsbootenv/Makefile.am +++ b/sys/contrib/openzfs/lib/libzfsbootenv/Makefile.am @@ -26,4 +26,4 @@ libzfsbootenv_la_LDFLAGS += -version-info 1:0:0 pkgconfig_DATA += %D%/libzfsbootenv.pc -EXTRA_DIST += $(addprefix %D%/,libzfsbootenv.abi libzfsbootenv.suppr) +dist_noinst_DATA += %D%/libzfsbootenv.abi %D%/libzfsbootenv.suppr diff --git a/sys/contrib/openzfs/man/Makefile.am b/sys/contrib/openzfs/man/Makefile.am index 362ee9b7e149..8fa21d2fd23e 100644 --- a/sys/contrib/openzfs/man/Makefile.am +++ b/sys/contrib/openzfs/man/Makefile.am @@ -1,4 +1,4 @@ -EXTRA_DIST += \ +dist_noinst_man_MANS = \ %D%/man1/cstyle.1 dist_man_MANS = \ @@ -105,8 +105,9 @@ nodist_man_MANS = \ %D%/man8/zed.8 \ %D%/man8/zfs-mount-generator.8 -SUBSTFILES += $(nodist_man_MANS) +dist_noinst_DATA += $(dist_noinst_man_MANS) $(dist_man_MANS) +SUBSTFILES += $(nodist_man_MANS) CHECKS += mancheck mancheck: diff --git a/sys/contrib/openzfs/man/man4/zfs.4 b/sys/contrib/openzfs/man/man4/zfs.4 index 5ef517c46faa..a086e1a5d56c 100644 --- a/sys/contrib/openzfs/man/man4/zfs.4 +++ b/sys/contrib/openzfs/man/man4/zfs.4 @@ -487,7 +487,15 @@ However, this is limited by .It Sy zfetch_array_rd_sz Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq ulong If prefetching is enabled, disable prefetching for reads larger than this size. . -.It Sy zfetch_max_distance Ns = Ns Sy 8388608 Ns B Po 8 MiB Pc Pq uint +.It Sy zfetch_min_distance Ns = Ns Sy 4194304 Ns B Po 4 MiB Pc Pq uint +Min bytes to prefetch per stream. +Prefetch distance starts from the demand access size and quickly grows to +this value, doubling on each hit. +After that it may grow further by 1/8 per hit, but only if some prefetch +since last time haven't completed in time to satisfy demand request, i.e. +prefetch depth didn't cover the read latency or the pool got saturated. +. +.It Sy zfetch_max_distance Ns = Ns Sy 67108864 Ns B Po 64 MiB Pc Pq uint Max bytes to prefetch per stream. . .It Sy zfetch_max_idistance Ns = Ns Sy 67108864 Ns B Po 64 MiB Pc Pq uint @@ -496,8 +504,11 @@ Max bytes to prefetch indirects for per stream. .It Sy zfetch_max_streams Ns = Ns Sy 8 Pq uint Max number of streams per zfetch (prefetch streams per file). . -.It Sy zfetch_min_sec_reap Ns = Ns Sy 2 Pq uint -Min time before an active prefetch stream can be reclaimed +.It Sy zfetch_min_sec_reap Ns = Ns Sy 1 Pq uint +Min time before inactive prefetch stream can be reclaimed +. +.It Sy zfetch_max_sec_reap Ns = Ns Sy 2 Pq uint +Max time before inactive prefetch stream can be deleted . .It Sy zfs_abd_scatter_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int Enables ARC from using scatter/gather lists and forces all allocations to be @@ -1098,10 +1109,9 @@ This should be less than . .It Sy zfs_wrlog_data_max Ns = Pq int The upper limit of write-transaction zil log data size in bytes. -Once it is reached, write operation is blocked, until log data is cleared out -after transaction group sync. -Because of some overhead, it should be set -at least 2 times the size of +Write operations are throttled when approaching the limit until log data is +cleared out after transaction group sync. +Because of some overhead, it should be set at least 2 times the size of .Sy zfs_dirty_data_max .No to prevent harming normal write throughput. It also should be smaller than the size of the slog device if slog is present. @@ -2129,6 +2139,14 @@ However, if there are fewer than metaslabs in the vdev, this functionality is disabled. This ensures that we don't set aside an unreasonable amount of space for the ZIL. . +.It Sy zstd_earlyabort_pass Ns = Ns Sy 1 Pq int +Whether heuristic for detection of incompressible data with zstd levels >= 3 +using LZ4 and zstd-1 passes is enabled. +. +.It Sy zstd_abort_size Ns = Ns Sy 131072 Pq int +Minimal uncompressed size (inclusive) of a record before the early abort +heuristic will be attempted. +. .It Sy zio_deadman_log_all Ns = Ns Sy 0 Ns | Ns 1 Pq int If non-zero, the zio deadman will produce debugging messages .Pq see Sy zfs_dbgmsg_enable diff --git a/sys/contrib/openzfs/man/man8/zfs.8 b/sys/contrib/openzfs/man/man8/zfs.8 index cac4327e0721..eaa93e0ea75c 100644 --- a/sys/contrib/openzfs/man/man8/zfs.8 +++ b/sys/contrib/openzfs/man/man8/zfs.8 @@ -736,7 +736,7 @@ Do note that any changes done with the command will be undone if the share is ever unshared (like via a reboot). . .Sh ENVIRONMENT VARIABLES -.Bl -tag -width "ZFS_MOUNT_HELPER" +.Bl -tag -width "ZFS_MODULE_TIMEOUT" .It Sy ZFS_MOUNT_HELPER Cause .Nm zfs Cm mount @@ -744,14 +744,28 @@ to use .Xr mount 8 to mount ZFS datasets. This option is provided for backwards compatibility with older ZFS versions. -.El -.Bl -tag -width "ZFS_SET_PIPE_MAX" +. .It Sy ZFS_SET_PIPE_MAX Tells .Nm zfs to set the maximum pipe size for sends/recieves. Disabled by default on Linux due to an unfixed deadlock in Linux's pipe size handling code. +. +.\" Shared with zpool.8 +.It Sy ZFS_MODULE_TIMEOUT +Time, in seconds, to wait for +.Pa /dev/zfs +to appear. +Defaults to +.Sy 10 , +max +.Sy 600 Pq 10 minutes . +If +.Pf < Sy 0 , +wait forever; if +.Sy 0 , +don't wait. .El . .Sh INTERFACE STABILITY diff --git a/sys/contrib/openzfs/man/man8/zpool.8 b/sys/contrib/openzfs/man/man8/zpool.8 index 34c816bf0342..075e31bbeb73 100644 --- a/sys/contrib/openzfs/man/man8/zpool.8 +++ b/sys/contrib/openzfs/man/man8/zpool.8 @@ -524,6 +524,20 @@ If .Sy ZPOOL_SCRIPTS_ENABLED is not set, it is assumed that the user is allowed to run .Nm zpool Cm status Ns / Ns Cm iostat Fl c . +.\" Shared with zfs.8 +.It Sy ZFS_MODULE_TIMEOUT +Time, in seconds, to wait for +.Pa /dev/zfs +to appear. +Defaults to +.Sy 10 , +max +.Sy 600 Pq 10 minutes . +If +.Pf < Sy 0 , +wait forever; if +.Sy 0 , +don't wait. .El . .Sh INTERFACE STABILITY diff --git a/sys/contrib/openzfs/module/os/linux/zfs/vdev_disk.c b/sys/contrib/openzfs/module/os/linux/zfs/vdev_disk.c index 235cd1691c14..9a382261df73 100644 --- a/sys/contrib/openzfs/module/os/linux/zfs/vdev_disk.c +++ b/sys/contrib/openzfs/module/os/linux/zfs/vdev_disk.c @@ -304,8 +304,6 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize, rw_exit(&vd->vd_lock); } - struct request_queue *q = bdev_get_queue(vd->vd_bdev); - /* Determine the physical block size */ int physical_block_size = bdev_physical_block_size(vd->vd_bdev); @@ -316,13 +314,13 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize, v->vdev_nowritecache = B_FALSE; /* Set when device reports it supports TRIM. */ - v->vdev_has_trim = !!blk_queue_discard(q); + v->vdev_has_trim = bdev_discard_supported(vd->vd_bdev); /* Set when device reports it supports secure TRIM. */ - v->vdev_has_securetrim = !!blk_queue_discard_secure(q); + v->vdev_has_securetrim = bdev_secure_discard_supported(vd->vd_bdev); /* Inform the ZIO pipeline that we are non-rotational */ - v->vdev_nonrot = blk_queue_nonrot(q); + v->vdev_nonrot = blk_queue_nonrot(bdev_get_queue(vd->vd_bdev)); /* Physical volume size in bytes for the partition */ *psize = bdev_capacity(vd->vd_bdev); @@ -460,6 +458,13 @@ vdev_submit_bio_impl(struct bio *bio) #define preempt_schedule_notrace(x) preempt_schedule(x) #endif +/* + * As for the Linux 5.18 kernel bio_alloc() expects a block_device struct + * as an argument removing the need to set it with bio_set_dev(). This + * removes the need for all of the following compatibility code. + */ +#if !defined(HAVE_BIO_ALLOC_4ARG) + #ifdef HAVE_BIO_SET_DEV #if defined(CONFIG_BLK_CGROUP) && defined(HAVE_BIO_SET_DEV_GPL_ONLY) /* @@ -556,6 +561,7 @@ bio_set_dev(struct bio *bio, struct block_device *bdev) bio->bi_bdev = bdev; } #endif /* HAVE_BIO_SET_DEV */ +#endif /* !HAVE_BIO_ALLOC_4ARG */ static inline void vdev_submit_bio(struct bio *bio) @@ -566,10 +572,36 @@ vdev_submit_bio(struct bio *bio) current->bio_list = bio_list; } +static inline struct bio * +vdev_bio_alloc(struct block_device *bdev, gfp_t gfp_mask, + unsigned short nr_vecs) +{ + struct bio *bio; + #ifdef HAVE_BIO_ALLOC_4ARG -#define bio_alloc(gfp_mask, nr_iovecs) bio_alloc(NULL, nr_iovecs, 0, gfp_mask) + bio = bio_alloc(bdev, nr_vecs, 0, gfp_mask); +#else + bio = bio_alloc(gfp_mask, nr_vecs); + if (likely(bio != NULL)) + bio_set_dev(bio, bdev); #endif + return (bio); +} + +static inline unsigned int +vdev_bio_max_segs(zio_t *zio, int bio_size, uint64_t abd_offset) +{ + unsigned long nr_segs = abd_nr_pages_off(zio->io_abd, + bio_size, abd_offset); + +#ifdef HAVE_BIO_MAX_SEGS + return (bio_max_segs(nr_segs)); +#else + return (MIN(nr_segs, BIO_MAX_PAGES)); +#endif +} + static int __vdev_disk_physio(struct block_device *bdev, zio_t *zio, size_t io_size, uint64_t io_offset, int rw, int flags) @@ -581,6 +613,7 @@ __vdev_disk_physio(struct block_device *bdev, zio_t *zio, int bio_count = 16; int error = 0; struct blk_plug plug; + unsigned short nr_vecs; /* * Accessing outside the block device is never allowed. @@ -632,15 +665,8 @@ retry: goto retry; } - /* bio_alloc() with __GFP_WAIT never returns NULL */ -#ifdef HAVE_BIO_MAX_SEGS - dr->dr_bio[i] = bio_alloc(GFP_NOIO, bio_max_segs( - abd_nr_pages_off(zio->io_abd, bio_size, abd_offset))); -#else - dr->dr_bio[i] = bio_alloc(GFP_NOIO, - MIN(abd_nr_pages_off(zio->io_abd, bio_size, abd_offset), - BIO_MAX_PAGES)); -#endif + nr_vecs = vdev_bio_max_segs(zio, bio_size, abd_offset); + dr->dr_bio[i] = vdev_bio_alloc(bdev, GFP_NOIO, nr_vecs); if (unlikely(dr->dr_bio[i] == NULL)) { vdev_disk_dio_free(dr); return (SET_ERROR(ENOMEM)); @@ -649,7 +675,6 @@ retry: /* Matching put called by vdev_disk_physio_completion */ vdev_disk_dio_get(dr); - bio_set_dev(dr->dr_bio[i], bdev); BIO_BI_SECTOR(dr->dr_bio[i]) = bio_offset >> 9; dr->dr_bio[i]->bi_end_io = vdev_disk_physio_completion; dr->dr_bio[i]->bi_private = dr; @@ -713,14 +738,12 @@ vdev_disk_io_flush(struct block_device *bdev, zio_t *zio) if (!q) return (SET_ERROR(ENXIO)); - bio = bio_alloc(GFP_NOIO, 0); - /* bio_alloc() with __GFP_WAIT never returns NULL */ + bio = vdev_bio_alloc(bdev, GFP_NOIO, 0); if (unlikely(bio == NULL)) return (SET_ERROR(ENOMEM)); bio->bi_end_io = vdev_disk_io_flush_completion; bio->bi_private = zio; - bio_set_dev(bio, bdev); bio_set_flush(bio); vdev_submit_bio(bio); invalidate_bdev(bdev); @@ -728,12 +751,38 @@ vdev_disk_io_flush(struct block_device *bdev, zio_t *zio) return (0); } +static int +vdev_disk_io_trim(zio_t *zio) +{ + vdev_t *v = zio->io_vd; + vdev_disk_t *vd = v->vdev_tsd; + +#if defined(HAVE_BLKDEV_ISSUE_SECURE_ERASE) + if (zio->io_trim_flags & ZIO_TRIM_SECURE) { + return (-blkdev_issue_secure_erase(vd->vd_bdev, + zio->io_offset >> 9, zio->io_size >> 9, GFP_NOFS)); + } else { + return (-blkdev_issue_discard(vd->vd_bdev, + zio->io_offset >> 9, zio->io_size >> 9, GFP_NOFS)); + } +#elif defined(HAVE_BLKDEV_ISSUE_DISCARD) + unsigned long trim_flags = 0; +#if defined(BLKDEV_DISCARD_SECURE) + if (zio->io_trim_flags & ZIO_TRIM_SECURE) + trim_flags |= BLKDEV_DISCARD_SECURE; +#endif + return (-blkdev_issue_discard(vd->vd_bdev, + zio->io_offset >> 9, zio->io_size >> 9, GFP_NOFS, trim_flags)); +#else +#error "Unsupported kernel" +#endif +} + static void vdev_disk_io_start(zio_t *zio) { vdev_t *v = zio->io_vd; vdev_disk_t *vd = v->vdev_tsd; - unsigned long trim_flags = 0; int rw, error; /* @@ -806,14 +855,7 @@ vdev_disk_io_start(zio_t *zio) break; case ZIO_TYPE_TRIM: -#if defined(BLKDEV_DISCARD_SECURE) - if (zio->io_trim_flags & ZIO_TRIM_SECURE) - trim_flags |= BLKDEV_DISCARD_SECURE; -#endif - zio->io_error = -blkdev_issue_discard(vd->vd_bdev, - zio->io_offset >> 9, zio->io_size >> 9, GFP_NOFS, - trim_flags); - + zio->io_error = vdev_disk_io_trim(zio); rw_exit(&vd->vd_lock); zio_interrupt(zio); return; diff --git a/sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c b/sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c index 8b84eb795fc3..9a640fb40b67 100644 --- a/sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c +++ b/sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c @@ -674,11 +674,19 @@ zpl_readpage_common(struct page *pp) return (error); } +#ifdef HAVE_VFS_READ_FOLIO +static int +zpl_read_folio(struct file *filp, struct folio *folio) +{ + return (zpl_readpage_common(&folio->page)); +} +#else static int zpl_readpage(struct file *filp, struct page *pp) { return (zpl_readpage_common(pp)); } +#endif static int zpl_readpage_filler(void *data, struct page *pp) @@ -1208,7 +1216,11 @@ const struct address_space_operations zpl_address_space_operations = { #else .readahead = zpl_readahead, #endif +#ifdef HAVE_VFS_READ_FOLIO + .read_folio = zpl_read_folio, +#else .readpage = zpl_readpage, +#endif .writepage = zpl_writepage, .writepages = zpl_writepages, .direct_IO = zpl_direct_IO, diff --git a/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c b/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c index 4ebdf8331695..39441700ae8c 100644 --- a/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c +++ b/sys/contrib/openzfs/module/os/linux/zfs/zvol_os.c @@ -1053,7 +1053,9 @@ zvol_os_create_minor(const char *name) (zvol_max_discard_blocks * zv->zv_volblocksize) >> 9); blk_queue_discard_granularity(zv->zv_zso->zvo_queue, zv->zv_volblocksize); +#ifdef QUEUE_FLAG_DISCARD blk_queue_flag_set(QUEUE_FLAG_DISCARD, zv->zv_zso->zvo_queue); +#endif #ifdef QUEUE_FLAG_NONROT blk_queue_flag_set(QUEUE_FLAG_NONROT, zv->zv_zso->zvo_queue); #endif diff --git a/sys/contrib/openzfs/module/zfs/dbuf.c b/sys/contrib/openzfs/module/zfs/dbuf.c index 9a273b010fb1..55a3686fac46 100644 --- a/sys/contrib/openzfs/module/zfs/dbuf.c +++ b/sys/contrib/openzfs/module/zfs/dbuf.c @@ -3185,8 +3185,10 @@ typedef struct dbuf_prefetch_arg { static void dbuf_prefetch_fini(dbuf_prefetch_arg_t *dpa, boolean_t io_done) { - if (dpa->dpa_cb != NULL) - dpa->dpa_cb(dpa->dpa_arg, io_done); + if (dpa->dpa_cb != NULL) { + dpa->dpa_cb(dpa->dpa_arg, dpa->dpa_zb.zb_level, + dpa->dpa_zb.zb_blkid, io_done); + } kmem_free(dpa, sizeof (*dpa)); } @@ -3320,7 +3322,8 @@ dbuf_prefetch_indirect_done(zio_t *zio, const zbookmark_phys_t *zb, dpa->dpa_zb.zb_object, dpa->dpa_curlevel, nextblkid); (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, - bp, dbuf_prefetch_indirect_done, dpa, dpa->dpa_prio, + bp, dbuf_prefetch_indirect_done, dpa, + ZIO_PRIORITY_SYNC_READ, ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, &iter_aflags, &zb); } @@ -3455,7 +3458,8 @@ dbuf_prefetch_impl(dnode_t *dn, int64_t level, uint64_t blkid, SET_BOOKMARK(&zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET, dn->dn_object, curlevel, curblkid); (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, - &bp, dbuf_prefetch_indirect_done, dpa, prio, + &bp, dbuf_prefetch_indirect_done, dpa, + ZIO_PRIORITY_SYNC_READ, ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, &iter_aflags, &zb); } @@ -3467,7 +3471,7 @@ dbuf_prefetch_impl(dnode_t *dn, int64_t level, uint64_t blkid, return (1); no_issue: if (cb != NULL) - cb(arg, B_FALSE); + cb(arg, level, blkid, B_FALSE); return (0); } diff --git a/sys/contrib/openzfs/module/zfs/dmu_tx.c b/sys/contrib/openzfs/module/zfs/dmu_tx.c index fe9860066d31..e7bd53136b85 100644 --- a/sys/contrib/openzfs/module/zfs/dmu_tx.c +++ b/sys/contrib/openzfs/module/zfs/dmu_tx.c @@ -53,8 +53,8 @@ dmu_tx_stats_t dmu_tx_stats = { { "dmu_tx_dirty_throttle", KSTAT_DATA_UINT64 }, { "dmu_tx_dirty_delay", KSTAT_DATA_UINT64 }, { "dmu_tx_dirty_over_max", KSTAT_DATA_UINT64 }, - { "dmu_tx_wrlog_over_max", KSTAT_DATA_UINT64 }, { "dmu_tx_dirty_frees_delay", KSTAT_DATA_UINT64 }, + { "dmu_tx_wrlog_delay", KSTAT_DATA_UINT64 }, { "dmu_tx_quota", KSTAT_DATA_UINT64 }, }; @@ -779,34 +779,49 @@ static void dmu_tx_delay(dmu_tx_t *tx, uint64_t dirty) { dsl_pool_t *dp = tx->tx_pool; - uint64_t delay_min_bytes = + uint64_t delay_min_bytes, wrlog; + hrtime_t wakeup, tx_time = 0, now; + + /* Calculate minimum transaction time for the dirty data amount. */ + delay_min_bytes = zfs_dirty_data_max * zfs_delay_min_dirty_percent / 100; - hrtime_t wakeup, min_tx_time, now; + if (dirty > delay_min_bytes) { + /* + * The caller has already waited until we are under the max. + * We make them pass us the amount of dirty data so we don't + * have to handle the case of it being >= the max, which + * could cause a divide-by-zero if it's == the max. + */ + ASSERT3U(dirty, <, zfs_dirty_data_max); - if (dirty <= delay_min_bytes) - return; + tx_time = zfs_delay_scale * (dirty - delay_min_bytes) / + (zfs_dirty_data_max - dirty); + } - /* - * The caller has already waited until we are under the max. - * We make them pass us the amount of dirty data so we don't - * have to handle the case of it being >= the max, which could - * cause a divide-by-zero if it's == the max. - */ - ASSERT3U(dirty, <, zfs_dirty_data_max); + /* Calculate minimum transaction time for the TX_WRITE log size. */ + wrlog = aggsum_upper_bound(&dp->dp_wrlog_total); + delay_min_bytes = + zfs_wrlog_data_max * zfs_delay_min_dirty_percent / 100; + if (wrlog >= zfs_wrlog_data_max) { + tx_time = zfs_delay_max_ns; + } else if (wrlog > delay_min_bytes) { + tx_time = MAX(zfs_delay_scale * (wrlog - delay_min_bytes) / + (zfs_wrlog_data_max - wrlog), tx_time); + } + if (tx_time == 0) + return; + + tx_time = MIN(tx_time, zfs_delay_max_ns); now = gethrtime(); - min_tx_time = zfs_delay_scale * - (dirty - delay_min_bytes) / (zfs_dirty_data_max - dirty); - min_tx_time = MIN(min_tx_time, zfs_delay_max_ns); - if (now > tx->tx_start + min_tx_time) + if (now > tx->tx_start + tx_time) return; DTRACE_PROBE3(delay__mintime, dmu_tx_t *, tx, uint64_t, dirty, - uint64_t, min_tx_time); + uint64_t, tx_time); mutex_enter(&dp->dp_lock); - wakeup = MAX(tx->tx_start + min_tx_time, - dp->dp_last_wakeup + min_tx_time); + wakeup = MAX(tx->tx_start + tx_time, dp->dp_last_wakeup + tx_time); dp->dp_last_wakeup = wakeup; mutex_exit(&dp->dp_lock); @@ -884,8 +899,9 @@ dmu_tx_try_assign(dmu_tx_t *tx, uint64_t txg_how) } if (!tx->tx_dirty_delayed && - dsl_pool_wrlog_over_max(tx->tx_pool)) { - DMU_TX_STAT_BUMP(dmu_tx_wrlog_over_max); + dsl_pool_need_wrlog_delay(tx->tx_pool)) { + tx->tx_wait_dirty = B_TRUE; + DMU_TX_STAT_BUMP(dmu_tx_wrlog_delay); return (SET_ERROR(ERESTART)); } diff --git a/sys/contrib/openzfs/module/zfs/dmu_zfetch.c b/sys/contrib/openzfs/module/zfs/dmu_zfetch.c index a6facdc65bb4..d00a48159aeb 100644 --- a/sys/contrib/openzfs/module/zfs/dmu_zfetch.c +++ b/sys/contrib/openzfs/module/zfs/dmu_zfetch.c @@ -48,9 +48,13 @@ static int zfs_prefetch_disable = B_FALSE; /* max # of streams per zfetch */ static unsigned int zfetch_max_streams = 8; /* min time before stream reclaim */ -static unsigned int zfetch_min_sec_reap = 2; -/* max bytes to prefetch per stream (default 8MB) */ -unsigned int zfetch_max_distance = 8 * 1024 * 1024; +static unsigned int zfetch_min_sec_reap = 1; +/* max time before stream delete */ +static unsigned int zfetch_max_sec_reap = 2; +/* min bytes to prefetch per stream (default 4MB) */ +static unsigned int zfetch_min_distance = 4 * 1024 * 1024; +/* max bytes to prefetch per stream (default 64MB) */ +unsigned int zfetch_max_distance = 64 * 1024 * 1024; /* max bytes to prefetch indirects for per stream (default 64MB) */ unsigned int zfetch_max_idistance = 64 * 1024 * 1024; /* max number of bytes in an array_read in which we allow prefetching (1MB) */ @@ -195,74 +199,99 @@ dmu_zfetch_fini(zfetch_t *zf) } /* - * If there aren't too many streams already, create a new stream. + * If there aren't too many active streams already, create one more. + * In process delete/reuse all streams without hits for zfetch_max_sec_reap. + * If needed, reuse oldest stream without hits for zfetch_min_sec_reap or ever. * The "blkid" argument is the next block that we expect this stream to access. - * While we're here, clean up old streams (which haven't been - * accessed for at least zfetch_min_sec_reap seconds). */ static void dmu_zfetch_stream_create(zfetch_t *zf, uint64_t blkid) { - zstream_t *zs_next; - hrtime_t now = gethrtime(); + zstream_t *zs, *zs_next, *zs_old = NULL; + hrtime_t now = gethrtime(), t; ASSERT(MUTEX_HELD(&zf->zf_lock)); /* - * Clean up old streams. + * Delete too old streams, reusing the first found one. */ - for (zstream_t *zs = list_head(&zf->zf_stream); - zs != NULL; zs = zs_next) { + t = now - SEC2NSEC(zfetch_max_sec_reap); + for (zs = list_head(&zf->zf_stream); zs != NULL; zs = zs_next) { zs_next = list_next(&zf->zf_stream, zs); /* * Skip if still active. 1 -- zf_stream reference. */ if (zfs_refcount_count(&zs->zs_refs) != 1) continue; - if (((now - zs->zs_atime) / NANOSEC) > - zfetch_min_sec_reap) + if (zs->zs_atime > t) + continue; + if (zs_old) dmu_zfetch_stream_remove(zf, zs); + else + zs_old = zs; + } + if (zs_old) { + zs = zs_old; + goto reuse; } /* * The maximum number of streams is normally zfetch_max_streams, * but for small files we lower it such that it's at least possible * for all the streams to be non-overlapping. - * - * If we are already at the maximum number of streams for this file, - * even after removing old streams, then don't create this stream. */ uint32_t max_streams = MAX(1, MIN(zfetch_max_streams, zf->zf_dnode->dn_maxblkid * zf->zf_dnode->dn_datablksz / zfetch_max_distance)); if (zf->zf_numstreams >= max_streams) { + t = now - SEC2NSEC(zfetch_min_sec_reap); + for (zs = list_head(&zf->zf_stream); zs != NULL; + zs = list_next(&zf->zf_stream, zs)) { + if (zfs_refcount_count(&zs->zs_refs) != 1) + continue; + if (zs->zs_atime > t) + continue; + if (zs_old == NULL || zs->zs_atime < zs_old->zs_atime) + zs_old = zs; + } + if (zs_old) { + zs = zs_old; + goto reuse; + } ZFETCHSTAT_BUMP(zfetchstat_max_streams); return; } - zstream_t *zs = kmem_zalloc(sizeof (*zs), KM_SLEEP); - zs->zs_blkid = blkid; - zs->zs_pf_blkid1 = blkid; - zs->zs_pf_blkid = blkid; - zs->zs_ipf_blkid1 = blkid; - zs->zs_ipf_blkid = blkid; - zs->zs_atime = now; + zs = kmem_zalloc(sizeof (*zs), KM_SLEEP); zs->zs_fetch = zf; - zs->zs_missed = B_FALSE; zfs_refcount_create(&zs->zs_callers); zfs_refcount_create(&zs->zs_refs); /* One reference for zf_stream. */ zfs_refcount_add(&zs->zs_refs, NULL); zf->zf_numstreams++; list_insert_head(&zf->zf_stream, zs); + +reuse: + zs->zs_blkid = blkid; + zs->zs_pf_dist = 0; + zs->zs_pf_start = blkid; + zs->zs_pf_end = blkid; + zs->zs_ipf_dist = 0; + zs->zs_ipf_start = blkid; + zs->zs_ipf_end = blkid; + /* Allow immediate stream reuse until first hit. */ + zs->zs_atime = now - SEC2NSEC(zfetch_min_sec_reap); + zs->zs_missed = B_FALSE; + zs->zs_more = B_FALSE; } static void -dmu_zfetch_stream_done(void *arg, boolean_t io_issued) +dmu_zfetch_done(void *arg, uint64_t level, uint64_t blkid, boolean_t io_issued) { - (void) io_issued; zstream_t *zs = arg; + if (io_issued && level == 0 && blkid < zs->zs_blkid) + zs->zs_more = B_TRUE; if (zfs_refcount_remove(&zs->zs_refs, NULL) == 0) dmu_zfetch_stream_fini(zs); } @@ -284,11 +313,6 @@ dmu_zfetch_prepare(zfetch_t *zf, uint64_t blkid, uint64_t nblks, boolean_t fetch_data, boolean_t have_lock) { zstream_t *zs; - int64_t pf_start, ipf_start; - int64_t pf_ahead_blks, max_blks; - int max_dist_blks, pf_nblks, ipf_nblks; - uint64_t end_of_access_blkid, maxblkid; - end_of_access_blkid = blkid + nblks; spa_t *spa = zf->zf_dnode->dn_objset->os_spa; if (zfs_prefetch_disable) @@ -317,7 +341,7 @@ dmu_zfetch_prepare(zfetch_t *zf, uint64_t blkid, uint64_t nblks, * A fast path for small files for which no prefetch will * happen. */ - maxblkid = zf->zf_dnode->dn_maxblkid; + uint64_t maxblkid = zf->zf_dnode->dn_maxblkid; if (maxblkid < 2) { if (!have_lock) rw_exit(&zf->zf_dnode->dn_struct_rwlock); @@ -345,6 +369,7 @@ dmu_zfetch_prepare(zfetch_t *zf, uint64_t blkid, uint64_t nblks, * If the file is ending, remove the matching stream if found. * If not found then it is too late to create a new one now. */ + uint64_t end_of_access_blkid = blkid + nblks; if (end_of_access_blkid >= maxblkid) { if (zs != NULL) dmu_zfetch_stream_remove(zf, zs); @@ -377,60 +402,48 @@ dmu_zfetch_prepare(zfetch_t *zf, uint64_t blkid, uint64_t nblks, /* * This access was to a block that we issued a prefetch for on - * behalf of this stream. Issue further prefetches for this stream. + * behalf of this stream. Calculate further prefetch distances. * - * Normally, we start prefetching where we stopped - * prefetching last (zs_pf_blkid). But when we get our first - * hit on this stream, zs_pf_blkid == zs_blkid, we don't - * want to prefetch the block we just accessed. In this case, - * start just after the block we just accessed. - */ - pf_start = MAX(zs->zs_pf_blkid, end_of_access_blkid); - if (zs->zs_pf_blkid1 < end_of_access_blkid) - zs->zs_pf_blkid1 = end_of_access_blkid; - if (zs->zs_ipf_blkid1 < end_of_access_blkid) - zs->zs_ipf_blkid1 = end_of_access_blkid; - - /* - * Double our amount of prefetched data, but don't let the - * prefetch get further ahead than zfetch_max_distance. + * Start prefetch from the demand access size (nblks). Double the + * distance every access up to zfetch_min_distance. After that only + * if needed increase the distance by 1/8 up to zfetch_max_distance. */ + unsigned int nbytes = nblks << zf->zf_dnode->dn_datablkshift; + unsigned int pf_nblks; if (fetch_data) { - max_dist_blks = - zfetch_max_distance >> zf->zf_dnode->dn_datablkshift; - /* - * Previously, we were (zs_pf_blkid - blkid) ahead. We - * want to now be double that, so read that amount again, - * plus the amount we are catching up by (i.e. the amount - * read just now). - */ - pf_ahead_blks = zs->zs_pf_blkid - blkid + nblks; - max_blks = max_dist_blks - (pf_start - end_of_access_blkid); - pf_nblks = MIN(pf_ahead_blks, max_blks); + if (unlikely(zs->zs_pf_dist < nbytes)) + zs->zs_pf_dist = nbytes; + else if (zs->zs_pf_dist < zfetch_min_distance) + zs->zs_pf_dist *= 2; + else if (zs->zs_more) + zs->zs_pf_dist += zs->zs_pf_dist / 8; + zs->zs_more = B_FALSE; + if (zs->zs_pf_dist > zfetch_max_distance) + zs->zs_pf_dist = zfetch_max_distance; + pf_nblks = zs->zs_pf_dist >> zf->zf_dnode->dn_datablkshift; } else { pf_nblks = 0; } + if (zs->zs_pf_start < end_of_access_blkid) + zs->zs_pf_start = end_of_access_blkid; + if (zs->zs_pf_end < end_of_access_blkid + pf_nblks) + zs->zs_pf_end = end_of_access_blkid + pf_nblks; - zs->zs_pf_blkid = pf_start + pf_nblks; - - /* - * Do the same for indirects, starting from where we stopped last, - * or where we will stop reading data blocks (and the indirects - * that point to them). - */ - ipf_start = MAX(zs->zs_ipf_blkid, zs->zs_pf_blkid); - max_dist_blks = zfetch_max_idistance >> zf->zf_dnode->dn_datablkshift; /* - * We want to double our distance ahead of the data prefetch - * (or reader, if we are not prefetching data). Previously, we - * were (zs_ipf_blkid - blkid) ahead. To double that, we read - * that amount again, plus the amount we are catching up by - * (i.e. the amount read now + the amount of data prefetched now). + * Do the same for indirects, starting where we will stop reading + * data blocks (and the indirects that point to them). */ - pf_ahead_blks = zs->zs_ipf_blkid - blkid + nblks + pf_nblks; - max_blks = max_dist_blks - (ipf_start - zs->zs_pf_blkid); - ipf_nblks = MIN(pf_ahead_blks, max_blks); - zs->zs_ipf_blkid = ipf_start + ipf_nblks; + if (unlikely(zs->zs_ipf_dist < nbytes)) + zs->zs_ipf_dist = nbytes; + else + zs->zs_ipf_dist *= 2; + if (zs->zs_ipf_dist > zfetch_max_idistance) + zs->zs_ipf_dist = zfetch_max_idistance; + pf_nblks = zs->zs_ipf_dist >> zf->zf_dnode->dn_datablkshift; + if (zs->zs_ipf_start < zs->zs_pf_end) + zs->zs_ipf_start = zs->zs_pf_end; + if (zs->zs_ipf_end < zs->zs_pf_end + pf_nblks) + zs->zs_ipf_end = zs->zs_pf_end + pf_nblks; zs->zs_blkid = end_of_access_blkid; /* Protect the stream from reclamation. */ @@ -471,13 +484,13 @@ dmu_zfetch_run(zstream_t *zs, boolean_t missed, boolean_t have_lock) mutex_enter(&zf->zf_lock); if (zs->zs_missed) { - pf_start = zs->zs_pf_blkid1; - pf_end = zs->zs_pf_blkid1 = zs->zs_pf_blkid; + pf_start = zs->zs_pf_start; + pf_end = zs->zs_pf_start = zs->zs_pf_end; } else { pf_start = pf_end = 0; } - ipf_start = MAX(zs->zs_pf_blkid1, zs->zs_ipf_blkid1); - ipf_end = zs->zs_ipf_blkid1 = zs->zs_ipf_blkid; + ipf_start = zs->zs_ipf_start; + ipf_end = zs->zs_ipf_start = zs->zs_ipf_end; mutex_exit(&zf->zf_lock); ASSERT3S(pf_start, <=, pf_end); ASSERT3S(ipf_start, <=, ipf_end); @@ -505,12 +518,12 @@ dmu_zfetch_run(zstream_t *zs, boolean_t missed, boolean_t have_lock) for (int64_t blk = pf_start; blk < pf_end; blk++) { issued += dbuf_prefetch_impl(zf->zf_dnode, 0, blk, ZIO_PRIORITY_ASYNC_READ, ARC_FLAG_PREDICTIVE_PREFETCH, - dmu_zfetch_stream_done, zs); + dmu_zfetch_done, zs); } for (int64_t iblk = ipf_start; iblk < ipf_end; iblk++) { issued += dbuf_prefetch_impl(zf->zf_dnode, 1, iblk, ZIO_PRIORITY_ASYNC_READ, ARC_FLAG_PREDICTIVE_PREFETCH, - dmu_zfetch_stream_done, zs); + dmu_zfetch_done, zs); } if (!have_lock) @@ -540,6 +553,12 @@ ZFS_MODULE_PARAM(zfs_prefetch, zfetch_, max_streams, UINT, ZMOD_RW, ZFS_MODULE_PARAM(zfs_prefetch, zfetch_, min_sec_reap, UINT, ZMOD_RW, "Min time before stream reclaim"); +ZFS_MODULE_PARAM(zfs_prefetch, zfetch_, max_sec_reap, UINT, ZMOD_RW, + "Max time before stream delete"); + +ZFS_MODULE_PARAM(zfs_prefetch, zfetch_, min_distance, UINT, ZMOD_RW, + "Min bytes to prefetch per stream"); + ZFS_MODULE_PARAM(zfs_prefetch, zfetch_, max_distance, UINT, ZMOD_RW, "Max bytes to prefetch per stream"); diff --git a/sys/contrib/openzfs/module/zfs/dsl_pool.c b/sys/contrib/openzfs/module/zfs/dsl_pool.c index c8766090558d..90d7579cbd32 100644 --- a/sys/contrib/openzfs/module/zfs/dsl_pool.c +++ b/sys/contrib/openzfs/module/zfs/dsl_pool.c @@ -105,9 +105,8 @@ int zfs_dirty_data_max_percent = 10; int zfs_dirty_data_max_max_percent = 25; /* - * zfs_wrlog_data_max, the upper limit of TX_WRITE log data. - * Once it is reached, write operation is blocked, - * until log data is cleared out after txg sync. + * The upper limit of TX_WRITE log data. Write operations are throttled + * when approaching the limit until log data is cleared out after txg sync. * It only counts TX_WRITE log with WR_COPIED or WR_NEED_COPY. */ unsigned long zfs_wrlog_data_max = 0; @@ -623,15 +622,18 @@ dsl_pool_wrlog_count(dsl_pool_t *dp, int64_t size, uint64_t txg) /* Choose a value slightly bigger than min dirty sync bytes */ uint64_t sync_min = - zfs_dirty_data_max * (zfs_dirty_data_sync_percent + 10) / 100; + zfs_wrlog_data_max * (zfs_dirty_data_sync_percent + 10) / 200; if (aggsum_compare(&dp->dp_wrlog_pertxg[txg & TXG_MASK], sync_min) > 0) txg_kick(dp, txg); } boolean_t -dsl_pool_wrlog_over_max(dsl_pool_t *dp) +dsl_pool_need_wrlog_delay(dsl_pool_t *dp) { - return (aggsum_compare(&dp->dp_wrlog_total, zfs_wrlog_data_max) > 0); + uint64_t delay_min_bytes = + zfs_wrlog_data_max * zfs_delay_min_dirty_percent / 100; + + return (aggsum_compare(&dp->dp_wrlog_total, delay_min_bytes) > 0); } static void @@ -641,6 +643,9 @@ dsl_pool_wrlog_clear(dsl_pool_t *dp, uint64_t txg) delta = -(int64_t)aggsum_value(&dp->dp_wrlog_pertxg[txg & TXG_MASK]); aggsum_add(&dp->dp_wrlog_pertxg[txg & TXG_MASK], delta); aggsum_add(&dp->dp_wrlog_total, delta); + /* Compact per-CPU sums after the big change. */ + (void) aggsum_value(&dp->dp_wrlog_pertxg[txg & TXG_MASK]); + (void) aggsum_value(&dp->dp_wrlog_total); } #ifdef ZFS_DEBUG diff --git a/sys/contrib/openzfs/module/zfs/dsl_scan.c b/sys/contrib/openzfs/module/zfs/dsl_scan.c index dedf9c8a669a..89448f0ecea2 100644 --- a/sys/contrib/openzfs/module/zfs/dsl_scan.c +++ b/sys/contrib/openzfs/module/zfs/dsl_scan.c @@ -1824,6 +1824,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, const zbookmark_phys_t *zb, dmu_tx_t *tx) { dsl_pool_t *dp = scn->scn_dp; + spa_t *spa = dp->dp_spa; int zio_flags = ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD; int err; @@ -1838,7 +1839,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, if (dnp != NULL && dnp->dn_bonuslen > DN_MAX_BONUS_LEN(dnp)) { scn->scn_phys.scn_errors++; - spa_log_error(dp->dp_spa, zb); + spa_log_error(spa, zb); return (SET_ERROR(EINVAL)); } @@ -1849,7 +1850,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, int epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT; arc_buf_t *buf; - err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf, + err = arc_read(NULL, spa, bp, arc_getbuf_func, &buf, ZIO_PRIORITY_SCRUB, zio_flags, &flags, zb); if (err) { scn->scn_phys.scn_errors++; @@ -1877,7 +1878,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, zio_flags |= ZIO_FLAG_RAW; } - err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf, + err = arc_read(NULL, spa, bp, arc_getbuf_func, &buf, ZIO_PRIORITY_SCRUB, zio_flags, &flags, zb); if (err) { scn->scn_phys.scn_errors++; @@ -1896,7 +1897,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, objset_phys_t *osp; arc_buf_t *buf; - err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf, + err = arc_read(NULL, spa, bp, arc_getbuf_func, &buf, ZIO_PRIORITY_SCRUB, zio_flags, &flags, zb); if (err) { scn->scn_phys.scn_errors++; @@ -1927,6 +1928,14 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, DMU_USERUSED_OBJECT, tx); } arc_buf_destroy(buf, &buf); + } else if (!zfs_blkptr_verify(spa, bp, B_FALSE, BLK_VERIFY_LOG)) { + /* + * Sanity check the block pointer contents, this is handled + * by arc_read() for the cases above. + */ + scn->scn_phys.scn_errors++; + spa_log_error(spa, zb); + return (SET_ERROR(EINVAL)); } return (0); @@ -1977,19 +1986,6 @@ dsl_scan_visitbp(blkptr_t *bp, const zbookmark_phys_t *zb, scn->scn_visited_this_txg++; - /* - * This debugging is commented out to conserve stack space. This - * function is called recursively and the debugging adds several - * bytes to the stack for each call. It can be commented back in - * if required to debug an issue in dsl_scan_visitbp(). - * - * dprintf_bp(bp, - * "visiting ds=%p/%llu zb=%llx/%llx/%llx/%llx bp=%p", - * ds, ds ? ds->ds_object : 0, - * zb->zb_objset, zb->zb_object, zb->zb_level, zb->zb_blkid, - * bp); - */ - if (BP_IS_HOLE(bp)) { scn->scn_holes_this_txg++; return; diff --git a/sys/contrib/openzfs/module/zfs/spa.c b/sys/contrib/openzfs/module/zfs/spa.c index 01114dedef48..baa5fc24761d 100644 --- a/sys/contrib/openzfs/module/zfs/spa.c +++ b/sys/contrib/openzfs/module/zfs/spa.c @@ -2310,9 +2310,6 @@ spa_load_verify_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, (void) zilog, (void) dnp; - if (zb->zb_level == ZB_DNODE_LEVEL || BP_IS_HOLE(bp) || - BP_IS_EMBEDDED(bp) || BP_IS_REDACTED(bp)) - return (0); /* * Note: normally this routine will not be called if * spa_load_verify_metadata is not set. However, it may be useful @@ -2320,6 +2317,22 @@ spa_load_verify_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, */ if (!spa_load_verify_metadata) return (0); + + /* + * Sanity check the block pointer in order to detect obvious damage + * before using the contents in subsequent checks or in zio_read(). + * When damaged consider it to be a metadata error since we cannot + * trust the BP_GET_TYPE and BP_GET_LEVEL values. + */ + if (!zfs_blkptr_verify(spa, bp, B_FALSE, BLK_VERIFY_LOG)) { + atomic_inc_64(&sle->sle_meta_count); + return (0); + } + + if (zb->zb_level == ZB_DNODE_LEVEL || BP_IS_HOLE(bp) || + BP_IS_EMBEDDED(bp) || BP_IS_REDACTED(bp)) + return (0); + if (!BP_IS_METADATA(bp) && (!spa_load_verify_data || !sle->sle_verify_data)) return (0); diff --git a/sys/contrib/openzfs/module/zfs/spa_log_spacemap.c b/sys/contrib/openzfs/module/zfs/spa_log_spacemap.c index f831509a4247..c5a1039bd838 100644 --- a/sys/contrib/openzfs/module/zfs/spa_log_spacemap.c +++ b/sys/contrib/openzfs/module/zfs/spa_log_spacemap.c @@ -511,12 +511,6 @@ spa_log_summary_decrement_blkcount(spa_t *spa, uint64_t blocks_gone) e->lse_txgcount--; for (; e != NULL; e = list_head(&spa->spa_log_summary)) { if (e->lse_blkcount > blocks_gone) { - /* - * Assert that we stopped at an entry that is not - * obsolete. - */ - ASSERT(e->lse_mscount != 0); - e->lse_blkcount -= blocks_gone; blocks_gone = 0; break; diff --git a/sys/contrib/openzfs/module/zfs/spa_stats.c b/sys/contrib/openzfs/module/zfs/spa_stats.c index 2a75b37f020e..f1d644bc68ca 100644 --- a/sys/contrib/openzfs/module/zfs/spa_stats.c +++ b/sys/contrib/openzfs/module/zfs/spa_stats.c @@ -819,6 +819,41 @@ spa_state_init(spa_t *spa) kmem_strfree(name); } +static int +spa_guid_data(char *buf, size_t size, void *data) +{ + spa_t *spa = (spa_t *)data; + (void) snprintf(buf, size, "%llu\n", (u_longlong_t)spa_guid(spa)); + return (0); +} + +static void +spa_guid_init(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.guid; + char *name; + kstat_t *ksp; + + mutex_init(&shk->lock, NULL, MUTEX_DEFAULT, NULL); + + name = kmem_asprintf("zfs/%s", spa_name(spa)); + + ksp = kstat_create(name, 0, "guid", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + + shk->kstat = ksp; + if (ksp) { + ksp->ks_lock = &shk->lock; + ksp->ks_data = NULL; + ksp->ks_private = spa; + ksp->ks_flags |= KSTAT_FLAG_NO_HEADERS; + kstat_set_raw_ops(ksp, NULL, spa_guid_data, spa_state_addr); + kstat_install(ksp); + } + + kmem_strfree(name); +} + static void spa_health_destroy(spa_t *spa) { @@ -830,6 +865,17 @@ spa_health_destroy(spa_t *spa) mutex_destroy(&shk->lock); } +static void +spa_guid_destroy(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.guid; + kstat_t *ksp = shk->kstat; + if (ksp) + kstat_delete(ksp); + + mutex_destroy(&shk->lock); +} + static const spa_iostats_t spa_iostats_template = { { "trim_extents_written", KSTAT_DATA_UINT64 }, { "trim_bytes_written", KSTAT_DATA_UINT64 }, @@ -950,6 +996,7 @@ spa_stats_init(spa_t *spa) spa_tx_assign_init(spa); spa_mmp_history_init(spa); spa_state_init(spa); + spa_guid_init(spa); spa_iostats_init(spa); } @@ -962,6 +1009,7 @@ spa_stats_destroy(spa_t *spa) spa_txg_history_destroy(spa); spa_read_history_destroy(spa); spa_mmp_history_destroy(spa); + spa_guid_destroy(spa); } ZFS_MODULE_PARAM(zfs, zfs_, read_history, INT, ZMOD_RW, diff --git a/sys/contrib/openzfs/module/zfs/vdev_removal.c b/sys/contrib/openzfs/module/zfs/vdev_removal.c index 5508d273758d..7dfc4345f236 100644 --- a/sys/contrib/openzfs/module/zfs/vdev_removal.c +++ b/sys/contrib/openzfs/module/zfs/vdev_removal.c @@ -1364,6 +1364,8 @@ vdev_remove_complete(spa_t *spa) ASSERT3P(vd->vdev_initialize_thread, ==, NULL); ASSERT3P(vd->vdev_trim_thread, ==, NULL); ASSERT3P(vd->vdev_autotrim_thread, ==, NULL); + vdev_rebuild_stop_wait(vd); + ASSERT3P(vd->vdev_rebuild_thread, ==, NULL); uint64_t vdev_space = spa_deflate(spa) ? vd->vdev_stat.vs_dspace : vd->vdev_stat.vs_space; diff --git a/sys/contrib/openzfs/module/zfs/zil.c b/sys/contrib/openzfs/module/zfs/zil.c index 161ce3c97e71..9adf815517ac 100644 --- a/sys/contrib/openzfs/module/zfs/zil.c +++ b/sys/contrib/openzfs/module/zfs/zil.c @@ -559,8 +559,8 @@ zil_alloc_lwb(zilog_t *zilog, blkptr_t *bp, boolean_t slog, uint64_t txg, lwb->lwb_max_txg = txg; lwb->lwb_write_zio = NULL; lwb->lwb_root_zio = NULL; - lwb->lwb_tx = NULL; lwb->lwb_issued_timestamp = 0; + lwb->lwb_issued_txg = 0; if (BP_GET_CHECKSUM(bp) == ZIO_CHECKSUM_ZILOG2) { lwb->lwb_nused = sizeof (zil_chain_t); lwb->lwb_sz = BP_GET_LSIZE(bp); @@ -1183,9 +1183,9 @@ zil_lwb_flush_vdevs_done(zio_t *zio) { lwb_t *lwb = zio->io_private; zilog_t *zilog = lwb->lwb_zilog; - dmu_tx_t *tx = lwb->lwb_tx; zil_commit_waiter_t *zcw; itx_t *itx; + uint64_t txg; spa_config_exit(zilog->zl_spa, SCL_STATE, lwb); @@ -1194,15 +1194,13 @@ zil_lwb_flush_vdevs_done(zio_t *zio) mutex_enter(&zilog->zl_lock); /* - * Ensure the lwb buffer pointer is cleared before releasing the - * txg. If we have had an allocation failure and the txg is + * If we have had an allocation failure and the txg is * waiting to sync then we want zil_sync() to remove the lwb so * that it's not picked up as the next new one in * zil_process_commit_list(). zil_sync() will only remove the * lwb if lwb_buf is null. */ lwb->lwb_buf = NULL; - lwb->lwb_tx = NULL; ASSERT3U(lwb->lwb_issued_timestamp, >, 0); zilog->zl_last_lwb_latency = gethrtime() - lwb->lwb_issued_timestamp; @@ -1261,12 +1259,47 @@ zil_lwb_flush_vdevs_done(zio_t *zio) mutex_exit(&zilog->zl_lock); - /* - * Now that we've written this log block, we have a stable pointer - * to the next block in the chain, so it's OK to let the txg in - * which we allocated the next block sync. - */ - dmu_tx_commit(tx); + mutex_enter(&zilog->zl_lwb_io_lock); + txg = lwb->lwb_issued_txg; + ASSERT3U(zilog->zl_lwb_inflight[txg & TXG_MASK], >, 0); + zilog->zl_lwb_inflight[txg & TXG_MASK]--; + if (zilog->zl_lwb_inflight[txg & TXG_MASK] == 0) + cv_broadcast(&zilog->zl_lwb_io_cv); + mutex_exit(&zilog->zl_lwb_io_lock); +} + +/* + * Wait for the completion of all issued write/flush of that txg provided. + * It guarantees zil_lwb_flush_vdevs_done() is called and returned. + */ +static void +zil_lwb_flush_wait_all(zilog_t *zilog, uint64_t txg) +{ + ASSERT3U(txg, ==, spa_syncing_txg(zilog->zl_spa)); + + mutex_enter(&zilog->zl_lwb_io_lock); + while (zilog->zl_lwb_inflight[txg & TXG_MASK] > 0) + cv_wait(&zilog->zl_lwb_io_cv, &zilog->zl_lwb_io_lock); + mutex_exit(&zilog->zl_lwb_io_lock); + +#ifdef ZFS_DEBUG + mutex_enter(&zilog->zl_lock); + mutex_enter(&zilog->zl_lwb_io_lock); + lwb_t *lwb = list_head(&zilog->zl_lwb_list); + while (lwb != NULL && lwb->lwb_max_txg <= txg) { + if (lwb->lwb_issued_txg <= txg) { + ASSERT(lwb->lwb_state != LWB_STATE_ISSUED); + ASSERT(lwb->lwb_state != LWB_STATE_WRITE_DONE); + IMPLY(lwb->lwb_issued_txg > 0, + lwb->lwb_state == LWB_STATE_FLUSH_DONE); + } + IMPLY(lwb->lwb_state == LWB_STATE_FLUSH_DONE, + lwb->lwb_buf == NULL); + lwb = list_next(&zilog->zl_lwb_list, lwb); + } + mutex_exit(&zilog->zl_lwb_io_lock); + mutex_exit(&zilog->zl_lock); +#endif } /* @@ -1562,11 +1595,6 @@ zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb) /* * Allocate the next block and save its address in this block * before writing it in order to establish the log chain. - * Note that if the allocation of nlwb synced before we wrote - * the block that points at it (lwb), we'd leak it if we crashed. - * Therefore, we don't do dmu_tx_commit() until zil_lwb_write_done(). - * We dirty the dataset to ensure that zil_sync() will be called - * to clean up in the event of allocation failure or I/O failure. */ tx = dmu_tx_create(zilog->zl_os); @@ -1582,7 +1610,11 @@ zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb) dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); txg = dmu_tx_get_txg(tx); - lwb->lwb_tx = tx; + mutex_enter(&zilog->zl_lwb_io_lock); + lwb->lwb_issued_txg = txg; + zilog->zl_lwb_inflight[txg & TXG_MASK]++; + zilog->zl_lwb_max_issued_txg = MAX(txg, zilog->zl_lwb_max_issued_txg); + mutex_exit(&zilog->zl_lwb_io_lock); /* * Log blocks are pre-allocated. Here we select the size of the next @@ -1657,6 +1689,8 @@ zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb) zio_nowait(lwb->lwb_root_zio); zio_nowait(lwb->lwb_write_zio); + dmu_tx_commit(tx); + /* * If there was an allocation failure then nlwb will be null which * forces a txg_wait_synced(). @@ -2931,7 +2965,7 @@ zil_commit_itx_assign(zilog_t *zilog, zil_commit_waiter_t *zcw) * queue prior to zil_commit() having been called, and which itxs were * added after zil_commit() was called. * - * The commit it is special; it doesn't have any on-disk representation. + * The commit itx is special; it doesn't have any on-disk representation. * When a commit itx is "committed" to an lwb, the waiter associated * with it is linked onto the lwb's list of waiters. Then, when that lwb * completes, each waiter on the lwb's list is marked done and signaled @@ -3124,6 +3158,8 @@ zil_sync(zilog_t *zilog, dmu_tx_t *tx) if (spa_sync_pass(spa) != 1) return; + zil_lwb_flush_wait_all(zilog, txg); + mutex_enter(&zilog->zl_lock); ASSERT(zilog->zl_stop_sync == 0); @@ -3290,6 +3326,7 @@ zil_alloc(objset_t *os, zil_header_t *zh_phys) mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); mutex_init(&zilog->zl_issuer_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&zilog->zl_lwb_io_lock, NULL, MUTEX_DEFAULT, NULL); for (int i = 0; i < TXG_SIZE; i++) { mutex_init(&zilog->zl_itxg[i].itxg_lock, NULL, @@ -3303,6 +3340,7 @@ zil_alloc(objset_t *os, zil_header_t *zh_phys) offsetof(itx_t, itx_node)); cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); + cv_init(&zilog->zl_lwb_io_cv, NULL, CV_DEFAULT, NULL); return (zilog); } @@ -3338,8 +3376,10 @@ zil_free(zilog_t *zilog) mutex_destroy(&zilog->zl_issuer_lock); mutex_destroy(&zilog->zl_lock); + mutex_destroy(&zilog->zl_lwb_io_lock); cv_destroy(&zilog->zl_cv_suspend); + cv_destroy(&zilog->zl_lwb_io_cv); kmem_free(zilog, sizeof (zilog_t)); } @@ -3387,9 +3427,18 @@ zil_close(zilog_t *zilog) mutex_exit(&zilog->zl_lock); /* - * We need to use txg_wait_synced() to wait long enough for the - * ZIL to be clean, and to wait for all pending lwbs to be - * written out. + * zl_lwb_max_issued_txg may be larger than lwb_max_txg. It depends + * on the time when the dmu_tx transaction is assigned in + * zil_lwb_write_issue(). + */ + mutex_enter(&zilog->zl_lwb_io_lock); + txg = MAX(zilog->zl_lwb_max_issued_txg, txg); + mutex_exit(&zilog->zl_lwb_io_lock); + + /* + * We need to use txg_wait_synced() to wait until that txg is synced. + * zil_sync() will guarantee all lwbs up to that txg have been + * written out, flushed, and cleaned. */ if (txg != 0) txg_wait_synced(zilog->zl_dmu_pool, txg); diff --git a/sys/contrib/openzfs/module/zfs/zio.c b/sys/contrib/openzfs/module/zfs/zio.c index 2a16d5cef2e2..ae99f1e6450d 100644 --- a/sys/contrib/openzfs/module/zfs/zio.c +++ b/sys/contrib/openzfs/module/zfs/zio.c @@ -962,14 +962,12 @@ zfs_blkptr_verify(spa_t *spa, const blkptr_t *bp, boolean_t config_held, "blkptr at %p has invalid TYPE %llu", bp, (longlong_t)BP_GET_TYPE(bp)); } - if (BP_GET_CHECKSUM(bp) >= ZIO_CHECKSUM_FUNCTIONS || - BP_GET_CHECKSUM(bp) <= ZIO_CHECKSUM_ON) { + if (BP_GET_CHECKSUM(bp) >= ZIO_CHECKSUM_FUNCTIONS) { errors += zfs_blkptr_verify_log(spa, bp, blk_verify, "blkptr at %p has invalid CHECKSUM %llu", bp, (longlong_t)BP_GET_CHECKSUM(bp)); } - if (BP_GET_COMPRESS(bp) >= ZIO_COMPRESS_FUNCTIONS || - BP_GET_COMPRESS(bp) <= ZIO_COMPRESS_ON) { + if (BP_GET_COMPRESS(bp) >= ZIO_COMPRESS_FUNCTIONS) { errors += zfs_blkptr_verify_log(spa, bp, blk_verify, "blkptr at %p has invalid COMPRESS %llu", bp, (longlong_t)BP_GET_COMPRESS(bp)); diff --git a/sys/contrib/openzfs/module/zfs/zio_compress.c b/sys/contrib/openzfs/module/zfs/zio_compress.c index cded11f4cbd5..38020ce220b1 100644 --- a/sys/contrib/openzfs/module/zfs/zio_compress.c +++ b/sys/contrib/openzfs/module/zfs/zio_compress.c @@ -66,7 +66,7 @@ zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = { {"gzip-9", 9, gzip_compress, gzip_decompress, NULL}, {"zle", 64, zle_compress, zle_decompress, NULL}, {"lz4", 0, lz4_compress_zfs, lz4_decompress_zfs, NULL}, - {"zstd", ZIO_ZSTD_LEVEL_DEFAULT, zfs_zstd_compress, + {"zstd", ZIO_ZSTD_LEVEL_DEFAULT, zfs_zstd_compress_wrap, zfs_zstd_decompress, zfs_zstd_decompress_level}, }; diff --git a/sys/contrib/openzfs/module/zstd/zfs_zstd.c b/sys/contrib/openzfs/module/zstd/zfs_zstd.c index 2ccc6818754e..d7977dfa6b40 100644 --- a/sys/contrib/openzfs/module/zstd/zfs_zstd.c +++ b/sys/contrib/openzfs/module/zstd/zfs_zstd.c @@ -50,6 +50,12 @@ #include "lib/zstd.h" #include "lib/common/zstd_errors.h" +#ifndef IN_LIBSA +static int zstd_earlyabort_pass = 1; +static int zstd_cutoff_level = ZIO_ZSTD_LEVEL_3; +static unsigned int zstd_abort_size = (128 * 1024); +#endif + static kstat_t *zstd_ksp = NULL; typedef struct zstd_stats { @@ -62,6 +68,21 @@ typedef struct zstd_stats { kstat_named_t zstd_stat_dec_header_inval; kstat_named_t zstd_stat_com_fail; kstat_named_t zstd_stat_dec_fail; + /* + * LZ4 first-pass early abort verdict + */ + kstat_named_t zstd_stat_lz4pass_allowed; + kstat_named_t zstd_stat_lz4pass_rejected; + /* + * zstd-1 second-pass early abort verdict + */ + kstat_named_t zstd_stat_zstdpass_allowed; + kstat_named_t zstd_stat_zstdpass_rejected; + /* + * We excluded this from early abort for some reason + */ + kstat_named_t zstd_stat_passignored; + kstat_named_t zstd_stat_passignored_size; kstat_named_t zstd_stat_buffers; kstat_named_t zstd_stat_size; } zstd_stats_t; @@ -76,10 +97,44 @@ static zstd_stats_t zstd_stats = { { "decompress_header_invalid", KSTAT_DATA_UINT64 }, { "compress_failed", KSTAT_DATA_UINT64 }, { "decompress_failed", KSTAT_DATA_UINT64 }, + { "lz4pass_allowed", KSTAT_DATA_UINT64 }, + { "lz4pass_rejected", KSTAT_DATA_UINT64 }, + { "zstdpass_allowed", KSTAT_DATA_UINT64 }, + { "zstdpass_rejected", KSTAT_DATA_UINT64 }, + { "passignored", KSTAT_DATA_UINT64 }, + { "passignored_size", KSTAT_DATA_UINT64 }, { "buffers", KSTAT_DATA_UINT64 }, { "size", KSTAT_DATA_UINT64 }, }; +#ifdef _KERNEL +static int +kstat_zstd_update(kstat_t *ksp, int rw) +{ + ASSERT(ksp != NULL); + + if (rw == KSTAT_WRITE && ksp == zstd_ksp) { + ZSTDSTAT_ZERO(zstd_stat_alloc_fail); + ZSTDSTAT_ZERO(zstd_stat_alloc_fallback); + ZSTDSTAT_ZERO(zstd_stat_com_alloc_fail); + ZSTDSTAT_ZERO(zstd_stat_dec_alloc_fail); + ZSTDSTAT_ZERO(zstd_stat_com_inval); + ZSTDSTAT_ZERO(zstd_stat_dec_inval); + ZSTDSTAT_ZERO(zstd_stat_dec_header_inval); + ZSTDSTAT_ZERO(zstd_stat_com_fail); + ZSTDSTAT_ZERO(zstd_stat_dec_fail); + ZSTDSTAT_ZERO(zstd_stat_lz4pass_allowed); + ZSTDSTAT_ZERO(zstd_stat_lz4pass_rejected); + ZSTDSTAT_ZERO(zstd_stat_zstdpass_allowed); + ZSTDSTAT_ZERO(zstd_stat_zstdpass_rejected); + ZSTDSTAT_ZERO(zstd_stat_passignored); + ZSTDSTAT_ZERO(zstd_stat_passignored_size); + } + + return (0); +} +#endif + /* Enums describing the allocator type specified by kmem_type in zstd_kmem */ enum zstd_kmem_type { ZSTD_KMEM_UNKNOWN = 0, @@ -376,6 +431,65 @@ zstd_enum_to_level(enum zio_zstd_levels level, int16_t *zstd_level) return (1); } +#ifndef IN_LIBSA +size_t +zfs_zstd_compress_wrap(void *s_start, void *d_start, size_t s_len, size_t d_len, + int level) +{ + int16_t zstd_level; + if (zstd_enum_to_level(level, &zstd_level)) { + ZSTDSTAT_BUMP(zstd_stat_com_inval); + return (s_len); + } + /* + * A zstd early abort heuristic. + * + * - Zeroth, if this is <= zstd-3, or < zstd_abort_size (currently + * 128k), don't try any of this, just go. + * (because experimentally that was a reasonable cutoff for a perf win + * with tiny ratio change) + * - First, we try LZ4 compression, and if it doesn't early abort, we + * jump directly to whatever compression level we intended to try. + * - Second, we try zstd-1 - if that errors out (usually, but not + * exclusively, if it would overflow), we give up early. + * + * If it works, instead we go on and compress anyway. + * + * Why two passes? LZ4 alone gets you a lot of the way, but on highly + * compressible data, it was losing up to 8.5% of the compressed + * savings versus no early abort, and all the zstd-fast levels are + * worse indications on their own than LZ4, and don't improve the LZ4 + * pass noticably if stacked like this. + */ + size_t actual_abort_size = zstd_abort_size; + if (zstd_earlyabort_pass > 0 && zstd_level >= zstd_cutoff_level && + s_len >= actual_abort_size) { + int pass_len = 1; + pass_len = lz4_compress_zfs(s_start, d_start, s_len, d_len, 0); + if (pass_len < d_len) { + ZSTDSTAT_BUMP(zstd_stat_lz4pass_allowed); + goto keep_trying; + } + ZSTDSTAT_BUMP(zstd_stat_lz4pass_rejected); + + pass_len = zfs_zstd_compress(s_start, d_start, s_len, d_len, + ZIO_ZSTD_LEVEL_1); + if (pass_len == s_len || pass_len <= 0 || pass_len > d_len) { + ZSTDSTAT_BUMP(zstd_stat_zstdpass_rejected); + return (s_len); + } + ZSTDSTAT_BUMP(zstd_stat_zstdpass_allowed); + } else { + ZSTDSTAT_BUMP(zstd_stat_passignored); + if (s_len < actual_abort_size) { + ZSTDSTAT_BUMP(zstd_stat_passignored_size); + } + } +keep_trying: + return (zfs_zstd_compress(s_start, d_start, s_len, d_len, level)); + +} +#endif /* Compress block using zstd */ size_t @@ -437,8 +551,10 @@ zfs_zstd_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, * too small, that is not a failure. Everything else is a * failure, so increment the compression failure counter. */ - if (ZSTD_getErrorCode(c_len) != ZSTD_error_dstSize_tooSmall) { + int err = ZSTD_getErrorCode(c_len); + if (err != ZSTD_error_dstSize_tooSmall) { ZSTDSTAT_BUMP(zstd_stat_com_fail); + dprintf("Error: %s", ZSTD_getErrorString(err)); } return (s_len); } @@ -760,6 +876,9 @@ zstd_init(void) if (zstd_ksp != NULL) { zstd_ksp->ks_data = &zstd_stats; kstat_install(zstd_ksp); +#ifdef _KERNEL + zstd_ksp->ks_update = kstat_zstd_update; +#endif } return (0); @@ -788,8 +907,8 @@ module_init(zstd_init); module_exit(zstd_fini); #endif -EXPORT_SYMBOL(zfs_zstd_compress); -EXPORT_SYMBOL(zfs_zstd_decompress_level); -EXPORT_SYMBOL(zfs_zstd_decompress); -EXPORT_SYMBOL(zfs_zstd_cache_reap_now); +ZFS_MODULE_PARAM(zfs, zstd_, earlyabort_pass, INT, ZMOD_RW, + "Enable early abort attempts when using zstd"); +ZFS_MODULE_PARAM(zfs, zstd_, abort_size, UINT, ZMOD_RW, + "Minimal size of block to attempt early abort"); #endif diff --git a/sys/contrib/openzfs/rpm/Makefile.am b/sys/contrib/openzfs/rpm/Makefile.am index 216cb731fea9..af7b25021eac 100644 --- a/sys/contrib/openzfs/rpm/Makefile.am +++ b/sys/contrib/openzfs/rpm/Makefile.am @@ -1,4 +1,4 @@ -EXTRA_DIST += \ +dist_noinst_DATA += \ %D%/generic/zfs-dkms.spec.in \ %D%/generic/zfs-kmod.spec.in \ %D%/generic/zfs.spec.in \ diff --git a/sys/contrib/openzfs/rpm/generic/zfs-dkms.spec.in b/sys/contrib/openzfs/rpm/generic/zfs-dkms.spec.in index cd0a3ded2a00..f23347380d05 100644 --- a/sys/contrib/openzfs/rpm/generic/zfs-dkms.spec.in +++ b/sys/contrib/openzfs/rpm/generic/zfs-dkms.spec.in @@ -36,7 +36,7 @@ Obsoletes: spl-dkms Provides: %{module}-kmod = %{version} AutoReqProv: no -%if 0%{?rhel}%{?fedora}%{?suse_version} +%if (0%{?fedora}%{?suse_version}) || (0%{?rhel} && 0%{?rhel} < 9) # We don't directly use it, but if this isn't installed, rpmbuild as root can # crash+corrupt rpmdb # See issue #12071 diff --git a/sys/contrib/openzfs/rpm/generic/zfs-kmod.spec.in b/sys/contrib/openzfs/rpm/generic/zfs-kmod.spec.in index 4ed719b8fe14..ae0795427868 100644 --- a/sys/contrib/openzfs/rpm/generic/zfs-kmod.spec.in +++ b/sys/contrib/openzfs/rpm/generic/zfs-kmod.spec.in @@ -57,7 +57,7 @@ BuildRequires: gcc, make BuildRequires: elfutils-libelf-devel %endif -%if 0%{?rhel}%{?fedora}%{?suse_version} +%if (0%{?fedora}%{?suse_version}) || (0%{?rhel} && 0%{?rhel} < 9) # We don't directly use it, but if this isn't installed, rpmbuild as root can # crash+corrupt rpmdb # See issue #12071 @@ -98,7 +98,7 @@ BuildRequires: %{_bindir}/kmodtool # Kmodtool does its magic here. A patched version of kmodtool is shipped # with the source rpm until kmod development packages are supported upstream. # https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714 -%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} --obsolete-name spl --obsolete-version 0.8 2>/dev/null) } +%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } %description @@ -109,7 +109,7 @@ This package contains the ZFS kernel modules. %{?kmodtool_check} # Print kmodtool output for debugging purposes: -bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} --obsolete-name spl --obsolete-version 0.8 2>/dev/null +bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null %if %{with debug} %define debug --enable-debug diff --git a/sys/contrib/openzfs/rpm/generic/zfs.spec.in b/sys/contrib/openzfs/rpm/generic/zfs.spec.in index 0a29601639c3..493e93c1f3e6 100644 --- a/sys/contrib/openzfs/rpm/generic/zfs.spec.in +++ b/sys/contrib/openzfs/rpm/generic/zfs.spec.in @@ -90,12 +90,12 @@ License: @ZFS_META_LICENSE@ URL: https://github.com/openzfs/zfs Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Requires: libzpool5 = %{version} -Requires: libnvpair3 = %{version} -Requires: libuutil3 = %{version} -Requires: libzfs5 = %{version} +Requires: libzpool5%{?_isa} = %{version}-%{release} +Requires: libnvpair3%{?_isa} = %{version}-%{release} +Requires: libuutil3%{?_isa} = %{version}-%{release} +Requires: libzfs5%{?_isa} = %{version}-%{release} Requires: %{name}-kmod = %{version} -Provides: %{name}-kmod-common = %{version} +Provides: %{name}-kmod-common = %{version}-%{release} Obsoletes: spl # zfs-fuse provides the same commands and man pages that OpenZFS does. @@ -110,12 +110,15 @@ BuildRequires: libblkid-devel BuildRequires: libudev-devel BuildRequires: libattr-devel BuildRequires: openssl-devel +%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?centos} >= 8 +BuildRequires: libtirpc-devel +%endif + +%if (0%{?fedora}%{?suse_version}) || (0%{?rhel} && 0%{?rhel} < 9) # We don't directly use it, but if this isn't installed, rpmbuild as root can # crash+corrupt rpmdb # See issue #12071 BuildRequires: ncompress -%if 0%{?fedora} || 0%{?rhel} >= 8 || 0%{?centos} >= 8 -BuildRequires: libtirpc-devel %endif Requires: openssl @@ -218,13 +221,13 @@ This package provides support for managing ZFS filesystems %package -n libzfs5-devel Summary: Development headers Group: System Environment/Kernel -Requires: libzfs5 = %{version} -Requires: libzpool5 = %{version} -Requires: libnvpair3 = %{version} -Requires: libuutil3 = %{version} -Provides: libzpool5-devel -Provides: libnvpair3-devel -Provides: libuutil3-devel +Requires: libzfs5%{?_isa} = %{version}-%{release} +Requires: libzpool5%{?_isa} = %{version}-%{release} +Requires: libnvpair3%{?_isa} = %{version}-%{release} +Requires: libuutil3%{?_isa} = %{version}-%{release} +Provides: libzpool5-devel = %{version}-%{release} +Provides: libnvpair3-devel = %{version}-%{release} +Provides: libuutil3-devel = %{version}-%{release} Obsoletes: zfs-devel Obsoletes: libzfs2-devel Obsoletes: libzfs4-devel @@ -278,8 +281,8 @@ Summary: Python %{python_version} wrapper for libzfs_core Group: Development/Languages/Python License: Apache-2.0 BuildArch: noarch -Requires: libzfs5 = %{version} -Requires: libnvpair3 = %{version} +Requires: libzfs5 = %{version}-%{release} +Requires: libnvpair3 = %{version}-%{release} Requires: libffi Requires: python%{__python_pkg_version} @@ -314,7 +317,6 @@ This package provides a python wrapper for the libzfs_core C library. Summary: Initramfs module Group: System Environment/Kernel Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: %{name} = %{version}-%{release} Requires: initramfs-tools %description initramfs diff --git a/sys/contrib/openzfs/rpm/redhat/zfs-kmod.spec.in b/sys/contrib/openzfs/rpm/redhat/zfs-kmod.spec.in index 7ee04e2340c6..f59551c0b43a 100644 --- a/sys/contrib/openzfs/rpm/redhat/zfs-kmod.spec.in +++ b/sys/contrib/openzfs/rpm/redhat/zfs-kmod.spec.in @@ -17,9 +17,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # by generating a preamble text file which kmodtool can append to the spec file. %(/bin/echo -e "\ Requires: @PACKAGE@ = %{version}\n\ -Conflicts: @PACKAGE@-dkms\n\ -Obsoletes: kmod-spl\n\ -Obsoletes: spl-kmod\n\n" > %{_sourcedir}/kmod-preamble) +Conflicts: @PACKAGE@-dkms) # LDFLAGS are not sanitized by arch/*/Makefile for these architectures. %ifarch ppc ppc64 ppc64le aarch64 @@ -39,7 +37,6 @@ This package contains the ZFS kernel modules. %package -n kmod-%{kmod_name}-devel Summary: ZFS kernel module(s) devel common Group: System Environment/Kernel -Provides: kmod-spl-devel = %{version} %description -n kmod-%{kmod_name}-devel This package provides the header files and objects to build kernel modules. diff --git a/sys/contrib/openzfs/scripts/Makefile.am b/sys/contrib/openzfs/scripts/Makefile.am index 6f1dc9ccdba5..79719e621b69 100644 --- a/sys/contrib/openzfs/scripts/Makefile.am +++ b/sys/contrib/openzfs/scripts/Makefile.am @@ -6,7 +6,7 @@ dist_scripts_SCRIPTS = \ %D%/zimport.sh \ %D%/zloop.sh -EXTRA_SCRIPTS = \ +dist_noinst_SCRIPTS = \ %D%/commitcheck.sh \ %D%/common.sh.in \ %D%/dkms.mkconf \ @@ -18,14 +18,13 @@ EXTRA_SCRIPTS = \ %D%/paxcheck.sh \ %D%/zfs-tests-color.sh -EXTRA_DIST += \ +dist_noinst_DATA += \ %D%/cstyle.pl \ %D%/enum-extract.pl \ %D%/zfs2zol-patch.sed \ - %D%/zol2zfs-patch.sed \ - $(EXTRA_SCRIPTS) + %D%/zol2zfs-patch.sed -SHELLCHECKSCRIPTS += $(dist_scripts_SCRIPTS) $(EXTRA_SCRIPTS) +SHELLCHECKSCRIPTS += $(dist_scripts_SCRIPTS) $(dist_noinst_SCRIPTS) define SCRIPTS_EXTRA_ENVIRONMENT diff --git a/sys/contrib/openzfs/scripts/kmodtool b/sys/contrib/openzfs/scripts/kmodtool index f66341196acb..a79ad0c7a0f3 100755 --- a/sys/contrib/openzfs/scripts/kmodtool +++ b/sys/contrib/openzfs/scripts/kmodtool @@ -72,7 +72,7 @@ LANG=C rpmbuild --define "_sourcedir %{_sourcedir}" \\\ ln -s \$(ls \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/) \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/${kmodname}-kmod.latest %package -n akmod-${kmodname} -Summary: Akmod package for ${kmodname} kernel module(s) +Summary: Akmod package for ${kmodname} kernel module(s) Group: System Environment/Kernel Requires: kmodtool Requires: akmods @@ -82,11 +82,6 @@ Requires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version} Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} EOF - if [ -n "${obsolete_name}" ]; then - echo "Provides: akmod-${obsolete_name} = ${obsolete_version}" - echo "Obsoletes: akmod-${obsolete_name} < ${obsolete_version}" - fi - cat <<EOF %description -n akmod-${kmodname} @@ -116,10 +111,6 @@ Provides: kmod-${kmodname}-PAE = %{?epoch:%{epoch}:}%{version}-%{release} Requires: akmod-${kmodname} = %{?epoch:%{epoch}:}%{version}-%{release} EOF - if [ -n "${obsolete_name}" ]; then - echo "Provides: kmod-${obsolete_name} = ${obsolete_version}" - echo "Obsoletes: kmod-${obsolete_name} < ${obsolete_version}" - fi cat <<EOF %description -n kmod-${kmodname}${dashvariant} @@ -171,11 +162,6 @@ Requires(postun): kmod %endif EOF - if [ -n "${obsolete_name}" ]; then - echo "Provides: kmod-${obsolete_name}-${kernel_uname_r} = ${obsolete_version}" - echo "Obsoletes: kmod-${obsolete_name}-${kernel_uname_r} < ${obsolete_version}" - fi - # second part if [ -z "${customkernel}" ]; then cat <<EOF @@ -248,11 +234,6 @@ EOF echo "Requires: kmod-${kmodname}-devel-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}" fi - if [ -n "${obsolete_name}" ]; then - echo "Provides: kmod-${obsolete_name}-devel = ${obsolete_version}" - echo "Obsoletes: kmod-${obsolete_name}-devel < ${obsolete_version}" - fi - cat <<EOF %description -n kmod-${kmodname}-devel This package provides the common header files to build kernel modules @@ -297,11 +278,6 @@ Provides: ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{relea Provides: kmod-${kmodname}-devel-uname-r = ${kernel_uname_r} EOF - if [ -n "${obsolete_name}" ]; then - echo "Provides: kmod-${obsolete_name}-devel-${kernel_uname_r} = ${obsolete_version}" - echo "Obsoletes: kmod-${obsolete_name}-devel-${kernel_uname_r} < ${obsolete_version}" - fi - # second part if [ -z "${customkernel}" ]; then cat <<EOF @@ -339,11 +315,6 @@ Requires: kmod-${kmodname}-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{vers %{?KmodsMetaRequires:Requires: %{?KmodsMetaRequires}} EOF - if [ -n "${obsolete_name}" ]; then - echo "Provides: kmod-${obsolete_name}${kernel_variant} = ${obsolete_version}" - echo "Obsoletes: kmod-${obsolete_name}${kernel_variant} < ${obsolete_version}" - fi - cat <<EOF %description -n kmod-${kmodname}${kernel_variant} @@ -378,7 +349,7 @@ print_customrpmtemplate () # create devel package print_rpmtemplate_per_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}} fi - elif [ -e "${prefix}/lib/modules/${kernel}/build/Makefile" ]; then + elif [ -e "${prefix}/lib/modules/${kernel}/build/Makefile" ]; then # likely a user-build-kernel with available buildfiles # fixme: we should check if uname from Makefile is the same as ${kernel} @@ -419,7 +390,7 @@ print_rpmtemplate () local kernel_verrelarch=${kernel%%${kernels_known_variants}} - # create metapackage + # create metapackage print_rpmtemplate_kmodmetapkg "${kernel}" "${kernel##${kernel_verrelarch}}" # create package @@ -458,7 +429,7 @@ while [ -n "${1}" ] ; do shift if [ -z "${1}" ] ; then error_out 2 "Please provide path to a filter-file together with --filterfile" >&2 - elif [ ! -e "${1}" ]; then + elif [ ! -e "${1}" ]; then error_out 2 "Filterfile ${1} not found" >&2 fi filterfile="${1}" @@ -505,22 +476,6 @@ while [ -n "${1}" ] ; do shift noakmod="true" ;; - --obsolete-name) - shift - if [ -z "${1}" ] ; then - error_out 2 "Please provide the name of the kmod to obsolete together with --obsolete-name" >&2 - fi - obsolete_name="${1}" - shift - ;; - --obsolete-version) - shift - if [ -z "${1}" ] ; then - error_out 2 "Please provide the version of the kmod to obsolete together with --obsolete-version" >&2 - fi - obsolete_version="${1}" - shift - ;; --target) shift target="${1}" @@ -574,8 +529,6 @@ elif [ -z "${kmodname}" ]; then error_out 2 "please pass kmodname with --kmodname" elif [ -z "${kernels_known_variants}" ] ; then error_out 2 "could not determine known variants" -elif { [ -n "${obsolete_name}" ] && [ -z "${obsolete_version}" ]; } || { [ -z "${obsolete_name}" ] && [ -n "${obsolete_version}" ]; } ; then - error_out 2 "you need to provide both --obsolete-name and --obsolete-version" fi # go @@ -599,21 +552,17 @@ else # call buildsys-build-${repo}-kerneldevpkgs to get the list of kernels cmdoptions="--target ${target}" - # filterfile to filter list of kernels? + # filterfile to filter list of kernels? if [ -n "${filterfile}" ] ; then cmdoptions="${cmdoptions} --filterfile ${filterfile}" fi - kernel_versions_to_build_for=$(buildsys-build-${repo}-kerneldevpkgs "--${build_kernels}" ${cmdoptions}) - returncode=$? - if [ "$returncode" -ne 0 ]; then - + kernel_versions_to_build_for=$(buildsys-build-${repo}-kerneldevpkgs "--${build_kernels}" ${cmdoptions}) || error_out 2 "buildsys-build-${repo}-kerneldevpkgs failed: ${kernel_versions_to_build_for}" - fi if [ "${build_kernels}" = "current" ] && [ -z "${noakmod}" ]; then print_akmodtemplate fi - print_rpmtemplate + print_rpmtemplate fi diff --git a/sys/contrib/openzfs/tests/Makefile.am b/sys/contrib/openzfs/tests/Makefile.am index d6ca957eccc8..2e633041ab59 100644 --- a/sys/contrib/openzfs/tests/Makefile.am +++ b/sys/contrib/openzfs/tests/Makefile.am @@ -25,6 +25,6 @@ dist_scripts_runfiles_DATA = \ %D%/runfiles/sunos.run -EXTRA_DIST += $(addprefix %D%/,README.md) +dist_noinst_DATA += %D%/README.md SHELLCHECKSCRIPTS += $(shell find $(srcdir)/%D% -name '*.sh') diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am index 71edd4939424..e3c9874dcd54 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am +++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/Makefile.am @@ -41,7 +41,7 @@ scripts_zfs_tests_bin_PROGRAMS += %D%/draid libnvpair.la %C%_draid_LDADD += $(ZLIB_LIBS) -EXTRA_DIST += $(addprefix %D%/,file/file_common.h) +dist_noinst_DATA += %D%/file/file_common.h scripts_zfs_tests_bin_PROGRAMS += %D%/file_append %D%/file_check %D%/file_trunc %D%/file_write %D%/largest_file %D%/randwritecomp %C%_file_append_SOURCES = %D%/file/file_append.c %C%_file_check_SOURCES = %D%/file/file_check.c @@ -116,7 +116,7 @@ scripts_zfs_tests_bin_PROGRAMS += %D%/xattrtest scripts_zfs_tests_bin_PROGRAMS += %D%/zed_fd_spill-zedlet -EXTRA_DIST += $(addprefix %D%/,linux_dos_attributes/dos_attributes.h) +dist_noinst_DATA += %D%/linux_dos_attributes/dos_attributes.h scripts_zfs_tests_bin_PROGRAMS += %D%/read_dos_attributes %D%/write_dos_attributes %C%_read_dos_attributes_SOURCES = %D%/linux_dos_attributes/read_dos_attributes.c %C%_write_dos_attributes_SOURCES = %D%/linux_dos_attributes/write_dos_attributes.c diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/tests/Makefile.am index 4bc05c92f592..a91a24d16680 100644 --- a/sys/contrib/openzfs/tests/zfs-tests/tests/Makefile.am +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/Makefile.am @@ -1,5 +1,5 @@ CLEANFILES = -EXTRA_DIST = +dist_noinst_DATA = include $(top_srcdir)/config/Substfiles.am @@ -32,7 +32,7 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS = \ \ perf/scripts/prefetch_io.sh -# These lists can be regenerated by running, on a *clean* source: +# These lists can be regenerated by running make regen-tests at the root, or, on a *clean* source: # find functional/ ! -type d ! -name .gitignore ! -name .dirstamp ! -name '*.Po' ! -executable -name '*.in' | sort | sed 's/\.in$//;s/^/\t/;$!s/$/ \\/' # find functional/ ! -type d ! -name .gitignore ! -name .dirstamp ! -name '*.Po' -executable -name '*.in' | sort | sed 's/\.in$//;s/^/\t/;$!s/$/ \\/' # find functional/ ! -type d ! -name .gitignore ! -name .dirstamp ! -name '*.Po' ! -name '*.in' ! -name '*.c' | grep -Fe /simd -e /tmpfile | sort | sed 's/^/\t/;$!s/$/ \\/' @@ -43,6 +43,32 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS = \ # # C programs are specced in ../Makefile.am above as part of the main Makefile +find_common := find functional/ ! -type d ! -name .gitignore ! -name .dirstamp ! -name '*.Po' +regen: + @$(MAKE) -C $(top_builddir) clean + @$(MAKE) clean + $(SED) $(ac_inplace) '/^# -- >8 --/q' Makefile.am + echo >> Makefile.am + echo 'nobase_nodist_datadir_zfs_tests_tests_DATA = \' >> Makefile.am + $(find_common) ! -executable -name '*.in' | sort | sed 's/\.in$$//;s/^/\t/;$$!s/$$/ \\/' >> Makefile.am + echo 'nobase_nodist_datadir_zfs_tests_tests_SCRIPTS = \' >> Makefile.am + $(find_common) -executable -name '*.in' | sort | sed 's/\.in$$//;s/^/\t/;$$!s/$$/ \\/' >> Makefile.am + echo >> Makefile.am + echo 'SUBSTFILES += $$(nobase_nodist_datadir_zfs_tests_tests_DATA) $$(nobase_nodist_datadir_zfs_tests_tests_SCRIPTS)' >> Makefile.am + echo >> Makefile.am + echo 'if BUILD_LINUX' >> Makefile.am + echo 'nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \' >> Makefile.am + $(find_common) ! -name '*.in' ! -name '*.c' | grep -Fe /simd -e /tmpfile | sort | sed 's/^/\t/;$$!s/$$/ \\/' >> Makefile.am + echo 'endif' >> Makefile.am + echo >> Makefile.am + echo 'nobase_dist_datadir_zfs_tests_tests_DATA += \' >> Makefile.am + $(find_common) ! -executable ! -name '*.in' ! -name '*.c' | grep -vFe /simd -e /tmpfile | sort | sed 's/^/\t/;$$!s/$$/ \\/' >> Makefile.am + echo >> Makefile.am + echo 'nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \' >> Makefile.am + $(find_common) -executable ! -name '*.in' ! -name '*.c' | grep -vFe /simd -e /tmpfile | sort | sed 's/^/\t/;$$!s/$$/ \\/' >> Makefile.am + +# -- >8 -- + nobase_nodist_datadir_zfs_tests_tests_DATA = \ functional/pam/utilities.kshlib nobase_nodist_datadir_zfs_tests_tests_SCRIPTS = \ diff --git a/sys/modules/zfs/zfs_config.h b/sys/modules/zfs/zfs_config.h index cf32121940ac..d691f899c2b3 100644 --- a/sys/modules/zfs/zfs_config.h +++ b/sys/modules/zfs/zfs_config.h @@ -91,6 +91,15 @@ /* bdev_check_media_change() exists */ /* #undef HAVE_BDEV_CHECK_MEDIA_CHANGE */ +/* bdev_*_io_acct() available */ +/* #undef HAVE_BDEV_IO_ACCT */ + +/* bdev_max_discard_sectors() is available */ +/* #undef HAVE_BDEV_MAX_DISCARD_SECTORS */ + +/* bdev_max_secure_erase_sectors() is available */ +/* #undef HAVE_BDEV_MAX_SECURE_ERASE_SECTORS */ + /* block_device_operations->submit_bio() returns void */ /* #undef HAVE_BDEV_SUBMIT_BIO_RETURNS_VOID */ @@ -133,6 +142,12 @@ /* blkdev_get_by_path() handles ERESTARTSYS */ /* #undef HAVE_BLKDEV_GET_ERESTARTSYS */ +/* blkdev_issue_discard() is available */ +/* #undef HAVE_BLKDEV_ISSUE_DISCARD */ + +/* blkdev_issue_secure_erase() is available */ +/* #undef HAVE_BLKDEV_ISSUE_SECURE_ERASE */ + /* blkdev_reread_part() exists */ /* #undef HAVE_BLKDEV_REREAD_PART */ @@ -154,6 +169,9 @@ /* blk queue backing_dev_info is dynamic */ /* #undef HAVE_BLK_QUEUE_BDI_DYNAMIC */ +/* blk_queue_discard() is available */ +/* #undef HAVE_BLK_QUEUE_DISCARD */ + /* blk_queue_flag_clear() exists */ /* #undef HAVE_BLK_QUEUE_FLAG_CLEAR */ @@ -404,6 +422,9 @@ /* kernel fpu internal */ /* #undef HAVE_KERNEL_FPU_INTERNAL */ +/* kernel has asm/fpu/internal.h */ +/* #undef HAVE_KERNEL_FPU_INTERNAL_HEADER */ + /* uncached_acl_sentinel() exists */ /* #undef HAVE_KERNEL_GET_ACL_HANDLE_CACHE */ @@ -614,7 +635,7 @@ /* new shrinker callback wants 2 args */ /* #undef HAVE_SINGLE_SHRINKER_CALLBACK */ -/* ->count_objects exists */ +/* cs->count_objects exists */ /* #undef HAVE_SPLIT_SHRINKER_CALLBACK */ #if defined(__amd64__) || defined(__i386__) @@ -736,6 +757,9 @@ /* address_space_operations->readpages exists */ /* #undef HAVE_VFS_READPAGES */ +/* read_folio exists */ +/* #undef HAVE_VFS_READ_FOLIO */ + /* fops->read/write_iter() are available */ /* #undef HAVE_VFS_RW_ITERATE */ @@ -896,7 +920,7 @@ /* #undef ZFS_IS_GPL_COMPATIBLE */ /* Define the project alias string. */ -#define ZFS_META_ALIAS "zfs-2.1.99-FreeBSD_gc0cf6ed67" +#define ZFS_META_ALIAS "zfs-2.1.99-FreeBSD_gb9d98453f" /* Define the project author. */ #define ZFS_META_AUTHOR "OpenZFS" @@ -905,7 +929,7 @@ /* #undef ZFS_META_DATA */ /* Define the maximum compatible kernel version. */ -#define ZFS_META_KVER_MAX "5.17" +#define ZFS_META_KVER_MAX "5.18" /* Define the minimum compatible kernel version. */ #define ZFS_META_KVER_MIN "3.10" @@ -926,7 +950,7 @@ #define ZFS_META_NAME "zfs" /* Define the project release. */ -#define ZFS_META_RELEASE "FreeBSD_gc0cf6ed67" +#define ZFS_META_RELEASE "FreeBSD_gb9d98453f" /* Define the project version. */ #define ZFS_META_VERSION "2.1.99" diff --git a/sys/modules/zfs/zfs_gitrev.h b/sys/modules/zfs/zfs_gitrev.h index c36ab5fd2520..36af58411ed3 100644 --- a/sys/modules/zfs/zfs_gitrev.h +++ b/sys/modules/zfs/zfs_gitrev.h @@ -1 +1 @@ -#define ZFS_META_GITREV "zfs-2.1.99-1207-gc0cf6ed67" +#define ZFS_META_GITREV "zfs-2.1.99-1248-gb9d98453f" |