diff options
Diffstat (limited to 'sys/contrib/openzfs/lib')
209 files changed, 22930 insertions, 7370 deletions
diff --git a/sys/contrib/openzfs/lib/Makefile.am b/sys/contrib/openzfs/lib/Makefile.am index 499ebdaeba9b..050a6cac0a37 100644 --- a/sys/contrib/openzfs/lib/Makefile.am +++ b/sys/contrib/openzfs/lib/Makefile.am @@ -9,11 +9,11 @@ # These library interfaces are subject to change at any time. # # -# CMDS: zhack/ztest/zdb/ zfs/zpool/zed/ +# CMDS: zhack/ztest/ zfs/zpool/zed/ # raidz_{test,bench} zinject/zstream # | | # LIBS: | | libzfsbootenv* -# | | | +# |--libzdb--zdb | | # | | | # libzpool libzfs* ----------------+ # | | | \ / | | | @@ -62,6 +62,7 @@ include $(srcdir)/%D%/libspl/Makefile.am include $(srcdir)/%D%/libtpool/Makefile.am include $(srcdir)/%D%/libunicode/Makefile.am include $(srcdir)/%D%/libuutil/Makefile.am +include $(srcdir)/%D%/libzdb/Makefile.am include $(srcdir)/%D%/libzfs_core/Makefile.am include $(srcdir)/%D%/libzfs/Makefile.am include $(srcdir)/%D%/libzfsbootenv/Makefile.am diff --git a/sys/contrib/openzfs/lib/libefi/rdwr_efi.c b/sys/contrib/openzfs/lib/libefi/rdwr_efi.c index 30fddc3db8a8..0a93fd1338f6 100644 --- a/sys/contrib/openzfs/lib/libefi/rdwr_efi.c +++ b/sys/contrib/openzfs/lib/libefi/rdwr_efi.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -423,7 +424,6 @@ efi_alloc_and_read(int fd, struct dk_gpt **vtoc) void *tmp; length = (int) sizeof (struct dk_gpt) + (int) sizeof (struct dk_part) * (vptr->efi_nparts - 1); - nparts = vptr->efi_nparts; if ((tmp = realloc(vptr, length)) == NULL) { /* cppcheck-suppress doubleFree */ free(vptr); @@ -565,10 +565,9 @@ int efi_rescan(int fd) { int retry = 10; - int error; /* Notify the kernel a devices partition table has been updated */ - while ((error = ioctl(fd, BLKRRPART)) != 0) { + while (ioctl(fd, BLKRRPART) != 0) { if ((--retry == 0) || (errno != EBUSY)) { (void) fprintf(stderr, "the kernel failed to rescan " "the partition table: %d\n", errno); @@ -1177,8 +1176,8 @@ efi_use_whole_disk(int fd) * (for performance reasons). The alignment should match the * alignment used by the "zpool_label_disk" function. */ - limit = P2ALIGN(efi_label->efi_last_lba - nblocks - EFI_MIN_RESV_SIZE, - PARTITION_END_ALIGNMENT); + limit = P2ALIGN_TYPED(efi_label->efi_last_lba - nblocks - + EFI_MIN_RESV_SIZE, PARTITION_END_ALIGNMENT, diskaddr_t); if (data_start + data_size != limit || resv_start != limit) sync_needed = B_TRUE; @@ -1364,7 +1363,7 @@ efi_write(int fd, struct dk_gpt *vtoc) if (NBLOCKS(vtoc->efi_nparts, vtoc->efi_lbasize) < 34) { dk_ioc.dki_length = EFI_MIN_ARRAY_SIZE + vtoc->efi_lbasize; } else { - dk_ioc.dki_length = NBLOCKS(vtoc->efi_nparts, + dk_ioc.dki_length = (len_t)NBLOCKS(vtoc->efi_nparts, vtoc->efi_lbasize) * vtoc->efi_lbasize; } diff --git a/sys/contrib/openzfs/lib/libicp/Makefile.am b/sys/contrib/openzfs/lib/libicp/Makefile.am index b7f1d0e1b1e4..a8937e60b770 100644 --- a/sys/contrib/openzfs/lib/libicp/Makefile.am +++ b/sys/contrib/openzfs/lib/libicp/Makefile.am @@ -1,6 +1,9 @@ libicp_la_CCASFLAGS = $(AM_CCASFLAGS) libicp_la_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) $(LIBRARY_CFLAGS) +libicp_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBZPOOL_CPPFLAGS) +libicp_la_CPPFLAGS += -I$(top_srcdir)/module/icp/include + noinst_LTLIBRARIES += libicp.la nodist_libicp_la_SOURCES = \ @@ -16,24 +19,21 @@ nodist_libicp_la_SOURCES = \ module/icp/algs/blake3/blake3.c \ module/icp/algs/blake3/blake3_generic.c \ module/icp/algs/blake3/blake3_impl.c \ - module/icp/algs/blake3/blake3_x86-64.c \ module/icp/algs/edonr/edonr.c \ module/icp/algs/modes/modes.c \ - module/icp/algs/modes/cbc.c \ module/icp/algs/modes/gcm_generic.c \ module/icp/algs/modes/gcm_pclmulqdq.c \ module/icp/algs/modes/gcm.c \ - module/icp/algs/modes/ctr.c \ module/icp/algs/modes/ccm.c \ - module/icp/algs/modes/ecb.c \ - module/icp/algs/sha2/sha2.c \ + module/icp/algs/sha2/sha2_generic.c \ + module/icp/algs/sha2/sha256_impl.c \ + module/icp/algs/sha2/sha512_impl.c \ module/icp/algs/skein/skein.c \ module/icp/algs/skein/skein_block.c \ module/icp/algs/skein/skein_iv.c \ module/icp/illumos-crypto.c \ module/icp/io/aes.c \ module/icp/io/sha2_mod.c \ - module/icp/io/skein_mod.c \ module/icp/core/kcf_sched.c \ module/icp/core/kcf_prov_lib.c \ module/icp/core/kcf_callprov.c \ @@ -43,13 +43,25 @@ nodist_libicp_la_SOURCES = \ if TARGET_CPU_AARCH64 nodist_libicp_la_SOURCES += \ module/icp/asm-aarch64/blake3/b3_aarch64_sse2.S \ - module/icp/asm-aarch64/blake3/b3_aarch64_sse41.S + module/icp/asm-aarch64/blake3/b3_aarch64_sse41.S \ + module/icp/asm-aarch64/sha2/sha256-armv8.S \ + module/icp/asm-aarch64/sha2/sha512-armv8.S +endif + +if TARGET_CPU_ARM +nodist_libicp_la_SOURCES += \ + module/icp/asm-arm/sha2/sha256-armv7.S \ + module/icp/asm-arm/sha2/sha512-armv7.S endif if TARGET_CPU_POWERPC nodist_libicp_la_SOURCES += \ module/icp/asm-ppc64/blake3/b3_ppc64le_sse2.S \ - module/icp/asm-ppc64/blake3/b3_ppc64le_sse41.S + module/icp/asm-ppc64/blake3/b3_ppc64le_sse41.S \ + module/icp/asm-ppc64/sha2/sha256-ppc.S \ + module/icp/asm-ppc64/sha2/sha512-ppc.S \ + module/icp/asm-ppc64/sha2/sha256-p8.S \ + module/icp/asm-ppc64/sha2/sha512-p8.S endif if TARGET_CPU_X86_64 @@ -59,11 +71,13 @@ nodist_libicp_la_SOURCES += \ module/icp/asm-x86_64/aes/aes_aesni.S \ module/icp/asm-x86_64/modes/gcm_pclmulqdq.S \ module/icp/asm-x86_64/modes/aesni-gcm-x86_64.S \ + module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S \ module/icp/asm-x86_64/modes/ghash-x86_64.S \ - module/icp/asm-x86_64/sha2/sha256_impl.S \ - module/icp/asm-x86_64/sha2/sha512_impl.S \ + module/icp/asm-x86_64/sha2/sha256-x86_64.S \ + module/icp/asm-x86_64/sha2/sha512-x86_64.S \ module/icp/asm-x86_64/blake3/blake3_avx2.S \ module/icp/asm-x86_64/blake3/blake3_avx512.S \ module/icp/asm-x86_64/blake3/blake3_sse2.S \ module/icp/asm-x86_64/blake3/blake3_sse41.S endif + diff --git a/sys/contrib/openzfs/lib/libnvpair/Makefile.am b/sys/contrib/openzfs/lib/libnvpair/Makefile.am index 87b8d32aa175..0b3f964781b0 100644 --- a/sys/contrib/openzfs/lib/libnvpair/Makefile.am +++ b/sys/contrib/openzfs/lib/libnvpair/Makefile.am @@ -30,6 +30,6 @@ if !ASAN_ENABLED libnvpair_la_LDFLAGS += -Wl,-z,defs endif -libnvpair_la_LDFLAGS += -version-info 3:0:0 +libnvpair_la_LDFLAGS += -version-info 4:0:1 dist_noinst_DATA += %D%/libnvpair.abi %D%/libnvpair.suppr diff --git a/sys/contrib/openzfs/lib/libnvpair/libnvpair.abi b/sys/contrib/openzfs/lib/libnvpair/libnvpair.abi index de15237da583..a7f51f49487d 100644 --- a/sys/contrib/openzfs/lib/libnvpair/libnvpair.abi +++ b/sys/contrib/openzfs/lib/libnvpair/libnvpair.abi @@ -1,5 +1,7 @@ <abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='libnvpair.so.3'> <elf-needed> + <dependency name='libunwind.so.8'/> + <dependency name='libtirpc.so.3'/> <dependency name='libc.so.6'/> </elf-needed> <elf-function-symbols> @@ -78,6 +80,7 @@ <elf-symbol name='fnvpair_value_uint64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='fnvpair_value_uint8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_assertf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_backtrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_set_assert_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nv_alloc_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nv_alloc_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -193,6 +196,7 @@ <elf-symbol name='nvlist_remove_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nvlist_remove_nvpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nvlist_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='nvlist_snprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nvlist_unpack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nvlist_xalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nvlist_xdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -234,1106 +238,7 @@ <elf-symbol name='nv_alloc_nosleep' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='nv_fixed_ops' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> </elf-variable-symbols> - <abi-instr address-size='64' path='../../module/nvpair/fnvpair.c' language='LANG_C99'> - <function-decl name='fnvlist_alloc' mangled-name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_alloc'> - <return type-id='5ce45b60'/> - </function-decl> - <function-decl name='fnvlist_free' mangled-name='fnvlist_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_free'> - <parameter type-id='5ce45b60' name='nvl'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_size' mangled-name='fnvlist_size' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_size'> - <parameter type-id='5ce45b60' name='nvl'/> - <return type-id='b59d7dce'/> - </function-decl> - <function-decl name='fnvlist_pack' mangled-name='fnvlist_pack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_pack'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='78c01427' name='sizep'/> - <return type-id='26a90f95'/> - </function-decl> - <function-decl name='fnvlist_pack_free' mangled-name='fnvlist_pack_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_pack_free'> - <parameter type-id='26a90f95' name='pack'/> - <parameter type-id='b59d7dce' name='size'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_unpack' mangled-name='fnvlist_unpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_unpack'> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='b59d7dce' name='buflen'/> - <return type-id='5ce45b60'/> - </function-decl> - <function-decl name='fnvlist_dup' mangled-name='fnvlist_dup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_dup'> - <parameter type-id='22cce67b' name='nvl'/> - <return type-id='5ce45b60'/> - </function-decl> - <function-decl name='fnvlist_merge' mangled-name='fnvlist_merge' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_merge'> - <parameter type-id='5ce45b60' name='dst'/> - <parameter type-id='5ce45b60' name='src'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_num_pairs' mangled-name='fnvlist_num_pairs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_num_pairs'> - <parameter type-id='5ce45b60' name='nvl'/> - <return type-id='b59d7dce'/> - </function-decl> - <function-decl name='fnvlist_add_boolean' mangled-name='fnvlist_add_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_boolean'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_boolean_value' mangled-name='fnvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_boolean_value'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='c19b74c3' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_byte' mangled-name='fnvlist_add_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_byte'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='d8bf0010' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int8' mangled-name='fnvlist_add_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int8'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='ee31ee44' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint8' mangled-name='fnvlist_add_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint8'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='b96825af' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int16' mangled-name='fnvlist_add_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int16'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='23bd8cb5' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint16' mangled-name='fnvlist_add_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint16'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='149c6638' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int32' mangled-name='fnvlist_add_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int32'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='3ff5601b' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint32' mangled-name='fnvlist_add_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint32'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='8f92235e' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int64' mangled-name='fnvlist_add_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int64'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9da381c4' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint64' mangled-name='fnvlist_add_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint64'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9c313c2d' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_string' mangled-name='fnvlist_add_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_string'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='80f4b756' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_nvlist' mangled-name='fnvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_nvlist'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='5ce45b60' name='val'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_nvpair' mangled-name='fnvlist_add_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='3fa542f0' name='pair'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_boolean_array' mangled-name='fnvlist_add_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_boolean_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='c5f6c15b' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_byte_array' mangled-name='fnvlist_add_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_byte_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='d1db479e' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int8_array' mangled-name='fnvlist_add_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a06445da' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint8_array' mangled-name='fnvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9f7200cf' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int16_array' mangled-name='fnvlist_add_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a3eb883d' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint16_array' mangled-name='fnvlist_add_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='1b7d11c6' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int32_array' mangled-name='fnvlist_add_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='1f526493' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint32_array' mangled-name='fnvlist_add_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a6798dcc' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_int64_array' mangled-name='fnvlist_add_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='505bed1a' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_uint64_array' mangled-name='fnvlist_add_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='713a56f5' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_string_array' mangled-name='fnvlist_add_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_string_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='13956559' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_add_nvlist_array' mangled-name='fnvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_nvlist_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='3bbfee2e' name='val'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_remove' mangled-name='fnvlist_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_remove'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_remove_nvpair' mangled-name='fnvlist_remove_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_remove_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='3fa542f0' name='pair'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='fnvlist_lookup_nvpair' mangled-name='fnvlist_lookup_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='3fa542f0'/> - </function-decl> - <function-decl name='fnvlist_lookup_boolean' mangled-name='fnvlist_lookup_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_boolean'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='fnvlist_lookup_boolean_value' mangled-name='fnvlist_lookup_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_boolean_value'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='fnvlist_lookup_byte' mangled-name='fnvlist_lookup_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_byte'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='d8bf0010'/> - </function-decl> - <function-decl name='fnvlist_lookup_int8' mangled-name='fnvlist_lookup_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int8'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='ee31ee44'/> - </function-decl> - <function-decl name='fnvlist_lookup_int16' mangled-name='fnvlist_lookup_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int16'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='23bd8cb5'/> - </function-decl> - <function-decl name='fnvlist_lookup_int32' mangled-name='fnvlist_lookup_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int32'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='3ff5601b'/> - </function-decl> - <function-decl name='fnvlist_lookup_int64' mangled-name='fnvlist_lookup_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int64'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='9da381c4'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint8' mangled-name='fnvlist_lookup_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint8'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='b96825af'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint16' mangled-name='fnvlist_lookup_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint16'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='149c6638'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint32' mangled-name='fnvlist_lookup_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint32'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='8f92235e'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint64' mangled-name='fnvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint64'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='fnvlist_lookup_string' mangled-name='fnvlist_lookup_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_string'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='26a90f95'/> - </function-decl> - <function-decl name='fnvlist_lookup_nvlist' mangled-name='fnvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_nvlist'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='5ce45b60'/> - </function-decl> - <function-decl name='fnvlist_lookup_boolean_array' mangled-name='fnvlist_lookup_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_boolean_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='37e3bd22'/> - </function-decl> - <function-decl name='fnvlist_lookup_byte_array' mangled-name='fnvlist_lookup_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_byte_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='45b65157'/> - </function-decl> - <function-decl name='fnvlist_lookup_int8_array' mangled-name='fnvlist_lookup_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='256d5229'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint8_array' mangled-name='fnvlist_lookup_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='ae3e8ca6'/> - </function-decl> - <function-decl name='fnvlist_lookup_int16_array' mangled-name='fnvlist_lookup_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='f76f73d0'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint16_array' mangled-name='fnvlist_lookup_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='8a121f49'/> - </function-decl> - <function-decl name='fnvlist_lookup_int32_array' mangled-name='fnvlist_lookup_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='4aafb922'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint32_array' mangled-name='fnvlist_lookup_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='90421557'/> - </function-decl> - <function-decl name='fnvlist_lookup_int64_array' mangled-name='fnvlist_lookup_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='cb785ebf'/> - </function-decl> - <function-decl name='fnvlist_lookup_uint64_array' mangled-name='fnvlist_lookup_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='5d6479ae'/> - </function-decl> - <function-decl name='fnvpair_value_boolean_value' mangled-name='fnvpair_value_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_boolean_value'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='fnvpair_value_byte' mangled-name='fnvpair_value_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_byte'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='d8bf0010'/> - </function-decl> - <function-decl name='fnvpair_value_int8' mangled-name='fnvpair_value_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int8'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='ee31ee44'/> - </function-decl> - <function-decl name='fnvpair_value_int16' mangled-name='fnvpair_value_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int16'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='23bd8cb5'/> - </function-decl> - <function-decl name='fnvpair_value_int32' mangled-name='fnvpair_value_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int32'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='3ff5601b'/> - </function-decl> - <function-decl name='fnvpair_value_int64' mangled-name='fnvpair_value_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int64'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='9da381c4'/> - </function-decl> - <function-decl name='fnvpair_value_uint8' mangled-name='fnvpair_value_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint8'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='b96825af'/> - </function-decl> - <function-decl name='fnvpair_value_uint16' mangled-name='fnvpair_value_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint16'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='149c6638'/> - </function-decl> - <function-decl name='fnvpair_value_uint32' mangled-name='fnvpair_value_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint32'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='8f92235e'/> - </function-decl> - <function-decl name='fnvpair_value_uint64' mangled-name='fnvpair_value_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint64'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='9c313c2d'/> - </function-decl> - <function-decl name='fnvpair_value_string' mangled-name='fnvpair_value_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_string'> - <parameter type-id='3fa542f0' name='nvp'/> - <return type-id='26a90f95'/> - </function-decl> - <function-decl name='fnvpair_value_nvlist' mangled-name='fnvpair_value_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_nvlist'> - <parameter type-id='3fa542f0' name='nvp'/> - <return type-id='5ce45b60'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/nvpair/nvpair.c' language='LANG_C99'> - <pointer-type-def type-id='37e3bd22' size-in-bits='64' id='03829398'/> - <pointer-type-def type-id='9b23c9ad' size-in-bits='64' id='c0563f85'/> - <qualified-type-def type-id='c19b74c3' const='yes' id='12373e33'/> - <pointer-type-def type-id='12373e33' size-in-bits='64' id='c5f6c15b'/> - <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/> - <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/> - <qualified-type-def type-id='23bd8cb5' const='yes' id='75f7b0c5'/> - <pointer-type-def type-id='75f7b0c5' size-in-bits='64' id='a3eb883d'/> - <qualified-type-def type-id='3ff5601b' const='yes' id='922df12b'/> - <pointer-type-def type-id='922df12b' size-in-bits='64' id='1f526493'/> - <qualified-type-def type-id='9da381c4' const='yes' id='f07b7694'/> - <pointer-type-def type-id='f07b7694' size-in-bits='64' id='505bed1a'/> - <qualified-type-def type-id='ee31ee44' const='yes' id='721c32d4'/> - <pointer-type-def type-id='721c32d4' size-in-bits='64' id='a06445da'/> - <qualified-type-def type-id='8e8d4be3' const='yes' id='693c3853'/> - <pointer-type-def type-id='693c3853' size-in-bits='64' id='22cce67b'/> - <qualified-type-def type-id='22cce67b' const='yes' id='d2816df0'/> - <pointer-type-def type-id='d2816df0' size-in-bits='64' id='3bbfee2e'/> - <qualified-type-def type-id='57928edf' const='yes' id='642ee20f'/> - <pointer-type-def type-id='642ee20f' size-in-bits='64' id='dace003f'/> - <qualified-type-def type-id='d8bf0010' const='yes' id='a9125480'/> - <pointer-type-def type-id='a9125480' size-in-bits='64' id='d1db479e'/> - <qualified-type-def type-id='149c6638' const='yes' id='b01a5ac8'/> - <pointer-type-def type-id='b01a5ac8' size-in-bits='64' id='1b7d11c6'/> - <qualified-type-def type-id='8f92235e' const='yes' id='b9930aae'/> - <pointer-type-def type-id='b9930aae' size-in-bits='64' id='a6798dcc'/> - <qualified-type-def type-id='9c313c2d' const='yes' id='c3b7ba7d'/> - <pointer-type-def type-id='c3b7ba7d' size-in-bits='64' id='713a56f5'/> - <qualified-type-def type-id='b96825af' const='yes' id='2b61797f'/> - <pointer-type-def type-id='2b61797f' size-in-bits='64' id='9f7200cf'/> - <pointer-type-def type-id='a0eb0f08' size-in-bits='64' id='7408d286'/> - <pointer-type-def type-id='cebdd548' size-in-bits='64' id='e379e62d'/> - <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/> - <pointer-type-def type-id='f76f73d0' size-in-bits='64' id='7e73928e'/> - <pointer-type-def type-id='4aafb922' size-in-bits='64' id='9aa04798'/> - <pointer-type-def type-id='cb785ebf' size-in-bits='64' id='e37ce48f'/> - <pointer-type-def type-id='256d5229' size-in-bits='64' id='ee181ab9'/> - <pointer-type-def type-id='857bb57e' size-in-bits='64' id='75be733c'/> - <pointer-type-def type-id='3fa542f0' size-in-bits='64' id='0b283d2e'/> - <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/> - <pointer-type-def type-id='45b65157' size-in-bits='64' id='3b0247c7'/> - <pointer-type-def type-id='8a121f49' size-in-bits='64' id='bd8768d9'/> - <pointer-type-def type-id='90421557' size-in-bits='64' id='9507d3c7'/> - <pointer-type-def type-id='5d6479ae' size-in-bits='64' id='892b4acc'/> - <pointer-type-def type-id='ae3e8ca6' size-in-bits='64' id='d8774064'/> - <pointer-type-def type-id='3502e3ff' size-in-bits='64' id='4dd26a40'/> - <function-decl name='nv_alloc_init' mangled-name='nv_alloc_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nv_alloc_init'> - <parameter type-id='11871392' name='nva'/> - <parameter type-id='ee1d4944' name='nvo'/> - <parameter is-variadic='yes'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nv_alloc_reset' mangled-name='nv_alloc_reset' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nv_alloc_reset'> - <parameter type-id='11871392' name='nva'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='nv_alloc_fini' mangled-name='nv_alloc_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nv_alloc_fini'> - <parameter type-id='11871392' name='nva'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='nvlist_lookup_nv_alloc' mangled-name='nvlist_lookup_nv_alloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nv_alloc'> - <parameter type-id='5ce45b60' name='nvl'/> - <return type-id='11871392'/> - </function-decl> - <function-decl name='nvlist_nvflag' mangled-name='nvlist_nvflag' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_nvflag'> - <parameter type-id='5ce45b60' name='nvl'/> - <return type-id='3502e3ff'/> - </function-decl> - <function-decl name='nvlist_alloc' mangled-name='nvlist_alloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_alloc'> - <parameter type-id='857bb57e' name='nvlp'/> - <parameter type-id='3502e3ff' name='nvflag'/> - <parameter type-id='95e97e5e' name='kmflag'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_xalloc' mangled-name='nvlist_xalloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xalloc'> - <parameter type-id='857bb57e' name='nvlp'/> - <parameter type-id='3502e3ff' name='nvflag'/> - <parameter type-id='11871392' name='nva'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_free' mangled-name='nvlist_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_free'> - <parameter type-id='5ce45b60' name='nvl'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='nvlist_dup' mangled-name='nvlist_dup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_dup'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='857bb57e' name='nvlp'/> - <parameter type-id='95e97e5e' name='kmflag'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_xdup' mangled-name='nvlist_xdup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xdup'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='857bb57e' name='nvlp'/> - <parameter type-id='11871392' name='nva'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_remove_all' mangled-name='nvlist_remove_all' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_remove_all'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_remove' mangled-name='nvlist_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_remove'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='8d0687d2' name='type'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_remove_nvpair' mangled-name='nvlist_remove_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_remove_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='3fa542f0' name='nvp'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_boolean' mangled-name='nvlist_add_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_boolean'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_boolean_value' mangled-name='nvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_boolean_value'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='c19b74c3' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_byte' mangled-name='nvlist_add_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_byte'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='d8bf0010' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int8' mangled-name='nvlist_add_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int8'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='ee31ee44' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint8' mangled-name='nvlist_add_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint8'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='b96825af' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int16' mangled-name='nvlist_add_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int16'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='23bd8cb5' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint16' mangled-name='nvlist_add_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint16'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='149c6638' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int32' mangled-name='nvlist_add_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int32'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='3ff5601b' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint32' mangled-name='nvlist_add_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint32'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='8f92235e' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int64' mangled-name='nvlist_add_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int64'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9da381c4' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint64' mangled-name='nvlist_add_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint64'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9c313c2d' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_double' mangled-name='nvlist_add_double' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_double'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a0eb0f08' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_string' mangled-name='nvlist_add_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_string'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='80f4b756' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_boolean_array' mangled-name='nvlist_add_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_boolean_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='c5f6c15b' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_byte_array' mangled-name='nvlist_add_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_byte_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='d1db479e' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int8_array' mangled-name='nvlist_add_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a06445da' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint8_array' mangled-name='nvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9f7200cf' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int16_array' mangled-name='nvlist_add_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a3eb883d' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint16_array' mangled-name='nvlist_add_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='1b7d11c6' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int32_array' mangled-name='nvlist_add_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='1f526493' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint32_array' mangled-name='nvlist_add_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='a6798dcc' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_int64_array' mangled-name='nvlist_add_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='505bed1a' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_uint64_array' mangled-name='nvlist_add_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='713a56f5' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_string_array' mangled-name='nvlist_add_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_string_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='13956559' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_hrtime' mangled-name='nvlist_add_hrtime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_hrtime'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='cebdd548' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_nvlist' mangled-name='nvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_nvlist'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='22cce67b' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_nvlist_array' mangled-name='nvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_nvlist_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='3bbfee2e' name='a'/> - <parameter type-id='3502e3ff' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_next_nvpair' mangled-name='nvlist_next_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_next_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='3fa542f0'/> - </function-decl> - <function-decl name='nvlist_prev_nvpair' mangled-name='nvlist_prev_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prev_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='3fa542f0'/> - </function-decl> - <function-decl name='nvlist_empty' mangled-name='nvlist_empty' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_empty'> - <parameter type-id='22cce67b' name='nvl'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='nvpair_name' mangled-name='nvpair_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_name'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='26a90f95'/> - </function-decl> - <function-decl name='nvpair_type' mangled-name='nvpair_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_type'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='8d0687d2'/> - </function-decl> - <function-decl name='nvpair_type_is_array' mangled-name='nvpair_type_is_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_type_is_array'> - <parameter type-id='dace003f' name='nvp'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_boolean' mangled-name='nvlist_lookup_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_boolean'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_boolean_value' mangled-name='nvlist_lookup_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_boolean_value'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='37e3bd22' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_byte' mangled-name='nvlist_lookup_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_byte'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='45b65157' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int8' mangled-name='nvlist_lookup_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int8'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='256d5229' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint8' mangled-name='nvlist_lookup_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint8'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='ae3e8ca6' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int16' mangled-name='nvlist_lookup_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int16'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='f76f73d0' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint16' mangled-name='nvlist_lookup_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint16'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='8a121f49' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int32' mangled-name='nvlist_lookup_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int32'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='4aafb922' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint32' mangled-name='nvlist_lookup_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint32'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='90421557' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int64' mangled-name='nvlist_lookup_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int64'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='cb785ebf' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint64' mangled-name='nvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint64'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='5d6479ae' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_double' mangled-name='nvlist_lookup_double' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_double'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='7408d286' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_string' mangled-name='nvlist_lookup_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_string'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9b23c9ad' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_nvlist' mangled-name='nvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvlist'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='857bb57e' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_boolean_array' mangled-name='nvlist_lookup_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_boolean_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='03829398' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_byte_array' mangled-name='nvlist_lookup_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_byte_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='3b0247c7' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int8_array' mangled-name='nvlist_lookup_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='ee181ab9' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint8_array' mangled-name='nvlist_lookup_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint8_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='d8774064' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int16_array' mangled-name='nvlist_lookup_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='7e73928e' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint16_array' mangled-name='nvlist_lookup_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint16_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='bd8768d9' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int32_array' mangled-name='nvlist_lookup_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9aa04798' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint32_array' mangled-name='nvlist_lookup_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint32_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='9507d3c7' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_int64_array' mangled-name='nvlist_lookup_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='e37ce48f' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_uint64_array' mangled-name='nvlist_lookup_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint64_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='892b4acc' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_string_array' mangled-name='nvlist_lookup_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_string_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='c0563f85' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_nvlist_array' mangled-name='nvlist_lookup_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvlist_array'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='75be733c' name='a'/> - <parameter type-id='4dd26a40' name='n'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_hrtime' mangled-name='nvlist_lookup_hrtime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_hrtime'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='e379e62d' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_pairs' mangled-name='nvlist_lookup_pairs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_pairs'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='95e97e5e' name='flag'/> - <parameter is-variadic='yes'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_nvpair' mangled-name='nvlist_lookup_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='0b283d2e' name='ret'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_lookup_nvpair_embedded_index' mangled-name='nvlist_lookup_nvpair_embedded_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvpair_embedded_index'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='0b283d2e' name='ret'/> - <parameter type-id='7292109c' name='ip'/> - <parameter type-id='9b23c9ad' name='ep'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_exists' mangled-name='nvlist_exists' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_exists'> - <parameter type-id='22cce67b' name='nvl'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='nvpair_value_boolean_value' mangled-name='nvpair_value_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_boolean_value'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='37e3bd22' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_byte' mangled-name='nvpair_value_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_byte'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='45b65157' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int8' mangled-name='nvpair_value_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int8'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='256d5229' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint8' mangled-name='nvpair_value_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint8'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='ae3e8ca6' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int16' mangled-name='nvpair_value_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int16'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='f76f73d0' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint16' mangled-name='nvpair_value_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint16'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='8a121f49' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int32' mangled-name='nvpair_value_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int32'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='4aafb922' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint32' mangled-name='nvpair_value_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint32'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='90421557' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int64' mangled-name='nvpair_value_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int64'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='cb785ebf' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint64' mangled-name='nvpair_value_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint64'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='5d6479ae' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_double' mangled-name='nvpair_value_double' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_double'> - <parameter type-id='dace003f' name='nvp'/> - <parameter type-id='7408d286' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_string' mangled-name='nvpair_value_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_string'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='9b23c9ad' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_nvlist' mangled-name='nvpair_value_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_nvlist'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='857bb57e' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_boolean_array' mangled-name='nvpair_value_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_boolean_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='03829398' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_byte_array' mangled-name='nvpair_value_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_byte_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='3b0247c7' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int8_array' mangled-name='nvpair_value_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int8_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='ee181ab9' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint8_array' mangled-name='nvpair_value_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint8_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='d8774064' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int16_array' mangled-name='nvpair_value_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int16_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='7e73928e' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint16_array' mangled-name='nvpair_value_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint16_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='bd8768d9' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int32_array' mangled-name='nvpair_value_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int32_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='9aa04798' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint32_array' mangled-name='nvpair_value_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint32_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='9507d3c7' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_int64_array' mangled-name='nvpair_value_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int64_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='e37ce48f' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_uint64_array' mangled-name='nvpair_value_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint64_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='892b4acc' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_string_array' mangled-name='nvpair_value_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_string_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='c0563f85' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_nvlist_array' mangled-name='nvpair_value_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_nvlist_array'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='75be733c' name='val'/> - <parameter type-id='4dd26a40' name='nelem'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvpair_value_hrtime' mangled-name='nvpair_value_hrtime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_hrtime'> - <parameter type-id='3fa542f0' name='nvp'/> - <parameter type-id='e379e62d' name='val'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_add_nvpair' mangled-name='nvlist_add_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_nvpair'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='3fa542f0' name='nvp'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_merge' mangled-name='nvlist_merge' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_merge'> - <parameter type-id='5ce45b60' name='dst'/> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='95e97e5e' name='flag'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_size' mangled-name='nvlist_size' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_size'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='78c01427' name='size'/> - <parameter type-id='95e97e5e' name='encoding'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_pack' mangled-name='nvlist_pack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_pack'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='9b23c9ad' name='bufp'/> - <parameter type-id='78c01427' name='buflen'/> - <parameter type-id='95e97e5e' name='encoding'/> - <parameter type-id='95e97e5e' name='kmflag'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_xpack' mangled-name='nvlist_xpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xpack'> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='9b23c9ad' name='bufp'/> - <parameter type-id='78c01427' name='buflen'/> - <parameter type-id='95e97e5e' name='encoding'/> - <parameter type-id='11871392' name='nva'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_unpack' mangled-name='nvlist_unpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_unpack'> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='b59d7dce' name='buflen'/> - <parameter type-id='857bb57e' name='nvlp'/> - <parameter type-id='95e97e5e' name='kmflag'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='nvlist_xunpack' mangled-name='nvlist_xunpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xunpack'> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='b59d7dce' name='buflen'/> - <parameter type-id='857bb57e' name='nvlp'/> - <parameter type-id='11871392' name='nva'/> - <return type-id='95e97e5e'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='../../module/nvpair/nvpair_alloc_fixed.c' language='LANG_C99'> - <qualified-type-def type-id='ee1d4944' const='yes' id='4b95388f'/> - <var-decl name='nv_fixed_ops' type-id='4b95388f' mangled-name='nv_fixed_ops' visibility='default' elf-symbol-id='nv_fixed_ops'/> - </abi-instr> - <abi-instr address-size='64' path='libnvpair.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libnvpair/libnvpair.c' language='LANG_C99'> <type-decl name='char' size-in-bits='8' id='a84c031d'/> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> <subrange length='1' type-id='7359adad' id='52f813b4'/> @@ -1341,6 +246,9 @@ <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> <subrange length='20' type-id='7359adad' id='fdca39cf'/> </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'> + <subrange length='infinite' type-id='7359adad' id='031f2035'/> + </array-type-def> <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> @@ -1419,6 +327,9 @@ <data-member access='public' layout-offset-in-bits='96'> <var-decl name='nvp_type' type-id='8d0687d2' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='nvp_name' type-id='e84913bd' visibility='default'/> + </data-member> </class-decl> <typedef-decl name='nvpair_t' type-id='1c34e459' id='57928edf'/> <class-decl name='nvlist' size-in-bits='192' is-struct='yes' visibility='default' id='ac266fd9'> @@ -1448,6 +359,173 @@ <typedef-decl name='uchar_t' type-id='002ac4a6' id='d8bf0010'/> <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> <typedef-decl name='hrtime_t' type-id='1eb56b1e' id='cebdd548'/> + <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='regoff_t' type-id='95e97e5e' id='54a2a2a8'/> + <class-decl name='regmatch_t' size-in-bits='64' is-struct='yes' naming-typedef-id='1b941664' visibility='default' id='4f932615'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='rm_so' type-id='54a2a2a8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='rm_eo' type-id='54a2a2a8' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='regmatch_t' type-id='4f932615' id='1b941664'/> + <typedef-decl name='int8_t' type-id='2171a512' id='ee31ee44'/> + <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> + <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/> + <typedef-decl name='int64_t' type-id='0c9942d2' id='9da381c4'/> + <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/> + <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> + <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/> + <typedef-decl name='uint64_t' type-id='8910171f' id='9c313c2d'/> + <typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/> + <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/> + <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/> + <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/> + <typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/> + <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/> + <typedef-decl name='__int64_t' type-id='bd54fe1a' id='0c9942d2'/> + <typedef-decl name='__uint64_t' type-id='7359adad' id='8910171f'/> + <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> + <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> + <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> + <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> + <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='768'> + <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='_chain' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='896'> + <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='928'> + <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1024'> + <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1048'> + <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1088'> + <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1152'> + <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1344'> + <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1408'> + <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1568'> + <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <class-decl name='nvlist_printops' size-in-bits='3456' is-struct='yes' visibility='default' id='ebc6735b'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='print_boolean' type-id='e7f43f72' visibility='default'/> @@ -1629,7 +707,7 @@ </class-decl> <class-decl name='__anonymous_struct__12' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7e'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='op' type-id='c0d0f877' visibility='default'/> + <var-decl name='op' type-id='bfc48fe4' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> <var-decl name='arg' type-id='eaa32e2f' visibility='default'/> @@ -1733,7 +811,7 @@ </class-decl> <class-decl name='__anonymous_struct__25' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f8b'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='op' type-id='de20bf07' visibility='default'/> + <var-decl name='op' type-id='337f4a72' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> <var-decl name='arg' type-id='eaa32e2f' visibility='default'/> @@ -1779,177 +857,31 @@ <var-decl name='nvprt_custops' type-id='7be54adb' 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='int8_t' type-id='2171a512' id='ee31ee44'/> - <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> - <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/> - <typedef-decl name='int64_t' type-id='0c9942d2' id='9da381c4'/> - <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/> - <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> - <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/> - <typedef-decl name='uint64_t' type-id='8910171f' id='9c313c2d'/> - <typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/> - <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/> - <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/> - <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/> - <typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/> - <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/> - <typedef-decl name='__int64_t' type-id='bd54fe1a' id='0c9942d2'/> - <typedef-decl name='__uint64_t' type-id='7359adad' id='8910171f'/> - <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> - <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> - <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> - <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> - <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='640'> - <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='704'> - <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='768'> - <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='832'> - <var-decl name='_chain' type-id='dca988a5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='896'> - <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='928'> - <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='960'> - <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1024'> - <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1040'> - <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1048'> - <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1088'> - <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1152'> - <var-decl name='_offset' type-id='724e4de6' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1216'> - <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1280'> - <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1344'> - <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1408'> - <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1472'> - <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1536'> - <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1568'> - <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> + <qualified-type-def type-id='822cd80b' restrict='yes' id='e75a27e9'/> <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> <pointer-type-def type-id='c19b74c3' size-in-bits='64' id='37e3bd22'/> + <pointer-type-def type-id='37e3bd22' size-in-bits='64' id='03829398'/> <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/> - <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/> <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/> + <qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/> + <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/> + <pointer-type-def type-id='7d3cd834' size-in-bits='64' id='44c8373a'/> + <qualified-type-def type-id='57928edf' const='yes' id='642ee20f'/> + <pointer-type-def type-id='642ee20f' size-in-bits='64' id='dace003f'/> + <qualified-type-def type-id='aca3bac8' const='yes' id='2498fd78'/> + <pointer-type-def type-id='2498fd78' size-in-bits='64' id='eed6c816'/> + <qualified-type-def type-id='eed6c816' restrict='yes' id='a431a9da'/> + <pointer-type-def type-id='a0eb0f08' size-in-bits='64' id='7408d286'/> + <pointer-type-def type-id='cebdd548' size-in-bits='64' id='e379e62d'/> <pointer-type-def type-id='9f88f76e' size-in-bits='64' id='7ef0e988'/> - <pointer-type-def type-id='c5bb1a2b' size-in-bits='64' id='c0d0f877'/> - <pointer-type-def type-id='573fea1b' size-in-bits='64' id='de20bf07'/> + <pointer-type-def type-id='889f3b42' size-in-bits='64' id='bfc48fe4'/> + <pointer-type-def type-id='49055dd8' size-in-bits='64' id='337f4a72'/> <pointer-type-def type-id='70284cc6' size-in-bits='64' id='3be4d568'/> <pointer-type-def type-id='700c3bca' size-in-bits='64' id='6d994334'/> <pointer-type-def type-id='18ac1860' size-in-bits='64' id='506ab59a'/> @@ -1975,8 +907,8 @@ <pointer-type-def type-id='3bd73b0c' size-in-bits='64' id='7e85a9b6'/> <pointer-type-def type-id='0d445e26' size-in-bits='64' id='330cc0d0'/> <pointer-type-def type-id='e4b89f30' size-in-bits='64' id='ed8aa8ba'/> - <pointer-type-def type-id='be7f4941' size-in-bits='64' id='2809de35'/> - <pointer-type-def type-id='fe5ae69d' size-in-bits='64' id='90d5edb9'/> + <pointer-type-def type-id='78e3bec8' size-in-bits='64' id='b38a1022'/> + <pointer-type-def type-id='a5193bb2' size-in-bits='64' id='6263eda4'/> <pointer-type-def type-id='2783af3c' size-in-bits='64' id='e44553b6'/> <pointer-type-def type-id='33c6e3d8' size-in-bits='64' id='1263777a'/> <pointer-type-def type-id='dadb9eca' size-in-bits='64' id='cbda43ac'/> @@ -2002,27 +934,259 @@ <pointer-type-def type-id='b2fbf64a' size-in-bits='64' id='470a7fd4'/> <pointer-type-def type-id='cc22d314' size-in-bits='64' id='eddda806'/> <pointer-type-def type-id='23bd8cb5' size-in-bits='64' id='f76f73d0'/> + <pointer-type-def type-id='f76f73d0' size-in-bits='64' id='7e73928e'/> <pointer-type-def type-id='3ff5601b' size-in-bits='64' id='4aafb922'/> + <pointer-type-def type-id='4aafb922' size-in-bits='64' id='9aa04798'/> <pointer-type-def type-id='9da381c4' size-in-bits='64' id='cb785ebf'/> + <pointer-type-def type-id='cb785ebf' size-in-bits='64' id='e37ce48f'/> <pointer-type-def type-id='ee31ee44' size-in-bits='64' id='256d5229'/> + <pointer-type-def type-id='256d5229' size-in-bits='64' id='ee181ab9'/> <pointer-type-def type-id='ebc6735b' size-in-bits='64' id='7be54adb'/> <pointer-type-def type-id='d2e8bad9' size-in-bits='64' id='196db161'/> <pointer-type-def type-id='8e8d4be3' size-in-bits='64' id='5ce45b60'/> <pointer-type-def type-id='5ce45b60' size-in-bits='64' id='857bb57e'/> + <pointer-type-def type-id='857bb57e' size-in-bits='64' id='75be733c'/> <pointer-type-def type-id='57928edf' size-in-bits='64' id='3fa542f0'/> <pointer-type-def type-id='b48d2441' size-in-bits='64' id='33976309'/> <pointer-type-def type-id='aca3bac8' size-in-bits='64' id='d33f11cb'/> + <pointer-type-def type-id='1b941664' size-in-bits='64' id='7e2979d5'/> + <qualified-type-def type-id='7e2979d5' restrict='yes' id='fc212857'/> <pointer-type-def type-id='d8bf0010' size-in-bits='64' id='45b65157'/> + <pointer-type-def type-id='45b65157' size-in-bits='64' id='3b0247c7'/> <pointer-type-def type-id='149c6638' size-in-bits='64' id='8a121f49'/> + <pointer-type-def type-id='8a121f49' size-in-bits='64' id='bd8768d9'/> <pointer-type-def type-id='8f92235e' size-in-bits='64' id='90421557'/> + <pointer-type-def type-id='90421557' size-in-bits='64' id='9507d3c7'/> <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/> + <pointer-type-def type-id='5d6479ae' size-in-bits='64' id='892b4acc'/> <pointer-type-def type-id='b96825af' size-in-bits='64' id='ae3e8ca6'/> + <pointer-type-def type-id='ae3e8ca6' size-in-bits='64' id='d8774064'/> + <pointer-type-def type-id='3502e3ff' size-in-bits='64' id='4dd26a40'/> <pointer-type-def type-id='002ac4a6' size-in-bits='64' id='cf536864'/> <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/> <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> <class-decl name='re_dfa_t' is-struct='yes' visibility='default' is-declaration-only='yes' id='b48d2441'/> + <function-decl name='nvlist_snprintf' mangled-name='nvlist_snprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_snprintf'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_next_nvpair' mangled-name='nvlist_next_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_next_nvpair'> + <parameter type-id='5ce45b60'/> + <parameter type-id='dace003f'/> + <return type-id='3fa542f0'/> + </function-decl> + <function-decl name='nvpair_name' mangled-name='nvpair_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_name'> + <parameter type-id='dace003f'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='nvpair_type' mangled-name='nvpair_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_type'> + <parameter type-id='dace003f'/> + <return type-id='8d0687d2'/> + </function-decl> + <function-decl name='nvpair_type_is_array' mangled-name='nvpair_type_is_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_type_is_array'> + <parameter type-id='dace003f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_boolean_value' mangled-name='nvpair_value_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_boolean_value'> + <parameter type-id='dace003f'/> + <parameter type-id='37e3bd22'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_byte' mangled-name='nvpair_value_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_byte'> + <parameter type-id='dace003f'/> + <parameter type-id='45b65157'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int8' mangled-name='nvpair_value_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int8'> + <parameter type-id='dace003f'/> + <parameter type-id='256d5229'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint8' mangled-name='nvpair_value_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint8'> + <parameter type-id='dace003f'/> + <parameter type-id='ae3e8ca6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int16' mangled-name='nvpair_value_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int16'> + <parameter type-id='dace003f'/> + <parameter type-id='f76f73d0'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint16' mangled-name='nvpair_value_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint16'> + <parameter type-id='dace003f'/> + <parameter type-id='8a121f49'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int32' mangled-name='nvpair_value_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int32'> + <parameter type-id='dace003f'/> + <parameter type-id='4aafb922'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint32' mangled-name='nvpair_value_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint32'> + <parameter type-id='dace003f'/> + <parameter type-id='90421557'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int64' mangled-name='nvpair_value_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int64'> + <parameter type-id='dace003f'/> + <parameter type-id='cb785ebf'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint64' mangled-name='nvpair_value_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint64'> + <parameter type-id='dace003f'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_string' mangled-name='nvpair_value_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_string'> + <parameter type-id='dace003f'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_nvlist' mangled-name='nvpair_value_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_nvlist'> + <parameter type-id='3fa542f0'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_boolean_array' mangled-name='nvpair_value_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_boolean_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='03829398'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_byte_array' mangled-name='nvpair_value_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_byte_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='3b0247c7'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int8_array' mangled-name='nvpair_value_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int8_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='ee181ab9'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint8_array' mangled-name='nvpair_value_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint8_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='d8774064'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int16_array' mangled-name='nvpair_value_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int16_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='7e73928e'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint16_array' mangled-name='nvpair_value_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint16_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='bd8768d9'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int32_array' mangled-name='nvpair_value_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int32_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='9aa04798'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint32_array' mangled-name='nvpair_value_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint32_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='9507d3c7'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int64_array' mangled-name='nvpair_value_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_int64_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='e37ce48f'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_uint64_array' mangled-name='nvpair_value_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_uint64_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='892b4acc'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_string_array' mangled-name='nvpair_value_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_string_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='44c8373a'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_nvlist_array' mangled-name='nvpair_value_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_nvlist_array'> + <parameter type-id='3fa542f0'/> + <parameter type-id='75be733c'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_hrtime' mangled-name='nvpair_value_hrtime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_hrtime'> + <parameter type-id='3fa542f0'/> + <parameter type-id='e379e62d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_double' mangled-name='nvpair_value_double' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_double'> + <parameter type-id='dace003f'/> + <parameter type-id='7408d286'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='regexec' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a431a9da'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='fc212857'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fputs' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='e75a27e9'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='malloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='calloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strcmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strcspn' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='strspn' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='nvlist_prtctl_setdest' mangled-name='nvlist_prtctl_setdest' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prtctl_setdest'> <parameter type-id='b0c1ff8d' name='pctl'/> <parameter type-id='822cd80b' name='fp'/> @@ -2130,7 +1294,7 @@ </function-decl> <function-decl name='nvlist_prtctlop_string' mangled-name='nvlist_prtctlop_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prtctlop_string'> <parameter type-id='b0c1ff8d' name='pctl'/> - <parameter type-id='2809de35' name='func'/> + <parameter type-id='b38a1022' name='func'/> <parameter type-id='eaa32e2f' name='private'/> <return type-id='48b5725f'/> </function-decl> @@ -2208,7 +1372,7 @@ </function-decl> <function-decl name='nvlist_prtctlop_string_array' mangled-name='nvlist_prtctlop_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prtctlop_string_array'> <parameter type-id='b0c1ff8d' name='pctl'/> - <parameter type-id='90d5edb9' name='func'/> + <parameter type-id='6263eda4' name='func'/> <parameter type-id='eaa32e2f' name='private'/> <return type-id='48b5725f'/> </function-decl> @@ -2235,26 +1399,26 @@ <parameter type-id='b0c1ff8d' name='pctl'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='dump_nvlist' mangled-name='dump_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_nvlist'> - <parameter type-id='5ce45b60' name='list'/> - <parameter type-id='95e97e5e' name='indent'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='nvpair_value_match_regex' mangled-name='nvpair_value_match_regex' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_match_regex'> <parameter type-id='3fa542f0' name='nvp'/> <parameter type-id='95e97e5e' name='ai'/> - <parameter type-id='26a90f95' name='value'/> + <parameter type-id='80f4b756' name='value'/> <parameter type-id='d33f11cb' name='value_regex'/> - <parameter type-id='9b23c9ad' name='ep'/> + <parameter type-id='7d3cd834' name='ep'/> <return type-id='95e97e5e'/> </function-decl> <function-decl name='nvpair_value_match' mangled-name='nvpair_value_match' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_match'> <parameter type-id='3fa542f0' name='nvp'/> <parameter type-id='95e97e5e' name='ai'/> - <parameter type-id='26a90f95' name='value'/> - <parameter type-id='9b23c9ad' name='ep'/> + <parameter type-id='80f4b756' name='value'/> + <parameter type-id='7d3cd834' name='ep'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='dump_nvlist' mangled-name='dump_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_nvlist'> + <parameter type-id='5ce45b60' name='list'/> + <parameter type-id='95e97e5e' name='indent'/> + <return type-id='48b5725f'/> + </function-decl> <function-type size-in-bits='64' id='9f88f76e'> <parameter type-id='196db161'/> <parameter type-id='eaa32e2f'/> @@ -2264,20 +1428,20 @@ <parameter type-id='3502e3ff'/> <return type-id='95e97e5e'/> </function-type> - <function-type size-in-bits='64' id='c5bb1a2b'> + <function-type size-in-bits='64' id='889f3b42'> <parameter type-id='196db161'/> <parameter type-id='eaa32e2f'/> <parameter type-id='5ce45b60'/> <parameter type-id='80f4b756'/> - <parameter type-id='26a90f95'/> + <parameter type-id='80f4b756'/> <return type-id='95e97e5e'/> </function-type> - <function-type size-in-bits='64' id='573fea1b'> + <function-type size-in-bits='64' id='49055dd8'> <parameter type-id='196db161'/> <parameter type-id='eaa32e2f'/> <parameter type-id='5ce45b60'/> <parameter type-id='80f4b756'/> - <parameter type-id='9b23c9ad'/> + <parameter type-id='7d3cd834'/> <parameter type-id='3502e3ff'/> <return type-id='95e97e5e'/> </function-type> @@ -2492,20 +1656,20 @@ <parameter type-id='3502e3ff'/> <return type-id='95e97e5e'/> </function-type> - <function-type size-in-bits='64' id='be7f4941'> + <function-type size-in-bits='64' id='78e3bec8'> <parameter type-id='b0c1ff8d'/> <parameter type-id='eaa32e2f'/> <parameter type-id='5ce45b60'/> <parameter type-id='80f4b756'/> - <parameter type-id='26a90f95'/> + <parameter type-id='80f4b756'/> <return type-id='95e97e5e'/> </function-type> - <function-type size-in-bits='64' id='fe5ae69d'> + <function-type size-in-bits='64' id='a5193bb2'> <parameter type-id='b0c1ff8d'/> <parameter type-id='eaa32e2f'/> <parameter type-id='5ce45b60'/> <parameter type-id='80f4b756'/> - <parameter type-id='9b23c9ad'/> + <parameter type-id='7d3cd834'/> <parameter type-id='3502e3ff'/> <return type-id='95e97e5e'/> </function-type> @@ -2712,14 +1876,106 @@ <return type-id='95e97e5e'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='libnvpair_json.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libnvpair/libnvpair_json.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32' id='8e0573fd'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <class-decl name='__mbstate_t' size-in-bits='64' is-struct='yes' naming-typedef-id='55e5b2b5' visibility='default' id='87447a2e'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__count' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='__value' type-id='ac5ab595' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' id='ac5ab595'> + <data-member access='public'> + <var-decl name='__wch' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__wchb' type-id='8e0573fd' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='__mbstate_t' type-id='87447a2e' id='55e5b2b5'/> + <typedef-decl name='mbstate_t' type-id='55e5b2b5' id='3d7d8cbf'/> + <typedef-decl name='wchar_t' type-id='95e97e5e' id='928221d2'/> + <pointer-type-def type-id='3d7d8cbf' size-in-bits='64' id='a68021ce'/> + <qualified-type-def type-id='a68021ce' restrict='yes' id='03aaab72'/> + <pointer-type-def type-id='928221d2' size-in-bits='64' id='323d93c1'/> + <qualified-type-def type-id='323d93c1' restrict='yes' id='f1358bc3'/> + <function-decl name='fnvpair_value_boolean_value' mangled-name='fnvpair_value_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_boolean_value'> + <parameter type-id='dace003f'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='fnvpair_value_byte' mangled-name='fnvpair_value_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_byte'> + <parameter type-id='dace003f'/> + <return type-id='d8bf0010'/> + </function-decl> + <function-decl name='fnvpair_value_int8' mangled-name='fnvpair_value_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int8'> + <parameter type-id='dace003f'/> + <return type-id='ee31ee44'/> + </function-decl> + <function-decl name='fnvpair_value_int16' mangled-name='fnvpair_value_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int16'> + <parameter type-id='dace003f'/> + <return type-id='23bd8cb5'/> + </function-decl> + <function-decl name='fnvpair_value_int32' mangled-name='fnvpair_value_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int32'> + <parameter type-id='dace003f'/> + <return type-id='3ff5601b'/> + </function-decl> + <function-decl name='fnvpair_value_int64' mangled-name='fnvpair_value_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_int64'> + <parameter type-id='dace003f'/> + <return type-id='9da381c4'/> + </function-decl> + <function-decl name='fnvpair_value_uint8' mangled-name='fnvpair_value_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint8'> + <parameter type-id='dace003f'/> + <return type-id='b96825af'/> + </function-decl> + <function-decl name='fnvpair_value_uint16' mangled-name='fnvpair_value_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint16'> + <parameter type-id='dace003f'/> + <return type-id='149c6638'/> + </function-decl> + <function-decl name='fnvpair_value_uint32' mangled-name='fnvpair_value_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint32'> + <parameter type-id='dace003f'/> + <return type-id='8f92235e'/> + </function-decl> + <function-decl name='fnvpair_value_uint64' mangled-name='fnvpair_value_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_uint64'> + <parameter type-id='dace003f'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='fnvpair_value_string' mangled-name='fnvpair_value_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_string'> + <parameter type-id='dace003f'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='fnvpair_value_nvlist' mangled-name='fnvpair_value_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvpair_value_nvlist'> + <parameter type-id='3fa542f0'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__ctype_get_mb_cur_max' visibility='default' binding='global' size-in-bits='64'> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='mbrtowc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f1358bc3'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='03aaab72'/> + <return type-id='b59d7dce'/> + </function-decl> <function-decl name='nvlist_print_json' mangled-name='nvlist_print_json' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_print_json'> <parameter type-id='822cd80b' name='fp'/> <parameter type-id='5ce45b60' name='nvl'/> <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='nvpair_alloc_system.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libnvpair/nvpair_alloc_system.c' language='LANG_C99'> <class-decl name='__va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='d5027220'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='gp_offset' type-id='f0981eeb' visibility='default'/> @@ -2792,18 +2048,1396 @@ <return type-id='eaa32e2f'/> </function-type> </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'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'> + <subrange length='40' type-id='7359adad' id='8f80b239'/> + </array-type-def> + <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'/> + <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='__pid_t' type-id='95e97e5e' id='3629bad8'/> + <pointer-type-def type-id='0e01899c' size-in-bits='64' id='4d98cd5a'/> + <pointer-type-def type-id='7a6844eb' size-in-bits='64' id='18c91f9e'/> + <function-decl name='libspl_backtrace' mangled-name='libspl_backtrace' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_backtrace'> + <parameter type-id='95e97e5e'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_mutex_lock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='abort' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='getpid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='__vfprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='gettid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='prctl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> <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'/> </function-decl> - <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> - <parameter type-id='80f4b756' name='file'/> - <parameter type-id='80f4b756' name='func'/> - <parameter type-id='95e97e5e' name='line'/> - <parameter type-id='80f4b756' name='format'/> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/backtrace.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='768' id='b80f3d9b'> + <subrange length='24' type-id='7359adad' id='fdd3342b'/> + </array-type-def> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='128' id='bc19e735'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='22c546af' size-in-bits='1024' id='498c040b'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='4ea07cdb' size-in-bits='2048' id='4811c35e'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='de572c22' size-in-bits='1472' id='6d3c2f42'> + <subrange length='23' type-id='7359adad' id='fdd0f594'/> + </array-type-def> + <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='256' id='a133ec23'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='512' id='a13e797f'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'> + <subrange length='3' type-id='7359adad' id='56f209d2'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='64' id='3f30d495'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='73d941c6' size-in-bits='8128' id='dc70ec0b'> + <subrange length='127' type-id='7359adad' id='5ed08de5'/> + </array-type-def> + <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/> + <class-decl name='__sigset_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='b9c97942' visibility='default' id='2616147f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__val' type-id='d2baa450' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__sigset_t' type-id='2616147f' id='b9c97942'/> + <typedef-decl name='sigset_t' type-id='b9c97942' id='daf33c64'/> + <class-decl name='stack_t' size-in-bits='192' is-struct='yes' naming-typedef-id='ac5e685f' visibility='default' id='380f9954'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ss_sp' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ss_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ss_size' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/> + <typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/> + <class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='opaque' type-id='dc70ec0b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='unw_cursor_t' type-id='384a1f22' id='1203d35c'/> + <typedef-decl name='unw_context_t' type-id='190d09ef' id='8f527367'/> + <typedef-decl name='unw_word_t' type-id='9c313c2d' id='73d941c6'/> + <typedef-decl name='unw_tdep_context_t' type-id='c4daa689' id='190d09ef'/> + <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/> + <typedef-decl name='greg_t' type-id='1eb56b1e' id='de572c22'/> + <typedef-decl name='gregset_t' type-id='6d3c2f42' id='a66f139c'/> + <class-decl name='_libc_fpxreg' size-in-bits='128' is-struct='yes' visibility='default' id='22c546af'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='significand' type-id='3f30d495' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='exponent' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='80'> + <var-decl name='__glibc_reserved1' type-id='ff2536e2' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_xmmreg' size-in-bits='128' is-struct='yes' visibility='default' id='4ea07cdb'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='element' type-id='bc19e735' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_fpstate' size-in-bits='4096' is-struct='yes' visibility='default' id='81cbe5ca'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='cwd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='16'> + <var-decl name='swd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='ftw' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='fop' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='rip' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='rdp' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mxcsr' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='mxcr_mask' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_st' type-id='498c040b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_xmm' type-id='4811c35e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3328'> + <var-decl name='__glibc_reserved1' type-id='b80f3d9b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='fpregset_t' type-id='5b1ab9a8' id='6e5851bb'/> + <class-decl name='mcontext_t' size-in-bits='2048' is-struct='yes' naming-typedef-id='bacab071' visibility='default' id='76fab990'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gregs' type-id='a66f139c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='fpregs' type-id='6e5851bb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='__reserved1' type-id='a13e797f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='mcontext_t' type-id='76fab990' id='bacab071'/> + <class-decl name='ucontext_t' size-in-bits='7744' is-struct='yes' visibility='default' id='1ba65dc8'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='uc_flags' type-id='7359adad' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='uc_link' type-id='4ed508de' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='uc_stack' type-id='ac5e685f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='uc_mcontext' type-id='bacab071' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2368'> + <var-decl name='uc_sigmask' type-id='daf33c64' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3392'> + <var-decl name='__fpregs_mem' type-id='81cbe5ca' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='7488'> + <var-decl name='__ssp' type-id='a133ec23' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ucontext_t' type-id='1ba65dc8' id='c4daa689'/> + <pointer-type-def type-id='81cbe5ca' size-in-bits='64' id='5b1ab9a8'/> + <pointer-type-def type-id='1ba65dc8' size-in-bits='64' id='4ed508de'/> + <pointer-type-def type-id='8f527367' size-in-bits='64' id='2e408b96'/> + <pointer-type-def type-id='1203d35c' size-in-bits='64' id='3946e4d1'/> + <pointer-type-def type-id='190d09ef' size-in-bits='64' id='3e0601f0'/> + <pointer-type-def type-id='73d941c6' size-in-bits='64' id='42f5faab'/> + <function-decl name='write' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='c53620f0'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='2e408b96'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_step' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_reg' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_proc_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_Ux86_64_getcontext' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3e0601f0'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/nvpair/fnvpair.c' language='LANG_C99'> + <function-decl name='fnvlist_alloc' mangled-name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_alloc'> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_free' mangled-name='fnvlist_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_free'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_size' mangled-name='fnvlist_size' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_size'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='fnvlist_pack' mangled-name='fnvlist_pack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_pack'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='78c01427' name='sizep'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='fnvlist_pack_free' mangled-name='fnvlist_pack_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_pack_free'> + <parameter type-id='26a90f95' name='pack'/> + <parameter type-id='b59d7dce' name='size'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_unpack' mangled-name='fnvlist_unpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_unpack'> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='b59d7dce' name='buflen'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_dup' mangled-name='fnvlist_dup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_dup'> + <parameter type-id='22cce67b' name='nvl'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_merge' mangled-name='fnvlist_merge' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_merge'> + <parameter type-id='5ce45b60' name='dst'/> + <parameter type-id='5ce45b60' name='src'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_num_pairs' mangled-name='fnvlist_num_pairs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_num_pairs'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='fnvlist_add_boolean' mangled-name='fnvlist_add_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_boolean'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_boolean_value' mangled-name='fnvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_boolean_value'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='c19b74c3' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_byte' mangled-name='fnvlist_add_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_byte'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d8bf0010' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int8' mangled-name='fnvlist_add_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int8'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='ee31ee44' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint8' mangled-name='fnvlist_add_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint8'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='b96825af' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int16' mangled-name='fnvlist_add_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int16'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='23bd8cb5' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint16' mangled-name='fnvlist_add_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint16'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='149c6638' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int32' mangled-name='fnvlist_add_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int32'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='3ff5601b' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint32' mangled-name='fnvlist_add_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint32'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='8f92235e' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int64' mangled-name='fnvlist_add_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int64'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9da381c4' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint64' mangled-name='fnvlist_add_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint64'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9c313c2d' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_string' mangled-name='fnvlist_add_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_string'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='80f4b756' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_nvlist' mangled-name='fnvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_nvlist'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='5ce45b60' name='val'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_nvpair' mangled-name='fnvlist_add_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='3fa542f0' name='pair'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_boolean_array' mangled-name='fnvlist_add_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_boolean_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='c5f6c15b' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_byte_array' mangled-name='fnvlist_add_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_byte_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d1db479e' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int8_array' mangled-name='fnvlist_add_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a06445da' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint8_array' mangled-name='fnvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9f7200cf' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int16_array' mangled-name='fnvlist_add_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a3eb883d' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint16_array' mangled-name='fnvlist_add_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='1b7d11c6' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int32_array' mangled-name='fnvlist_add_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='1f526493' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint32_array' mangled-name='fnvlist_add_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a6798dcc' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int64_array' mangled-name='fnvlist_add_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_int64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='505bed1a' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint64_array' mangled-name='fnvlist_add_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_uint64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='713a56f5' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_string_array' mangled-name='fnvlist_add_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_string_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='13956559' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_nvlist_array' mangled-name='fnvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_add_nvlist_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='3bbfee2e' name='val'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_remove' mangled-name='fnvlist_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_remove'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_remove_nvpair' mangled-name='fnvlist_remove_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_remove_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='3fa542f0' name='pair'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_lookup_nvpair' mangled-name='fnvlist_lookup_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='3fa542f0'/> + </function-decl> + <function-decl name='fnvlist_lookup_boolean' mangled-name='fnvlist_lookup_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_boolean'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='fnvlist_lookup_boolean_value' mangled-name='fnvlist_lookup_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_boolean_value'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='fnvlist_lookup_byte' mangled-name='fnvlist_lookup_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_byte'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='d8bf0010'/> + </function-decl> + <function-decl name='fnvlist_lookup_int8' mangled-name='fnvlist_lookup_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int8'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='ee31ee44'/> + </function-decl> + <function-decl name='fnvlist_lookup_int16' mangled-name='fnvlist_lookup_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int16'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='23bd8cb5'/> + </function-decl> + <function-decl name='fnvlist_lookup_int32' mangled-name='fnvlist_lookup_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int32'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='3ff5601b'/> + </function-decl> + <function-decl name='fnvlist_lookup_int64' mangled-name='fnvlist_lookup_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int64'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='9da381c4'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint8' mangled-name='fnvlist_lookup_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint8'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='b96825af'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint16' mangled-name='fnvlist_lookup_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint16'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='149c6638'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint32' mangled-name='fnvlist_lookup_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint32'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='8f92235e'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint64' mangled-name='fnvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint64'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='fnvlist_lookup_string' mangled-name='fnvlist_lookup_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_string'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='fnvlist_lookup_nvlist' mangled-name='fnvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_nvlist'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_lookup_boolean_array' mangled-name='fnvlist_lookup_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_boolean_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='37e3bd22'/> + </function-decl> + <function-decl name='fnvlist_lookup_byte_array' mangled-name='fnvlist_lookup_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_byte_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='45b65157'/> + </function-decl> + <function-decl name='fnvlist_lookup_int8_array' mangled-name='fnvlist_lookup_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='256d5229'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint8_array' mangled-name='fnvlist_lookup_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='ae3e8ca6'/> + </function-decl> + <function-decl name='fnvlist_lookup_int16_array' mangled-name='fnvlist_lookup_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='f76f73d0'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint16_array' mangled-name='fnvlist_lookup_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='8a121f49'/> + </function-decl> + <function-decl name='fnvlist_lookup_int32_array' mangled-name='fnvlist_lookup_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='4aafb922'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint32_array' mangled-name='fnvlist_lookup_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='90421557'/> + </function-decl> + <function-decl name='fnvlist_lookup_int64_array' mangled-name='fnvlist_lookup_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_int64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='cb785ebf'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint64_array' mangled-name='fnvlist_lookup_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fnvlist_lookup_uint64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='5d6479ae'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/nvpair/nvpair.c' language='LANG_C99'> + <typedef-decl name='bool_t' type-id='3ff5601b' id='310a70df'/> + <enum-decl name='xdr_op' id='6badf1b8'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='XDR_ENCODE' value='0'/> + <enumerator name='XDR_DECODE' value='1'/> + <enumerator name='XDR_FREE' value='2'/> + </enum-decl> + <class-decl name='__rpc_xdr' size-in-bits='384' is-struct='yes' visibility='default' id='755707df'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='x_op' type-id='6badf1b8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='x_ops' type-id='3457e9c5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='x_public' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='x_private' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='x_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='x_handy' type-id='48f7c3f5' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='xdr_ops' size-in-bits='576' is-struct='yes' visibility='default' id='ea1474f2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='x_getlong' type-id='a4e6dd3f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='x_putlong' type-id='d447b08c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='x_getbytes' type-id='b0b6ccaa' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='x_putbytes' type-id='581c24b7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='x_getpostn' type-id='1c77bdb0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='x_setpostn' type-id='13fdb43e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='x_inline' type-id='788e1f25' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='x_destroy' type-id='d781e3b2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='x_control' type-id='733fc725' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='XDR' type-id='755707df' id='bc407f0e'/> + <typedef-decl name='xdrproc_t' type-id='94d188f0' id='c28db3e9'/> + <typedef-decl name='__u_short' type-id='8efea9e5' id='46c660f8'/> + <typedef-decl name='__u_int' type-id='f0981eeb' id='8ae6822f'/> + <typedef-decl name='__quad_t' type-id='bd54fe1a' id='2632227a'/> + <typedef-decl name='__u_quad_t' type-id='7359adad' id='5f3d50a6'/> + <typedef-decl name='u_short' type-id='46c660f8' id='32580e96'/> + <typedef-decl name='u_int' type-id='8ae6822f' id='48f7c3f5'/> + <typedef-decl name='quad_t' type-id='2632227a' id='f5ef0660'/> + <typedef-decl name='u_quad_t' type-id='5f3d50a6' id='bd226ac0'/> + <pointer-type-def type-id='bc407f0e' size-in-bits='64' id='17fd1621'/> + <pointer-type-def type-id='755707df' size-in-bits='64' id='812c6697'/> + <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> + <qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/> + <pointer-type-def type-id='9b23c9ad' size-in-bits='64' id='c0563f85'/> + <qualified-type-def type-id='c19b74c3' const='yes' id='12373e33'/> + <pointer-type-def type-id='12373e33' size-in-bits='64' id='c5f6c15b'/> + <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/> + <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/> + <qualified-type-def type-id='23bd8cb5' const='yes' id='75f7b0c5'/> + <pointer-type-def type-id='75f7b0c5' size-in-bits='64' id='a3eb883d'/> + <qualified-type-def type-id='3ff5601b' const='yes' id='922df12b'/> + <pointer-type-def type-id='922df12b' size-in-bits='64' id='1f526493'/> + <qualified-type-def type-id='9da381c4' const='yes' id='f07b7694'/> + <pointer-type-def type-id='f07b7694' size-in-bits='64' id='505bed1a'/> + <qualified-type-def type-id='ee31ee44' const='yes' id='721c32d4'/> + <pointer-type-def type-id='721c32d4' size-in-bits='64' id='a06445da'/> + <qualified-type-def type-id='bd54fe1a' const='yes' id='9cb2385f'/> + <pointer-type-def type-id='9cb2385f' size-in-bits='64' id='218ee02f'/> + <qualified-type-def type-id='8e8d4be3' const='yes' id='693c3853'/> + <pointer-type-def type-id='693c3853' size-in-bits='64' id='22cce67b'/> + <qualified-type-def type-id='22cce67b' const='yes' id='d2816df0'/> + <pointer-type-def type-id='d2816df0' size-in-bits='64' id='3bbfee2e'/> + <qualified-type-def type-id='d8bf0010' const='yes' id='a9125480'/> + <pointer-type-def type-id='a9125480' size-in-bits='64' id='d1db479e'/> + <qualified-type-def type-id='149c6638' const='yes' id='b01a5ac8'/> + <pointer-type-def type-id='b01a5ac8' size-in-bits='64' id='1b7d11c6'/> + <qualified-type-def type-id='8f92235e' const='yes' id='b9930aae'/> + <pointer-type-def type-id='b9930aae' size-in-bits='64' id='a6798dcc'/> + <qualified-type-def type-id='9c313c2d' const='yes' id='c3b7ba7d'/> + <pointer-type-def type-id='c3b7ba7d' size-in-bits='64' id='713a56f5'/> + <qualified-type-def type-id='b96825af' const='yes' id='2b61797f'/> + <pointer-type-def type-id='2b61797f' size-in-bits='64' id='9f7200cf'/> + <qualified-type-def type-id='ea1474f2' const='yes' id='485ede6d'/> + <pointer-type-def type-id='485ede6d' size-in-bits='64' id='3457e9c5'/> + <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/> + <pointer-type-def type-id='441e0c31' size-in-bits='64' id='788e1f25'/> + <pointer-type-def type-id='bd54fe1a' size-in-bits='64' id='3ccc2590'/> + <pointer-type-def type-id='3fa542f0' size-in-bits='64' id='0b283d2e'/> + <pointer-type-def type-id='f5ef0660' size-in-bits='64' id='de23782d'/> + <pointer-type-def type-id='a2185560' size-in-bits='64' id='764e437e'/> + <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/> + <pointer-type-def type-id='e80b47fe' size-in-bits='64' id='94d188f0'/> + <pointer-type-def type-id='1c7a4858' size-in-bits='64' id='b0b6ccaa'/> + <pointer-type-def type-id='f6358b93' size-in-bits='64' id='581c24b7'/> + <pointer-type-def type-id='45354e42' size-in-bits='64' id='d447b08c'/> + <pointer-type-def type-id='0760d6d1' size-in-bits='64' id='733fc725'/> + <pointer-type-def type-id='be0f9e0b' size-in-bits='64' id='a4e6dd3f'/> + <pointer-type-def type-id='16eb5704' size-in-bits='64' id='13fdb43e'/> + <pointer-type-def type-id='46870456' size-in-bits='64' id='1c77bdb0'/> + <pointer-type-def type-id='48f7c3f5' size-in-bits='64' id='b4c2e924'/> + <pointer-type-def type-id='bd226ac0' size-in-bits='64' id='fce59795'/> + <pointer-type-def type-id='32580e96' size-in-bits='64' id='ede2c2f5'/> + <pointer-type-def type-id='c87cb1d0' size-in-bits='64' id='d781e3b2'/> + <function-decl name='strtol' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='strncmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='xdr_int' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='7292109c'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_u_int' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='b4c2e924'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_short' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='764e437e'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_u_short' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='ede2c2f5'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='9b23c9ad'/> + <parameter type-id='b4c2e924'/> + <parameter type-id='48f7c3f5'/> + <parameter type-id='48f7c3f5'/> + <parameter type-id='c28db3e9'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_opaque' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='26a90f95'/> + <parameter type-id='48f7c3f5'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='9b23c9ad'/> + <parameter type-id='48f7c3f5'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_char' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='26a90f95'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_double' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='7408d286'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_longlong_t' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='de23782d'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdr_u_longlong_t' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='fce59795'/> + <return type-id='310a70df'/> + </function-decl> + <function-decl name='xdrmem_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='17fd1621'/> + <parameter type-id='26a90f95'/> + <parameter type-id='48f7c3f5'/> + <parameter type-id='6badf1b8'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nv_alloc_init' mangled-name='nv_alloc_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nv_alloc_init'> + <parameter type-id='11871392' name='nva'/> + <parameter type-id='ee1d4944' name='nvo'/> <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nv_alloc_reset' mangled-name='nv_alloc_reset' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nv_alloc_reset'> + <parameter type-id='11871392' name='nva'/> <return type-id='48b5725f'/> </function-decl> + <function-decl name='nv_alloc_fini' mangled-name='nv_alloc_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nv_alloc_fini'> + <parameter type-id='11871392' name='nva'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_lookup_nv_alloc' mangled-name='nvlist_lookup_nv_alloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nv_alloc'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='11871392'/> + </function-decl> + <function-decl name='nvlist_nvflag' mangled-name='nvlist_nvflag' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_nvflag'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='3502e3ff'/> + </function-decl> + <function-decl name='nvlist_alloc' mangled-name='nvlist_alloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_alloc'> + <parameter type-id='857bb57e' name='nvlp'/> + <parameter type-id='3502e3ff' name='nvflag'/> + <parameter type-id='95e97e5e' name='kmflag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_xalloc' mangled-name='nvlist_xalloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xalloc'> + <parameter type-id='857bb57e' name='nvlp'/> + <parameter type-id='3502e3ff' name='nvflag'/> + <parameter type-id='11871392' name='nva'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_free' mangled-name='nvlist_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_free'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_dup' mangled-name='nvlist_dup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_dup'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='857bb57e' name='nvlp'/> + <parameter type-id='95e97e5e' name='kmflag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_xdup' mangled-name='nvlist_xdup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xdup'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='857bb57e' name='nvlp'/> + <parameter type-id='11871392' name='nva'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_remove_all' mangled-name='nvlist_remove_all' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_remove_all'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_remove' mangled-name='nvlist_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_remove'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='8d0687d2' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_remove_nvpair' mangled-name='nvlist_remove_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_remove_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='3fa542f0' name='nvp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_boolean' mangled-name='nvlist_add_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_boolean'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_boolean_value' mangled-name='nvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_boolean_value'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='c19b74c3' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_byte' mangled-name='nvlist_add_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_byte'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d8bf0010' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int8' mangled-name='nvlist_add_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int8'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='ee31ee44' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint8' mangled-name='nvlist_add_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint8'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='b96825af' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int16' mangled-name='nvlist_add_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int16'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='23bd8cb5' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint16' mangled-name='nvlist_add_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint16'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='149c6638' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int32' mangled-name='nvlist_add_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int32'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='3ff5601b' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint32' mangled-name='nvlist_add_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint32'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='8f92235e' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int64' mangled-name='nvlist_add_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int64'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9da381c4' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint64' mangled-name='nvlist_add_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint64'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9c313c2d' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_double' mangled-name='nvlist_add_double' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_double'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a0eb0f08' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_string' mangled-name='nvlist_add_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_string'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='80f4b756' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_boolean_array' mangled-name='nvlist_add_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_boolean_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='c5f6c15b' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_byte_array' mangled-name='nvlist_add_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_byte_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d1db479e' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int8_array' mangled-name='nvlist_add_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a06445da' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint8_array' mangled-name='nvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9f7200cf' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int16_array' mangled-name='nvlist_add_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a3eb883d' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint16_array' mangled-name='nvlist_add_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='1b7d11c6' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int32_array' mangled-name='nvlist_add_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='1f526493' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint32_array' mangled-name='nvlist_add_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='a6798dcc' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int64_array' mangled-name='nvlist_add_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_int64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='505bed1a' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint64_array' mangled-name='nvlist_add_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_uint64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='713a56f5' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_string_array' mangled-name='nvlist_add_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_string_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='13956559' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_hrtime' mangled-name='nvlist_add_hrtime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_hrtime'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='cebdd548' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_nvlist' mangled-name='nvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_nvlist'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='22cce67b' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_nvlist_array' mangled-name='nvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_nvlist_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='3bbfee2e' name='a'/> + <parameter type-id='3502e3ff' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_prev_nvpair' mangled-name='nvlist_prev_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prev_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='dace003f' name='nvp'/> + <return type-id='3fa542f0'/> + </function-decl> + <function-decl name='nvlist_empty' mangled-name='nvlist_empty' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_empty'> + <parameter type-id='22cce67b' name='nvl'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nvlist_lookup_boolean' mangled-name='nvlist_lookup_boolean' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_boolean'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_boolean_value' mangled-name='nvlist_lookup_boolean_value' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_boolean_value'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='37e3bd22' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_byte' mangled-name='nvlist_lookup_byte' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_byte'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='45b65157' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int8' mangled-name='nvlist_lookup_int8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int8'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='256d5229' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint8' mangled-name='nvlist_lookup_uint8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint8'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='ae3e8ca6' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int16' mangled-name='nvlist_lookup_int16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int16'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='f76f73d0' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint16' mangled-name='nvlist_lookup_uint16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint16'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='8a121f49' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int32' mangled-name='nvlist_lookup_int32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int32'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='4aafb922' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint32' mangled-name='nvlist_lookup_uint32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint32'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='90421557' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int64' mangled-name='nvlist_lookup_int64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int64'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='cb785ebf' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint64' mangled-name='nvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint64'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='5d6479ae' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_double' mangled-name='nvlist_lookup_double' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_double'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='7408d286' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_string' mangled-name='nvlist_lookup_string' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_string'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='7d3cd834' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvlist' mangled-name='nvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvlist'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='857bb57e' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_boolean_array' mangled-name='nvlist_lookup_boolean_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_boolean_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='03829398' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_byte_array' mangled-name='nvlist_lookup_byte_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_byte_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='3b0247c7' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int8_array' mangled-name='nvlist_lookup_int8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='ee181ab9' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint8_array' mangled-name='nvlist_lookup_uint8_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint8_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d8774064' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int16_array' mangled-name='nvlist_lookup_int16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='7e73928e' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint16_array' mangled-name='nvlist_lookup_uint16_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint16_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='bd8768d9' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int32_array' mangled-name='nvlist_lookup_int32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9aa04798' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint32_array' mangled-name='nvlist_lookup_uint32_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint32_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='9507d3c7' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int64_array' mangled-name='nvlist_lookup_int64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_int64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='e37ce48f' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint64_array' mangled-name='nvlist_lookup_uint64_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_uint64_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='892b4acc' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_string_array' mangled-name='nvlist_lookup_string_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_string_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='c0563f85' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvlist_array' mangled-name='nvlist_lookup_nvlist_array' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvlist_array'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='75be733c' name='a'/> + <parameter type-id='4dd26a40' name='n'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_hrtime' mangled-name='nvlist_lookup_hrtime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_hrtime'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='e379e62d' name='val'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_pairs' mangled-name='nvlist_lookup_pairs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_pairs'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='95e97e5e' name='flag'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvpair' mangled-name='nvlist_lookup_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='0b283d2e' name='ret'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvpair_embedded_index' mangled-name='nvlist_lookup_nvpair_embedded_index' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_lookup_nvpair_embedded_index'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='0b283d2e' name='ret'/> + <parameter type-id='7292109c' name='ip'/> + <parameter type-id='7d3cd834' name='ep'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_exists' mangled-name='nvlist_exists' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_exists'> + <parameter type-id='22cce67b' name='nvl'/> + <parameter type-id='80f4b756' name='name'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nvlist_add_nvpair' mangled-name='nvlist_add_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_add_nvpair'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='3fa542f0' name='nvp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_merge' mangled-name='nvlist_merge' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_merge'> + <parameter type-id='5ce45b60' name='dst'/> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='95e97e5e' name='flag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_size' mangled-name='nvlist_size' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_size'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='78c01427' name='size'/> + <parameter type-id='95e97e5e' name='encoding'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_pack' mangled-name='nvlist_pack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_pack'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='9b23c9ad' name='bufp'/> + <parameter type-id='78c01427' name='buflen'/> + <parameter type-id='95e97e5e' name='encoding'/> + <parameter type-id='95e97e5e' name='kmflag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_xpack' mangled-name='nvlist_xpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xpack'> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='9b23c9ad' name='bufp'/> + <parameter type-id='78c01427' name='buflen'/> + <parameter type-id='95e97e5e' name='encoding'/> + <parameter type-id='11871392' name='nva'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_unpack' mangled-name='nvlist_unpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_unpack'> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='b59d7dce' name='buflen'/> + <parameter type-id='857bb57e' name='nvlp'/> + <parameter type-id='95e97e5e' name='kmflag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_xunpack' mangled-name='nvlist_xunpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_xunpack'> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='b59d7dce' name='buflen'/> + <parameter type-id='857bb57e' name='nvlp'/> + <parameter type-id='11871392' name='nva'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-type size-in-bits='64' id='441e0c31'> + <parameter type-id='812c6697'/> + <parameter type-id='48f7c3f5'/> + <return type-id='4aafb922'/> + </function-type> + <function-type size-in-bits='64' id='e80b47fe'> + <parameter type-id='17fd1621'/> + <parameter is-variadic='yes'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='1c7a4858'> + <parameter type-id='812c6697'/> + <parameter type-id='26a90f95'/> + <parameter type-id='48f7c3f5'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='f6358b93'> + <parameter type-id='812c6697'/> + <parameter type-id='80f4b756'/> + <parameter type-id='48f7c3f5'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='45354e42'> + <parameter type-id='812c6697'/> + <parameter type-id='218ee02f'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='0760d6d1'> + <parameter type-id='812c6697'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='be0f9e0b'> + <parameter type-id='812c6697'/> + <parameter type-id='3ccc2590'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='16eb5704'> + <parameter type-id='812c6697'/> + <parameter type-id='48f7c3f5'/> + <return type-id='310a70df'/> + </function-type> + <function-type size-in-bits='64' id='46870456'> + <parameter type-id='812c6697'/> + <return type-id='48f7c3f5'/> + </function-type> + <function-type size-in-bits='64' id='c87cb1d0'> + <parameter type-id='812c6697'/> + <return type-id='48b5725f'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='module/nvpair/nvpair_alloc_fixed.c' language='LANG_C99'> + <qualified-type-def type-id='ee1d4944' const='yes' id='4b95388f'/> + <var-decl name='nv_fixed_ops' type-id='4b95388f' mangled-name='nv_fixed_ops' visibility='default' elf-symbol-id='nv_fixed_ops'/> </abi-instr> </abi-corpus> diff --git a/sys/contrib/openzfs/lib/libnvpair/libnvpair.c b/sys/contrib/openzfs/lib/libnvpair/libnvpair.c index 0123bb772048..41be7c678d25 100644 --- a/sys/contrib/openzfs/lib/libnvpair/libnvpair.c +++ b/sys/contrib/openzfs/lib/libnvpair/libnvpair.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -70,7 +71,7 @@ struct nvlist_printops { DEFINEOP(print_int64, int64_t); DEFINEOP(print_uint64, uint64_t); DEFINEOP(print_double, double); - DEFINEOP(print_string, char *); + DEFINEOP(print_string, const char *); DEFINEOP(print_hrtime, hrtime_t); DEFINEOP(print_nvlist, nvlist_t *); DEFINEARROP(print_boolean_array, boolean_t *); @@ -83,7 +84,7 @@ struct nvlist_printops { DEFINEARROP(print_uint32_array, uint32_t *); DEFINEARROP(print_int64_array, int64_t *); DEFINEARROP(print_uint64_array, uint64_t *); - DEFINEARROP(print_string_array, char **); + DEFINEARROP(print_string_array, const char **); DEFINEARROP(print_nvlist_array, nvlist_t **); }; @@ -199,6 +200,17 @@ nvprint_##type_and_variant(nvlist_prtctl_t pctl, void *private, \ return (1); \ } +/* + * Workaround for GCC 12+ with UBSan enabled deficencies. + * + * GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code + * below as violating -Wformat-overflow. + */ +#if defined(__GNUC__) && !defined(__clang__) && \ + defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-overflow" +#endif NVLIST_PRTFUNC(boolean, int, int, "%d") NVLIST_PRTFUNC(boolean_value, boolean_t, int, "%d") NVLIST_PRTFUNC(byte, uchar_t, uchar_t, "0x%2.2x") @@ -211,8 +223,12 @@ NVLIST_PRTFUNC(uint32, uint32_t, uint32_t, "0x%x") NVLIST_PRTFUNC(int64, int64_t, longlong_t, "%lld") NVLIST_PRTFUNC(uint64, uint64_t, u_longlong_t, "0x%llx") NVLIST_PRTFUNC(double, double, double, "0x%f") -NVLIST_PRTFUNC(string, char *, char *, "%s") +NVLIST_PRTFUNC(string, const char *, const char *, "%s") NVLIST_PRTFUNC(hrtime, hrtime_t, hrtime_t, "0x%llx") +#if defined(__GNUC__) && !defined(__clang__) && \ + defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW) +#pragma GCC diagnostic pop +#endif /* * Generate functions to print array-valued nvlist members. @@ -251,7 +267,7 @@ NVLIST_ARRPRTFUNC(int32_array, int32_t, int32_t, "%d") NVLIST_ARRPRTFUNC(uint32_array, uint32_t, uint32_t, "0x%x") NVLIST_ARRPRTFUNC(int64_array, int64_t, longlong_t, "%lld") NVLIST_ARRPRTFUNC(uint64_array, uint64_t, u_longlong_t, "0x%llx") -NVLIST_ARRPRTFUNC(string_array, char *, char *, "%s") +NVLIST_ARRPRTFUNC(string_array, const char *, const char *, "%s") static int nvprint_nvlist(nvlist_prtctl_t pctl, void *private, @@ -368,7 +384,7 @@ nvlist_prtctl_setfmt(nvlist_prtctl_t pctl, enum nvlist_prtctl_fmt which, pctl->nvprt_btwnarrfmt_nl = 0; } else { pctl->nvprt_btwnarrfmt = fmt; - pctl->nvprt_btwnarrfmt_nl = (strstr(fmt, "\n") != NULL); + pctl->nvprt_btwnarrfmt_nl = (strchr(fmt, '\n') != NULL); } break; @@ -383,13 +399,13 @@ nvlist_prtctl_dofmt(nvlist_prtctl_t pctl, enum nvlist_prtctl_fmt which, ...) { FILE *fp = pctl->nvprt_fp; va_list ap; - char *name; + const char *name; va_start(ap, which); switch (which) { case NVLIST_FMT_MEMBER_NAME: - name = va_arg(ap, char *); + name = va_arg(ap, const char *); (void) fprintf(fp, pctl->nvprt_nmfmt, name); break; @@ -438,7 +454,7 @@ NVLIST_PRINTCTL_REPLACE(uint32, uint32_t) NVLIST_PRINTCTL_REPLACE(int64, int64_t) NVLIST_PRINTCTL_REPLACE(uint64, uint64_t) NVLIST_PRINTCTL_REPLACE(double, double) -NVLIST_PRINTCTL_REPLACE(string, char *) +NVLIST_PRINTCTL_REPLACE(string, const char *) NVLIST_PRINTCTL_REPLACE(hrtime, hrtime_t) NVLIST_PRINTCTL_REPLACE(nvlist, nvlist_t *) @@ -462,7 +478,7 @@ NVLIST_PRINTCTL_AREPLACE(int32_array, int32_t *) NVLIST_PRINTCTL_AREPLACE(uint32_array, uint32_t *) NVLIST_PRINTCTL_AREPLACE(int64_array, int64_t *) NVLIST_PRINTCTL_AREPLACE(uint64_array, uint64_t *) -NVLIST_PRINTCTL_AREPLACE(string_array, char **) +NVLIST_PRINTCTL_AREPLACE(string_array, const char **) NVLIST_PRINTCTL_AREPLACE(nvlist_array, nvlist_t **) /* @@ -565,7 +581,7 @@ static void nvlist_print_with_indent(nvlist_t *nvl, nvlist_prtctl_t pctl) { FILE *fp = pctl->nvprt_fp; - char *name; + const char *name; uint_t nelem; nvpair_t *nvp; @@ -655,7 +671,7 @@ nvlist_print_with_indent(nvlist_t *nvl, nvlist_prtctl_t pctl) break; } case DATA_TYPE_STRING: { - char *val; + const char *val; (void) nvpair_value_string(nvp, &val); RENDER(pctl, string, nvl, name, val); break; @@ -721,7 +737,7 @@ nvlist_print_with_indent(nvlist_t *nvl, nvlist_prtctl_t pctl) break; } case DATA_TYPE_STRING_ARRAY: { - char **val; + const char **val; (void) nvpair_value_string_array(nvp, &val, &nelem); ARENDER(pctl, string_array, nvl, name, val, nelem); break; @@ -767,159 +783,6 @@ nvlist_prt(nvlist_t *nvl, nvlist_prtctl_t pctl) nvlist_print_with_indent(nvl, pctl); } -#define NVP(elem, type, vtype, ptype, format) { \ - vtype value; \ -\ - (void) nvpair_value_##type(elem, &value); \ - (void) printf("%*s%s: " format "\n", indent, "", \ - nvpair_name(elem), (ptype)value); \ -} - -#define NVPA(elem, type, vtype, ptype, format) { \ - uint_t i, count; \ - vtype *value; \ -\ - (void) nvpair_value_##type(elem, &value, &count); \ - for (i = 0; i < count; i++) { \ - (void) printf("%*s%s[%d]: " format "\n", indent, "", \ - nvpair_name(elem), i, (ptype)value[i]); \ - } \ -} - -/* - * Similar to nvlist_print() but handles arrays slightly differently. - */ -void -dump_nvlist(nvlist_t *list, int indent) -{ - nvpair_t *elem = NULL; - boolean_t bool_value; - nvlist_t *nvlist_value; - nvlist_t **nvlist_array_value; - uint_t i, count; - - if (list == NULL) { - return; - } - - while ((elem = nvlist_next_nvpair(list, elem)) != NULL) { - switch (nvpair_type(elem)) { - case DATA_TYPE_BOOLEAN: - (void) printf("%*s%s\n", indent, "", nvpair_name(elem)); - break; - - case DATA_TYPE_BOOLEAN_VALUE: - (void) nvpair_value_boolean_value(elem, &bool_value); - (void) printf("%*s%s: %s\n", indent, "", - nvpair_name(elem), bool_value ? "true" : "false"); - break; - - case DATA_TYPE_BYTE: - NVP(elem, byte, uchar_t, int, "%u"); - break; - - case DATA_TYPE_INT8: - NVP(elem, int8, int8_t, int, "%d"); - break; - - case DATA_TYPE_UINT8: - NVP(elem, uint8, uint8_t, int, "%u"); - break; - - case DATA_TYPE_INT16: - NVP(elem, int16, int16_t, int, "%d"); - break; - - case DATA_TYPE_UINT16: - NVP(elem, uint16, uint16_t, int, "%u"); - break; - - case DATA_TYPE_INT32: - NVP(elem, int32, int32_t, long, "%ld"); - break; - - case DATA_TYPE_UINT32: - NVP(elem, uint32, uint32_t, ulong_t, "%lu"); - break; - - case DATA_TYPE_INT64: - NVP(elem, int64, int64_t, longlong_t, "%lld"); - break; - - case DATA_TYPE_UINT64: - NVP(elem, uint64, uint64_t, u_longlong_t, "%llu"); - break; - - case DATA_TYPE_STRING: - NVP(elem, string, char *, char *, "'%s'"); - break; - - case DATA_TYPE_BYTE_ARRAY: - NVPA(elem, byte_array, uchar_t, int, "%u"); - break; - - case DATA_TYPE_INT8_ARRAY: - NVPA(elem, int8_array, int8_t, int, "%d"); - break; - - case DATA_TYPE_UINT8_ARRAY: - NVPA(elem, uint8_array, uint8_t, int, "%u"); - break; - - case DATA_TYPE_INT16_ARRAY: - NVPA(elem, int16_array, int16_t, int, "%d"); - break; - - case DATA_TYPE_UINT16_ARRAY: - NVPA(elem, uint16_array, uint16_t, int, "%u"); - break; - - case DATA_TYPE_INT32_ARRAY: - NVPA(elem, int32_array, int32_t, long, "%ld"); - break; - - case DATA_TYPE_UINT32_ARRAY: - NVPA(elem, uint32_array, uint32_t, ulong_t, "%lu"); - break; - - case DATA_TYPE_INT64_ARRAY: - NVPA(elem, int64_array, int64_t, longlong_t, "%lld"); - break; - - case DATA_TYPE_UINT64_ARRAY: - NVPA(elem, uint64_array, uint64_t, u_longlong_t, - "%llu"); - break; - - case DATA_TYPE_STRING_ARRAY: - NVPA(elem, string_array, char *, char *, "'%s'"); - break; - - case DATA_TYPE_NVLIST: - (void) nvpair_value_nvlist(elem, &nvlist_value); - (void) printf("%*s%s:\n", indent, "", - nvpair_name(elem)); - dump_nvlist(nvlist_value, indent + 4); - break; - - case DATA_TYPE_NVLIST_ARRAY: - (void) nvpair_value_nvlist_array(elem, - &nvlist_array_value, &count); - for (i = 0; i < count; i++) { - (void) printf("%*s%s[%u]:\n", indent, "", - nvpair_name(elem), i); - dump_nvlist(nvlist_array_value[i], indent + 4); - } - break; - - default: - (void) printf(dgettext(TEXT_DOMAIN, "bad config type " - "%d for %s\n"), nvpair_type(elem), - nvpair_name(elem)); - } - } -} - /* * ====================================================================== * | | @@ -946,11 +809,11 @@ dump_nvlist(nvlist_t *list, int indent) */ int nvpair_value_match_regex(nvpair_t *nvp, int ai, - char *value, regex_t *value_regex, char **ep) + const char *value, regex_t *value_regex, const char **ep) { - char *evalue; - uint_t a_len; - int sr; + const char *evalue; + uint_t a_len; + int sr; if (ep) *ep = NULL; @@ -978,7 +841,7 @@ nvpair_value_match_regex(nvpair_t *nvp, int ai, sr = EOF; switch (nvpair_type(nvp)) { case DATA_TYPE_STRING: { - char *val; + const char *val; /* check string value for match */ if (nvpair_value_string(nvp, &val) == 0) { @@ -994,7 +857,7 @@ nvpair_value_match_regex(nvpair_t *nvp, int ai, break; } case DATA_TYPE_STRING_ARRAY: { - char **val_array; + const char **val_array; /* check indexed string value of array for match */ if ((nvpair_value_string_array(nvp, &val_array, &a_len) == 0) && @@ -1270,7 +1133,34 @@ nvpair_value_match_regex(nvpair_t *nvp, int ai, } int -nvpair_value_match(nvpair_t *nvp, int ai, char *value, char **ep) +nvpair_value_match(nvpair_t *nvp, int ai, const char *value, const char **ep) { return (nvpair_value_match_regex(nvp, ai, value, NULL, ep)); } + +/* + * Similar to nvlist_print() but handles arrays slightly differently. + */ +void +dump_nvlist(nvlist_t *list, int indent) +{ + int len; + char *buf; + + len = nvlist_snprintf(NULL, 0, list, indent); + len++; /* Add null terminator */ + + buf = malloc(len); + if (buf == NULL) + return; + + (void) nvlist_snprintf(buf, len, list, indent); + + /* + * fputs does not have limitations on the size of the buffer being + * printed (unlike printf). + */ + fputs(buf, stdout); + + free(buf); +} diff --git a/sys/contrib/openzfs/lib/libnvpair/libnvpair_json.c b/sys/contrib/openzfs/lib/libnvpair/libnvpair_json.c index 19acea8f5094..6ed984698b59 100644 --- a/sys/contrib/openzfs/lib/libnvpair/libnvpair_json.c +++ b/sys/contrib/openzfs/lib/libnvpair/libnvpair_json.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. @@ -134,7 +135,7 @@ nvlist_print_json(FILE *fp, nvlist_t *nvl) switch (type) { case DATA_TYPE_STRING: { - char *string = fnvpair_value_string(curr); + const char *string = fnvpair_value_string(curr); if (nvlist_print_json_string(fp, string) == -1) return (-1); break; @@ -220,7 +221,7 @@ nvlist_print_json(FILE *fp, nvlist_t *nvl) } case DATA_TYPE_STRING_ARRAY: { - char **val; + const char **val; uint_t valsz, i; VERIFY0(nvpair_value_string_array(curr, &val, &valsz)); FPRINTF(fp, "["); diff --git a/sys/contrib/openzfs/lib/libnvpair/nvpair_alloc_system.c b/sys/contrib/openzfs/lib/libnvpair/nvpair_alloc_system.c index 59806ea4dc93..293233df443a 100644 --- a/sys/contrib/openzfs/lib/libnvpair/nvpair_alloc_system.c +++ b/sys/contrib/openzfs/lib/libnvpair/nvpair_alloc_system.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libshare/libshare.c b/sys/contrib/openzfs/lib/libshare/libshare.c index 09529e5b4106..3695207e6fe7 100644 --- a/sys/contrib/openzfs/lib/libshare/libshare.c +++ b/sys/contrib/openzfs/lib/libshare/libshare.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,7 +23,7 @@ /* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Gunnar Beutner - * Copyright (c) 2018, 2020 by Delphix. All rights reserved. + * Copyright (c) 2018, 2022 by Delphix. All rights reserved. */ #include <stdio.h> @@ -96,6 +97,16 @@ sa_commit_shares(enum sa_protocol protocol) fstypes[protocol]->commit_shares(); } +void +sa_truncate_shares(enum sa_protocol protocol) +{ + /* CSTYLED */ + VALIDATE_PROTOCOL(protocol, ); + + if (fstypes[protocol]->truncate_shares != NULL) + fstypes[protocol]->truncate_shares(); +} + int sa_validate_shareopts(const char *options, enum sa_protocol protocol) { diff --git a/sys/contrib/openzfs/lib/libshare/libshare_impl.h b/sys/contrib/openzfs/lib/libshare/libshare_impl.h index 110fe93d250f..79f081bb8312 100644 --- a/sys/contrib/openzfs/lib/libshare/libshare_impl.h +++ b/sys/contrib/openzfs/lib/libshare/libshare_impl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,7 +23,7 @@ /* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Gunnar Beutner - * Copyright (c) 2019, 2020 by Delphix. All rights reserved. + * Copyright (c) 2019, 2022 by Delphix. All rights reserved. */ #ifndef _LIBSPL_LIBSHARE_IMPL_H #define _LIBSPL_LIBSHARE_IMPL_H @@ -39,6 +40,7 @@ typedef struct { boolean_t (*const is_shared)(sa_share_impl_t share); int (*const validate_shareopts)(const char *shareopts); int (*const commit_shares)(void); + void (*const truncate_shares)(void); } sa_fstype_t; extern const sa_fstype_t libshare_nfs_type, libshare_smb_type; diff --git a/sys/contrib/openzfs/lib/libshare/nfs.c b/sys/contrib/openzfs/lib/libshare/nfs.c index 2146346cf08c..e4c5b904f51f 100644 --- a/sys/contrib/openzfs/lib/libshare/nfs.c +++ b/sys/contrib/openzfs/lib/libshare/nfs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -28,6 +29,8 @@ #include <stdio.h> #include <errno.h> #include <libshare.h> +#include <unistd.h> +#include <libzutil.h> #include "nfs.h" @@ -44,7 +47,8 @@ nfs_exports_lock(const char *name, int *nfs_lock_fd) *nfs_lock_fd = open(name, O_RDWR | O_CREAT | O_CLOEXEC, 0600); if (*nfs_lock_fd == -1) { err = errno; - fprintf(stderr, "failed to lock %s: %s\n", name, strerror(err)); + fprintf(stderr, "failed to lock %s: %s\n", name, + zfs_strerror(err)); return (err); } @@ -52,7 +56,8 @@ nfs_exports_lock(const char *name, int *nfs_lock_fd) ; if (err != 0) { err = errno; - fprintf(stderr, "failed to lock %s: %s\n", name, strerror(err)); + fprintf(stderr, "failed to lock %s: %s\n", name, + zfs_strerror(err)); (void) close(*nfs_lock_fd); *nfs_lock_fd = -1; return (err); @@ -68,7 +73,7 @@ nfs_exports_unlock(const char *name, int *nfs_lock_fd) if (flock(*nfs_lock_fd, LOCK_UN) != 0) fprintf(stderr, "failed to unlock %s: %s\n", - name, strerror(errno)); + name, zfs_strerror(errno)); (void) close(*nfs_lock_fd); *nfs_lock_fd = -1; @@ -90,24 +95,25 @@ nfs_init_tmpfile(const char *prefix, const char *mdir, struct tmpfile *tmpf) mkdir(mdir, 0755) < 0 && errno != EEXIST) { fprintf(stderr, "failed to create %s: %s\n", - mdir, strerror(errno)); + // cppcheck-suppress uninitvar + mdir, zfs_strerror(errno)); return (B_FALSE); } - strcpy(tmpf->name, prefix); - strcat(tmpf->name, ".XXXXXXXX"); + strlcpy(tmpf->name, prefix, sizeof (tmpf->name)); + strlcat(tmpf->name, ".XXXXXXXX", sizeof (tmpf->name)); int fd = mkostemp(tmpf->name, O_CLOEXEC); if (fd == -1) { fprintf(stderr, "Unable to create temporary file: %s", - strerror(errno)); + zfs_strerror(errno)); return (B_FALSE); } tmpf->fp = fdopen(fd, "w+"); if (tmpf->fp == NULL) { fprintf(stderr, "Unable to reopen temporary file: %s", - strerror(errno)); + zfs_strerror(errno)); close(fd); return (B_FALSE); } @@ -127,14 +133,14 @@ nfs_fini_tmpfile(const char *exports, struct tmpfile *tmpf) { if (fflush(tmpf->fp) != 0) { fprintf(stderr, "Failed to write to temporary file: %s\n", - strerror(errno)); + zfs_strerror(errno)); nfs_abort_tmpfile(tmpf); return (SA_SYSTEM_ERR); } if (rename(tmpf->name, exports) == -1) { fprintf(stderr, "Unable to rename %s -> %s: %s\n", - tmpf->name, exports, strerror(errno)); + tmpf->name, exports, zfs_strerror(errno)); nfs_abort_tmpfile(tmpf); return (SA_SYSTEM_ERR); } @@ -211,7 +217,7 @@ nfs_process_exports(const char *exports, const char *mountpoint, if (fclose(oldfp) != 0) { fprintf(stderr, "Unable to close file %s: %s\n", - exports, strerror(errno)); + exports, zfs_strerror(errno)); error = error != SA_OK ? error : SA_SYSTEM_ERR; } } @@ -281,6 +287,17 @@ fullerr: return (error); } +void +nfs_reset_shares(const char *lockfile, const char *exports) +{ + int nfs_lock_fd = -1; + + if (nfs_exports_lock(lockfile, &nfs_lock_fd) == 0) { + (void) ! truncate(exports, 0); + nfs_exports_unlock(lockfile, &nfs_lock_fd); + } +} + static boolean_t nfs_is_shared_cb(void *userdata, char *line, boolean_t found_mountpoint) { diff --git a/sys/contrib/openzfs/lib/libshare/nfs.h b/sys/contrib/openzfs/lib/libshare/nfs.h index 24ae1f8adb85..1b8ed890d7bd 100644 --- a/sys/contrib/openzfs/lib/libshare/nfs.h +++ b/sys/contrib/openzfs/lib/libshare/nfs.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,6 +23,7 @@ /* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Gunnar Beutner + * Copyright (c) 2022 by Delphix. All rights reserved. */ #include "libshare_impl.h" @@ -33,3 +35,4 @@ boolean_t nfs_is_shared_impl(const char *exports, sa_share_impl_t impl_share); int nfs_toggle_share(const char *lockfile, const char *exports, const char *expdir, sa_share_impl_t impl_share, int(*cbk)(sa_share_impl_t impl_share, FILE *tmpfile)); +void nfs_reset_shares(const char *lockfile, const char *exports); diff --git a/sys/contrib/openzfs/lib/libshare/os/freebsd/nfs.c b/sys/contrib/openzfs/lib/libshare/os/freebsd/nfs.c index 78977a25f4f5..969194f2881a 100644 --- a/sys/contrib/openzfs/lib/libshare/os/freebsd/nfs.c +++ b/sys/contrib/openzfs/lib/libshare/os/freebsd/nfs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org> * All rights reserved. @@ -23,12 +24,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * Copyright (c) 2020 by Delphix. All rights reserved. + * Copyright (c) 2020, 2022 by Delphix. All rights reserved. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/vfs.h> @@ -47,8 +45,6 @@ __FBSDID("$FreeBSD$"); #include "nfs.h" #define _PATH_MOUNTDPID "/var/run/mountd.pid" -#define OPTSSIZE 1024 -#define MAXLINESIZE (PATH_MAX + OPTSSIZE) #define ZFS_EXPORTS_FILE "/etc/zfs/exports" #define ZFS_EXPORTS_LOCK ZFS_EXPORTS_FILE".lock" @@ -72,34 +68,51 @@ __FBSDID("$FreeBSD$"); * index, quiet */ static int -translate_opts(const char *shareopts, FILE *out) +translate_opts(char *oldopts, FILE *out) { static const char *const known_opts[] = { "ro", "maproot", "mapall", "mask", "network", "sec", "alldirs", "public", "webnfs", "index", "quiet" }; - char oldopts[OPTSSIZE], newopts[OPTSSIZE]; - char *o, *s = NULL; + char *newopts, *o, *s = NULL; unsigned int i; - size_t len; - - strlcpy(oldopts, shareopts, sizeof (oldopts)); + size_t len, newopts_len; + int ret; + + /* + * Calculate the length needed for the worst case of a single + * character option: + * - Add one to strlen(oldopts) so that the trailing nul is counted + * as a separator. + * - Multiply by 3/2 since the single character option plus separator + * is expanded to 3 characters. + * - Add one for the trailing nul. Needed for a single repetition of + * the single character option and certain other cases. + */ + newopts_len = (strlen(oldopts) + 1) * 3 / 2 + 1; + newopts = malloc(newopts_len); + if (newopts == NULL) + return (EOF); newopts[0] = '\0'; s = oldopts; - while ((o = strsep(&s, "-, ")) != NULL) { + while ((o = strsep(&s, ", ")) != NULL) { + if (o[0] == '-') + o++; if (o[0] == '\0') continue; for (i = 0; i < ARRAY_SIZE(known_opts); ++i) { len = strlen(known_opts[i]); if (strncmp(known_opts[i], o, len) == 0 && (o[len] == '\0' || o[len] == '=')) { - strlcat(newopts, "-", sizeof (newopts)); + strlcat(newopts, "-", newopts_len); break; } } - strlcat(newopts, o, sizeof (newopts)); - strlcat(newopts, " ", sizeof (newopts)); + strlcat(newopts, o, newopts_len); + strlcat(newopts, " ", newopts_len); } - return (fputs(newopts, out)); + ret = fputs(newopts, out); + free(newopts); + return (ret); } static int @@ -109,20 +122,38 @@ nfs_enable_share_impl(sa_share_impl_t impl_share, FILE *tmpfile) if (strcmp(shareopts, "on") == 0) shareopts = ""; - boolean_t need_free; - char *mp; + boolean_t need_free, fnd_semi; + char *mp, *lineopts, *exportopts, *s; + size_t whitelen; int rc = nfs_escape_mountpoint(impl_share->sa_mountpoint, &mp, &need_free); if (rc != SA_OK) return (rc); - if (fputs(mp, tmpfile) == EOF || - fputc('\t', tmpfile) == EOF || - translate_opts(shareopts, tmpfile) == EOF || - fputc('\n', tmpfile) == EOF) { - fprintf(stderr, "failed to write to temporary file\n"); - rc = SA_SYSTEM_ERR; + lineopts = strdup(shareopts); + if (lineopts == NULL) + return (SA_SYSTEM_ERR); + s = lineopts; + fnd_semi = B_FALSE; + while ((exportopts = strsep(&s, ";")) != NULL) { + if (s != NULL) + fnd_semi = B_TRUE; + /* Ignore only whitespace between ';' separated option sets. */ + if (fnd_semi) { + whitelen = strspn(exportopts, "\t "); + if (exportopts[whitelen] == '\0') + continue; + } + if (fputs(mp, tmpfile) == EOF || + fputc('\t', tmpfile) == EOF || + translate_opts(exportopts, tmpfile) == EOF || + fputc('\n', tmpfile) == EOF) { + fprintf(stderr, "failed to write to temporary file\n"); + rc = SA_SYSTEM_ERR; + break; + } } + free(lineopts); if (need_free) free(mp); @@ -161,7 +192,8 @@ nfs_is_shared(sa_share_impl_t impl_share) static int nfs_validate_shareopts(const char *shareopts) { - (void) shareopts; + if (strlen(shareopts) == 0) + return (SA_SYNTAX_ERR); return (SA_OK); } @@ -195,6 +227,12 @@ start: return (SA_OK); } +static void +nfs_truncate_shares(void) +{ + nfs_reset_shares(ZFS_EXPORTS_LOCK, ZFS_EXPORTS_FILE); +} + const sa_fstype_t libshare_nfs_type = { .enable_share = nfs_enable_share, .disable_share = nfs_disable_share, @@ -202,4 +240,5 @@ const sa_fstype_t libshare_nfs_type = { .validate_shareopts = nfs_validate_shareopts, .commit_shares = nfs_commit_shares, + .truncate_shares = nfs_truncate_shares, }; diff --git a/sys/contrib/openzfs/lib/libshare/os/freebsd/smb.c b/sys/contrib/openzfs/lib/libshare/os/freebsd/smb.c index 0f546dc5543e..c6b8bdde2d41 100644 --- a/sys/contrib/openzfs/lib/libshare/os/freebsd/smb.c +++ b/sys/contrib/openzfs/lib/libshare/os/freebsd/smb.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c b/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c index 1da6d1617247..6a9bb3788523 100644 --- a/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c +++ b/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -23,7 +24,7 @@ * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Gunnar Beutner * Copyright (c) 2012 Cyril Plisko. All rights reserved. - * Copyright (c) 2019, 2020 by Delphix. All rights reserved. + * Copyright (c) 2019, 2022 by Delphix. All rights reserved. */ #include <dirent.h> @@ -47,6 +48,7 @@ static boolean_t nfs_available(void); +static boolean_t exports_available(void); typedef int (*nfs_shareopt_callback_t)(const char *opt, const char *value, void *cookie); @@ -319,12 +321,49 @@ get_linux_shareopts_cb(const char *key, const char *value, void *cookie) "wdelay" }; char **plinux_opts = (char **)cookie; + char *host, *val_dup, *literal, *next; - /* host-specific options, these are taken care of elsewhere */ - if (strcmp(key, "ro") == 0 || strcmp(key, "rw") == 0 || - strcmp(key, "sec") == 0) + if (strcmp(key, "sec") == 0) return (SA_OK); + if (strcmp(key, "ro") == 0 || strcmp(key, "rw") == 0) { + if (value == NULL || strlen(value) == 0) + return (SA_OK); + val_dup = strdup(value); + host = val_dup; + if (host == NULL) + return (SA_NO_MEMORY); + do { + if (*host == '[') { + host++; + literal = strchr(host, ']'); + if (literal == NULL) { + free(val_dup); + return (SA_SYNTAX_ERR); + } + if (literal[1] == '\0') + next = NULL; + else if (literal[1] == '/') { + next = strchr(literal + 2, ':'); + if (next != NULL) + ++next; + } else if (literal[1] == ':') + next = literal + 2; + else { + free(val_dup); + return (SA_SYNTAX_ERR); + } + } else { + next = strchr(host, ':'); + if (next != NULL) + ++next; + } + host = next; + } while (host != NULL); + free(val_dup); + return (SA_OK); + } + if (strcmp(key, "anon") == 0) key = "anonuid"; @@ -449,7 +488,7 @@ static int nfs_disable_share(sa_share_impl_t impl_share) { if (!nfs_available()) - return (SA_SYSTEM_ERR); + return (SA_OK); return (nfs_toggle_share( ZFS_EXPORTS_LOCK, ZFS_EXPORTS_FILE, ZFS_EXPORTS_DIR, impl_share, @@ -472,6 +511,10 @@ static int nfs_validate_shareopts(const char *shareopts) { char *linux_opts = NULL; + + if (strlen(shareopts) == 0) + return (SA_SYNTAX_ERR); + int error = get_linux_shareopts(shareopts, &linux_opts); if (error != SA_OK) return (error); @@ -495,6 +538,14 @@ nfs_commit_shares(void) return (libzfs_run_process(argv[0], argv, 0)); } +static void +nfs_truncate_shares(void) +{ + if (!exports_available()) + return; + nfs_reset_shares(ZFS_EXPORTS_LOCK, ZFS_EXPORTS_FILE); +} + const sa_fstype_t libshare_nfs_type = { .enable_share = nfs_enable_share, .disable_share = nfs_disable_share, @@ -502,6 +553,7 @@ const sa_fstype_t libshare_nfs_type = { .validate_shareopts = nfs_validate_shareopts, .commit_shares = nfs_commit_shares, + .truncate_shares = nfs_truncate_shares, }; static boolean_t @@ -518,3 +570,18 @@ nfs_available(void) return (avail == 1); } + +static boolean_t +exports_available(void) +{ + static int avail; + + if (!avail) { + if (access(ZFS_EXPORTS_DIR, F_OK) != 0) + avail = -1; + else + avail = 1; + } + + return (avail == 1); +} diff --git a/sys/contrib/openzfs/lib/libshare/os/linux/smb.c b/sys/contrib/openzfs/lib/libshare/os/linux/smb.c index 57965ebfaad1..40996ecc8f89 100644 --- a/sys/contrib/openzfs/lib/libshare/os/linux/smb.c +++ b/sys/contrib/openzfs/lib/libshare/os/linux/smb.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -90,21 +91,32 @@ smb_retrieve_shares(void) /* Go through the directory, looking for shares */ while ((directory = readdir(shares_dir))) { + int fd; + if (directory->d_name[0] == '.') continue; snprintf(file_path, sizeof (file_path), "%s/%s", SHARE_DIR, directory->d_name); - if (stat(file_path, &eStat) == -1) { + if ((fd = open(file_path, O_RDONLY | O_CLOEXEC)) == -1) { + rc = SA_SYSTEM_ERR; + goto out; + } + + if (fstat(fd, &eStat) == -1) { + close(fd); rc = SA_SYSTEM_ERR; goto out; } - if (!S_ISREG(eStat.st_mode)) + if (!S_ISREG(eStat.st_mode)) { + close(fd); continue; + } - if ((share_file_fp = fopen(file_path, "re")) == NULL) { + if ((share_file_fp = fdopen(fd, "r")) == NULL) { + close(fd); rc = SA_SYSTEM_ERR; goto out; } diff --git a/sys/contrib/openzfs/lib/libshare/smb.h b/sys/contrib/openzfs/lib/libshare/smb.h index ca3577751923..79e67bd7c45a 100644 --- a/sys/contrib/openzfs/lib/libshare/smb.h +++ b/sys/contrib/openzfs/lib/libshare/smb.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/Makefile.am b/sys/contrib/openzfs/lib/libspl/Makefile.am index 822bef7e7a8d..27f004634487 100644 --- a/sys/contrib/openzfs/lib/libspl/Makefile.am +++ b/sys/contrib/openzfs/lib/libspl/Makefile.am @@ -1,24 +1,41 @@ include $(srcdir)/%D%/include/Makefile.am -libspl_assert_la_CFLAGS = $(AM_CFLAGS) $(LIBRARY_CFLAGS) +libspl_assert_la_CFLAGS = $(AM_CFLAGS) $(LIBRARY_CFLAGS) $(LIBUNWIND_CFLAGS) libspl_la_CFLAGS = $(libspl_assert_la_CFLAGS) +if TARGET_CPU_I386 +libspl_la_CFLAGS += $(NO_ATOMIC_ALIGNMENT) +endif noinst_LTLIBRARIES += libspl_assert.la libspl.la CPPCHECKTARGETS += libspl_assert.la libspl.la libspl_assert_la_SOURCES = \ - %D%/assert.c + %D%/assert.c \ + %D%/backtrace.c libspl_la_SOURCES = \ %D%/libspl_impl.h \ %D%/atomic.c \ + %D%/condvar.c \ + %D%/cred.c \ %D%/getexecname.c \ + %D%/kmem.c \ + %D%/kstat.c \ + %D%/libspl.c \ %D%/list.c \ %D%/mkdirp.c \ + %D%/mutex.c \ %D%/page.c \ + %D%/procfs_list.c \ + %D%/random.c \ + %D%/rwlock.c \ + %D%/sid.c \ %D%/strlcat.c \ %D%/strlcpy.c \ + %D%/taskq.c \ + %D%/thread.c \ %D%/timestamp.c \ + %D%/tunables.c \ %D%/include/sys/list.h \ %D%/include/sys/list_impl.h @@ -43,3 +60,9 @@ libspl_la_LIBADD = \ libspl_assert.la libspl_la_LIBADD += $(LIBATOMIC_LIBS) $(LIBCLOCK_GETTIME) + +libspl_assert_la_LIBADD = $(BACKTRACE_LIBS) $(LIBUNWIND_LIBS) + +if BUILD_FREEBSD +libspl_assert_la_LIBADD += -lpthread +endif diff --git a/sys/contrib/openzfs/lib/libspl/assert.c b/sys/contrib/openzfs/lib/libspl/assert.c index ad8fdcd8cf0a..54d931104814 100644 --- a/sys/contrib/openzfs/lib/libspl/assert.c +++ b/sys/contrib/openzfs/lib/libspl/assert.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,8 +23,48 @@ * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright (c) 2024, Rob Norris <robn@despairlabs.com> + */ #include <assert.h> +#include <pthread.h> +#include <sys/backtrace.h> + +#if defined(__linux__) +#include <errno.h> +#include <sys/prctl.h> +#ifdef HAVE_GETTID +#define libspl_gettid() gettid() +#else +#include <sys/syscall.h> +#define libspl_gettid() ((pid_t)syscall(__NR_gettid)) +#endif +#define libspl_getprogname() (program_invocation_short_name) +#define libspl_getthreadname(buf, len) \ + prctl(PR_GET_NAME, (unsigned long)(buf), 0, 0, 0) +#elif defined(__FreeBSD__) || defined(__APPLE__) +#if !defined(__APPLE__) +#include <pthread_np.h> +#define libspl_gettid() pthread_getthreadid_np() +#endif +#define libspl_getprogname() getprogname() +#define libspl_getthreadname(buf, len) \ + pthread_getname_np(pthread_self(), buf, len); +#endif + +#if defined(__APPLE__) +static inline uint64_t +libspl_gettid(void) +{ + uint64_t tid; + + if (pthread_threadid_np(NULL, &tid) != 0) + tid = 0; + + return (tid); +} +#endif static boolean_t libspl_assert_ok = B_FALSE; @@ -33,20 +74,43 @@ libspl_set_assert_ok(boolean_t val) libspl_assert_ok = val; } +static pthread_mutex_t assert_lock = PTHREAD_MUTEX_INITIALIZER; + /* printf version of libspl_assert */ void libspl_assertf(const char *file, const char *func, int line, const char *format, ...) { + pthread_mutex_lock(&assert_lock); + va_list args; + char tname[64]; + + libspl_getthreadname(tname, sizeof (tname)); + + fprintf(stderr, "ASSERT at %s:%d:%s()\n", file, line, func); va_start(args, format); vfprintf(stderr, format, args); - fprintf(stderr, "\n"); - fprintf(stderr, "ASSERT at %s:%d:%s()", file, line, func); va_end(args); + + fprintf(stderr, "\n" + " PID: %-8u COMM: %s\n" +#if defined(__APPLE__) + " TID: %-8" PRIu64 " NAME: %s\n", +#else + " TID: %-8u NAME: %s\n", +#endif + getpid(), libspl_getprogname(), + libspl_gettid(), tname); + + libspl_backtrace(STDERR_FILENO); + +#if !__has_feature(attribute_analyzer_noreturn) && !defined(__COVERITY__) if (libspl_assert_ok) { + pthread_mutex_unlock(&assert_lock); return; } +#endif abort(); } diff --git a/sys/contrib/openzfs/lib/libspl/atomic.c b/sys/contrib/openzfs/lib/libspl/atomic.c index 9307cea194e6..b5cc4ab2a55f 100644 --- a/sys/contrib/openzfs/lib/libspl/atomic.c +++ b/sys/contrib/openzfs/lib/libspl/atomic.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -35,7 +36,6 @@ (void) __atomic_add_fetch(target, 1, __ATOMIC_SEQ_CST); \ } -/* BEGIN CSTYLED */ ATOMIC_INC(8, uint8_t) ATOMIC_INC(16, uint16_t) ATOMIC_INC(32, uint32_t) @@ -44,7 +44,6 @@ ATOMIC_INC(uchar, uchar_t) ATOMIC_INC(ushort, ushort_t) ATOMIC_INC(uint, uint_t) ATOMIC_INC(ulong, ulong_t) -/* END CSTYLED */ #define ATOMIC_DEC(name, type) \ @@ -53,7 +52,6 @@ ATOMIC_INC(ulong, ulong_t) (void) __atomic_sub_fetch(target, 1, __ATOMIC_SEQ_CST); \ } -/* BEGIN CSTYLED */ ATOMIC_DEC(8, uint8_t) ATOMIC_DEC(16, uint16_t) ATOMIC_DEC(32, uint32_t) @@ -62,7 +60,6 @@ ATOMIC_DEC(uchar, uchar_t) ATOMIC_DEC(ushort, ushort_t) ATOMIC_DEC(uint, uint_t) ATOMIC_DEC(ulong, ulong_t) -/* END CSTYLED */ #define ATOMIC_ADD(name, type1, type2) \ @@ -77,7 +74,6 @@ atomic_add_ptr(volatile void *target, ssize_t bits) (void) __atomic_add_fetch((void **)target, bits, __ATOMIC_SEQ_CST); } -/* BEGIN CSTYLED */ ATOMIC_ADD(8, uint8_t, int8_t) ATOMIC_ADD(16, uint16_t, int16_t) ATOMIC_ADD(32, uint32_t, int32_t) @@ -86,7 +82,6 @@ ATOMIC_ADD(char, uchar_t, signed char) ATOMIC_ADD(short, ushort_t, short) ATOMIC_ADD(int, uint_t, int) ATOMIC_ADD(long, ulong_t, long) -/* END CSTYLED */ #define ATOMIC_SUB(name, type1, type2) \ @@ -101,7 +96,6 @@ atomic_sub_ptr(volatile void *target, ssize_t bits) (void) __atomic_sub_fetch((void **)target, bits, __ATOMIC_SEQ_CST); } -/* BEGIN CSTYLED */ ATOMIC_SUB(8, uint8_t, int8_t) ATOMIC_SUB(16, uint16_t, int16_t) ATOMIC_SUB(32, uint32_t, int32_t) @@ -110,7 +104,6 @@ ATOMIC_SUB(char, uchar_t, signed char) ATOMIC_SUB(short, ushort_t, short) ATOMIC_SUB(int, uint_t, int) ATOMIC_SUB(long, ulong_t, long) -/* END CSTYLED */ #define ATOMIC_OR(name, type) \ @@ -119,7 +112,6 @@ ATOMIC_SUB(long, ulong_t, long) (void) __atomic_or_fetch(target, bits, __ATOMIC_SEQ_CST); \ } -/* BEGIN CSTYLED */ ATOMIC_OR(8, uint8_t) ATOMIC_OR(16, uint16_t) ATOMIC_OR(32, uint32_t) @@ -128,7 +120,6 @@ ATOMIC_OR(uchar, uchar_t) ATOMIC_OR(ushort, ushort_t) ATOMIC_OR(uint, uint_t) ATOMIC_OR(ulong, ulong_t) -/* END CSTYLED */ #define ATOMIC_AND(name, type) \ @@ -137,7 +128,6 @@ ATOMIC_OR(ulong, ulong_t) (void) __atomic_and_fetch(target, bits, __ATOMIC_SEQ_CST); \ } -/* BEGIN CSTYLED */ ATOMIC_AND(8, uint8_t) ATOMIC_AND(16, uint16_t) ATOMIC_AND(32, uint32_t) @@ -146,7 +136,6 @@ ATOMIC_AND(uchar, uchar_t) ATOMIC_AND(ushort, ushort_t) ATOMIC_AND(uint, uint_t) ATOMIC_AND(ulong, ulong_t) -/* END CSTYLED */ /* @@ -159,7 +148,6 @@ ATOMIC_AND(ulong, ulong_t) return (__atomic_add_fetch(target, 1, __ATOMIC_SEQ_CST)); \ } -/* BEGIN CSTYLED */ ATOMIC_INC_NV(8, uint8_t) ATOMIC_INC_NV(16, uint16_t) ATOMIC_INC_NV(32, uint32_t) @@ -168,7 +156,6 @@ ATOMIC_INC_NV(uchar, uchar_t) ATOMIC_INC_NV(ushort, ushort_t) ATOMIC_INC_NV(uint, uint_t) ATOMIC_INC_NV(ulong, ulong_t) -/* END CSTYLED */ #define ATOMIC_DEC_NV(name, type) \ @@ -177,7 +164,6 @@ ATOMIC_INC_NV(ulong, ulong_t) return (__atomic_sub_fetch(target, 1, __ATOMIC_SEQ_CST)); \ } -/* BEGIN CSTYLED */ ATOMIC_DEC_NV(8, uint8_t) ATOMIC_DEC_NV(16, uint16_t) ATOMIC_DEC_NV(32, uint32_t) @@ -186,7 +172,6 @@ ATOMIC_DEC_NV(uchar, uchar_t) ATOMIC_DEC_NV(ushort, ushort_t) ATOMIC_DEC_NV(uint, uint_t) ATOMIC_DEC_NV(ulong, ulong_t) -/* END CSTYLED */ #define ATOMIC_ADD_NV(name, type1, type2) \ @@ -201,7 +186,6 @@ atomic_add_ptr_nv(volatile void *target, ssize_t bits) return (__atomic_add_fetch((void **)target, bits, __ATOMIC_SEQ_CST)); } -/* BEGIN CSTYLED */ ATOMIC_ADD_NV(8, uint8_t, int8_t) ATOMIC_ADD_NV(16, uint16_t, int16_t) ATOMIC_ADD_NV(32, uint32_t, int32_t) @@ -210,7 +194,6 @@ ATOMIC_ADD_NV(char, uchar_t, signed char) ATOMIC_ADD_NV(short, ushort_t, short) ATOMIC_ADD_NV(int, uint_t, int) ATOMIC_ADD_NV(long, ulong_t, long) -/* END CSTYLED */ #define ATOMIC_SUB_NV(name, type1, type2) \ @@ -225,7 +208,6 @@ atomic_sub_ptr_nv(volatile void *target, ssize_t bits) return (__atomic_sub_fetch((void **)target, bits, __ATOMIC_SEQ_CST)); } -/* BEGIN CSTYLED */ ATOMIC_SUB_NV(8, uint8_t, int8_t) ATOMIC_SUB_NV(char, uchar_t, signed char) ATOMIC_SUB_NV(16, uint16_t, int16_t) @@ -234,7 +216,6 @@ ATOMIC_SUB_NV(32, uint32_t, int32_t) ATOMIC_SUB_NV(int, uint_t, int) ATOMIC_SUB_NV(long, ulong_t, long) ATOMIC_SUB_NV(64, uint64_t, int64_t) -/* END CSTYLED */ #define ATOMIC_OR_NV(name, type) \ @@ -243,7 +224,6 @@ ATOMIC_SUB_NV(64, uint64_t, int64_t) return (__atomic_or_fetch(target, bits, __ATOMIC_SEQ_CST)); \ } -/* BEGIN CSTYLED */ ATOMIC_OR_NV(8, uint8_t) ATOMIC_OR_NV(16, uint16_t) ATOMIC_OR_NV(32, uint32_t) @@ -252,7 +232,6 @@ ATOMIC_OR_NV(uchar, uchar_t) ATOMIC_OR_NV(ushort, ushort_t) ATOMIC_OR_NV(uint, uint_t) ATOMIC_OR_NV(ulong, ulong_t) -/* END CSTYLED */ #define ATOMIC_AND_NV(name, type) \ @@ -261,7 +240,6 @@ ATOMIC_OR_NV(ulong, ulong_t) return (__atomic_and_fetch(target, bits, __ATOMIC_SEQ_CST)); \ } -/* BEGIN CSTYLED */ ATOMIC_AND_NV(8, uint8_t) ATOMIC_AND_NV(16, uint16_t) ATOMIC_AND_NV(32, uint32_t) @@ -270,7 +248,6 @@ ATOMIC_AND_NV(uchar, uchar_t) ATOMIC_AND_NV(ushort, ushort_t) ATOMIC_AND_NV(uint, uint_t) ATOMIC_AND_NV(ulong, ulong_t) -/* END CSTYLED */ /* @@ -300,7 +277,6 @@ atomic_cas_ptr(volatile void *target, void *exp, void *des) return (exp); } -/* BEGIN CSTYLED */ ATOMIC_CAS(8, uint8_t) ATOMIC_CAS(16, uint16_t) ATOMIC_CAS(32, uint32_t) @@ -309,7 +285,6 @@ ATOMIC_CAS(uchar, uchar_t) ATOMIC_CAS(ushort, ushort_t) ATOMIC_CAS(uint, uint_t) ATOMIC_CAS(ulong, ulong_t) -/* END CSTYLED */ /* @@ -322,7 +297,6 @@ ATOMIC_CAS(ulong, ulong_t) return (__atomic_exchange_n(target, bits, __ATOMIC_SEQ_CST)); \ } -/* BEGIN CSTYLED */ ATOMIC_SWAP(8, uint8_t) ATOMIC_SWAP(16, uint16_t) ATOMIC_SWAP(32, uint32_t) @@ -331,7 +305,6 @@ ATOMIC_SWAP(uchar, uchar_t) ATOMIC_SWAP(ushort, ushort_t) ATOMIC_SWAP(uint, uint_t) ATOMIC_SWAP(ulong, ulong_t) -/* END CSTYLED */ void * atomic_swap_ptr(volatile void *target, void *bits) @@ -382,6 +355,12 @@ membar_exit(void) } void +membar_sync(void) +{ + __atomic_thread_fence(__ATOMIC_SEQ_CST); +} + +void membar_producer(void) { __atomic_thread_fence(__ATOMIC_RELEASE); diff --git a/sys/contrib/openzfs/lib/libspl/backtrace.c b/sys/contrib/openzfs/lib/libspl/backtrace.c new file mode 100644 index 000000000000..c4a7006a9692 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/backtrace.c @@ -0,0 +1,303 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2024, Rob Norris <robn@despairlabs.com> + * Copyright (c) 2024, Klara Inc. + */ + +#include <sys/backtrace.h> +#include <sys/types.h> +#include <sys/debug.h> +#include <unistd.h> + +/* + * Output helpers. libspl_backtrace() must not block, must be thread-safe and + * must be safe to call from a signal handler. At least, that means not having + * printf, so we end up having to call write() directly on the fd. That's + * awkward, as we always have to pass through a length, and some systems will + * complain if we don't consume the return. So we have some macros to make + * things a little more palatable. + */ +#define spl_bt_write_n(fd, s, n) \ + do { ssize_t r __maybe_unused = write(fd, s, n); } while (0) +#define spl_bt_write(fd, s) spl_bt_write_n(fd, s, sizeof (s)-1) + +#ifdef HAVE_LIBUNWIND +/* + * libunwind-gcc and libunwind-llvm both list registers using an enum, + * unw_regnum_t, however they indicate the highest numbered register for + * a given architecture in different ways. We can check which one is defined + * and mark which libunwind is in use + */ +#ifdef IS_LIBUNWIND_LLVM +#include <libunwind.h> +#define LAST_REG_INDEX _LIBUNWIND_HIGHEST_DWARF_REGISTER +#else +/* + * Need to define UNW_LOCAL_ONLY before importing libunwind.h + * if using libgcc libunwind. + */ +#define UNW_LOCAL_ONLY +#include <libunwind.h> +#define LAST_REG_INDEX UNW_TDEP_LAST_REG +#endif + + +/* + * Convert `v` to ASCII hex characters. The bottom `n` nybbles (4-bits ie one + * hex digit) will be written, up to `buflen`. The buffer will not be + * null-terminated. Returns the number of digits written. + */ +static size_t +spl_bt_u64_to_hex_str(uint64_t v, size_t n, char *buf, size_t buflen) +{ + static const char hexdigits[] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' + }; + + size_t pos = 0; + boolean_t want = (n == 0); + for (int i = 15; i >= 0; i--) { + const uint64_t d = v >> (i * 4) & 0xf; + if (!want && (d != 0 || n > i)) + want = B_TRUE; + if (want) { + buf[pos++] = hexdigits[d]; + if (pos == buflen) + break; + } + } + return (pos); +} + +void +libspl_backtrace(int fd) +{ + unw_context_t uc; + unw_cursor_t cp; + unw_word_t v; + char buf[128]; + size_t n; + int err; + + /* Snapshot the current frame and state. */ + unw_getcontext(&uc); + + /* + * TODO: walk back to the frame that tripped the assertion / the place + * where the signal was recieved. + */ + + /* + * Register dump. We're going to loop over all the registers in the + * top frame, and show them, with names, in a nice three-column + * layout, which keeps us within 80 columns. + */ + spl_bt_write(fd, "Registers:\n"); + + /* Initialise a frame cursor, starting at the current frame */ + unw_init_local(&cp, &uc); + + /* + * Iterate over all registers for the architecture. We've figured + * out the highest number above, however, not all register numbers in + * this range are defined by the architecture, and not all defined + * registers will be present on every implementation of that + * architecture. Moreover, libunwind provides nice names for most, but + * not all registers, but these are hardcoded; a name being available + * does not mean that register is available. + * + * So, we have to pull this all together here. We try to get the value + * of every possible register. If we get a value for it, then the + * register must exist, and so we get its name. If libunwind has no + * name for it, we synthesize something. These cases should be rare, + * and they're usually for uninteresting or niche registers, so it + * shouldn't really matter. We can see the value, and that's the main + * thing. + */ + uint_t cols = 0; + for (uint_t regnum = 0; regnum <= LAST_REG_INDEX; regnum++) { + /* + * Get the value. Any error probably means the register + * doesn't exist, and we skip it. LLVM libunwind iterates over + * fp registers in the same list, however they have to be + * accessed using unw_get_fpreg instead. Here, we just ignore + * them. + */ +#ifdef IS_LIBUNWIND_LLVM + if (unw_is_fpreg(&cp, regnum) || + unw_get_reg(&cp, regnum, &v) < 0) + continue; +#else + if (unw_get_reg(&cp, regnum, &v) < 0) + continue; +#endif + + /* + * Register name. If GCC libunwind doesn't have a name for it, + * it will return "???". As a shortcut, we just treat '?' + * is an alternate end-of-string character. LLVM libunwind will + * return the string 'unknown register', which we detect by + * checking if the register name is longer than 5 characters. + */ +#ifdef IS_LIBUNWIND_LLVM + const char *name = unw_regname(&cp, regnum); +#else + const char *name = unw_regname(regnum); +#endif + for (n = 0; name[n] != '\0' && name[n] != '?'; n++) {} + if (n == 0 || n > 5) { + /* + * No valid name, or likely llvm_libunwind returned + * unknown_register, so make one of the form "?xx", + * where "xx" is the two-char hex of libunwind's + * register number. + */ + buf[0] = '?'; + n = spl_bt_u64_to_hex_str(regnum, 2, + &buf[1], sizeof (buf)-1) + 1; + name = buf; + } + + /* + * Two spaces of padding before each column, plus extra + * spaces to align register names shorter than three chars. + */ + spl_bt_write_n(fd, " ", 5-MIN(n, 3)); + + /* Register name and column punctuation */ + spl_bt_write_n(fd, name, n); + spl_bt_write(fd, ": 0x"); + + /* + * Convert register value (from unw_get_reg()) to hex. We're + * assuming that all registers are 64-bits wide, which is + * probably fine for any general-purpose registers on any + * machine currently in use. A more generic way would be to + * look at the width of unw_word_t, but that would also + * complicate the column code a bit. This is fine. + */ + n = spl_bt_u64_to_hex_str(v, 16, buf, sizeof (buf)); + spl_bt_write_n(fd, buf, n); + + /* Every third column, emit a newline */ + if (!(++cols % 3)) + spl_bt_write(fd, "\n"); + } + + /* If we finished before the third column, emit a newline. */ + if (cols % 3) + spl_bt_write(fd, "\n"); + + /* Now the main event, the backtrace. */ + spl_bt_write(fd, "Call trace:\n"); + + /* Reset the cursor to the top again. */ + unw_init_local(&cp, &uc); + + do { + /* + * Getting the IP should never fail; libunwind handles it + * specially, because its used a lot internally. Still, no + * point being silly about it, as the last thing we want is + * our crash handler to crash. So if it ever does fail, we'll + * show an error line, but keep going to the next frame. + */ + if (unw_get_reg(&cp, UNW_REG_IP, &v) < 0) { + spl_bt_write(fd, " [couldn't get IP register; " + "corrupt frame?]"); + continue; + } + + /* IP & punctuation */ + n = spl_bt_u64_to_hex_str(v, 16, buf, sizeof (buf)); + spl_bt_write(fd, " [0x"); + spl_bt_write_n(fd, buf, n); + spl_bt_write(fd, "] "); + + /* + * Function ("procedure") name for the current frame. `v` + * receives the offset from the named function to the IP, which + * we show as a "+offset" suffix. + * + * If libunwind can't determine the name, we just show "???" + * instead. We've already displayed the IP above; that will + * have to do. + * + * unw_get_proc_name() will return ENOMEM if the buffer is too + * small, instead truncating the name. So we treat that as a + * success and use whatever is in the buffer. + */ + err = unw_get_proc_name(&cp, buf, sizeof (buf), &v); + if (err == 0 || err == -UNW_ENOMEM) { + for (n = 0; n < sizeof (buf) && buf[n] != '\0'; n++) {} + spl_bt_write_n(fd, buf, n); + + /* Offset from proc name */ + spl_bt_write(fd, "+0x"); + n = spl_bt_u64_to_hex_str(v, 2, buf, sizeof (buf)); + spl_bt_write_n(fd, buf, n); + } else + spl_bt_write(fd, "???"); + +#ifdef HAVE_LIBUNWIND_ELF + /* + * Newer libunwind has unw_get_elf_filename(), which gets + * the name of the ELF object that the frame was executing in. + * Like `unw_get_proc_name()`, `v` recieves the offset within + * the file, and UNW_ENOMEM indicates that a truncate filename + * was left in the buffer. + */ + err = unw_get_elf_filename(&cp, buf, sizeof (buf), &v); + if (err == 0 || err == -UNW_ENOMEM) { + for (n = 0; n < sizeof (buf) && buf[n] != '\0'; n++) {} + spl_bt_write(fd, " (in "); + spl_bt_write_n(fd, buf, n); + + /* Offset within file */ + spl_bt_write(fd, " +0x"); + n = spl_bt_u64_to_hex_str(v, 2, buf, sizeof (buf)); + spl_bt_write_n(fd, buf, n); + spl_bt_write(fd, ")"); + } +#endif + spl_bt_write(fd, "\n"); + } while (unw_step(&cp) > 0); +} +#elif defined(HAVE_BACKTRACE) +#include <execinfo.h> + +void +libspl_backtrace(int fd) +{ + void *btptrs[64]; + size_t nptrs = backtrace(btptrs, 64); + spl_bt_write(fd, "Call trace:\n"); + backtrace_symbols_fd(btptrs, nptrs, fd); +} +#else +void +libspl_backtrace(int fd __maybe_unused) +{ +} +#endif diff --git a/sys/contrib/openzfs/lib/libspl/condvar.c b/sys/contrib/openzfs/lib/libspl/condvar.c new file mode 100644 index 000000000000..3d70fe152089 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/condvar.c @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <assert.h> +#include <pthread.h> +#include <errno.h> +#include <string.h> +#include <sys/timer.h> +#include <sys/condvar.h> + +/* + * ========================================================================= + * condition variables + * ========================================================================= + */ + +void +cv_init(kcondvar_t *cv, char *name, int type, void *arg) +{ + (void) name, (void) type, (void) arg; + VERIFY0(pthread_cond_init(cv, NULL)); +} + +void +cv_destroy(kcondvar_t *cv) +{ + VERIFY0(pthread_cond_destroy(cv)); +} + +void +cv_wait(kcondvar_t *cv, kmutex_t *mp) +{ + memset(&mp->m_owner, 0, sizeof (pthread_t)); + VERIFY0(pthread_cond_wait(cv, &mp->m_lock)); + mp->m_owner = pthread_self(); +} + +int +cv_wait_sig(kcondvar_t *cv, kmutex_t *mp) +{ + cv_wait(cv, mp); + return (1); +} + +int +cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime) +{ + int error; + struct timeval tv; + struct timespec ts; + clock_t delta; + + delta = abstime - ddi_get_lbolt(); + if (delta <= 0) + return (-1); + + VERIFY0(gettimeofday(&tv, NULL)); + + ts.tv_sec = tv.tv_sec + delta / hz; + ts.tv_nsec = tv.tv_usec * NSEC_PER_USEC + (delta % hz) * (NANOSEC / hz); + if (ts.tv_nsec >= NANOSEC) { + ts.tv_sec++; + ts.tv_nsec -= NANOSEC; + } + + memset(&mp->m_owner, 0, sizeof (pthread_t)); + error = pthread_cond_timedwait(cv, &mp->m_lock, &ts); + mp->m_owner = pthread_self(); + + if (error == ETIMEDOUT) + return (-1); + + VERIFY0(error); + + return (1); +} + +int +cv_timedwait_hires(kcondvar_t *cv, kmutex_t *mp, hrtime_t tim, hrtime_t res, + int flag) +{ + (void) res; + int error; + struct timeval tv; + struct timespec ts; + hrtime_t delta; + + ASSERT(flag == 0 || flag == CALLOUT_FLAG_ABSOLUTE); + + delta = tim; + if (flag & CALLOUT_FLAG_ABSOLUTE) + delta -= gethrtime(); + + if (delta <= 0) + return (-1); + + VERIFY0(gettimeofday(&tv, NULL)); + + ts.tv_sec = tv.tv_sec + delta / NANOSEC; + ts.tv_nsec = tv.tv_usec * NSEC_PER_USEC + (delta % NANOSEC); + if (ts.tv_nsec >= NANOSEC) { + ts.tv_sec++; + ts.tv_nsec -= NANOSEC; + } + + memset(&mp->m_owner, 0, sizeof (pthread_t)); + error = pthread_cond_timedwait(cv, &mp->m_lock, &ts); + mp->m_owner = pthread_self(); + + if (error == ETIMEDOUT) + return (-1); + + VERIFY0(error); + + return (1); +} + +void +cv_signal(kcondvar_t *cv) +{ + VERIFY0(pthread_cond_signal(cv)); +} + +void +cv_broadcast(kcondvar_t *cv) +{ + VERIFY0(pthread_cond_broadcast(cv)); +} diff --git a/sys/contrib/openzfs/lib/libspl/cred.c b/sys/contrib/openzfs/lib/libspl/cred.c new file mode 100644 index 000000000000..130323ea91a7 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/cred.c @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <sys/cred.h> + +uid_t +crgetuid(cred_t *cr) +{ + (void) cr; + return (0); +} + +uid_t +crgetruid(cred_t *cr) +{ + (void) cr; + return (0); +} + +gid_t +crgetgid(cred_t *cr) +{ + (void) cr; + return (0); +} + +int +crgetngroups(cred_t *cr) +{ + (void) cr; + return (0); +} + +gid_t * +crgetgroups(cred_t *cr) +{ + (void) cr; + return (NULL); +} diff --git a/sys/contrib/openzfs/lib/libspl/getexecname.c b/sys/contrib/openzfs/lib/libspl/getexecname.c index dca7162034f7..56ba5aa86058 100644 --- a/sys/contrib/openzfs/lib/libspl/getexecname.c +++ b/sys/contrib/openzfs/lib/libspl/getexecname.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/Makefile.am b/sys/contrib/openzfs/lib/libspl/include/Makefile.am index 6f0e1818d22e..e68742409839 100644 --- a/sys/contrib/openzfs/lib/libspl/include/Makefile.am +++ b/sys/contrib/openzfs/lib/libspl/include/Makefile.am @@ -4,6 +4,7 @@ libspl_HEADERS = \ %D%/atomic.h \ %D%/libgen.h \ %D%/libshare.h \ + %D%/libspl.h \ %D%/statcommon.h \ %D%/stdlib.h \ %D%/string.h \ @@ -26,8 +27,11 @@ libspl_sysdir = $(libspldir)/sys libspl_sys_HEADERS = \ %D%/sys/acl.h \ %D%/sys/acl_impl.h \ + %D%/sys/asm_linkage.h \ + %D%/sys/backtrace.h \ %D%/sys/callb.h \ %D%/sys/cmn_err.h \ + %D%/sys/condvar.h \ %D%/sys/cred.h \ %D%/sys/debug.h \ %D%/sys/dkio.h \ @@ -39,22 +43,34 @@ libspl_sys_HEADERS = \ %D%/sys/kstat.h \ %D%/sys/list.h \ %D%/sys/list_impl.h \ + %D%/sys/misc.h \ %D%/sys/mhd.h \ %D%/sys/mkdev.h \ + %D%/sys/mod.h \ + %D%/sys/mutex.h \ %D%/sys/policy.h \ %D%/sys/poll.h \ %D%/sys/priv.h \ %D%/sys/processor.h \ - %D%/sys/sha2.h \ + %D%/sys/procfs_list.h \ + %D%/sys/random.h \ + %D%/sys/rwlock.h \ + %D%/sys/sid.h \ %D%/sys/simd.h \ %D%/sys/stack.h \ %D%/sys/stdtypes.h \ %D%/sys/string.h \ %D%/sys/sunddi.h \ + %D%/sys/sysmacros.h \ %D%/sys/systeminfo.h \ + %D%/sys/systm.h \ + %D%/sys/thread.h \ + %D%/sys/taskq.h \ %D%/sys/time.h \ - %D%/sys/trace_spl.h \ - %D%/sys/trace_zfs.h \ + %D%/sys/timer.h \ + %D%/sys/trace.h \ + %D%/sys/tsd.h \ + %D%/sys/tunables.h \ %D%/sys/types.h \ %D%/sys/types32.h \ %D%/sys/uio.h \ @@ -62,6 +78,8 @@ libspl_sys_HEADERS = \ %D%/sys/wmsum.h \ %D%/sys/zone.h +libspl_ia32dir = $(libspldir)/sys/ia32 + if BUILD_LINUX libspl_sys_HEADERS += \ %D%/os/linux/sys/byteorder.h \ @@ -70,8 +88,10 @@ libspl_sys_HEADERS += \ %D%/os/linux/sys/mount.h \ %D%/os/linux/sys/param.h \ %D%/os/linux/sys/stat.h \ - %D%/os/linux/sys/sysmacros.h \ - %D%/os/linux/sys/zfs_context_os.h + %D%/os/linux/sys/vfs.h + +libspl_ia32_HEADERS = \ + %D%/os/linux/sys/ia32/asm_linkage.h endif if BUILD_FREEBSD @@ -83,12 +103,14 @@ libspl_sys_HEADERS += \ %D%/os/freebsd/sys/mount.h \ %D%/os/freebsd/sys/param.h \ %D%/os/freebsd/sys/stat.h \ - %D%/os/freebsd/sys/sysmacros.h \ - %D%/os/freebsd/sys/vfs.h \ - %D%/os/freebsd/sys/zfs_context_os.h + %D%/os/freebsd/sys/vfs.h + +libspl_ia32_HEADERS = \ + %D%/os/freebsd/sys/ia32/asm_linkage.h endif libspl_sys_dktpdir = $(libspl_sysdir)/dktp libspl_sys_dktp_HEADERS = \ %D%/sys/dktp/fdisk.h + diff --git a/sys/contrib/openzfs/lib/libspl/include/assert.h b/sys/contrib/openzfs/lib/libspl/include/assert.h index e968a2310774..e704a899e748 100644 --- a/sys/contrib/openzfs/lib/libspl/include/assert.h +++ b/sys/contrib/openzfs/lib/libspl/include/assert.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -34,12 +35,24 @@ #include <stdarg.h> #include <sys/types.h> +/* Workaround for non-Clang compilers */ +#ifndef __has_feature +#define __has_feature(x) 0 +#endif + +/* We need to workaround libspl_set_assert_ok() that we have for zdb */ +#if __has_feature(attribute_analyzer_noreturn) || defined(__COVERITY__) +#define NORETURN __attribute__((__noreturn__)) +#else +#define NORETURN +#endif + /* Set to non-zero to avoid abort()ing on an assertion failure */ extern void libspl_set_assert_ok(boolean_t val); /* printf version of libspl_assert */ extern void libspl_assertf(const char *file, const char *func, int line, - const char *format, ...); + const char *format, ...) NORETURN __attribute__((format(printf, 4, 5))); static inline int libspl_assert(const char *buf, const char *file, const char *func, int line) @@ -52,21 +65,34 @@ libspl_assert(const char *buf, const char *file, const char *func, int line) #undef verify #endif +#define PANIC(fmt, a...) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, fmt, ## a) + #define VERIFY(cond) \ (void) ((!(cond)) && \ libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__)) + +#define VERIFYF(cond, STR, ...) \ +do { \ + if (!(cond)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "%s " STR, #cond, \ + __VA_ARGS__); \ +} while (0) + #define verify(cond) \ (void) ((!(cond)) && \ libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__)) #define VERIFY3B(LEFT, OP, RIGHT) \ do { \ - const boolean_t __left = (boolean_t)(LEFT); \ - const boolean_t __right = (boolean_t)(RIGHT); \ + const boolean_t __left = (boolean_t)!!(LEFT); \ + const boolean_t __right = (boolean_t)!!(RIGHT); \ if (!(__left OP __right)) \ libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ - "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \ - (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ + "VERIFY3B(%s, %s, %s) failed " \ + "(%d %s %d)", #LEFT, #OP, #RIGHT, \ + __left, #OP, __right); \ } while (0) #define VERIFY3S(LEFT, OP, RIGHT) \ @@ -75,8 +101,9 @@ do { \ const int64_t __right = (int64_t)(RIGHT); \ if (!(__left OP __right)) \ libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ - "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \ - (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ + "VERIFY3S(%s, %s, %s) failed " \ + "(%lld %s 0x%lld)", #LEFT, #OP, #RIGHT, \ + (longlong_t)__left, #OP, (longlong_t)__right); \ } while (0) #define VERIFY3U(LEFT, OP, RIGHT) \ @@ -85,7 +112,8 @@ do { \ const uint64_t __right = (uint64_t)(RIGHT); \ if (!(__left OP __right)) \ libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ - "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \ + "VERIFY3U(%s, %s, %s) failed " \ + "(%llu %s %llu)", #LEFT, #OP, #RIGHT, \ (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ } while (0) @@ -95,8 +123,9 @@ do { \ const uintptr_t __right = (uintptr_t)(RIGHT); \ if (!(__left OP __right)) \ libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ - "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \ - (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ + "VERIFY3P(%s, %s, %s) failed " \ + "(%p %s %p)", #LEFT, #OP, #RIGHT, \ + (void *)__left, #OP, (void *)__right); \ } while (0) #define VERIFY0(LEFT) \ @@ -104,10 +133,92 @@ do { \ const uint64_t __left = (uint64_t)(LEFT); \ if (!(__left == 0)) \ libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ - "%s == 0 (0x%llx == 0)", #LEFT, \ + "VERIFY0(%s) failed (%lld)", #LEFT, \ (u_longlong_t)__left); \ } while (0) +#define VERIFY0P(LEFT) \ +do { \ + const uintptr_t __left = (uintptr_t)(LEFT); \ + if (!(__left == 0)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY0P(%s) failed (%p)", #LEFT, \ + (void *)__left); \ +} while (0) + +/* + * This is just here because cstyle gets upset about #LEFT + * on a newline. + */ + +/* BEGIN CSTYLED */ +#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) \ +do { \ + const boolean_t __left = (boolean_t)!!(LEFT); \ + const boolean_t __right = (boolean_t)!!(RIGHT); \ + if (!(__left OP __right)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY3B(%s, %s, %s) failed " \ + "(%d %s %d) " STR, #LEFT, #OP, #RIGHT, \ + __left, #OP, __right, \ + __VA_ARGS__); \ +} while (0) + +#define VERIFY3SF(LEFT, OP, RIGHT, STR, ...) \ +do { \ + const int64_t __left = (int64_t)(LEFT); \ + const int64_t __right = (int64_t)(RIGHT); \ + if (!(__left OP __right)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY3S(%s, %s, %s) failed " \ + "(%lld %s %lld) " STR, #LEFT, #OP, #RIGHT, \ + (longlong_t)__left, #OP, (longlong_t)__right, \ + __VA_ARGS__); \ +} while (0) + +#define VERIFY3UF(LEFT, OP, RIGHT, STR, ...) \ +do { \ + const uint64_t __left = (uint64_t)(LEFT); \ + const uint64_t __right = (uint64_t)(RIGHT); \ + if (!(__left OP __right)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY3U(%s, %s, %s) failed " \ + "(%llu %s %llu) " STR, #LEFT, #OP, #RIGHT, \ + (u_longlong_t)__left, #OP, (u_longlong_t)__right, \ + __VA_ARGS__); \ +} while (0) + +#define VERIFY3PF(LEFT, OP, RIGHT, STR, ...) \ +do { \ + const uintptr_t __left = (uintptr_t)(LEFT); \ + const uintptr_t __right = (uintptr_t)(RIGHT); \ + if (!(__left OP __right)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY3P(%s, %s, %s) failed " \ + "(%p %s %p) " STR, #LEFT, #OP, #RIGHT, \ + (void *)__left, #OP, (void *)__right, \ + __VA_ARGS__); \ +} while (0) +/* END CSTYLED */ + +#define VERIFY0F(LEFT, STR, ...) \ +do { \ + const int64_t __left = (int64_t)(LEFT); \ + if (!(__left == 0)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY0(%s) failed (%lld) " STR, #LEFT, \ + (longlong_t)__left, __VA_ARGS__); \ +} while (0) + +#define VERIFY0PF(LEFT, STR, ...) \ +do { \ + const uintptr_t __left = (uintptr_t)(LEFT); \ + if (!(__left == 0)) \ + libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY0P(%s) failed (%p) " STR, #LEFT, \ + (void *)__left, __VA_ARGS__); \ +} while (0) + #ifdef assert #undef assert #endif @@ -122,7 +233,16 @@ do { \ #define ASSERT3P(x, y, z) \ ((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z))) #define ASSERT0(x) ((void) sizeof ((uintptr_t)(x))) +#define ASSERT0P(x) ((void) sizeof ((uintptr_t)(x))) +#define ASSERT3BF(x, y, z, str, ...) ASSERT3B(x, y, z) +#define ASSERT3SF(x, y, z, str, ...) ASSERT3S(x, y, z) +#define ASSERT3UF(x, y, z, str, ...) ASSERT3U(x, y, z) +#define ASSERT3PF(x, y, z, str, ...) ASSERT3P(x, y, z) +#define ASSERT0P(x) ((void) sizeof ((uintptr_t)(x))) +#define ASSERT0PF(x, str, ...) ASSERT0P(x) +#define ASSERT0F(x, str, ...) ASSERT0(x) #define ASSERT(x) ((void) sizeof ((uintptr_t)(x))) +#define ASSERTF(x, str, ...) ASSERT(x) #define assert(x) ((void) sizeof ((uintptr_t)(x))) #define IMPLY(A, B) \ ((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B))) @@ -134,16 +254,21 @@ do { \ #define ASSERT3U VERIFY3U #define ASSERT3P VERIFY3P #define ASSERT0 VERIFY0 +#define ASSERT0P VERIFY0P +#define ASSERT3BF VERIFY3BF +#define ASSERT3SF VERIFY3SF +#define ASSERT3UF VERIFY3UF +#define ASSERT3PF VERIFY3PF +#define ASSERT0PF VERIFY0PF +#define ASSERT0F VERIFY0F #define ASSERT VERIFY +#define ASSERTF VERIFYF #define assert VERIFY #define IMPLY(A, B) \ ((void)(((!(A)) || (B)) || \ libspl_assert("(" #A ") implies (" #B ")", \ __FILE__, __FUNCTION__, __LINE__))) -#define EQUIV(A, B) \ - ((void)((!!(A) == !!(B)) || \ - libspl_assert("(" #A ") is equivalent to (" #B ")", \ - __FILE__, __FUNCTION__, __LINE__))) +#define EQUIV(A, B) VERIFY3B(A, ==, B) #endif /* NDEBUG */ diff --git a/sys/contrib/openzfs/lib/libspl/include/atomic.h b/sys/contrib/openzfs/lib/libspl/include/atomic.h index 8dd1d654a486..cc6f2e2ce988 100644 --- a/sys/contrib/openzfs/lib/libspl/include/atomic.h +++ b/sys/contrib/openzfs/lib/libspl/include/atomic.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -314,6 +315,13 @@ extern void membar_enter(void); extern void membar_exit(void); /* + * Make all stores and loads emitted prior to the the barrier complete before + * crossing it, while also making sure stores and loads emitted after the + * barrier only start being executed after crossing it. + */ +extern void membar_sync(void); + +/* * Arrange that all stores issued before this point in the code reach * global visibility before any stores that follow; useful in producer * modules that update a data item, then set a flag that it is available. diff --git a/sys/contrib/openzfs/lib/libspl/include/libgen.h b/sys/contrib/openzfs/lib/libspl/include/libgen.h index c46d7454e49f..18d3e1d891b8 100644 --- a/sys/contrib/openzfs/lib/libspl/include/libgen.h +++ b/sys/contrib/openzfs/lib/libspl/include/libgen.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/libshare.h b/sys/contrib/openzfs/lib/libspl/include/libshare.h index ae0e2c39dc6d..bfa78bffd461 100644 --- a/sys/contrib/openzfs/lib/libspl/include/libshare.h +++ b/sys/contrib/openzfs/lib/libspl/include/libshare.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,7 +23,7 @@ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. - * Copyright (c) 2019, 2020 by Delphix. All rights reserved. + * Copyright (c) 2019, 2022 by Delphix. All rights reserved. */ #ifndef _LIBSPL_LIBSHARE_H #define _LIBSPL_LIBSHARE_H extern __attribute__((visibility("default"))) @@ -88,6 +89,7 @@ _LIBSPL_LIBSHARE_H int sa_enable_share(const char *, const char *, const char *, _LIBSPL_LIBSHARE_H int sa_disable_share(const char *, enum sa_protocol); _LIBSPL_LIBSHARE_H boolean_t sa_is_shared(const char *, enum sa_protocol); _LIBSPL_LIBSHARE_H void sa_commit_shares(enum sa_protocol); +_LIBSPL_LIBSHARE_H void sa_truncate_shares(enum sa_protocol); /* protocol specific interfaces */ _LIBSPL_LIBSHARE_H int sa_validate_shareopts(const char *, enum sa_protocol); diff --git a/sys/contrib/openzfs/lib/libspl/include/libspl.h b/sys/contrib/openzfs/lib/libspl/include/libspl.h new file mode 100644 index 000000000000..68756bb9597b --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/libspl.h @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2025, Rob Norris <robn@despairlabs.com> + */ + +#ifndef _LIBSPL_H +#define _LIBSPL_H extern __attribute__((visibility("default"))) + +#ifdef __cplusplus +extern "C" { +#endif + +_LIBSPL_H void libspl_init(void); +_LIBSPL_H void libspl_fini(void); + +#ifdef __cplusplus +}; +#endif + +#endif /* _LIBSPL_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/fcntl.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/fcntl.h index 26d571ad8926..1222b3d7a6b5 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/fcntl.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/fcntl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021 iXsystems, Inc. * 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 d4227ddc5465..116ce991b89b 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 @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -59,6 +60,18 @@ extern "C" { */ #if !defined(_XPG4_2) || defined(__EXTENSIONS__) +#ifdef __COVERITY__ +/* + * Coverity's taint warnings from byteswapping are false positives for us. + * Suppress them by hiding byteswapping from Coverity. + */ +#define BSWAP_8(x) ((x) & 0xff) +#define BSWAP_16(x) ((x) & 0xffff) +#define BSWAP_32(x) ((x) & 0xffffffff) +#define BSWAP_64(x) (x) + +#else /* __COVERITY__ */ + /* * Macros to reverse byte order */ @@ -67,6 +80,8 @@ extern "C" { #define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16)) #define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32)) +#endif /* __COVERITY__ */ + #define BMASK_8(x) ((x) & 0xff) #define BMASK_16(x) ((x) & 0xffff) #define BMASK_32(x) ((x) & 0xffffffff) diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/fcntl.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/fcntl.h index c8a37a193850..04fcc9f85c91 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/fcntl.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/fcntl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2021 iXsystems, Inc. * @@ -26,7 +27,9 @@ #ifndef _LIBSPL_SYS_FCNTL_H_ #define _LIBSPL_SYS_FCNTL_H_ +#if !defined(__linux__) || !defined(IN_BASE) #include_next <sys/fcntl.h> +#endif #define O_LARGEFILE 0 #define O_RSYNC 0 diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/file.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/file.h index 5a20686dc069..75c3b23860bb 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/file.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/file.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/ia32/asm_linkage.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/ia32/asm_linkage.h new file mode 100644 index 000000000000..f9c34d282d46 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/ia32/asm_linkage.h @@ -0,0 +1,185 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _IA32_SYS_ASM_LINKAGE_H +#define _IA32_SYS_ASM_LINKAGE_H + +#if defined(__linux__) && defined(CONFIG_SLS) +#define RET ret; int3 +#else +#define RET ret +#endif + +/* Tell compiler to call assembler like Unix */ +#undef ASMABI +#define ASMABI __attribute__((sysv_abi)) + +#define ENDBR + +#define SECTION_TEXT .text +#define SECTION_STATIC .section .rodata + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _ASM /* The remainder of this file is only for assembly files */ + +/* + * make annoying differences in assembler syntax go away + */ + +/* + * D16 and A16 are used to insert instructions prefixes; the + * macros help the assembler code be slightly more portable. + */ +#if !defined(__GNUC_AS__) +/* + * /usr/ccs/bin/as prefixes are parsed as separate instructions + */ +#define D16 data16; +#define A16 addr16; + +/* + * (There are some weird constructs in constant expressions) + */ +#define _CONST(const) [const] +#define _BITNOT(const) -1!_CONST(const) +#define _MUL(a, b) _CONST(a \* b) + +#else +/* + * Why not use the 'data16' and 'addr16' prefixes .. well, the + * assembler doesn't quite believe in real mode, and thus argues with + * us about what we're trying to do. + */ +#define D16 .byte 0x66; +#define A16 .byte 0x67; + +#define _CONST(const) (const) +#define _BITNOT(const) ~_CONST(const) +#define _MUL(a, b) _CONST(a * b) + +#endif + +/* + * C pointers are different sizes between i386 and amd64. + * These constants can be used to compute offsets into pointer arrays. + */ +#if defined(__amd64) +#define CLONGSHIFT 3 +#define CLONGSIZE 8 +#define CLONGMASK 7 +#elif defined(__i386) +#define CLONGSHIFT 2 +#define CLONGSIZE 4 +#define CLONGMASK 3 +#endif + +/* + * Since we know we're either ILP32 or LP64 .. + */ +#define CPTRSHIFT CLONGSHIFT +#define CPTRSIZE CLONGSIZE +#define CPTRMASK CLONGMASK + +#if CPTRSIZE != (1 << CPTRSHIFT) || CLONGSIZE != (1 << CLONGSHIFT) +#error "inconsistent shift constants" +#endif + +#if CPTRMASK != (CPTRSIZE - 1) || CLONGMASK != (CLONGSIZE - 1) +#error "inconsistent mask constants" +#endif + +#define ASM_ENTRY_ALIGN 16 + +/* + * SSE register alignment and save areas + */ + +#define XMM_SIZE 16 +#define XMM_ALIGN 16 + +/* + * ENTRY provides the standard procedure entry code and an easy way to + * insert the calls to mcount for profiling. ENTRY_NP is identical, but + * never calls mcount. + */ +#define ENTRY(x) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x; \ +x: MCOUNT(x) + +#define ENTRY_NP(x) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x; \ +x: + +#define ENTRY_ALIGN(x, a) \ + .text; \ + .balign a; \ + .globl x; \ +x: + +#define FUNCTION(x) \ + .type x, @function; \ +x: + +/* + * ENTRY2 is identical to ENTRY but provides two labels for the entry point. + */ +#define ENTRY2(x, y) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x, y; \ +x:; \ +y: MCOUNT(x) + +#define ENTRY_NP2(x, y) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x, y; \ +x:; \ +y: + + +/* + * SET_SIZE trails a function and set the size for the ELF symbol table. + */ +#define SET_SIZE(x) + +#define SET_OBJ(x) + +#endif /* _ASM */ + +#ifdef __cplusplus +} +#endif + +#endif /* _IA32_SYS_ASM_LINKAGE_H */ 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 aa3132fb3cc0..e520bf5ef3bb 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 @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mount.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mount.h index e99518571270..5548ad7d22b2 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mount.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/mount.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -28,8 +29,10 @@ #ifndef _LIBSPL_SYS_MOUNT_H #define _LIBSPL_SYS_MOUNT_H +#if !defined(__linux__) || !defined(IN_BASE) #undef _SYS_MOUNT_H_ #include_next <sys/mount.h> +#endif #include <assert.h> #include <string.h> diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h index cb5260ea3d7e..a693149115db 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -57,6 +58,10 @@ extern size_t spl_pagesize(void); #define PAGESIZE (spl_pagesize()) +#define ptob(x) ((x) * PAGESIZE) + +#ifndef HAVE_EXECVPE extern int execvpe(const char *name, char * const argv[], char * const envp[]); +#endif #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/stat.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/stat.h index 38c684d62a1b..666f2ec6d760 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/stat.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/stat.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -76,8 +77,12 @@ fstat64_blk(int fd, struct stat64 *st) /* * Only Intel-based Macs have a separate stat64; Arm-based Macs are like * FreeBSD and have a full 64-bit stat from the start. + * + * On Linux, musl libc is full 64-bit too and has deprecated its own version + * of these defines since version 1.2.4. */ -#if defined(__APPLE__) && !(defined(__i386__) || defined(__x86_64__)) +#if (defined(__APPLE__) && !(defined(__i386__) || defined(__x86_64__))) || \ + (defined(__linux__) && !defined(__GLIBC__)) #define stat64 stat #define fstat64 fstat #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/vfs.h b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/vfs.h index 55eb3c23b22e..228ec5905240 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/vfs.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/vfs.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2020 iXsystems, Inc. * All rights reserved. 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 47af7700f031..4fba62addd3b 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 @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -90,6 +91,18 @@ extern in_port_t ntohs(in_port_t); #if !defined(_XPG4_2) || defined(__EXTENSIONS__) +#ifdef __COVERITY__ +/* + * Coverity's taint warnings from byteswapping are false positives for us. + * Suppress them by hiding byteswapping from Coverity. + */ +#define BSWAP_8(x) ((x) & 0xff) +#define BSWAP_16(x) ((x) & 0xffff) +#define BSWAP_32(x) ((x) & 0xffffffff) +#define BSWAP_64(x) (x) + +#else /* __COVERITY__ */ + /* * Macros to reverse byte order */ @@ -98,6 +111,8 @@ extern in_port_t ntohs(in_port_t); #define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16)) #define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32)) +#endif /* __COVERITY__ */ + #define BMASK_8(x) ((x) & 0xff) #define BMASK_16(x) ((x) & 0xffff) #define BMASK_32(x) ((x) & 0xffffffff) diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/errno.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/errno.h index 30d20ab895c5..dd0120100a3d 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/errno.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/errno.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/ia32/asm_linkage.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/ia32/asm_linkage.h new file mode 100644 index 000000000000..e1d25346b13e --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/ia32/asm_linkage.h @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _IA32_SYS_ASM_LINKAGE_H +#define _IA32_SYS_ASM_LINKAGE_H + +#if defined(_KERNEL) && defined(__linux__) +#include <linux/linkage.h> +#endif + +#ifndef ENDBR +#if defined(__ELF__) && defined(__CET__) && defined(__has_include) +/* CSTYLED */ +#if __has_include(<cet.h>) + +#include <cet.h> + +#ifdef _CET_ENDBR +#define ENDBR _CET_ENDBR +#endif /* _CET_ENDBR */ + +#endif /* <cet.h> */ +#endif /* __ELF__ && __CET__ && __has_include */ +#endif /* !ENDBR */ + +#ifndef ENDBR +#define ENDBR +#endif +#ifndef RET +#define RET ret +#endif + +/* You can set to nothing on Unix platforms */ +#undef ASMABI +#define ASMABI __attribute__((sysv_abi)) + +#define SECTION_TEXT .text +#define SECTION_STATIC .section .rodata + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _ASM /* The remainder of this file is only for assembly files */ + +/* + * make annoying differences in assembler syntax go away + */ + +/* + * D16 and A16 are used to insert instructions prefixes; the + * macros help the assembler code be slightly more portable. + */ +#if !defined(__GNUC_AS__) +/* + * /usr/ccs/bin/as prefixes are parsed as separate instructions + */ +#define D16 data16; +#define A16 addr16; + +/* + * (There are some weird constructs in constant expressions) + */ +#define _CONST(const) [const] +#define _BITNOT(const) -1!_CONST(const) +#define _MUL(a, b) _CONST(a \* b) + +#else +/* + * Why not use the 'data16' and 'addr16' prefixes .. well, the + * assembler doesn't quite believe in real mode, and thus argues with + * us about what we're trying to do. + */ +#define D16 .byte 0x66; +#define A16 .byte 0x67; + +#define _CONST(const) (const) +#define _BITNOT(const) ~_CONST(const) +#define _MUL(a, b) _CONST(a * b) + +#endif + +/* + * C pointers are different sizes between i386 and amd64. + * These constants can be used to compute offsets into pointer arrays. + */ +#if defined(__amd64) +#define CLONGSHIFT 3 +#define CLONGSIZE 8 +#define CLONGMASK 7 +#elif defined(__i386) +#define CLONGSHIFT 2 +#define CLONGSIZE 4 +#define CLONGMASK 3 +#endif + +/* + * Since we know we're either ILP32 or LP64 .. + */ +#define CPTRSHIFT CLONGSHIFT +#define CPTRSIZE CLONGSIZE +#define CPTRMASK CLONGMASK + +#if CPTRSIZE != (1 << CPTRSHIFT) || CLONGSIZE != (1 << CLONGSHIFT) +#error "inconsistent shift constants" +#endif + +#if CPTRMASK != (CPTRSIZE - 1) || CLONGMASK != (CLONGSIZE - 1) +#error "inconsistent mask constants" +#endif + +#define ASM_ENTRY_ALIGN 16 + +/* + * SSE register alignment and save areas + */ + +#define XMM_SIZE 16 +#define XMM_ALIGN 16 + +/* + * ENTRY provides the standard procedure entry code and an easy way to + * insert the calls to mcount for profiling. ENTRY_NP is identical, but + * never calls mcount. + */ +#undef ENTRY +#define ENTRY(x) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x; \ + .type x, @function; \ +x: MCOUNT(x) + +#define ENTRY_NP(x) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x; \ + .type x, @function; \ +x: + +#define ENTRY_ALIGN(x, a) \ + .text; \ + .balign a; \ + .globl x; \ + .type x, @function; \ +x: + +#define FUNCTION(x) \ + .type x, @function; \ +x: + +/* + * ENTRY2 is identical to ENTRY but provides two labels for the entry point. + */ +#define ENTRY2(x, y) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x, y; \ + .type x, @function; \ + .type y, @function; \ +x:; \ +y: MCOUNT(x) + +#define ENTRY_NP2(x, y) \ + .text; \ + .balign ASM_ENTRY_ALIGN; \ + .globl x, y; \ + .type x, @function; \ + .type y, @function; \ +x:; \ +y: + + +/* + * SET_SIZE trails a function and set the size for the ELF symbol table. + */ +#define SET_SIZE(x) \ + .size x, [.-x] + +#define SET_OBJ(x) .type x, @object + +#endif /* _ASM */ + +#ifdef __cplusplus +} +#endif + +#endif /* _IA32_SYS_ASM_LINKAGE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mnttab.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mnttab.h index 21592aaaacee..c1b7f3b389c0 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mnttab.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mnttab.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mount.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mount.h index d7c6f750e23d..c4a291f5c22d 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mount.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/mount.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/param.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/param.h index 26335187fdca..169d5875fcf0 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/param.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/param.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -64,4 +65,6 @@ extern size_t spl_pagesize(void); #define PAGESIZE (spl_pagesize()) +#define ptob(x) ((x) * PAGESIZE) + #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/stat.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/stat.h index 3e8d27e4c19a..13cc0b46ac93 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/stat.h +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/stat.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -30,6 +31,11 @@ #include <sys/mount.h> /* for BLKGETSIZE64 */ +#ifdef HAVE_STATX +#include <fcntl.h> +#include <sys/stat.h> +#endif + /* * Emulate Solaris' behavior of returning the block device size in fstat64(). */ diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/vfs.h b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/vfs.h new file mode 100644 index 000000000000..c7b567ff44a4 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/vfs.h @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, 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 https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* Copyright 2025 by Lawrence Livermore National Security, LLC. */ + +/* This is the Linux userspace version of include/os/linux/spl/sys/vfs.h */ + +#ifndef _LIBSPL_SYS_VFS_H +#define _LIBSPL_SYS_VFS_H + +#include <linux/fs.h> +#include <sys/statfs.h> + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/rpc/xdr.h b/sys/contrib/openzfs/lib/libspl/include/rpc/xdr.h index 51d71f693bbf..85f718c275a5 100644 --- a/sys/contrib/openzfs/lib/libspl/include/rpc/xdr.h +++ b/sys/contrib/openzfs/lib/libspl/include/rpc/xdr.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/statcommon.h b/sys/contrib/openzfs/lib/libspl/include/statcommon.h index 1f376f5c7c24..21c64ed4a9f8 100644 --- a/sys/contrib/openzfs/lib/libspl/include/statcommon.h +++ b/sys/contrib/openzfs/lib/libspl/include/statcommon.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -37,5 +38,9 @@ /* Print a timestamp in either Unix or standard format. */ void print_timestamp(uint_t); +/* Return timestamp in either Unix or standard format in provided buffer */ +void get_timestamp(uint_t, char *, int); +/* convert time_t to standard format */ +void format_timestamp(time_t, char *, int); #endif /* _STATCOMMON_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/stdlib.h b/sys/contrib/openzfs/lib/libspl/include/stdlib.h index a4ce4f781fc5..f381f21345fa 100644 --- a/sys/contrib/openzfs/lib/libspl/include/stdlib.h +++ b/sys/contrib/openzfs/lib/libspl/include/stdlib.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/string.h b/sys/contrib/openzfs/lib/libspl/include/string.h index a7d40fa61943..52f268b1d931 100644 --- a/sys/contrib/openzfs/lib/libspl/include/string.h +++ b/sys/contrib/openzfs/lib/libspl/include/string.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/acl.h b/sys/contrib/openzfs/lib/libspl/include/sys/acl.h index 31168421b088..3e79040c5307 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/acl.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/acl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -140,8 +141,6 @@ typedef struct acl_info acl_t; #define ACE_ALL_TYPES 0x001F -#if defined(_KERNEL) - typedef struct ace_object { uid_t a_who; /* uid or gid */ uint32_t a_access_mask; /* read,write,... */ @@ -151,8 +150,6 @@ typedef struct ace_object { uint8_t a_inherit_obj_type[16]; /* inherit obj */ } ace_object_t; -#endif - #define ACE_ALL_PERMS (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \ ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \ ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/acl_impl.h b/sys/contrib/openzfs/lib/libspl/include/sys/acl_impl.h index 717334906415..2850eacf61f4 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/acl_impl.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/acl_impl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/asm_linkage.h b/sys/contrib/openzfs/lib/libspl/include/sys/asm_linkage.h new file mode 100644 index 000000000000..1a0f2864a178 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/asm_linkage.h @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, 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 https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_ASM_LINKAGE_H +#define _SYS_ASM_LINKAGE_H + +#if defined(__i386) || defined(__amd64) + +#include <sys/ia32/asm_linkage.h> /* XX64 x86/sys/asm_linkage.h */ + +#endif + +#if defined(_KERNEL) && defined(HAVE_KERNEL_OBJTOOL) + +#include <asm/frame.h> + +#else /* userspace */ +#define FRAME_BEGIN +#define FRAME_END +#endif + + +#endif /* _SYS_ASM_LINKAGE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/zfs_context_os.h b/sys/contrib/openzfs/lib/libspl/include/sys/backtrace.h index 81ced5207749..3a2077f32e6c 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/zfs_context_os.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/backtrace.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -19,10 +20,14 @@ * * CDDL HEADER END */ +/* + * Copyright (c) 2024, Rob Norris <robn@despairlabs.com> + * Copyright (c) 2024, Klara Inc. + */ -#ifndef ZFS_CONTEXT_OS_H -#define ZFS_CONTEXT_OS_H +#ifndef _LIBSPL_SYS_BACKTRACE_H +#define _LIBSPL_SYS_BACKTRACE_H -#define HAVE_LARGE_STACKS 1 +void libspl_backtrace(int fd); #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/callb.h b/sys/contrib/openzfs/lib/libspl/include/sys/callb.h index 8ffd18788865..6e8e22338b8b 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/callb.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/callb.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -20,11 +21,36 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ #ifndef _SYS_CALLB_H #define _SYS_CALLB_H +#include <sys/mutex.h> + +typedef struct callb_cpr { + kmutex_t *cc_lockp; +} callb_cpr_t; + +#define CALLB_CPR_INIT(cp, lockp, func, name) { \ + (cp)->cc_lockp = lockp; \ +} + +#define CALLB_CPR_SAFE_BEGIN(cp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ +} + +#define CALLB_CPR_SAFE_END(cp, lockp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ +} + +#define CALLB_CPR_EXIT(cp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ + mutex_exit((cp)->cc_lockp); \ +} + #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/cmn_err.h b/sys/contrib/openzfs/lib/libspl/include/sys/cmn_err.h index 63ff4eb29bc8..5e7136f7fdc2 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/cmn_err.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/cmn_err.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -27,4 +28,65 @@ #ifndef _LIBSPL_SYS_CMN_ERR_H #define _LIBSPL_SYS_CMN_ERR_H +#include <atomic.h> + +#define cmn_err_once(ce, ...) \ +do { \ + static volatile uint32_t printed = 0; \ + if (atomic_cas_32(&printed, 0, 1) == 0) { \ + cmn_err(ce, __VA_ARGS__); \ + } \ +} while (0) + +#define vcmn_err_once(ce, fmt, ap) \ +do { \ + static volatile uint32_t printed = 0; \ + if (atomic_cas_32(&printed, 0, 1) == 0) { \ + vcmn_err(ce, fmt, ap); \ + } \ +} while (0) + +#define zcmn_err_once(zone, ce, ...) \ +do { \ + static volatile uint32_t printed = 0; \ + if (atomic_cas_32(&printed, 0, 1) == 0) { \ + zcmn_err(zone, ce, __VA_ARGS__); \ + } \ +} while (0) + +#define vzcmn_err_once(zone, ce, fmt, ap) \ +do { \ + static volatile uint32_t printed = 0; \ + if (atomic_cas_32(&printed, 0, 1) == 0) { \ + vzcmn_err(zone, ce, fmt, ap); \ + } \ +} while (0) + +/* + * Note that we are not using the debugging levels. + */ + +#define CE_CONT 0 /* continuation */ +#define CE_NOTE 1 /* notice */ +#define CE_WARN 2 /* warning */ +#define CE_PANIC 3 /* panic */ +#define CE_IGNORE 4 /* print nothing */ + +/* + * ZFS debugging + */ + +extern void dprintf_setup(int *argc, char **argv); + +extern void cmn_err(int, const char *, ...) + __attribute__((format(printf, 2, 3))); +extern void vcmn_err(int, const char *, va_list) + __attribute__((format(printf, 2, 0))); +extern void panic(const char *, ...) + __attribute__((format(printf, 1, 2), noreturn)); +extern void vpanic(const char *, va_list) + __attribute__((format(printf, 1, 0), noreturn)); + +#define fm_panic panic + #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/condvar.h b/sys/contrib/openzfs/lib/libspl/include/sys/condvar.h new file mode 100644 index 000000000000..fb8f7c9bf6b1 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/condvar.h @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_CONDVAR_H +#define _SYS_CONDVAR_H + +#ifdef SKIP_SPL_SYS_CONDVAR_H +#include_next <sys/condvar.h> +#else + +#include <pthread.h> +#include <sys/time.h> +#include <sys/mutex.h> + +/* + * Condition variables + */ +typedef pthread_cond_t kcondvar_t; + +#define CV_DEFAULT 0 +#define CALLOUT_FLAG_ABSOLUTE 0x2 + +extern void cv_init(kcondvar_t *cv, char *name, int type, void *arg); +extern void cv_destroy(kcondvar_t *cv); +extern void cv_wait(kcondvar_t *cv, kmutex_t *mp); +extern int cv_wait_sig(kcondvar_t *cv, kmutex_t *mp); +extern int cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime); +extern int cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, + hrtime_t res, int flag); +extern void cv_signal(kcondvar_t *cv); +extern void cv_broadcast(kcondvar_t *cv); + +#define cv_timedwait_io(cv, mp, at) cv_timedwait(cv, mp, at) +#define cv_timedwait_idle(cv, mp, at) cv_timedwait(cv, mp, at) +#define cv_timedwait_sig(cv, mp, at) cv_timedwait(cv, mp, at) +#define cv_wait_io(cv, mp) cv_wait(cv, mp) +#define cv_wait_idle(cv, mp) cv_wait(cv, mp) +#define cv_wait_io_sig(cv, mp) cv_wait_sig(cv, mp) +#define cv_timedwait_sig_hires(cv, mp, t, r, f) \ + cv_timedwait_hires(cv, mp, t, r, f) +#define cv_timedwait_idle_hires(cv, mp, t, r, f) \ + cv_timedwait_hires(cv, mp, t, r, f) + +#endif /* SKIP_SPL_CONDVAR_H */ +#endif /* _SYS_CONDVAR_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/cred.h b/sys/contrib/openzfs/lib/libspl/include/sys/cred.h index 463b3abfc977..deceecee0f19 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/cred.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/cred.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -27,6 +28,24 @@ #ifndef _LIBSPL_SYS_CRED_H #define _LIBSPL_SYS_CRED_H +#include <sys/stat.h> + +/* + * Credentials + */ + typedef struct cred cred_t; +extern uid_t crgetuid(cred_t *cr); +extern uid_t crgetruid(cred_t *cr); +extern gid_t crgetgid(cred_t *cr); +extern int crgetngroups(cred_t *cr); +extern gid_t *crgetgroups(cred_t *cr); + +#define kcred NULL +#define CRED() NULL + +#define crhold(cr) ((void)cr) +#define crfree(cr) ((void)cr) + #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/debug.h b/sys/contrib/openzfs/lib/libspl/include/sys/debug.h index af18da94804c..2bd077686f1c 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/debug.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/debug.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -23,6 +24,12 @@ * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ #ifndef _LIBSPL_SYS_DEBUG_H #define _LIBSPL_SYS_DEBUG_H @@ -37,4 +44,26 @@ #define __maybe_unused __attribute__((unused)) #endif +#ifndef __must_check +#define __must_check __attribute__((warn_unused_result)) +#endif + +#ifndef noinline +#define noinline __attribute__((noinline)) +#endif + +#ifndef likely +#define likely(x) __builtin_expect((x), 1) +#endif + +#ifndef unlikely +#define unlikely(x) __builtin_expect((x), 0) +#endif + +/* + * Kernel modules + */ +#define __init +#define __exit + #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/dkio.h b/sys/contrib/openzfs/lib/libspl/include/sys/dkio.h index f3c641f669b7..4ae1026d4d5f 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/dkio.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/dkio.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/dklabel.h b/sys/contrib/openzfs/lib/libspl/include/sys/dklabel.h index 8c2ca06c0cbc..409d337e9adf 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/dklabel.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/dklabel.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/dktp/fdisk.h b/sys/contrib/openzfs/lib/libspl/include/sys/dktp/fdisk.h index e90135f362e6..5e5db04cccfc 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/dktp/fdisk.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/dktp/fdisk.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/feature_tests.h b/sys/contrib/openzfs/lib/libspl/include/sys/feature_tests.h index 877e0a15a89e..be7d4ebf9210 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/feature_tests.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/feature_tests.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/inttypes.h b/sys/contrib/openzfs/lib/libspl/include/sys/inttypes.h index d7d063985316..66cf97ac8b5c 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/inttypes.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/inttypes.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/isa_defs.h b/sys/contrib/openzfs/lib/libspl/include/sys/isa_defs.h index 3922445db31c..99dbc70e4617 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/isa_defs.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/isa_defs.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -227,9 +228,13 @@ extern "C" { * RISC-V arch specific defines * only RV64G (including atomic) LP64 is supported yet */ -#elif defined(__riscv) && defined(_LP64) && _LP64 && \ +#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64 && \ defined(__riscv_atomic) && __riscv_atomic +#if !defined(_LP64) +#define _LP64 1 +#endif + #ifndef __riscv__ #define __riscv__ #endif @@ -242,10 +247,26 @@ extern "C" { #define _SUNOS_VTOC_16 +/* + * LoongArch arch specific defines + * only LoongArch64 is supported yet + */ +#elif defined(__loongarch__) && defined(__loongarch_lp64) + +#if !defined(_LP64) +#define _LP64 +#endif + +#define _ZFS_LITTLE_ENDIAN +#define _SUNOS_VTOC_16 + +/* not all LoongArch cores support unaligned accesses in hardware */ +#define _ALIGNMENT_REQUIRED 1 + #else /* * Currently supported: - * x86_64, x32, i386, arm, powerpc, s390, sparc, mips, and RV64G + * x86_64, x32, i386, arm, powerpc, s390, sparc, mips, RV64G, and LoongArch64 */ #error "Unsupported ISA type" #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/kmem.h b/sys/contrib/openzfs/lib/libspl/include/sys/kmem.h index 06c614e51d1c..33e618f46bb0 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/kmem.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/kmem.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -19,26 +20,76 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ #ifndef _SYS_KMEM_H #define _SYS_KMEM_H -#include <stdlib.h> +#include <umem.h> +#include <sys/types.h> -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif -#define KM_SLEEP 0x00000000 /* same as KM_SLEEP */ -#define KM_NOSLEEP 0x00000001 /* same as KM_NOSLEEP */ +/* + * Kernel memory + */ +#define KM_SLEEP UMEM_NOFAIL +#define KM_PUSHPAGE KM_SLEEP +#define KM_NOSLEEP UMEM_DEFAULT +#define KM_NORMALPRI 0 /* not needed with UMEM_DEFAULT */ +#define KMC_NODEBUG UMC_NODEBUG +#define KMC_KVMEM 0x0 +#define KMC_RECLAIMABLE 0x0 +#define kmem_alloc(_s, _f) umem_alloc(_s, _f) +#define kmem_zalloc(_s, _f) umem_zalloc(_s, _f) +#define kmem_free(_b, _s) umem_free(_b, _s) +#define vmem_alloc(_s, _f) kmem_alloc(_s, _f) +#define vmem_zalloc(_s, _f) kmem_zalloc(_s, _f) +#define vmem_free(_b, _s) kmem_free(_b, _s) +#define kmem_cache_create(_a, _b, _c, _d, _e, _f, _g, _h, _i) \ + umem_cache_create(_a, _b, _c, _d, _e, _f, _g, _h, _i) +#define kmem_cache_destroy(_c) umem_cache_destroy(_c) +#define kmem_cache_alloc(_c, _f) umem_cache_alloc(_c, _f) +#define kmem_cache_free(_c, _b) umem_cache_free(_c, _b) +#define kmem_debugging() 0 +#define kmem_cache_reap_now(_c) umem_cache_reap_now(_c); +extern int kmem_cache_reap_active(void); +#define kmem_cache_set_move(_c, _cb) /* nothing */ +#define POINTER_INVALIDATE(_pp) /* nothing */ +#define POINTER_IS_VALID(_p) 0 + +extern char *kmem_vasprintf(const char *fmt, va_list adx); +extern char *kmem_asprintf(const char *fmt, ...); +#define kmem_strfree(str) kmem_free((str), strlen(str) + 1) +#define kmem_strdup(s) strdup(s) + +#ifndef __cplusplus +extern int kmem_scnprintf(char *restrict str, size_t size, + const char *restrict fmt, ...); +#endif + +typedef umem_cache_t kmem_cache_t; + +typedef enum kmem_cbrc { + KMEM_CBRC_YES, + KMEM_CBRC_NO, + KMEM_CBRC_LATER, + KMEM_CBRC_DONT_NEED, + KMEM_CBRC_DONT_KNOW +} kmem_cbrc_t; + +typedef int fstrans_cookie_t; -#define kmem_alloc(size, flags) ((void) sizeof (flags), malloc(size)) -#define kmem_free(ptr, size) ((void) sizeof (size), free(ptr)) +extern fstrans_cookie_t spl_fstrans_mark(void); +extern void spl_fstrans_unmark(fstrans_cookie_t); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h b/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h index c2de0778485c..361f24df3f58 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/kstat.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -26,758 +27,65 @@ #ifndef _SYS_KSTAT_H #define _SYS_KSTAT_H - - -/* - * Definition of general kernel statistics structures and /dev/kstat ioctls - */ - #include <sys/types.h> #include <sys/time.h> -#ifdef __cplusplus -extern "C" { -#endif - -typedef int kid_t; /* unique kstat id */ - -/* - * Kernel statistics driver (/dev/kstat) ioctls - */ - -#define KSTAT_IOC_BASE ('K' << 8) - -#define KSTAT_IOC_CHAIN_ID KSTAT_IOC_BASE | 0x01 -#define KSTAT_IOC_READ KSTAT_IOC_BASE | 0x02 -#define KSTAT_IOC_WRITE KSTAT_IOC_BASE | 0x03 - -/* - * /dev/kstat ioctl usage (kd denotes /dev/kstat descriptor): - * - * kcid = ioctl(kd, KSTAT_IOC_CHAIN_ID, NULL); - * kcid = ioctl(kd, KSTAT_IOC_READ, kstat_t *); - * kcid = ioctl(kd, KSTAT_IOC_WRITE, kstat_t *); - */ - #define KSTAT_STRLEN 255 /* 254 chars + NULL; must be 16 * n - 1 */ -/* - * The generic kstat header - */ - typedef struct kstat { - /* - * Fields relevant to both kernel and user - */ - hrtime_t ks_crtime; /* creation time (from gethrtime()) */ - struct kstat *ks_next; /* kstat chain linkage */ - kid_t ks_kid; /* unique kstat ID */ - char ks_module[KSTAT_STRLEN]; /* provider module name */ - uchar_t ks_resv; /* reserved, currently just padding */ - int ks_instance; /* provider module's instance */ - char ks_name[KSTAT_STRLEN]; /* kstat name */ - uchar_t ks_type; /* kstat data type */ - char ks_class[KSTAT_STRLEN]; /* kstat class */ - uchar_t ks_flags; /* kstat flags */ - void *ks_data; /* kstat type-specific data */ - uint_t ks_ndata; /* # of type-specific data records */ - size_t ks_data_size; /* total size of kstat data section */ - hrtime_t ks_snaptime; /* time of last data snapshot */ - /* - * Fields relevant to kernel only - */ - int (*ks_update)(struct kstat *, int); /* dynamic update */ - void *ks_private; /* arbitrary provider-private data */ - int (*ks_snapshot)(struct kstat *, void *, int); - void *ks_lock; /* protects this kstat's data */ + uchar_t ks_flags; + void *ks_data; + uint_t ks_ndata; + size_t ks_data_size; + int (*ks_update)(struct kstat *, int); + void *ks_private; + void *ks_lock; } kstat_t; -/* - * kstat structure and locking strategy - * - * Each kstat consists of a header section (a kstat_t) and a data section. - * The system maintains a set of kstats, protected by kstat_chain_lock. - * kstat_chain_lock protects all additions to/deletions from this set, - * as well as all changes to kstat headers. kstat data sections are - * *optionally* protected by the per-kstat ks_lock. If ks_lock is non-NULL, - * kstat clients (e.g. /dev/kstat) will acquire this lock for all of their - * operations on that kstat. It is up to the kstat provider to decide whether - * guaranteeing consistent data to kstat clients is sufficiently important - * to justify the locking cost. Note, however, that most statistic updates - * already occur under one of the provider's mutexes, so if the provider sets - * ks_lock to point to that mutex, then kstat data locking is free. - * - * NOTE: variable-size kstats MUST employ kstat data locking, to prevent - * data-size races with kstat clients. - * - * NOTE: ks_lock is really of type (kmutex_t *); it is declared as (void *) - * in the kstat header so that users don't have to be exposed to all of the - * kernel's lock-related data structures. - */ - -#if defined(_KERNEL) - -#define KSTAT_ENTER(k) \ - { kmutex_t *lp = (k)->ks_lock; if (lp) mutex_enter(lp); } - -#define KSTAT_EXIT(k) \ - { kmutex_t *lp = (k)->ks_lock; if (lp) mutex_exit(lp); } - -#define KSTAT_UPDATE(k, rw) (*(k)->ks_update)((k), (rw)) - -#define KSTAT_SNAPSHOT(k, buf, rw) (*(k)->ks_snapshot)((k), (buf), (rw)) - -#endif /* defined(_KERNEL) */ - -/* - * kstat time - * - * All times associated with kstats (e.g. creation time, snapshot time, - * kstat_timer_t and kstat_io_t timestamps, etc.) are 64-bit nanosecond values, - * as returned by gethrtime(). The accuracy of these timestamps is machine - * dependent, but the precision (units) is the same across all platforms. - */ - -/* - * kstat identity (KID) - * - * Each kstat is assigned a unique KID (kstat ID) when it is added to the - * global kstat chain. The KID is used as a cookie by /dev/kstat to - * request information about the corresponding kstat. There is also - * an identity associated with the entire kstat chain, kstat_chain_id, - * which is bumped each time a kstat is added or deleted. /dev/kstat uses - * the chain ID to detect changes in the kstat chain (e.g., a new disk - * coming online) between ioctl()s. - */ - -/* - * kstat module, kstat instance - * - * ks_module and ks_instance contain the name and instance of the module - * that created the kstat. In cases where there can only be one instance, - * ks_instance is 0. The kernel proper (/kernel/unix) uses "unix" as its - * module name. - */ - -/* - * kstat name - * - * ks_name gives a meaningful name to a kstat. The full kstat namespace - * is module.instance.name, so the name only need be unique within a - * module. kstat_create() will fail if you try to create a kstat with - * an already-used (ks_module, ks_instance, ks_name) triplet. Spaces are - * allowed in kstat names, but strongly discouraged, since they hinder - * awk-style processing at user level. - */ - -/* - * kstat type - * - * The kstat mechanism provides several flavors of kstat data, defined - * below. The "raw" kstat type is just treated as an array of bytes; you - * can use this to export any kind of data you want. - * - * Some kstat types allow multiple data structures per kstat, e.g. - * KSTAT_TYPE_NAMED; others do not. This is part of the spec for each - * kstat data type. - * - * User-level tools should *not* rely on the #define KSTAT_NUM_TYPES. To - * get this information, read out the standard system kstat "kstat_types". - */ - -#define KSTAT_TYPE_RAW 0 /* can be anything */ - /* ks_ndata >= 1 */ -#define KSTAT_TYPE_NAMED 1 /* name/value pair */ - /* ks_ndata >= 1 */ -#define KSTAT_TYPE_INTR 2 /* interrupt statistics */ - /* ks_ndata == 1 */ -#define KSTAT_TYPE_IO 3 /* I/O statistics */ - /* ks_ndata == 1 */ -#define KSTAT_TYPE_TIMER 4 /* event timer */ - /* ks_ndata >= 1 */ - -#define KSTAT_NUM_TYPES 5 - -/* - * kstat class - * - * Each kstat can be characterized as belonging to some broad class - * of statistics, e.g. disk, tape, net, vm, streams, etc. This field - * can be used as a filter to extract related kstats. The following - * values are currently in use: disk, tape, net, controller, vm, kvm, - * hat, streams, kstat, and misc. (The kstat class encompasses things - * like kstat_types.) - */ - -/* - * kstat flags - * - * Any of the following flags may be passed to kstat_create(). They are - * all zero by default. - * - * KSTAT_FLAG_VIRTUAL: - * - * Tells kstat_create() not to allocate memory for the - * kstat data section; instead, you will set the ks_data - * field to point to the data you wish to export. This - * provides a convenient way to export existing data - * structures. - * - * KSTAT_FLAG_VAR_SIZE: - * - * The size of the kstat you are creating will vary over time. - * For example, you may want to use the kstat mechanism to - * export a linked list. NOTE: The kstat framework does not - * manage the data section, so all variable-size kstats must be - * virtual kstats. Moreover, variable-size kstats MUST employ - * kstat data locking to prevent data-size races with kstat - * clients. See the section on "kstat snapshot" for details. - * - * KSTAT_FLAG_WRITABLE: - * - * Makes the kstat's data section writable by root. - * The ks_snapshot routine (see below) does not need to check for - * this; permission checking is handled in the kstat driver. - * - * KSTAT_FLAG_PERSISTENT: - * - * Indicates that this kstat is to be persistent over time. - * For persistent kstats, kstat_delete() simply marks the - * kstat as dormant; a subsequent kstat_create() reactivates - * the kstat. This feature is provided so that statistics - * are not lost across driver close/open (e.g., raw disk I/O - * on a disk with no mounted partitions.) - * NOTE: Persistent kstats cannot be virtual, since ks_data - * points to garbage as soon as the driver goes away. - * - * The following flags are maintained by the kstat framework: - * - * KSTAT_FLAG_DORMANT: - * - * For persistent kstats, indicates that the kstat is in the - * dormant state (e.g., the corresponding device is closed). - * - * KSTAT_FLAG_INVALID: - * - * This flag is set when a kstat is in a transitional state, - * e.g. between kstat_create() and kstat_install(). - * kstat clients must not attempt to access the kstat's data - * if this flag is set. - */ +#define KSTAT_TYPE_RAW 0 +#define KSTAT_TYPE_NAMED 1 #define KSTAT_FLAG_VIRTUAL 0x01 -#define KSTAT_FLAG_VAR_SIZE 0x02 -#define KSTAT_FLAG_WRITABLE 0x04 -#define KSTAT_FLAG_PERSISTENT 0x08 -#define KSTAT_FLAG_DORMANT 0x10 -#define KSTAT_FLAG_INVALID 0x20 -#define KSTAT_FLAG_LONGSTRINGS 0x40 #define KSTAT_FLAG_NO_HEADERS 0x80 -/* - * Dynamic update support - * - * The kstat mechanism allows for an optional ks_update function to update - * kstat data. This is useful for drivers where the underlying device - * keeps cheap hardware stats, but extraction is expensive. Instead of - * constantly keeping the kstat data section up to date, you can supply a - * ks_update function which updates the kstat's data section on demand. - * To take advantage of this feature, simply set the ks_update field before - * calling kstat_install(). - * - * The ks_update function, if supplied, must have the following structure: - * - * int - * foo_kstat_update(kstat_t *ksp, int rw) - * { - * if (rw == KSTAT_WRITE) { - * ... update the native stats from ksp->ks_data; - * return EACCES if you don't support this - * } else { - * ... update ksp->ks_data from the native stats - * } - * } - * - * The ks_update return codes are: 0 for success, EACCES if you don't allow - * KSTAT_WRITE, and EIO for any other type of error. - * - * In general, the ks_update function may need to refer to provider-private - * data; for example, it may need a pointer to the provider's raw statistics. - * The ks_private field is available for this purpose. Its use is entirely - * at the provider's discretion. - * - * All variable-size kstats MUST supply a ks_update routine, which computes - * and sets ks_data_size (and ks_ndata if that is meaningful), since these - * are needed to perform kstat snapshots (see below). - * - * No kstat locking should be done inside the ks_update routine. The caller - * will already be holding the kstat's ks_lock (to ensure consistent data). - */ - #define KSTAT_READ 0 #define KSTAT_WRITE 1 -/* - * Kstat snapshot - * - * In order to get a consistent view of a kstat's data, clients must obey - * the kstat's locking strategy. However, these clients may need to perform - * operations on the data which could cause a fault (e.g. copyout()), or - * operations which are simply expensive. Doing so could cause deadlock - * (e.g. if you're holding a disk's kstat lock which is ultimately required - * to resolve a copyout() fault), performance degradation (since the providers' - * activity is serialized at the kstat lock), device timing problems, etc. - * - * To avoid these problems, kstat data is provided via snapshots. Taking - * a snapshot is a simple process: allocate a wired-down kernel buffer, - * acquire the kstat's data lock, copy the data into the buffer ("take the - * snapshot"), and release the lock. This ensures that the kstat's data lock - * will be held as briefly as possible, and that no faults will occur while - * the lock is held. - * - * Normally, the snapshot is taken by default_kstat_snapshot(), which - * timestamps the data (sets ks_snaptime), copies it, and does a little - * massaging to deal with incomplete transactions on i/o kstats. However, - * this routine only works for kstats with contiguous data (the typical case). - * If you create a kstat whose data is, say, a linked list, you must provide - * your own ks_snapshot routine. The routine you supply must have the - * following prototype (replace "foo" with something appropriate): - * - * int foo_kstat_snapshot(kstat_t *ksp, void *buf, int rw); - * - * The minimal snapshot routine -- one which copies contiguous data that - * doesn't need any massaging -- would be this: - * - * ksp->ks_snaptime = gethrtime(); - * if (rw == KSTAT_WRITE) - * memcpy(ksp->ks_data, buf, ksp->ks_data_size); - * else - * memcpy(buf, ksp->ks_data, ksp->ks_data_size); - * return (0); - * - * A more illuminating example is taking a snapshot of a linked list: - * - * ksp->ks_snaptime = gethrtime(); - * if (rw == KSTAT_WRITE) - * return (EACCES); ... See below ... - * for (foo = first_foo; foo; foo = foo->next) { - * memcpy(buf, foo, sizeof (struct foo)); - * buf = ((struct foo *) buf) + 1; - * } - * return (0); - * - * In the example above, we have decided that we don't want to allow - * KSTAT_WRITE access, so we return EACCES if this is attempted. - * - * The key points are: - * - * (1) ks_snaptime must be set (via gethrtime()) to timestamp the data. - * (2) Data gets copied from the kstat to the buffer on KSTAT_READ, - * and from the buffer to the kstat on KSTAT_WRITE. - * (3) ks_snapshot return values are: 0 for success, EACCES if you - * don't allow KSTAT_WRITE, and EIO for any other type of error. - * - * Named kstats (see section on "Named statistics" below) containing long - * strings (KSTAT_DATA_STRING) need special handling. The kstat driver - * assumes that all strings are copied into the buffer after the array of - * named kstats, and the pointers (KSTAT_NAMED_STR_PTR()) are updated to point - * into the copy within the buffer. The default snapshot routine does this, - * but overriding routines should contain at least the following: - * - * if (rw == KSTAT_READ) { - * kstat_named_t *knp = buf; - * char *end = knp + ksp->ks_ndata; - * uint_t i; - * - * ... Do the regular copy ... - * memcpy(buf, ksp->ks_data, sizeof (kstat_named_t) * ksp->ks_ndata); - * - * for (i = 0; i < ksp->ks_ndata; i++, knp++) { - * if (knp[i].data_type == KSTAT_DATA_STRING && - * KSTAT_NAMED_STR_PTR(knp) != NULL) { - * memcpy(end, KSTAT_NAMED_STR_PTR(knp), - * KSTAT_NAMED_STR_BUFLEN(knp)); - * KSTAT_NAMED_STR_PTR(knp) = end; - * end += KSTAT_NAMED_STR_BUFLEN(knp); - * } - * } - */ - -/* - * Named statistics. - * - * List of arbitrary name=value statistics. - */ - typedef struct kstat_named { - char name[KSTAT_STRLEN]; /* name of counter */ - uchar_t data_type; /* data type */ + char name[KSTAT_STRLEN]; + uchar_t data_type; union { - char c[16]; /* enough for 128-bit ints */ - int32_t i32; - uint32_t ui32; struct { union { - char *ptr; /* NULL-term string */ -#if defined(_KERNEL) && defined(_MULTI_DATAMODEL) - caddr32_t ptr32; -#endif - char __pad[8]; /* 64-bit padding */ + char *ptr; + char __pad[8]; } addr; - uint32_t len; /* # bytes for strlen + '\0' */ + uint32_t len; } str; -/* - * The int64_t and uint64_t types are not valid for a maximally conformant - * 32-bit compilation environment (cc -Xc) using compilers prior to the - * introduction of C99 conforming compiler (reference ISO/IEC 9899:1990). - * In these cases, the visibility of i64 and ui64 is only permitted for - * 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/inttypes.h). - */ -#if defined(_INT64_TYPE) int64_t i64; uint64_t ui64; -#endif - long l; - ulong_t ul; - - /* These structure members are obsolete */ - - longlong_t ll; - u_longlong_t ull; - float f; - double d; - } value; /* value of counter */ + } value; } kstat_named_t; -#define KSTAT_DATA_CHAR 0 -#define KSTAT_DATA_INT32 1 #define KSTAT_DATA_UINT32 2 #define KSTAT_DATA_INT64 3 #define KSTAT_DATA_UINT64 4 - -#if !defined(_LP64) -#define KSTAT_DATA_LONG KSTAT_DATA_INT32 -#define KSTAT_DATA_ULONG KSTAT_DATA_UINT32 -#else -#if !defined(_KERNEL) -#define KSTAT_DATA_LONG KSTAT_DATA_INT64 -#define KSTAT_DATA_ULONG KSTAT_DATA_UINT64 -#else -#define KSTAT_DATA_LONG 7 /* only visible to the kernel */ -#define KSTAT_DATA_ULONG 8 /* only visible to the kernel */ -#endif /* !_KERNEL */ -#endif /* !_LP64 */ - -/* - * Statistics exporting named kstats with long strings (KSTAT_DATA_STRING) - * may not make the assumption that ks_data_size is equal to (ks_ndata * sizeof - * (kstat_named_t)). ks_data_size in these cases is equal to the sum of the - * amount of space required to store the strings (ie, the sum of - * KSTAT_NAMED_STR_BUFLEN() for all KSTAT_DATA_STRING statistics) plus the - * space required to store the kstat_named_t's. - * - * The default update routine will update ks_data_size automatically for - * variable-length kstats containing long strings (using the default update - * routine only makes sense if the string is the only thing that is changing - * in size, and ks_ndata is constant). Fixed-length kstats containing long - * strings must explicitly change ks_data_size (after creation but before - * initialization) to reflect the correct amount of space required for the - * long strings and the kstat_named_t's. - */ #define KSTAT_DATA_STRING 9 -/* These types are obsolete */ - -#define KSTAT_DATA_LONGLONG KSTAT_DATA_INT64 -#define KSTAT_DATA_ULONGLONG KSTAT_DATA_UINT64 -#define KSTAT_DATA_FLOAT 5 -#define KSTAT_DATA_DOUBLE 6 - -#define KSTAT_NAMED_PTR(kptr) ((kstat_named_t *)(kptr)->ks_data) - -/* - * Retrieve the pointer of the string contained in the given named kstat. - */ -#define KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.str.addr.ptr) - -/* - * Retrieve the length of the buffer required to store the string in the given - * named kstat. - */ -#define KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.str.len) +#define KSTAT_NAMED_PTR(kptr) ((kstat_named_t *)(kptr)->ks_data) +#define KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.str.addr.ptr) +#define KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.str.len) /* - * Interrupt statistics. - * - * An interrupt is a hard interrupt (sourced from the hardware device - * itself), a soft interrupt (induced by the system via the use of - * some system interrupt source), a watchdog interrupt (induced by - * a periodic timer call), spurious (an interrupt entry point was - * entered but there was no interrupt condition to service), - * or multiple service (an interrupt condition was detected and - * serviced just prior to returning from any of the other types). - * - * Measurement of the spurious class of interrupts is useful for - * autovectored devices in order to pinpoint any interrupt latency - * problems in a particular system configuration. - * - * Devices that have more than one interrupt of the same - * type should use multiple structures. + * kstat creation, installation and deletion */ - -#define KSTAT_INTR_HARD 0 -#define KSTAT_INTR_SOFT 1 -#define KSTAT_INTR_WATCHDOG 2 -#define KSTAT_INTR_SPURIOUS 3 -#define KSTAT_INTR_MULTSVC 4 - -#define KSTAT_NUM_INTRS 5 - -typedef struct kstat_intr { - uint_t intrs[KSTAT_NUM_INTRS]; /* interrupt counters */ -} kstat_intr_t; - -#define KSTAT_INTR_PTR(kptr) ((kstat_intr_t *)(kptr)->ks_data) - -/* - * I/O statistics. - */ - -typedef struct kstat_io { - - /* - * Basic counters. - * - * The counters should be updated at the end of service - * (e.g., just prior to calling biodone()). - */ - - u_longlong_t nread; /* number of bytes read */ - u_longlong_t nwritten; /* number of bytes written */ - uint_t reads; /* number of read operations */ - uint_t writes; /* number of write operations */ - - /* - * Accumulated time and queue length statistics. - * - * Accumulated time statistics are kept as a running sum - * of "active" time. Queue length statistics are kept as a - * running sum of the product of queue length and elapsed time - * at that length -- i.e., a Riemann sum for queue length - * integrated against time. (You can also think of the active time - * as a Riemann sum, for the boolean function (queue_length > 0) - * integrated against time, or you can think of it as the - * Lebesgue measure of the set on which queue_length > 0.) - * - * ^ - * | _________ - * 8 | i4 | - * | | | - * Queue 6 | | - * Length | _________ | | - * 4 | i2 |_______| | - * | | i3 | - * 2_______| | - * | i1 | - * |_______________________________| - * Time-> t1 t2 t3 t4 - * - * At each change of state (entry or exit from the queue), - * we add the elapsed time (since the previous state change) - * to the active time if the queue length was non-zero during - * that interval; and we add the product of the elapsed time - * times the queue length to the running length*time sum. - * - * This method is generalizable to measuring residency - * in any defined system: instead of queue lengths, think - * of "outstanding RPC calls to server X". - * - * A large number of I/O subsystems have at least two basic - * "lists" of transactions they manage: one for transactions - * that have been accepted for processing but for which processing - * has yet to begin, and one for transactions which are actively - * being processed (but not done). For this reason, two cumulative - * time statistics are defined here: wait (pre-service) time, - * and run (service) time. - * - * All times are 64-bit nanoseconds (hrtime_t), as returned by - * gethrtime(). - * - * The units of cumulative busy time are accumulated nanoseconds. - * The units of cumulative length*time products are elapsed time - * times queue length. - * - * Updates to the fields below are performed implicitly by calls to - * these five functions: - * - * kstat_waitq_enter() - * kstat_waitq_exit() - * kstat_runq_enter() - * kstat_runq_exit() - * - * kstat_waitq_to_runq() (see below) - * kstat_runq_back_to_waitq() (see below) - * - * Since kstat_waitq_exit() is typically followed immediately - * by kstat_runq_enter(), there is a single kstat_waitq_to_runq() - * function which performs both operations. This is a performance - * win since only one timestamp is required. - * - * In some instances, it may be necessary to move a request from - * the run queue back to the wait queue, e.g. for write throttling. - * For these situations, call kstat_runq_back_to_waitq(). - * - * These fields should never be updated by any other means. - */ - - hrtime_t wtime; /* cumulative wait (pre-service) time */ - hrtime_t wlentime; /* cumulative wait length*time product */ - hrtime_t wlastupdate; /* last time wait queue changed */ - hrtime_t rtime; /* cumulative run (service) time */ - hrtime_t rlentime; /* cumulative run length*time product */ - hrtime_t rlastupdate; /* last time run queue changed */ - - uint_t wcnt; /* count of elements in wait state */ - uint_t rcnt; /* count of elements in run state */ - -} kstat_io_t; - -#define KSTAT_IO_PTR(kptr) ((kstat_io_t *)(kptr)->ks_data) - -/* - * Event timer statistics - cumulative elapsed time and number of events. - * - * Updates to these fields are performed implicitly by calls to - * kstat_timer_start() and kstat_timer_stop(). - */ - -typedef struct kstat_timer { - char name[KSTAT_STRLEN]; /* event name */ - uchar_t resv; /* reserved */ - u_longlong_t num_events; /* number of events */ - hrtime_t elapsed_time; /* cumulative elapsed time */ - hrtime_t min_time; /* shortest event duration */ - hrtime_t max_time; /* longest event duration */ - hrtime_t start_time; /* previous event start time */ - hrtime_t stop_time; /* previous event stop time */ -} kstat_timer_t; - -#define KSTAT_TIMER_PTR(kptr) ((kstat_timer_t *)(kptr)->ks_data) - -#if defined(_KERNEL) - -#include <sys/t_lock.h> - -extern kid_t kstat_chain_id; /* bumped at each state change */ -extern void kstat_init(void); /* initialize kstat framework */ - -/* - * Adding and deleting kstats. - * - * The typical sequence to add a kstat is: - * - * ksp = kstat_create(module, instance, name, class, type, ndata, flags); - * if (ksp) { - * ... provider initialization, if necessary - * kstat_install(ksp); - * } - * - * There are three logically distinct steps here: - * - * Step 1: System Initialization (kstat_create) - * - * kstat_create() performs system initialization. kstat_create() - * allocates memory for the entire kstat (header plus data), initializes - * all header fields, initializes the data section to all zeroes, assigns - * a unique KID, and puts the kstat onto the system's kstat chain. - * The returned kstat is marked invalid (KSTAT_FLAG_INVALID is set), - * because the provider (caller) has not yet had a chance to initialize - * the data section. - * - * By default, kstats are exported to all zones on the system. A kstat may be - * created via kstat_create_zone() to specify a zone to which the statistics - * should be exported. kstat_zone_add() may be used to specify additional - * zones to which the statistics are to be exported. - * - * Step 2: Provider Initialization - * - * The provider performs any necessary initialization of the data section, - * e.g. setting the name fields in a KSTAT_TYPE_NAMED. Virtual kstats set - * the ks_data field at this time. The provider may also set the ks_update, - * ks_snapshot, ks_private, and ks_lock fields if necessary. - * - * Step 3: Installation (kstat_install) - * - * Once the kstat is completely initialized, kstat_install() clears the - * INVALID flag, thus making the kstat accessible to the outside world. - * kstat_install() also clears the DORMANT flag for persistent kstats. - * - * Removing a kstat from the system - * - * kstat_delete(ksp) removes ksp from the kstat chain and frees all - * associated system resources. NOTE: When you call kstat_delete(), - * you must NOT be holding that kstat's ks_lock. Otherwise, you may - * deadlock with a kstat reader. - * - * Persistent kstats - * - * From the provider's point of view, persistence is transparent. The only - * difference between ephemeral (normal) kstats and persistent kstats - * is that you pass KSTAT_FLAG_PERSISTENT to kstat_create(). Magically, - * this has the effect of making your data visible even when you're - * not home. Persistence is important to tools like iostat, which want - * to get a meaningful picture of disk activity. Without persistence, - * raw disk i/o statistics could never accumulate: they would come and - * go with each open/close of the raw device. - * - * The magic of persistence works by slightly altering the behavior of - * kstat_create() and kstat_delete(). The first call to kstat_create() - * creates a new kstat, as usual. However, kstat_delete() does not - * actually delete the kstat: it performs one final update of the data - * (i.e., calls the ks_update routine), marks the kstat as dormant, and - * sets the ks_lock, ks_update, ks_private, and ks_snapshot fields back - * to their default values (since they might otherwise point to garbage, - * e.g. if the provider is going away). kstat clients can still access - * the dormant kstat just like a live kstat; they just continue to see - * the final data values as long as the kstat remains dormant. - * All subsequent kstat_create() calls simply find the already-existing, - * dormant kstat and return a pointer to it, without altering any fields. - * The provider then performs its usual initialization sequence, and - * calls kstat_install(). kstat_install() uses the old data values to - * initialize the native data (i.e., ks_update is called with KSTAT_WRITE), - * thus making it seem like you were never gone. - */ - -extern kstat_t *kstat_create(const char *, int, const char *, const char *, - uchar_t, uint_t, uchar_t); -extern kstat_t *kstat_create_zone(const char *, int, const char *, - const char *, uchar_t, uint_t, uchar_t, zoneid_t); +extern kstat_t *kstat_create(const char *, int, + const char *, const char *, uchar_t, ulong_t, uchar_t); extern void kstat_install(kstat_t *); extern void kstat_delete(kstat_t *); -extern void kstat_named_setstr(kstat_named_t *knp, const char *src); -extern void kstat_set_string(char *, const char *); -extern void kstat_delete_byname(const char *, int, const char *); -extern void kstat_delete_byname_zone(const char *, int, const char *, zoneid_t); -extern void kstat_named_init(kstat_named_t *, const char *, uchar_t); -extern void kstat_timer_init(kstat_timer_t *, const char *); -extern void kstat_timer_start(kstat_timer_t *); -extern void kstat_timer_stop(kstat_timer_t *); - -extern void kstat_zone_add(kstat_t *, zoneid_t); -extern void kstat_zone_remove(kstat_t *, zoneid_t); -extern int kstat_zone_find(kstat_t *, zoneid_t); - -extern kstat_t *kstat_hold_bykid(kid_t kid, zoneid_t); -extern kstat_t *kstat_hold_byname(const char *, int, const char *, zoneid_t); -extern void kstat_rele(kstat_t *); - -#endif /* defined(_KERNEL) */ - -#ifdef __cplusplus -} -#endif +extern void kstat_set_raw_ops(kstat_t *ksp, + int (*headers)(char *buf, size_t size), + int (*data)(char *buf, size_t size, void *data), + void *(*addr)(kstat_t *ksp, loff_t index)); #endif /* _SYS_KSTAT_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/list.h b/sys/contrib/openzfs/lib/libspl/include/sys/list.h index 6db92ed42955..cbbda85dabb5 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/list.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/list.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/list_impl.h b/sys/contrib/openzfs/lib/libspl/include/sys/list_impl.h index b5655b972c11..10683adab325 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/list_impl.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/list_impl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -39,7 +40,6 @@ struct list_node { }; struct list { - size_t list_size; size_t list_offset; struct list_node list_head; }; diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/mhd.h b/sys/contrib/openzfs/lib/libspl/include/sys/mhd.h index fcc062d51c84..82ec436750ef 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/mhd.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/mhd.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/misc.h b/sys/contrib/openzfs/lib/libspl/include/sys/misc.h new file mode 100644 index 000000000000..171bbc1de798 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/misc.h @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _LIBSPL_SYS_MISC_H +#define _LIBSPL_SYS_MISC_H + +#include <sys/utsname.h> + +/* + * Hostname information + */ +typedef struct utsname utsname_t; +extern utsname_t *utsname(void); + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/mkdev.h b/sys/contrib/openzfs/lib/libspl/include/sys/mkdev.h index 5978de65de50..f02823c68db0 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/mkdev.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/mkdev.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/mod.h b/sys/contrib/openzfs/lib/libspl/include/sys/mod.h new file mode 100644 index 000000000000..ad19b6607a42 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/mod.h @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright (c) 2025, Rob Norris <robn@despairlabs.com> + */ + +#ifndef _SYS_MOD_H +#define _SYS_MOD_H + +#include <sys/tunables.h> + +#define ZFS_MODULE_PARAM(scope, prefix, name, type, perm, desc) \ + static const zfs_tunable_t _zfs_tunable_##prefix##name = { \ + .zt_name = #prefix#name, \ + .zt_varp = &prefix##name, \ + .zt_varsz = sizeof (prefix##name), \ + .zt_type = ZFS_TUNABLE_TYPE_##type, \ + .zt_perm = ZFS_TUNABLE_PERM_##perm, \ + .zt_desc = desc \ + }; \ + static const zfs_tunable_t * \ + __zfs_tunable_##prefix##name \ + __attribute__((__section__("zfs_tunables"))) \ + __attribute__((__used__)) \ + = &_zfs_tunable_##prefix##name; + +#define ZFS_MODULE_PARAM_ARGS void +#define ZFS_MODULE_PARAM_CALL(scope_prefix, name_prefix, name, setfunc, \ + getfunc, perm, desc) + +#define EXPORT_SYMBOL(x) + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/mutex.h b/sys/contrib/openzfs/lib/libspl/include/sys/mutex.h new file mode 100644 index 000000000000..1da0e632d60f --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/mutex.h @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_MUTEX_H +#define _SYS_MUTEX_H + +#include <pthread.h> + +/* + * Mutexes + */ +typedef struct kmutex { + pthread_mutex_t m_lock; + pthread_t m_owner; +} kmutex_t; + +#define MUTEX_DEFAULT 0 +#define MUTEX_NOLOCKDEP MUTEX_DEFAULT +#define MUTEX_HELD(mp) pthread_equal((mp)->m_owner, pthread_self()) +#define MUTEX_NOT_HELD(mp) !MUTEX_HELD(mp) + +extern void mutex_init(kmutex_t *mp, char *name, int type, void *cookie); +extern void mutex_destroy(kmutex_t *mp); +extern void mutex_enter(kmutex_t *mp); +extern int mutex_enter_check_return(kmutex_t *mp); +extern void mutex_exit(kmutex_t *mp); +extern int mutex_tryenter(kmutex_t *mp); + +#define NESTED_SINGLE 1 +#define mutex_enter_nested(mp, class) mutex_enter(mp) +#define mutex_enter_interruptible(mp) mutex_enter_check_return(mp) + +#endif /* _SYS_MUTEX_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/policy.h b/sys/contrib/openzfs/lib/libspl/include/sys/policy.h index 2f695b35cd0b..0d6016c1dd17 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/policy.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/policy.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/poll.h b/sys/contrib/openzfs/lib/libspl/include/sys/poll.h index 6ab0bddc0be5..3e99db0bdbee 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/poll.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/poll.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/priv.h b/sys/contrib/openzfs/lib/libspl/include/sys/priv.h index 76c76d1830c2..30b88a6c47fc 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/priv.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/priv.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/processor.h b/sys/contrib/openzfs/lib/libspl/include/sys/processor.h index 78e95d01f1b5..9e1bd90992bd 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/processor.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/processor.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/procfs_list.h b/sys/contrib/openzfs/lib/libspl/include/sys/procfs_list.h new file mode 100644 index 000000000000..144a8a22b9b5 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/procfs_list.h @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_PROCFS_LIST_H +#define _SYS_PROCFS_LIST_H + +#include <sys/types.h> +#include <sys/mutex.h> +#include <sys/list.h> + +/* + * procfs list manipulation + */ + +typedef struct procfs_list { + void *pl_private; + kmutex_t pl_lock; + list_t pl_list; + uint64_t pl_next_id; + size_t pl_node_offset; +} procfs_list_t; + +#ifndef __cplusplus +struct seq_file { }; +void seq_printf(struct seq_file *m, const char *fmt, ...); + +typedef struct procfs_list_node { + list_node_t pln_link; + uint64_t pln_id; +} procfs_list_node_t; + +void procfs_list_install(const char *module, + const char *submodule, + const char *name, + mode_t mode, + procfs_list_t *procfs_list, + int (*show)(struct seq_file *f, void *p), + int (*show_header)(struct seq_file *f), + int (*clear)(procfs_list_t *procfs_list), + size_t procfs_list_node_off); +void procfs_list_uninstall(procfs_list_t *procfs_list); +void procfs_list_destroy(procfs_list_t *procfs_list); +void procfs_list_add(procfs_list_t *procfs_list, void *p); +#endif + +#endif /* _SYS_PROCFS_LIST_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/random.h b/sys/contrib/openzfs/lib/libspl/include/sys/random.h new file mode 100644 index 000000000000..09ca0662d1a3 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/random.h @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_RANDOM_H +#define _SYS_RANDOM_H + +extern int random_get_bytes(uint8_t *ptr, size_t len); +extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len); + +extern void random_force_pseudo(boolean_t onoff); + +static __inline__ uint32_t +random_in_range(uint32_t range) +{ + uint32_t r; + +#if !defined(__APPLE__) || !defined(IN_BASE) + ASSERT(range != 0); +#endif + + if (range == 1) + return (0); + + (void) random_get_pseudo_bytes((uint8_t *)&r, sizeof (r)); + + return (r % range); +} + +#endif /* _SYS_RANDOM_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/rwlock.h b/sys/contrib/openzfs/lib/libspl/include/sys/rwlock.h new file mode 100644 index 000000000000..9f82f270d939 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/rwlock.h @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_RWLOCK_H +#define _SYS_RWLOCK_H + +#include <pthread.h> + +/* + * RW locks + */ +typedef struct krwlock { + pthread_rwlock_t rw_lock; + pthread_t rw_owner; + uint_t rw_readers; +} krwlock_t; + +typedef int krw_t; + +#define RW_READER 0 +#define RW_WRITER 1 +#define RW_DEFAULT RW_READER +#define RW_NOLOCKDEP RW_READER + +#define RW_READ_HELD(rw) ((rw)->rw_readers > 0) +#define RW_WRITE_HELD(rw) pthread_equal((rw)->rw_owner, pthread_self()) +#define RW_LOCK_HELD(rw) (RW_READ_HELD(rw) || RW_WRITE_HELD(rw)) + +extern void rw_init(krwlock_t *rwlp, char *name, int type, void *arg); +extern void rw_destroy(krwlock_t *rwlp); +extern void rw_enter(krwlock_t *rwlp, krw_t rw); +extern int rw_tryenter(krwlock_t *rwlp, krw_t rw); +extern int rw_tryupgrade(krwlock_t *rwlp); +extern void rw_exit(krwlock_t *rwlp); +#define rw_downgrade(rwlp) do { } while (0) + +#endif /* _SYS_RWLOCK_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/sha2.h b/sys/contrib/openzfs/lib/libspl/include/sys/sha2.h deleted file mode 100644 index 8bdc23a5f61e..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/sha2.h +++ /dev/null @@ -1,148 +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 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ -/* Copyright 2013 Saso Kiselkov. All rights reserved. */ - -#ifndef _SYS_SHA2_H -#define _SYS_SHA2_H - -#include <stdint.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define SHA256_DIGEST_LENGTH 32 /* SHA256 digest length in bytes */ -#define SHA384_DIGEST_LENGTH 48 /* SHA384 digest length in bytes */ -#define SHA512_DIGEST_LENGTH 64 /* SHA512 digest length in bytes */ - -/* Truncated versions of SHA-512 according to FIPS-180-4, section 5.3.6 */ -#define SHA512_224_DIGEST_LENGTH 28 /* SHA512/224 digest length */ -#define SHA512_256_DIGEST_LENGTH 32 /* SHA512/256 digest length */ - -#define SHA256_HMAC_BLOCK_SIZE 64 /* SHA256-HMAC block size */ -#define SHA512_HMAC_BLOCK_SIZE 128 /* SHA512-HMAC block size */ - -#define SHA256 0 -#define SHA256_HMAC 1 -#define SHA256_HMAC_GEN 2 -#define SHA384 3 -#define SHA384_HMAC 4 -#define SHA384_HMAC_GEN 5 -#define SHA512 6 -#define SHA512_HMAC 7 -#define SHA512_HMAC_GEN 8 -#define SHA512_224 9 -#define SHA512_256 10 - -/* - * SHA2 context. - * The contents of this structure are a private interface between the - * Init/Update/Final calls of the functions defined below. - * Callers must never attempt to read or write any of the fields - * in this structure directly. - */ -typedef struct { - uint32_t algotype; /* Algorithm Type */ - - /* state (ABCDEFGH) */ - union { - uint32_t s32[8]; /* for SHA256 */ - uint64_t s64[8]; /* for SHA384/512 */ - } state; - /* number of bits */ - union { - uint32_t c32[2]; /* for SHA256 , modulo 2^64 */ - uint64_t c64[2]; /* for SHA384/512, modulo 2^128 */ - } count; - union { - uint8_t buf8[128]; /* undigested input */ - uint32_t buf32[32]; /* realigned input */ - uint64_t buf64[16]; /* realigned input */ - } buf_un; -} SHA2_CTX; - -typedef SHA2_CTX SHA256_CTX; -typedef SHA2_CTX SHA384_CTX; -typedef SHA2_CTX SHA512_CTX; - -extern void SHA256Init(SHA256_CTX *); - -extern void SHA256Update(SHA256_CTX *, const void *, size_t); - -extern void SHA256Final(void *, SHA256_CTX *); - -extern void SHA384Init(SHA384_CTX *); - -extern void SHA384Update(SHA384_CTX *, const void *, size_t); - -extern void SHA384Final(void *, SHA384_CTX *); - -extern void SHA512Init(SHA512_CTX *); - -extern void SHA512Update(SHA512_CTX *, const void *, size_t); - -extern void SHA512Final(void *, SHA512_CTX *); - -extern void SHA2Init(uint64_t mech, SHA2_CTX *); - -extern void SHA2Update(SHA2_CTX *, const void *, size_t); - -extern void SHA2Final(void *, SHA2_CTX *); - -#ifdef _SHA2_IMPL -/* - * The following types/functions are all private to the implementation - * of the SHA2 functions and must not be used by consumers of the interface - */ - -/* - * List of support mechanisms in this module. - * - * It is important to note that in the module, division or modulus calculations - * are used on the enumerated type to determine which mechanism is being used; - * therefore, changing the order or additional mechanisms should be done - * carefully - */ -typedef enum sha2_mech_type { - SHA256_MECH_INFO_TYPE, /* SUN_CKM_SHA256 */ - SHA256_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA256_HMAC */ - SHA256_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA256_HMAC_GENERAL */ - SHA384_MECH_INFO_TYPE, /* SUN_CKM_SHA384 */ - SHA384_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA384_HMAC */ - SHA384_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA384_HMAC_GENERAL */ - SHA512_MECH_INFO_TYPE, /* SUN_CKM_SHA512 */ - SHA512_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA512_HMAC */ - SHA512_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA512_HMAC_GENERAL */ - SHA512_224_MECH_INFO_TYPE, /* SUN_CKM_SHA512_224 */ - SHA512_256_MECH_INFO_TYPE /* SUN_CKM_SHA512_256 */ -} sha2_mech_type_t; - -#endif /* _SHA2_IMPL */ - -#ifdef __cplusplus -} -#endif - -#endif /* _SYS_SHA2_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/sid.h b/sys/contrib/openzfs/lib/libspl/include/sys/sid.h new file mode 100644 index 000000000000..74789c5d9a62 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/sid.h @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_SID_H +#define _SYS_SID_H + +#include <sys/types.h> + +/* SID stuff */ +typedef struct ksiddomain { + uint_t kd_ref; + uint_t kd_len; + char *kd_name; +} ksiddomain_t; + +ksiddomain_t *ksid_lookupdomain(const char *); +void ksiddomain_rele(ksiddomain_t *); + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/simd.h b/sys/contrib/openzfs/lib/libspl/include/sys/simd.h index 6a6d8b7c6191..4772a5416b2e 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/simd.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/simd.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -20,8 +21,8 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de> */ #ifndef _LIBSPL_SYS_SIMD_H @@ -30,6 +31,28 @@ #include <sys/isa_defs.h> #include <sys/types.h> +/* including <sys/auxv.h> clashes with AT_UID and others */ +#if defined(__arm__) || defined(__aarch64__) || defined(__powerpc__) +#if defined(__FreeBSD__) +#define AT_HWCAP 25 +#define AT_HWCAP2 26 +extern int elf_aux_info(int aux, void *buf, int buflen); +static inline unsigned long getauxval(unsigned long key) +{ + unsigned long val = 0UL; + + if (elf_aux_info((int)key, &val, sizeof (val)) != 0) + return (0UL); + + return (val); +} +#elif defined(__linux__) +#define AT_HWCAP 16 +#define AT_HWCAP2 26 +extern unsigned long getauxval(unsigned long type); +#endif /* __linux__ */ +#endif /* arm || aarch64 || powerpc */ + #if defined(__x86) #include <cpuid.h> @@ -78,7 +101,10 @@ typedef enum cpuid_inst_sets { AVX512VL, AES, PCLMULQDQ, - MOVBE + MOVBE, + SHA_NI, + VAES, + VPCLMULQDQ } cpuid_inst_sets_t; /* @@ -103,6 +129,9 @@ typedef struct cpuid_feature_desc { #define _AES_BIT (1U << 25) #define _PCLMULQDQ_BIT (1U << 1) #define _MOVBE_BIT (1U << 22) +#define _VAES_BIT (1U << 9) +#define _VPCLMULQDQ_BIT (1U << 10) +#define _SHA_NI_BIT (1U << 29) /* * Descriptions of supported instruction sets @@ -131,6 +160,9 @@ static const cpuid_feature_desc_t cpuid_features[] = { [AES] = {1U, 0U, _AES_BIT, ECX }, [PCLMULQDQ] = {1U, 0U, _PCLMULQDQ_BIT, ECX }, [MOVBE] = {1U, 0U, _MOVBE_BIT, ECX }, + [SHA_NI] = {7U, 0U, _SHA_NI_BIT, EBX }, + [VAES] = {7U, 0U, _VAES_BIT, ECX }, + [VPCLMULQDQ] = {7U, 0U, _VPCLMULQDQ_BIT, ECX }, }; /* @@ -204,6 +236,9 @@ CPUID_FEATURE_CHECK(avx512vl, AVX512VL); CPUID_FEATURE_CHECK(aes, AES); CPUID_FEATURE_CHECK(pclmulqdq, PCLMULQDQ); CPUID_FEATURE_CHECK(movbe, MOVBE); +CPUID_FEATURE_CHECK(shani, SHA_NI); +CPUID_FEATURE_CHECK(vaes, VAES); +CPUID_FEATURE_CHECK(vpclmulqdq, VPCLMULQDQ); /* * Detect register set support @@ -346,6 +381,33 @@ zfs_movbe_available(void) } /* + * Check if SHA_NI instruction is available + */ +static inline boolean_t +zfs_shani_available(void) +{ + return (__cpuid_has_shani()); +} + +/* + * Check if VAES instruction is available + */ +static inline boolean_t +zfs_vaes_available(void) +{ + return (__cpuid_has_vaes()); +} + +/* + * Check if VPCLMULQDQ instruction is available + */ +static inline boolean_t +zfs_vpclmulqdq_available(void) +{ + return (__cpuid_has_vpclmulqdq()); +} + +/* * AVX-512 family of instruction sets: * * AVX512F Foundation @@ -443,72 +505,111 @@ zfs_avx512vbmi_available(void) __zmm_enabled()); } -#elif defined(__aarch64__) +#elif defined(__arm__) #define kfpu_allowed() 1 #define kfpu_initialize(tsk) do {} while (0) #define kfpu_begin() do {} while (0) #define kfpu_end() do {} while (0) -#elif defined(__powerpc__) +#define HWCAP_NEON 0x00001000 +#define HWCAP2_SHA2 0x00000008 + +/* + * Check if NEON is available + */ +static inline boolean_t +zfs_neon_available(void) +{ + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & HWCAP_NEON); +} + +/* + * Check if SHA2 is available + */ +static inline boolean_t +zfs_sha256_available(void) +{ + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & HWCAP2_SHA2); +} + +#elif defined(__aarch64__) #define kfpu_allowed() 1 #define kfpu_initialize(tsk) do {} while (0) #define kfpu_begin() do {} while (0) #define kfpu_end() do {} while (0) +#define HWCAP_FP 0x00000001 +#define HWCAP_SHA2 0x00000040 +#define HWCAP_SHA512 0x00200000 + +/* + * Check if NEON is available + */ +static inline boolean_t +zfs_neon_available(void) +{ + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & HWCAP_FP); +} + /* - * Check if AltiVec instruction set is available - * No easy way beyond 'altivec works' :-( + * Check if SHA2 is available */ -#include <signal.h> -#include <setjmp.h> +static inline boolean_t +zfs_sha256_available(void) +{ + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & HWCAP_SHA2); +} -#if defined(__ALTIVEC__) && !defined(__FreeBSD__) -static jmp_buf env; -static void sigillhandler(int x) +/* + * Check if SHA512 is available + */ +static inline boolean_t +zfs_sha512_available(void) { - (void) x; - longjmp(env, 1); + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & HWCAP_SHA512); } -#endif + +#elif defined(__powerpc__) + +#define kfpu_allowed() 0 +#define kfpu_initialize(tsk) do {} while (0) +#define kfpu_begin() do {} while (0) +#define kfpu_end() do {} while (0) + +#define PPC_FEATURE_HAS_ALTIVEC 0x10000000 +#define PPC_FEATURE_HAS_VSX 0x00000080 +#define PPC_FEATURE2_ARCH_2_07 0x80000000 static inline boolean_t zfs_altivec_available(void) { - boolean_t has_altivec = B_FALSE; -#if defined(__ALTIVEC__) && !defined(__FreeBSD__) - sighandler_t savesig; - savesig = signal(SIGILL, sigillhandler); - if (setjmp(env)) { - signal(SIGILL, savesig); - has_altivec = B_FALSE; - } else { - __asm__ __volatile__("vor 0,0,0\n" : : : "v0"); - signal(SIGILL, savesig); - has_altivec = B_TRUE; - } -#endif - return (has_altivec); + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & PPC_FEATURE_HAS_ALTIVEC); } + static inline boolean_t zfs_vsx_available(void) { - boolean_t has_vsx = B_FALSE; -#if defined(__ALTIVEC__) && !defined(__FreeBSD__) - sighandler_t savesig; - savesig = signal(SIGILL, sigillhandler); - if (setjmp(env)) { - signal(SIGILL, savesig); - has_vsx = B_FALSE; - } else { - __asm__ __volatile__("xssubsp 0,0,0\n"); - signal(SIGILL, savesig); - has_vsx = B_TRUE; - } -#endif - return (has_vsx); + unsigned long hwcap = getauxval(AT_HWCAP); + return (hwcap & PPC_FEATURE_HAS_VSX); } + +static inline boolean_t +zfs_isa207_available(void) +{ + unsigned long hwcap = getauxval(AT_HWCAP); + unsigned long hwcap2 = getauxval(AT_HWCAP2); + return ((hwcap & PPC_FEATURE_HAS_VSX) && + (hwcap2 & PPC_FEATURE2_ARCH_2_07)); +} + #else #define kfpu_allowed() 0 @@ -518,4 +619,7 @@ zfs_vsx_available(void) #endif +extern void simd_stat_init(void); +extern void simd_stat_fini(void); + #endif /* _LIBSPL_SYS_SIMD_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/stack.h b/sys/contrib/openzfs/lib/libspl/include/sys/stack.h index 59807e97b6a0..80984086a145 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/stack.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/stack.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/stdtypes.h b/sys/contrib/openzfs/lib/libspl/include/sys/stdtypes.h index c26e2dc96c4e..db5876e5bc2b 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/stdtypes.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/stdtypes.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/string.h b/sys/contrib/openzfs/lib/libspl/include/sys/string.h index 3b2f5900276f..55ccbd09041a 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/string.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/string.h @@ -1 +1,4 @@ +#ifndef _LIBSPL_SYS_STRING_H +#define _LIBSPL_SYS_STRING_H #include <string.h> +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/sunddi.h b/sys/contrib/openzfs/lib/libspl/include/sys/sunddi.h index ccd2b29b9b09..48e0b15a4542 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/sunddi.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/sunddi.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -20,10 +21,16 @@ * CDDL HEADER END */ /* - * Copyright (c) 2008 by Sun Microsystems, Inc. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ #ifndef _SYS_SUNDDI_H #define _SYS_SUNDDI_H +extern int ddi_strtoull(const char *str, char **nptr, int base, + u_longlong_t *result); + #endif /* _SYS_SUNDDI_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/sysmacros.h b/sys/contrib/openzfs/lib/libspl/include/sys/sysmacros.h index 31f347c6fd5a..f67b081c42fa 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/linux/sys/sysmacros.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/sysmacros.h @@ -1,13 +1,13 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -20,14 +20,32 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ #ifndef _LIBSPL_SYS_SYSMACROS_H #define _LIBSPL_SYS_SYSMACROS_H +#include <stdint.h> + +#ifdef __linux__ +/* + * On Linux, we need the system-provided sysmacros.h to get the makedev(), + * major() and minor() definitions for makedevice() below. FreeBSD does not + * have this header, so include_next won't find it and will abort. So, we + * protect it with a platform check. + */ +#ifndef IN_BASE #include_next <sys/sysmacros.h> +#endif +#endif + +#ifdef __FreeBSD__ +#include <sys/param.h> +#endif /* common macros */ #ifndef MIN @@ -52,7 +70,8 @@ /* * Compatibility macros/typedefs needed for Solaris -> Linux port */ -#define P2ALIGN(x, align) ((x) & -(align)) +// Deprecated. Use P2ALIGN_TYPED instead. +// #define P2ALIGN(x, align) ((x) & -(align)) #define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1) #define P2ROUNDUP(x, align) ((((x) - 1) | ((align) - 1)) + 1) #define P2BOUNDARY(off, len, align) \ @@ -92,10 +111,22 @@ #define P2SAMEHIGHBIT_TYPED(x, y, type) \ (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y))) +#define max_ncpus 64 +#define boot_ncpus (sysconf(_SC_NPROCESSORS_ONLN)) -/* avoid any possibility of clashing with <stddef.h> version */ -#if defined(_KERNEL) && !defined(_KMEMUSER) && !defined(offsetof) -#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) -#endif +/* + * Process priorities as defined by setpriority(2) and getpriority(2). + */ +#define minclsyspri 19 +#define defclsyspri 0 +/* Write issue taskq priority. */ +#define wtqclsyspri -19 +#define maxclsyspri -20 + +#define CPU_SEQID ((uintptr_t)pthread_self() & (max_ncpus - 1)) +#define CPU_SEQID_UNSTABLE CPU_SEQID + +extern int lowbit64(uint64_t i); +extern int highbit64(uint64_t i); -#endif /* _LIBSPL_SYS_SYSMACROS_H */ +#endif /* _SYS_SYSMACROS_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/systeminfo.h b/sys/contrib/openzfs/lib/libspl/include/sys/systeminfo.h index cc6c1793c00e..3ca1fa884994 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/systeminfo.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/systeminfo.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/systm.h b/sys/contrib/openzfs/lib/libspl/include/sys/systm.h new file mode 100644 index 000000000000..f984125c3315 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/systm.h @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _LIBSPL_SYS_SYSTM_H +#define _LIBSPL_SYS_SYSTM_H + +uint64_t libspl_physmem(void); + +#define physmem libspl_physmem() + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/taskq.h b/sys/contrib/openzfs/lib/libspl/include/sys/taskq.h new file mode 100644 index 000000000000..fbe3f388c05f --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/taskq.h @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_TASKQ_H +#define _SYS_TASKQ_H + +#include <pthread.h> +#include <stdint.h> +#include <sys/mutex.h> +#include <sys/rwlock.h> +#include <sys/condvar.h> + +/* + * Task queues + */ + +#define TASKQ_NAMELEN 31 + +typedef uintptr_t taskqid_t; +typedef void (task_func_t)(void *); + +typedef struct taskq_ent { + struct taskq_ent *tqent_next; + struct taskq_ent *tqent_prev; + task_func_t *tqent_func; + void *tqent_arg; + uintptr_t tqent_flags; +} taskq_ent_t; + +typedef struct taskq { + char tq_name[TASKQ_NAMELEN + 1]; + kmutex_t tq_lock; + krwlock_t tq_threadlock; + kcondvar_t tq_dispatch_cv; + kcondvar_t tq_wait_cv; + kthread_t **tq_threadlist; + int tq_flags; + int tq_active; + int tq_nthreads; + int tq_nalloc; + int tq_minalloc; + int tq_maxalloc; + kcondvar_t tq_maxalloc_cv; + int tq_maxalloc_wait; + taskq_ent_t *tq_freelist; + taskq_ent_t tq_task; +} taskq_t; + +#define TQENT_FLAG_PREALLOC 0x1 /* taskq_dispatch_ent used */ + +#define TASKQ_PREPOPULATE 0x0001 +#define TASKQ_CPR_SAFE 0x0002 /* Use CPR safe protocol */ +#define TASKQ_DYNAMIC 0x0004 /* Use dynamic thread scheduling */ +#define TASKQ_THREADS_CPU_PCT 0x0008 /* Scale # threads by # cpus */ +#define TASKQ_DC_BATCH 0x0010 /* Mark threads as batch */ + +#define TQ_SLEEP KM_SLEEP /* Can block for memory */ +#define TQ_NOSLEEP KM_NOSLEEP /* cannot block for memory; may fail */ +#define TQ_NOQUEUE 0x02 /* Do not enqueue if can't dispatch */ +#define TQ_FRONT 0x08 /* Queue in front */ + +#define TASKQID_INVALID ((taskqid_t)0) + +extern taskq_t *_system_taskq(void); +extern taskq_t *_system_delay_taskq(void); + +#define system_taskq _system_taskq() +#define system_delay_taskq _system_delay_taskq() + +extern taskq_t *taskq_create(const char *, int, pri_t, int, int, uint_t); +extern taskq_t *taskq_create_synced(const char *, int, pri_t, int, int, uint_t, + kthread_t ***); +#define taskq_create_proc(a, b, c, d, e, p, f) \ + (taskq_create(a, b, c, d, e, f)) +#define taskq_create_sysdc(a, b, d, e, p, dc, f) \ + ((void) sizeof (dc), taskq_create(a, b, maxclsyspri, d, e, f)) +extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t); +extern taskqid_t taskq_dispatch_delay(taskq_t *, task_func_t, void *, uint_t, + clock_t); +extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t, + taskq_ent_t *); +extern int taskq_empty_ent(taskq_ent_t *); +extern void taskq_init_ent(taskq_ent_t *); +extern void taskq_destroy(taskq_t *); +extern void taskq_wait(taskq_t *); +extern void taskq_wait_id(taskq_t *, taskqid_t); +extern void taskq_wait_outstanding(taskq_t *, taskqid_t); +extern int taskq_member(taskq_t *, kthread_t *); +extern taskq_t *taskq_of_curthread(void); +extern int taskq_cancel_id(taskq_t *, taskqid_t); +extern void system_taskq_init(void); +extern void system_taskq_fini(void); + +#endif /* _SYS_TASKQ_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/thread.h b/sys/contrib/openzfs/lib/libspl/include/sys/thread.h new file mode 100644 index 000000000000..6390c5bfd863 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/thread.h @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_THREAD_H +#define _SYS_THREAD_H + +#include <pthread.h> + +/* + * Threads. + */ +typedef pthread_t kthread_t; + +#define TS_RUN 0x00000002 +#define TS_JOINABLE 0x00000004 + +#define curthread ((void *)(uintptr_t)pthread_self()) +#define getcomm() "unknown" + +#define thread_create_named(name, stk, stksize, func, arg, len, \ + pp, state, pri) \ + zk_thread_create(name, func, arg, stksize, state) +#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \ + zk_thread_create(#func, func, arg, stksize, state) +#define thread_exit() pthread_exit(NULL) +#define thread_join(t) pthread_join((pthread_t)(t), NULL) + +#define newproc(f, a, cid, pri, ctp, pid) (ENOSYS) +/* + * Check if the current thread is a memory reclaim thread. + * Always returns false in userspace (no memory reclaim thread). + */ +#define current_is_reclaim_thread() (0) + +/* in libzpool, p0 exists only to have its address taken */ +typedef void (proc_t)(void); +extern void p0(void); + +#define curproc (&p0) + +#define PS_NONE -1 + +extern kthread_t *zk_thread_create(const char *name, void (*func)(void *), + void *arg, size_t stksize, int state); + +#define issig() (FALSE) + +#define KPREEMPT_SYNC (-1) + +#define kpreempt(x) sched_yield() +#define kpreempt_disable() ((void)0) +#define kpreempt_enable() ((void)0) + +#endif /* _SYS_THREAD_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/time.h b/sys/contrib/openzfs/lib/libspl/include/sys/time.h index c9f6165047d2..062c6ec979fc 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/time.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/time.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -97,11 +98,20 @@ gethrestime_sec(void) } static inline hrtime_t +getlrtime(void) +{ + struct timeval tv; + (void) gettimeofday(&tv, NULL); + return ((((uint64_t)tv.tv_sec) * NANOSEC) + + ((uint64_t)tv.tv_usec * NSEC_PER_USEC)); +} + +static inline hrtime_t gethrtime(void) { struct timespec ts; (void) clock_gettime(CLOCK_MONOTONIC, &ts); - return ((((u_int64_t)ts.tv_sec) * NANOSEC) + ts.tv_nsec); + return ((((uint64_t)ts.tv_sec) * NANOSEC) + ts.tv_nsec); } #endif /* _LIBSPL_SYS_TIME_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/timer.h b/sys/contrib/openzfs/lib/libspl/include/sys/timer.h new file mode 100644 index 000000000000..850d11f063c3 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/timer.h @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, 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 https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SPL_TIMER_H +#define _SPL_TIMER_H + +#include <sys/time.h> + +#define ddi_get_lbolt() (gethrtime() >> 23) +#define ddi_get_lbolt64() (gethrtime() >> 23) +#define hz 119 /* frequency when using gethrtime() >> 23 for lbolt */ + +#define ddi_time_before(a, b) (a < b) +#define ddi_time_after(a, b) ddi_time_before(b, a) +#define ddi_time_before_eq(a, b) (!ddi_time_after(a, b)) +#define ddi_time_after_eq(a, b) ddi_time_before_eq(b, a) + +#define ddi_time_before64(a, b) (a < b) +#define ddi_time_after64(a, b) ddi_time_before64(b, a) +#define ddi_time_before_eq64(a, b) (!ddi_time_after64(a, b)) +#define ddi_time_after_eq64(a, b) ddi_time_before_eq64(b, a) + +extern void delay(clock_t ticks); + +#define SEC_TO_TICK(sec) ((sec) * hz) +#define MSEC_TO_TICK(msec) (howmany((hrtime_t)(msec) * hz, MILLISEC)) +#define USEC_TO_TICK(usec) (howmany((hrtime_t)(usec) * hz, MICROSEC)) +#define NSEC_TO_TICK(nsec) (howmany((hrtime_t)(nsec) * hz, NANOSEC)) + +#define usleep_range(min, max) \ + do { \ + struct timespec ts; \ + ts.tv_sec = min / MICROSEC; \ + ts.tv_nsec = USEC2NSEC(min); \ + (void) nanosleep(&ts, NULL); \ + } while (0) + +#endif /* _SPL_TIMER_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/trace.h b/sys/contrib/openzfs/lib/libspl/include/sys/trace.h new file mode 100644 index 000000000000..17b812faed20 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/trace.h @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_TRACE_H +#define _SYS_TRACE_H + +/* + * DTrace SDT probes have different signatures in userland than they do in + * the kernel. If they're being used in kernel code, re-define them out of + * existence for their counterparts in libzpool. + * + * Here's an example of how to use the set-error probes in userland: + * zfs$target:::set-error /arg0 == EBUSY/ {stack();} + * + * Here's an example of how to use DTRACE_PROBE probes in userland: + * If there is a probe declared as follows: + * DTRACE_PROBE2(zfs__probe_name, uint64_t, blkid, dnode_t *, dn); + * Then you can use it as follows: + * zfs$target:::probe2 /copyinstr(arg0) == "zfs__probe_name"/ + * {printf("%u %p\n", arg1, arg2);} + */ + +#ifdef DTRACE_PROBE +#undef DTRACE_PROBE +#endif /* DTRACE_PROBE */ +#define DTRACE_PROBE(a) + +#ifdef DTRACE_PROBE1 +#undef DTRACE_PROBE1 +#endif /* DTRACE_PROBE1 */ +#define DTRACE_PROBE1(a, b, c) + +#ifdef DTRACE_PROBE2 +#undef DTRACE_PROBE2 +#endif /* DTRACE_PROBE2 */ +#define DTRACE_PROBE2(a, b, c, d, e) + +#ifdef DTRACE_PROBE3 +#undef DTRACE_PROBE3 +#endif /* DTRACE_PROBE3 */ +#define DTRACE_PROBE3(a, b, c, d, e, f, g) + +#ifdef DTRACE_PROBE4 +#undef DTRACE_PROBE4 +#endif /* DTRACE_PROBE4 */ +#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) + +#endif /* _SYS_TRACE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/trace_spl.h b/sys/contrib/openzfs/lib/libspl/include/sys/trace_spl.h deleted file mode 100644 index b80d288f7332..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/trace_spl.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Here to keep the libspl build happy */ - -#ifndef _LIBSPL_SPL_TRACE_H -#define _LIBSPL_SPL_TRACE_H - -/* - * The set-error SDT probe is extra static, in that we declare its fake - * function literally, rather than with the DTRACE_PROBE1() macro. This is - * necessary so that SET_ERROR() can evaluate to a value, which wouldn't - * be possible if it required multiple statements (to declare the function - * and then call it). - * - * SET_ERROR() uses the comma operator so that it can be used without much - * additional code. For example, "return (EINVAL);" becomes - * "return (SET_ERROR(EINVAL));". Note that the argument will be evaluated - * twice, so it should not have side effects (e.g. something like: - * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice). - */ -#undef SET_ERROR -#define SET_ERROR(err) \ - (__set_error(__FILE__, __func__, __LINE__, err), err) - - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/trace_zfs.h b/sys/contrib/openzfs/lib/libspl/include/sys/trace_zfs.h deleted file mode 100644 index 87ed5ad3c3be..000000000000 --- a/sys/contrib/openzfs/lib/libspl/include/sys/trace_zfs.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Here to keep the libspl build happy */ - -#ifndef _LIBSPL_ZFS_TRACE_H -#define _LIBSPL_ZFS_TRACE_H - -/* - * The set-error SDT probe is extra static, in that we declare its fake - * function literally, rather than with the DTRACE_PROBE1() macro. This is - * necessary so that SET_ERROR() can evaluate to a value, which wouldn't - * be possible if it required multiple statements (to declare the function - * and then call it). - * - * SET_ERROR() uses the comma operator so that it can be used without much - * additional code. For example, "return (EINVAL);" becomes - * "return (SET_ERROR(EINVAL));". Note that the argument will be evaluated - * twice, so it should not have side effects (e.g. something like: - * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice). - */ -#undef SET_ERROR -#define SET_ERROR(err) \ - (__set_error(__FILE__, __func__, __LINE__, err), err) - - -#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/tsd.h b/sys/contrib/openzfs/lib/libspl/include/sys/tsd.h new file mode 100644 index 000000000000..fa91519b3de5 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/tsd.h @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_TSD_H +#define _SYS_TSD_H + +#include <pthread.h> + +/* + * Thread-specific data + */ +#define tsd_get(k) pthread_getspecific(k) +#define tsd_set(k, v) pthread_setspecific(k, v) +#define tsd_create(kp, d) pthread_key_create((pthread_key_t *)kp, d) +#define tsd_destroy(kp) /* nothing */ + +#endif /* _SYS_MUTEX_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/tunables.h b/sys/contrib/openzfs/lib/libspl/include/sys/tunables.h new file mode 100644 index 000000000000..d93425733709 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/include/sys/tunables.h @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2025, Rob Norris <robn@despairlabs.com> + */ + +#ifndef _SYS_TUNABLES_H +//#define _SYS_TUNABLES_H extern __attribute__((visibility("hidden"))) +#define _SYS_TUNABLES_H extern + +typedef enum { + ZFS_TUNABLE_TYPE_INT, + ZFS_TUNABLE_TYPE_UINT, + ZFS_TUNABLE_TYPE_ULONG, + ZFS_TUNABLE_TYPE_U64, + ZFS_TUNABLE_TYPE_STRING, +} zfs_tunable_type_t; + +typedef enum { + ZFS_TUNABLE_PERM_ZMOD_RW, + ZFS_TUNABLE_PERM_ZMOD_RD, +} zfs_tunable_perm_t; + +typedef struct zfs_tunable { + const char *zt_name; + void *zt_varp; + size_t zt_varsz; + zfs_tunable_type_t zt_type; + zfs_tunable_perm_t zt_perm; + const char *zt_desc; +} zfs_tunable_t; + +_SYS_TUNABLES_H int zfs_tunable_set(const zfs_tunable_t *tunable, + const char *val); +_SYS_TUNABLES_H int zfs_tunable_get(const zfs_tunable_t *tunable, char *val, + size_t valsz); + +_SYS_TUNABLES_H const zfs_tunable_t *zfs_tunable_lookup(const char *name); + +typedef int (*zfs_tunable_iter_t)(const zfs_tunable_t *tunable, void *arg); +_SYS_TUNABLES_H void zfs_tunable_iter(zfs_tunable_iter_t cb, void *arg); + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/types.h b/sys/contrib/openzfs/lib/libspl/include/sys/types.h index 8dc38ae3394f..9af20d781674 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/types.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/types.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -47,31 +48,10 @@ typedef uint_t zoneid_t; typedef int projid_t; -/* - * Definitions remaining from previous partial support for 64-bit file - * offsets. This partial support for devices greater than 2gb requires - * compiler support for long long. - */ -#ifdef _LONG_LONG_LTOH -typedef union { - offset_t _f; /* Full 64 bit offset value */ - struct { - int32_t _l; /* lower 32 bits of offset value */ - int32_t _u; /* upper 32 bits of offset value */ - } _p; -} lloff_t; -#endif +#include <sys/param.h> /* for NBBY */ -#ifdef _LONG_LONG_HTOL -typedef union { - offset_t _f; /* Full 64 bit offset value */ - struct { - int32_t _u; /* upper 32 bits of offset value */ - int32_t _l; /* lower 32 bits of offset value */ - } _p; -} lloff_t; +#ifdef __FreeBSD__ +typedef off_t loff_t; #endif -#include <sys/param.h> /* for NBBY */ - #endif diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/types32.h b/sys/contrib/openzfs/lib/libspl/include/sys/types32.h index bb41aa34bee0..1bcae20187ad 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/types32.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/types32.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -65,11 +66,6 @@ typedef int32_t ssize32_t; typedef int32_t time32_t; typedef int32_t clock32_t; -struct timeval32 { - time32_t tv_sec; /* seconds */ - int32_t tv_usec; /* and microseconds */ -}; - typedef struct timespec32 { time32_t tv_sec; /* seconds */ int32_t tv_nsec; /* and nanoseconds */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/uio.h b/sys/contrib/openzfs/lib/libspl/include/sys/uio.h index 81ade54b5409..9ada482be000 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/uio.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/uio.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -40,6 +41,7 @@ #ifndef _LIBSPL_SYS_UIO_H #define _LIBSPL_SYS_UIO_H +#include <sys/sysmacros.h> #include <sys/types.h> #include_next <sys/uio.h> @@ -57,8 +59,7 @@ typedef enum zfs_uio_rw { } zfs_uio_rw_t; typedef enum zfs_uio_seg { - UIO_USERSPACE = 0, - UIO_SYSSPACE = 1, + UIO_SYSSPACE = 0, } zfs_uio_seg_t; #elif defined(__FreeBSD__) @@ -82,6 +83,32 @@ typedef struct zfs_uio { #define zfs_uio_iovlen(uio, idx) (uio)->uio_iov[(idx)].iov_len #define zfs_uio_iovbase(uio, idx) (uio)->uio_iov[(idx)].iov_base +static inline boolean_t +zfs_dio_page_aligned(void *buf) +{ + return ((((unsigned long)(buf) & (PAGESIZE - 1)) == 0) ? + B_TRUE : B_FALSE); +} + +static inline boolean_t +zfs_dio_offset_aligned(uint64_t offset, uint64_t blksz) +{ + return ((IS_P2ALIGNED(offset, blksz)) ? B_TRUE : B_FALSE); +} + +static inline boolean_t +zfs_dio_size_aligned(uint64_t size, uint64_t blksz) +{ + return (((size % blksz) == 0) ? B_TRUE : B_FALSE); +} + +static inline boolean_t +zfs_dio_aligned(uint64_t offset, uint64_t size, uint64_t blksz) +{ + return ((zfs_dio_offset_aligned(offset, blksz) && + zfs_dio_size_aligned(size, blksz)) ? B_TRUE : B_FALSE); +} + static inline void zfs_uio_iov_at_index(zfs_uio_t *uio, uint_t idx, void **base, uint64_t *len) { @@ -90,7 +117,7 @@ zfs_uio_iov_at_index(zfs_uio_t *uio, uint_t idx, void **base, uint64_t *len) } static inline void -zfs_uio_advance(zfs_uio_t *uio, size_t size) +zfs_uio_advance(zfs_uio_t *uio, ssize_t size) { uio->uio_resid -= size; uio->uio_loffset += size; diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/vnode.h b/sys/contrib/openzfs/lib/libspl/include/sys/vnode.h index efcdd2c5a5ae..ed9901eede22 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/vnode.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/vnode.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -24,7 +25,36 @@ * Use is subject to license terms. */ -#ifndef _LIBSPL_SYS_VNODE_H -#define _LIBSPL_SYS_VNODE_H +#ifndef _SYS_VNODE_H +#define _SYS_VNODE_H -#endif /* _LIBSPL_SYS_VNODE_H */ +typedef struct vattr { + uint_t va_mask; /* bit-mask of attributes */ + u_offset_t va_size; /* file size in bytes */ +} vattr_t; + +#define AT_MODE 0x00002 +#define AT_UID 0x00004 +#define AT_GID 0x00008 +#define AT_FSID 0x00010 +#define AT_NODEID 0x00020 +#define AT_NLINK 0x00040 +#define AT_SIZE 0x00080 +#define AT_ATIME 0x00100 +#define AT_MTIME 0x00200 +#define AT_CTIME 0x00400 +#define AT_RDEV 0x00800 +#define AT_BLKSIZE 0x01000 +#define AT_NBLOCKS 0x02000 +#define AT_SEQ 0x08000 +#define AT_XVATTR 0x10000 + +#define ATTR_XVATTR AT_XVATTR + +#define CRCREAT 0 + +#define F_FREESP 11 +#define FIGNORECASE 0x80000 /* request case-insensitive lookups */ + + +#endif /* _SYS_VNODE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/wmsum.h b/sys/contrib/openzfs/lib/libspl/include/sys/wmsum.h index 0679af73ce91..36e37f9e17d4 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/wmsum.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/wmsum.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * diff --git a/sys/contrib/openzfs/lib/libspl/include/sys/zone.h b/sys/contrib/openzfs/lib/libspl/include/sys/zone.h index bbb964dcef22..179cc004fdb8 100644 --- a/sys/contrib/openzfs/lib/libspl/include/sys/zone.h +++ b/sys/contrib/openzfs/lib/libspl/include/sys/zone.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -20,11 +21,19 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ -#ifndef _LIBSPL_SYS_ZONE_H -#define _LIBSPL_SYS_ZONE_H +#ifndef _SYS_ZONE_H +#define _SYS_ZONE_H -#endif +#define zone_dataset_visible(x, y) (1) + +#define INGLOBALZONE(z) (1) + +extern uint32_t zone_get_hostid(void *zonep); + +#endif /* _SYS_ZONE_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/umem.h b/sys/contrib/openzfs/lib/libspl/include/umem.h index 288aaf3ecc36..1b79fee56d23 100644 --- a/sys/contrib/openzfs/lib/libspl/include/umem.h +++ b/sys/contrib/openzfs/lib/libspl/include/umem.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -41,6 +42,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <errno.h> #ifdef __cplusplus extern "C" { @@ -83,6 +85,7 @@ const char *_umem_debug_init(void); const char *_umem_options_init(void); const char *_umem_logging_init(void); +__attribute__((malloc, alloc_size(1))) static inline void * umem_alloc(size_t size, int flags) { @@ -95,11 +98,12 @@ umem_alloc(size_t size, int flags) return (ptr); } +__attribute__((malloc, alloc_size(1))) static inline void * umem_alloc_aligned(size_t size, size_t align, int flags) { void *ptr = NULL; - int rc = EINVAL; + int rc; do { rc = posix_memalign(&ptr, align, size); @@ -116,6 +120,7 @@ umem_alloc_aligned(size_t size, size_t align, int flags) return (ptr); } +__attribute__((malloc, alloc_size(1))) static inline void * umem_zalloc(size_t size, int flags) { @@ -134,6 +139,21 @@ umem_free(const void *ptr, size_t size __maybe_unused) free((void *)ptr); } +/* + * umem_free_aligned was added for supporting portability + * with non-POSIX platforms that require a different free + * to be used with aligned allocations. + */ +static inline void +umem_free_aligned(void *ptr, size_t size __maybe_unused) +{ +#ifndef _WIN32 + free((void *)ptr); +#else + _aligned_free(ptr); +#endif +} + static inline void umem_nofail_callback(umem_nofail_callback_t *cb __maybe_unused) {} @@ -170,6 +190,7 @@ umem_cache_destroy(umem_cache_t *cp) umem_free(cp, sizeof (umem_cache_t)); } +__attribute__((malloc)) static inline void * umem_cache_alloc(umem_cache_t *cp, int flags) { @@ -193,7 +214,10 @@ umem_cache_free(umem_cache_t *cp, void *ptr) if (cp->cache_destructor) cp->cache_destructor(ptr, cp->cache_private); - umem_free(ptr, cp->cache_bufsize); + if (cp->cache_align != 0) + umem_free_aligned(ptr, cp->cache_bufsize); + else + umem_free(ptr, cp->cache_bufsize); } static inline void diff --git a/sys/contrib/openzfs/lib/libspl/include/unistd.h b/sys/contrib/openzfs/lib/libspl/include/unistd.h index 0246991b4b61..6d755eb8ad91 100644 --- a/sys/contrib/openzfs/lib/libspl/include/unistd.h +++ b/sys/contrib/openzfs/lib/libspl/include/unistd.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/include/zone.h b/sys/contrib/openzfs/lib/libspl/include/zone.h index 0af4e7a2fa49..f946c0f13f77 100644 --- a/sys/contrib/openzfs/lib/libspl/include/zone.h +++ b/sys/contrib/openzfs/lib/libspl/include/zone.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/kmem.c b/sys/contrib/openzfs/lib/libspl/kmem.c new file mode 100644 index 000000000000..c64e94597cf4 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/kmem.c @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <sys/kmem.h> + +char * +kmem_vasprintf(const char *fmt, va_list adx) +{ + char *buf = NULL; + va_list adx_copy; + + va_copy(adx_copy, adx); + VERIFY(vasprintf(&buf, fmt, adx_copy) != -1); + va_end(adx_copy); + + return (buf); +} + +char * +kmem_asprintf(const char *fmt, ...) +{ + char *buf = NULL; + va_list adx; + + va_start(adx, fmt); + VERIFY(vasprintf(&buf, fmt, adx) != -1); + va_end(adx); + + return (buf); +} + +/* + * kmem_scnprintf() will return the number of characters that it would have + * printed whenever it is limited by value of the size variable, rather than + * the number of characters that it did print. This can cause misbehavior on + * subsequent uses of the return value, so we define a safe version that will + * return the number of characters actually printed, minus the NULL format + * character. Subsequent use of this by the safe string functions is safe + * whether it is snprintf(), strlcat() or strlcpy(). + */ +int +kmem_scnprintf(char *restrict str, size_t size, const char *restrict fmt, ...) +{ + int n; + va_list ap; + + /* Make the 0 case a no-op so that we do not return -1 */ + if (size == 0) + return (0); + + va_start(ap, fmt); + n = vsnprintf(str, size, fmt, ap); + va_end(ap); + + if (n >= size) + n = size - 1; + + return (n); +} + +fstrans_cookie_t +spl_fstrans_mark(void) +{ + return ((fstrans_cookie_t)0); +} + +void +spl_fstrans_unmark(fstrans_cookie_t cookie) +{ + (void) cookie; +} + +int +kmem_cache_reap_active(void) +{ + return (0); +} diff --git a/sys/contrib/openzfs/lib/libspl/kstat.c b/sys/contrib/openzfs/lib/libspl/kstat.c new file mode 100644 index 000000000000..af4b870edadf --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/kstat.c @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <sys/kstat.h> + +/* + * ========================================================================= + * kstats + * ========================================================================= + */ +kstat_t * +kstat_create(const char *module, int instance, const char *name, + const char *class, uchar_t type, ulong_t ndata, uchar_t ks_flag) +{ + (void) module, (void) instance, (void) name, (void) class, (void) type, + (void) ndata, (void) ks_flag; + return (NULL); +} + +void +kstat_install(kstat_t *ksp) +{ + (void) ksp; +} + +void +kstat_delete(kstat_t *ksp) +{ + (void) ksp; +} + +void +kstat_set_raw_ops(kstat_t *ksp, + int (*headers)(char *buf, size_t size), + int (*data)(char *buf, size_t size, void *data), + void *(*addr)(kstat_t *ksp, loff_t index)) +{ + (void) ksp, (void) headers, (void) data, (void) addr; +} diff --git a/sys/contrib/openzfs/lib/libspl/libspl.c b/sys/contrib/openzfs/lib/libspl/libspl.c new file mode 100644 index 000000000000..208b3e428536 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/libspl.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + * Copyright (c) 2025, Rob Norris <robn@despairlabs.com> + */ + +#include <libspl.h> +#include <assert.h> +#include <unistd.h> +#include <sys/misc.h> +#include <sys/systm.h> +#include <sys/utsname.h> +#include "libspl_impl.h" + +static uint64_t hw_physmem = 0; +static struct utsname hw_utsname = {}; + +uint64_t +libspl_physmem(void) +{ + return (hw_physmem); +} + +utsname_t * +utsname(void) +{ + return (&hw_utsname); +} + +void +libspl_init(void) +{ + hw_physmem = sysconf(_SC_PHYS_PAGES); + + VERIFY0(uname(&hw_utsname)); + + random_init(); +} + +void +libspl_fini(void) +{ + random_fini(); +} diff --git a/sys/contrib/openzfs/lib/libspl/libspl_impl.h b/sys/contrib/openzfs/lib/libspl/libspl_impl.h index cda56e64c962..446801f2564b 100644 --- a/sys/contrib/openzfs/lib/libspl/libspl_impl.h +++ b/sys/contrib/openzfs/lib/libspl/libspl_impl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -20,5 +21,12 @@ * CDDL HEADER END */ +#ifndef _LIBSPL_IMPL_H +#define _LIBSPL_IMPL_H extern ssize_t getexecname_impl(char *execname); + +extern void random_init(void); +extern void random_fini(void); + +#endif diff --git a/sys/contrib/openzfs/lib/libspl/list.c b/sys/contrib/openzfs/lib/libspl/list.c index 0f2f3731b235..f95b358153de 100644 --- a/sys/contrib/openzfs/lib/libspl/list.c +++ b/sys/contrib/openzfs/lib/libspl/list.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -65,7 +66,8 @@ list_create(list_t *list, size_t size, size_t offset) ASSERT(size > 0); ASSERT(size >= offset + sizeof (list_node_t)); - list->list_size = size; + (void) size; + list->list_offset = offset; list->list_head.next = list->list_head.prev = &list->list_head; } @@ -194,7 +196,6 @@ list_move_tail(list_t *dst, list_t *src) list_node_t *dstnode = &dst->list_head; list_node_t *srcnode = &src->list_head; - ASSERT(dst->list_size == src->list_size); ASSERT(dst->list_offset == src->list_offset); if (list_empty(src)) diff --git a/sys/contrib/openzfs/lib/libspl/mkdirp.c b/sys/contrib/openzfs/lib/libspl/mkdirp.c index fce2c1c82eb7..80198dfbecba 100644 --- a/sys/contrib/openzfs/lib/libspl/mkdirp.c +++ b/sys/contrib/openzfs/lib/libspl/mkdirp.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/mutex.c b/sys/contrib/openzfs/lib/libspl/mutex.c new file mode 100644 index 000000000000..36e5bec396ed --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/mutex.c @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <assert.h> +#include <pthread.h> +#include <string.h> +#include <errno.h> +#include <sys/mutex.h> + +/* + * ========================================================================= + * mutexes + * ========================================================================= + */ + +void +mutex_init(kmutex_t *mp, char *name, int type, void *cookie) +{ + (void) name, (void) type, (void) cookie; + VERIFY0(pthread_mutex_init(&mp->m_lock, NULL)); + memset(&mp->m_owner, 0, sizeof (pthread_t)); +} + +void +mutex_destroy(kmutex_t *mp) +{ + VERIFY0(pthread_mutex_destroy(&mp->m_lock)); +} + +void +mutex_enter(kmutex_t *mp) +{ + VERIFY0(pthread_mutex_lock(&mp->m_lock)); + mp->m_owner = pthread_self(); +} + +int +mutex_enter_check_return(kmutex_t *mp) +{ + int error = pthread_mutex_lock(&mp->m_lock); + if (error == 0) + mp->m_owner = pthread_self(); + return (error); +} + +int +mutex_tryenter(kmutex_t *mp) +{ + int error = pthread_mutex_trylock(&mp->m_lock); + if (error == 0) { + mp->m_owner = pthread_self(); + return (1); + } else { + VERIFY3S(error, ==, EBUSY); + return (0); + } +} + +void +mutex_exit(kmutex_t *mp) +{ + memset(&mp->m_owner, 0, sizeof (pthread_t)); + VERIFY0(pthread_mutex_unlock(&mp->m_lock)); +} diff --git a/sys/contrib/openzfs/lib/libspl/os/freebsd/getexecname.c b/sys/contrib/openzfs/lib/libspl/os/freebsd/getexecname.c index 256b28c1b70e..49c0ce3a2432 100644 --- a/sys/contrib/openzfs/lib/libspl/os/freebsd/getexecname.c +++ b/sys/contrib/openzfs/lib/libspl/os/freebsd/getexecname.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/os/freebsd/gethostid.c b/sys/contrib/openzfs/lib/libspl/os/freebsd/gethostid.c index 7bd567fe61b5..bd0f3ee5a075 100644 --- a/sys/contrib/openzfs/lib/libspl/os/freebsd/gethostid.c +++ b/sys/contrib/openzfs/lib/libspl/os/freebsd/gethostid.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/os/freebsd/getmntany.c b/sys/contrib/openzfs/lib/libspl/os/freebsd/getmntany.c index 0ef24059e84f..baff124b4a40 100644 --- a/sys/contrib/openzfs/lib/libspl/os/freebsd/getmntany.c +++ b/sys/contrib/openzfs/lib/libspl/os/freebsd/getmntany.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -36,6 +37,7 @@ #include <sys/sysmacros.h> #include <sys/stat.h> #include <unistd.h> +#include <libzutil.h> int getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf) @@ -49,13 +51,13 @@ getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf) if (stat64(path, statbuf) != 0) { (void) fprintf(stderr, "cannot open '%s': %s\n", - path, strerror(errno)); + path, zfs_strerror(errno)); return (-1); } if (statfs(path, &sfs) != 0) { (void) fprintf(stderr, "%s: %s\n", path, - strerror(errno)); + zfs_strerror(errno)); return (-1); } statfs2mnttab(&sfs, (struct mnttab *)entry); diff --git a/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c b/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c index f0cc04d89ded..5287da132966 100644 --- a/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c +++ b/sys/contrib/openzfs/lib/libspl/os/freebsd/mnttab.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2006 Pawel Jakub Dawidek <pjd@FreeBSD.org> * All rights reserved. @@ -29,9 +30,6 @@ * functions. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/mount.h> #include <sys/mntent.h> @@ -74,7 +72,7 @@ hasmntopt(struct mnttab *mnt, const char *opt) if (mnt->mnt_mntopts == NULL) return (NULL); - (void) strcpy(opts, mnt->mnt_mntopts); + (void) strlcpy(opts, mnt->mnt_mntopts, MNT_LINE_MAX); f = mntopt(&opts); for (; *f; f = mntopt(&opts)) { if (strncmp(opt, f, strlen(opt)) == 0) diff --git a/sys/contrib/openzfs/lib/libspl/os/freebsd/zone.c b/sys/contrib/openzfs/lib/libspl/os/freebsd/zone.c index c07cb0532e16..d6f698207cd1 100644 --- a/sys/contrib/openzfs/lib/libspl/os/freebsd/zone.c +++ b/sys/contrib/openzfs/lib/libspl/os/freebsd/zone.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org> * All rights reserved. diff --git a/sys/contrib/openzfs/lib/libspl/os/linux/getexecname.c b/sys/contrib/openzfs/lib/libspl/os/linux/getexecname.c index a640556bcbec..dc4fe26ca550 100644 --- a/sys/contrib/openzfs/lib/libspl/os/linux/getexecname.c +++ b/sys/contrib/openzfs/lib/libspl/os/linux/getexecname.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/os/linux/gethostid.c b/sys/contrib/openzfs/lib/libspl/os/linux/gethostid.c index c04b7fd3eef3..d39f3dda3b8d 100644 --- a/sys/contrib/openzfs/lib/libspl/os/linux/gethostid.c +++ b/sys/contrib/openzfs/lib/libspl/os/linux/gethostid.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -59,6 +60,7 @@ unsigned long get_system_hostid(void) { unsigned long hostid = get_spl_hostid(); + uint32_t system_hostid; /* * We do not use gethostid(3) because it can return a bogus ID, @@ -69,8 +71,11 @@ get_system_hostid(void) if (hostid == 0) { int fd = open("/etc/hostid", O_RDONLY | O_CLOEXEC); if (fd >= 0) { - if (read(fd, &hostid, 4) < 0) + if (read(fd, &system_hostid, sizeof (system_hostid)) + != sizeof (system_hostid)) hostid = 0; + else + hostid = system_hostid; (void) close(fd); } } diff --git a/sys/contrib/openzfs/lib/libspl/os/linux/getmntany.c b/sys/contrib/openzfs/lib/libspl/os/linux/getmntany.c index 3713ff38e17f..ee1cdf59b9e5 100644 --- a/sys/contrib/openzfs/lib/libspl/os/linux/getmntany.c +++ b/sys/contrib/openzfs/lib/libspl/os/linux/getmntany.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -38,6 +39,7 @@ #include <sys/sysmacros.h> #include <sys/stat.h> #include <unistd.h> +#include <libzutil.h> #define BUFSIZE (MNT_LINE_MAX + 2) @@ -83,13 +85,21 @@ _sol_getmntent(FILE *fp, struct mnttab *mgetp) } static int -getextmntent_impl(FILE *fp, struct extmnttab *mp) +getextmntent_impl(FILE *fp, struct extmnttab *mp, uint64_t *mnt_id) { int ret; struct stat64 st; + *mnt_id = 0; ret = _sol_getmntent(fp, (struct mnttab *)mp); if (ret == 0) { +#ifdef HAVE_STATX_MNT_ID + struct statx stx; + if (statx(AT_FDCWD, mp->mnt_mountp, + AT_STATX_SYNC_AS_STAT | AT_SYMLINK_NOFOLLOW, + STATX_MNT_ID, &stx) == 0 && (stx.stx_mask & STATX_MNT_ID)) + *mnt_id = stx.stx_mnt_id; +#endif if (stat64(mp->mnt_mountp, &st) != 0) { mp->mnt_major = 0; mp->mnt_minor = 0; @@ -108,6 +118,12 @@ getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf) struct stat64 st; FILE *fp; int match; + boolean_t have_mnt_id = B_FALSE; + uint64_t target_mnt_id = 0; + uint64_t entry_mnt_id; +#ifdef HAVE_STATX_MNT_ID + struct statx stx; +#endif if (strlen(path) >= MAXPATHLEN) { (void) fprintf(stderr, "invalid object; pathname too long\n"); @@ -122,10 +138,17 @@ getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf) */ if (stat64(path, statbuf) != 0) { (void) fprintf(stderr, "cannot open '%s': %s\n", - path, strerror(errno)); + path, zfs_strerror(errno)); return (-1); } +#ifdef HAVE_STATX_MNT_ID + if (statx(AT_FDCWD, path, AT_STATX_SYNC_AS_STAT | AT_SYMLINK_NOFOLLOW, + STATX_MNT_ID, &stx) == 0 && (stx.stx_mask & STATX_MNT_ID)) { + have_mnt_id = B_TRUE; + target_mnt_id = stx.stx_mnt_id; + } +#endif if ((fp = fopen(MNTTAB, "re")) == NULL) { (void) fprintf(stderr, "cannot open %s\n", MNTTAB); @@ -137,12 +160,15 @@ getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf) */ match = 0; - while (getextmntent_impl(fp, entry) == 0) { - if (makedev(entry->mnt_major, entry->mnt_minor) == - statbuf->st_dev) { - match = 1; - break; + while (getextmntent_impl(fp, entry, &entry_mnt_id) == 0) { + if (have_mnt_id) { + match = (entry_mnt_id == target_mnt_id); + } else { + match = makedev(entry->mnt_major, entry->mnt_minor) == + statbuf->st_dev; } + if (match) + break; } (void) fclose(fp); diff --git a/sys/contrib/openzfs/lib/libspl/os/linux/zone.c b/sys/contrib/openzfs/lib/libspl/os/linux/zone.c index 65c02dfe7aab..f1520676753e 100644 --- a/sys/contrib/openzfs/lib/libspl/os/linux/zone.c +++ b/sys/contrib/openzfs/lib/libspl/os/linux/zone.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -41,21 +42,21 @@ getzoneid(void) int c = snprintf(path, sizeof (path), "/proc/self/ns/user"); /* This API doesn't have any error checking... */ - if (c < 0) - return (0); + if (c < 0 || c >= sizeof (path)) + return (GLOBAL_ZONEID); ssize_t r = readlink(path, buf, sizeof (buf) - 1); if (r < 0) - return (0); + return (GLOBAL_ZONEID); cp = strchr(buf, '['); if (cp == NULL) - return (0); + return (GLOBAL_ZONEID); cp++; unsigned long n = strtoul(cp, NULL, 10); if (n == ULONG_MAX && errno == ERANGE) - return (0); + return (GLOBAL_ZONEID); zoneid_t z = (zoneid_t)n; return (z); diff --git a/sys/contrib/openzfs/lib/libspl/page.c b/sys/contrib/openzfs/lib/libspl/page.c index 5b0d3f2e5786..6160a1de10cd 100644 --- a/sys/contrib/openzfs/lib/libspl/page.c +++ b/sys/contrib/openzfs/lib/libspl/page.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/procfs_list.c b/sys/contrib/openzfs/lib/libspl/procfs_list.c new file mode 100644 index 000000000000..0ce327db6343 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/procfs_list.c @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <assert.h> +#include <pthread.h> +#include <stddef.h> +#include <sys/procfs_list.h> +#include <sys/mutex.h> +#include <sys/list.h> + +/* + * ========================================================================= + * procfs list + * ========================================================================= + */ + +void +seq_printf(struct seq_file *m, const char *fmt, ...) +{ + (void) m, (void) fmt; +} + +void +procfs_list_install(const char *module, + const char *submodule, + const char *name, + mode_t mode, + procfs_list_t *procfs_list, + int (*show)(struct seq_file *f, void *p), + int (*show_header)(struct seq_file *f), + int (*clear)(procfs_list_t *procfs_list), + size_t procfs_list_node_off) +{ + (void) module, (void) submodule, (void) name, (void) mode, (void) show, + (void) show_header, (void) clear; + mutex_init(&procfs_list->pl_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&procfs_list->pl_list, + procfs_list_node_off + sizeof (procfs_list_node_t), + procfs_list_node_off + offsetof(procfs_list_node_t, pln_link)); + procfs_list->pl_next_id = 1; + procfs_list->pl_node_offset = procfs_list_node_off; +} + +void +procfs_list_uninstall(procfs_list_t *procfs_list) +{ + (void) procfs_list; +} + +void +procfs_list_destroy(procfs_list_t *procfs_list) +{ + ASSERT(list_is_empty(&procfs_list->pl_list)); + list_destroy(&procfs_list->pl_list); + mutex_destroy(&procfs_list->pl_lock); +} + +#define NODE_ID(procfs_list, obj) \ + (((procfs_list_node_t *)(((char *)obj) + \ + (procfs_list)->pl_node_offset))->pln_id) + +void +procfs_list_add(procfs_list_t *procfs_list, void *p) +{ + ASSERT(MUTEX_HELD(&procfs_list->pl_lock)); + NODE_ID(procfs_list, p) = procfs_list->pl_next_id++; + list_insert_tail(&procfs_list->pl_list, p); +} diff --git a/sys/contrib/openzfs/lib/libspl/random.c b/sys/contrib/openzfs/lib/libspl/random.c new file mode 100644 index 000000000000..c6f0ee7ae0f7 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/random.c @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <stdint.h> +#include <fcntl.h> +#include <assert.h> +#include <sys/random.h> +#include "libspl_impl.h" + +#define RANDOM_PATH "/dev/random" +#define URANDOM_PATH "/dev/urandom" + +static int random_fd = -1, urandom_fd = -1; + +static boolean_t force_pseudo = B_FALSE; + +void +random_init(void) +{ + /* Handle multiple calls. */ + if (random_fd != -1) { + ASSERT3U(urandom_fd, !=, -1); + return; + } + + VERIFY((random_fd = open(RANDOM_PATH, O_RDONLY | O_CLOEXEC)) != -1); + VERIFY((urandom_fd = open(URANDOM_PATH, O_RDONLY | O_CLOEXEC)) != -1); +} + +void +random_fini(void) +{ + close(random_fd); + close(urandom_fd); + + random_fd = -1; + urandom_fd = -1; +} + +void +random_force_pseudo(boolean_t onoff) +{ + force_pseudo = onoff; +} + +static int +random_get_bytes_common(uint8_t *ptr, size_t len, int fd) +{ + size_t resid = len; + ssize_t bytes; + + ASSERT(fd != -1); + + while (resid != 0) { + bytes = read(fd, ptr, resid); + ASSERT3S(bytes, >=, 0); + ptr += bytes; + resid -= bytes; + } + + return (0); +} + +int +random_get_bytes(uint8_t *ptr, size_t len) +{ + if (force_pseudo) + return (random_get_pseudo_bytes(ptr, len)); + return (random_get_bytes_common(ptr, len, random_fd)); +} + +int +random_get_pseudo_bytes(uint8_t *ptr, size_t len) +{ + return (random_get_bytes_common(ptr, len, urandom_fd)); +} diff --git a/sys/contrib/openzfs/lib/libspl/rwlock.c b/sys/contrib/openzfs/lib/libspl/rwlock.c new file mode 100644 index 000000000000..3712829ef594 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/rwlock.c @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <assert.h> +#include <pthread.h> +#include <errno.h> +#include <atomic.h> +#include <sys/rwlock.h> + +/* + * ========================================================================= + * rwlocks + * ========================================================================= + */ + +void +rw_init(krwlock_t *rwlp, char *name, int type, void *arg) +{ + (void) name, (void) type, (void) arg; + VERIFY0(pthread_rwlock_init(&rwlp->rw_lock, NULL)); + rwlp->rw_readers = 0; + rwlp->rw_owner = 0; +} + +void +rw_destroy(krwlock_t *rwlp) +{ + VERIFY0(pthread_rwlock_destroy(&rwlp->rw_lock)); +} + +void +rw_enter(krwlock_t *rwlp, krw_t rw) +{ + if (rw == RW_READER) { + VERIFY0(pthread_rwlock_rdlock(&rwlp->rw_lock)); + atomic_inc_uint(&rwlp->rw_readers); + } else { + VERIFY0(pthread_rwlock_wrlock(&rwlp->rw_lock)); + rwlp->rw_owner = pthread_self(); + } +} + +void +rw_exit(krwlock_t *rwlp) +{ + if (RW_READ_HELD(rwlp)) + atomic_dec_uint(&rwlp->rw_readers); + else + rwlp->rw_owner = 0; + + VERIFY0(pthread_rwlock_unlock(&rwlp->rw_lock)); +} + +int +rw_tryenter(krwlock_t *rwlp, krw_t rw) +{ + int error; + + if (rw == RW_READER) + error = pthread_rwlock_tryrdlock(&rwlp->rw_lock); + else + error = pthread_rwlock_trywrlock(&rwlp->rw_lock); + + if (error == 0) { + if (rw == RW_READER) + atomic_inc_uint(&rwlp->rw_readers); + else + rwlp->rw_owner = pthread_self(); + + return (1); + } + + VERIFY3S(error, ==, EBUSY); + + return (0); +} + +int +rw_tryupgrade(krwlock_t *rwlp) +{ + (void) rwlp; + return (0); +} diff --git a/sys/contrib/openzfs/lib/libspl/sid.c b/sys/contrib/openzfs/lib/libspl/sid.c new file mode 100644 index 000000000000..b7d5b5f2e778 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/sid.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <sys/sid.h> +#include <umem.h> + +ksiddomain_t * +ksid_lookupdomain(const char *dom) +{ + ksiddomain_t *kd; + + kd = umem_zalloc(sizeof (ksiddomain_t), UMEM_NOFAIL); + kd->kd_name = strdup(dom); + return (kd); +} + +void +ksiddomain_rele(ksiddomain_t *ksid) +{ + free(ksid->kd_name); + umem_free(ksid, sizeof (ksiddomain_t)); +} diff --git a/sys/contrib/openzfs/lib/libspl/strlcat.c b/sys/contrib/openzfs/lib/libspl/strlcat.c index 4528d875ed5e..6e4c3280a83a 100644 --- a/sys/contrib/openzfs/lib/libspl/strlcat.c +++ b/sys/contrib/openzfs/lib/libspl/strlcat.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libspl/strlcpy.c b/sys/contrib/openzfs/lib/libspl/strlcpy.c index d483b91f6121..49ffa2db67c5 100644 --- a/sys/contrib/openzfs/lib/libspl/strlcpy.c +++ b/sys/contrib/openzfs/lib/libspl/strlcpy.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libzpool/taskq.c b/sys/contrib/openzfs/lib/libspl/taskq.c index 2531b341f442..043f70225551 100644 --- a/sys/contrib/openzfs/lib/libzpool/taskq.c +++ b/sys/contrib/openzfs/lib/libspl/taskq.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -28,11 +29,27 @@ * Copyright (c) 2014 by Delphix. All rights reserved. */ -#include <sys/zfs_context.h> +#include <sys/sysmacros.h> +#include <sys/timer.h> +#include <sys/types.h> +#include <sys/thread.h> +#include <sys/taskq.h> +#include <sys/kmem.h> -int taskq_now; -taskq_t *system_taskq; -taskq_t *system_delay_taskq; +static taskq_t *__system_taskq = NULL; +static taskq_t *__system_delay_taskq = NULL; + +taskq_t +*_system_taskq(void) +{ + return (__system_taskq); +} + +taskq_t +*_system_delay_taskq(void) +{ + return (__system_delay_taskq); +} static pthread_key_t taskq_tsd; @@ -105,11 +122,6 @@ taskq_dispatch(taskq_t *tq, task_func_t func, void *arg, uint_t tqflags) { taskq_ent_t *t; - if (taskq_now) { - func(arg); - return (1); - } - mutex_enter(&tq->tq_lock); ASSERT(tq->tq_flags & TASKQ_ACTIVE); if ((t = task_alloc(tq, tqflags)) == NULL) { @@ -276,7 +288,7 @@ taskq_create(const char *name, int nthreads, pri_t pri, cv_init(&tq->tq_dispatch_cv, NULL, CV_DEFAULT, NULL); cv_init(&tq->tq_wait_cv, NULL, CV_DEFAULT, NULL); cv_init(&tq->tq_maxalloc_cv, NULL, CV_DEFAULT, NULL); - (void) strncpy(tq->tq_name, name, TASKQ_NAMELEN); + (void) strlcpy(tq->tq_name, name, sizeof (tq->tq_name)); tq->tq_flags = flags | TASKQ_ACTIVE; tq->tq_active = nthreads; tq->tq_nthreads = nthreads; @@ -295,8 +307,8 @@ taskq_create(const char *name, int nthreads, pri_t pri, } for (t = 0; t < nthreads; t++) - VERIFY((tq->tq_threadlist[t] = thread_create(NULL, 0, - taskq_thread, tq, 0, &p0, TS_RUN, pri)) != NULL); + VERIFY((tq->tq_threadlist[t] = thread_create_named(tq->tq_name, + NULL, 0, taskq_thread, tq, 0, &p0, TS_RUN, pri)) != NULL); return (tq); } @@ -319,7 +331,9 @@ taskq_destroy(taskq_t *tq) tq->tq_minalloc = 0; while (tq->tq_nalloc != 0) { ASSERT(tq->tq_freelist != NULL); - task_free(tq, task_alloc(tq, KM_SLEEP)); + taskq_ent_t *tqent_nexttq = tq->tq_freelist->tqent_next; + task_free(tq, tq->tq_freelist); + tq->tq_freelist = tqent_nexttq; } mutex_exit(&tq->tq_lock); @@ -335,14 +349,41 @@ taskq_destroy(taskq_t *tq) kmem_free(tq, sizeof (taskq_t)); } +/* + * Create a taskq with a specified number of pool threads. Allocate + * and return an array of nthreads kthread_t pointers, one for each + * thread in the pool. The array is not ordered and must be freed + * by the caller. + */ +taskq_t * +taskq_create_synced(const char *name, int nthreads, pri_t pri, + int minalloc, int maxalloc, uint_t flags, kthread_t ***ktpp) +{ + taskq_t *tq; + kthread_t **kthreads = kmem_zalloc(sizeof (*kthreads) * nthreads, + KM_SLEEP); + + (void) pri; (void) minalloc; (void) maxalloc; + + flags &= ~(TASKQ_DYNAMIC | TASKQ_THREADS_CPU_PCT | TASKQ_DC_BATCH); + + tq = taskq_create(name, nthreads, minclsyspri, nthreads, INT_MAX, + flags | TASKQ_PREPOPULATE); + VERIFY(tq != NULL); + VERIFY(tq->tq_nthreads == nthreads); + + for (int i = 0; i < nthreads; i++) { + kthreads[i] = tq->tq_threadlist[i]; + } + *ktpp = kthreads; + return (tq); +} + int taskq_member(taskq_t *tq, kthread_t *t) { int i; - if (taskq_now) - return (1); - for (i = 0; i < tq->tq_nthreads; i++) if (tq->tq_threadlist[i] == t) return (1); @@ -367,18 +408,18 @@ void system_taskq_init(void) { VERIFY0(pthread_key_create(&taskq_tsd, NULL)); - system_taskq = taskq_create("system_taskq", 64, maxclsyspri, 4, 512, + __system_taskq = taskq_create("system_taskq", 64, maxclsyspri, 4, 512, TASKQ_DYNAMIC | TASKQ_PREPOPULATE); - system_delay_taskq = taskq_create("delay_taskq", 4, maxclsyspri, 4, + __system_delay_taskq = taskq_create("delay_taskq", 4, maxclsyspri, 4, 512, TASKQ_DYNAMIC | TASKQ_PREPOPULATE); } void system_taskq_fini(void) { - taskq_destroy(system_taskq); - system_taskq = NULL; /* defensive */ - taskq_destroy(system_delay_taskq); - system_delay_taskq = NULL; + taskq_destroy(__system_taskq); + __system_taskq = NULL; /* defensive */ + taskq_destroy(__system_delay_taskq); + __system_delay_taskq = NULL; VERIFY0(pthread_key_delete(taskq_tsd)); } diff --git a/sys/contrib/openzfs/lib/libspl/thread.c b/sys/contrib/openzfs/lib/libspl/thread.c new file mode 100644 index 000000000000..f00e0a01a06b --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/thread.c @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. + */ + +#include <assert.h> +#include <pthread.h> +#include <string.h> +#include <sys/thread.h> + +/* this only exists to have its address taken */ +void p0(void) {} + +/* + * ========================================================================= + * threads + * ========================================================================= + * + * TS_STACK_MIN is dictated by the minimum allowed pthread stack size. While + * TS_STACK_MAX is somewhat arbitrary, it was selected to be large enough for + * the expected stack depth while small enough to avoid exhausting address + * space with high thread counts. + */ +#define TS_STACK_MIN MAX(PTHREAD_STACK_MIN, 32768) +#define TS_STACK_MAX (256 * 1024) + +struct zk_thread_wrapper { + void (*func)(void *); + void *arg; +}; + +static void * +zk_thread_wrapper(void *arg) +{ + struct zk_thread_wrapper ztw; + memcpy(&ztw, arg, sizeof (ztw)); + free(arg); + ztw.func(ztw.arg); + return (NULL); +} + +kthread_t * +zk_thread_create(const char *name, void (*func)(void *), void *arg, + size_t stksize, int state) +{ + pthread_attr_t attr; + pthread_t tid; + char *stkstr; + struct zk_thread_wrapper *ztw; + int detachstate = PTHREAD_CREATE_DETACHED; + + VERIFY0(pthread_attr_init(&attr)); + + if (state & TS_JOINABLE) + detachstate = PTHREAD_CREATE_JOINABLE; + + VERIFY0(pthread_attr_setdetachstate(&attr, detachstate)); + + /* + * We allow the default stack size in user space to be specified by + * setting the ZFS_STACK_SIZE environment variable. This allows us + * the convenience of observing and debugging stack overruns in + * user space. Explicitly specified stack sizes will be honored. + * The usage of ZFS_STACK_SIZE is discussed further in the + * ENVIRONMENT VARIABLES sections of the ztest(1) man page. + */ + if (stksize == 0) { + stkstr = getenv("ZFS_STACK_SIZE"); + + if (stkstr == NULL) + stksize = TS_STACK_MAX; + else + stksize = MAX(atoi(stkstr), TS_STACK_MIN); + } + + VERIFY3S(stksize, >, 0); + stksize = P2ROUNDUP(MAX(stksize, TS_STACK_MIN), PAGESIZE); + + /* + * If this ever fails, it may be because the stack size is not a + * multiple of system page size. + */ + VERIFY0(pthread_attr_setstacksize(&attr, stksize)); + VERIFY0(pthread_attr_setguardsize(&attr, PAGESIZE)); + + VERIFY(ztw = malloc(sizeof (*ztw))); + ztw->func = func; + ztw->arg = arg; + VERIFY0(pthread_create(&tid, &attr, zk_thread_wrapper, ztw)); + VERIFY0(pthread_attr_destroy(&attr)); + + pthread_setname_np(tid, name); + + return ((void *)(uintptr_t)tid); +} diff --git a/sys/contrib/openzfs/lib/libspl/timestamp.c b/sys/contrib/openzfs/lib/libspl/timestamp.c index 8d14ae645734..0b0838f4b442 100644 --- a/sys/contrib/openzfs/lib/libspl/timestamp.c +++ b/sys/contrib/openzfs/lib/libspl/timestamp.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -62,3 +63,45 @@ print_timestamp(uint_t timestamp_fmt) (void) printf("%s\n", dstr); } } + +/* + * Return timestamp as decimal reprentation (in string) of time_t + * value (-T u was specified) or in date(1) format (-T d was specified). + */ +void +get_timestamp(uint_t timestamp_fmt, char *buf, int len) +{ + time_t t = time(NULL); + static const char *fmt = NULL; + + /* We only need to retrieve this once per invocation */ + if (fmt == NULL) + fmt = nl_langinfo(_DATE_FMT); + + if (timestamp_fmt == UDATE) { + (void) snprintf(buf, len, "%lld", (longlong_t)t); + } else if (timestamp_fmt == DDATE) { + struct tm tm; + strftime(buf, len, fmt, localtime_r(&t, &tm)); + } +} + +/* + * Format the provided time stamp to human readable format + */ +void +format_timestamp(time_t t, char *buf, int len) +{ + struct tm tm; + static const char *fmt = NULL; + + if (t == 0) { + snprintf(buf, len, "-"); + return; + } + + /* We only need to retrieve this once per invocation */ + if (fmt == NULL) + fmt = nl_langinfo(_DATE_FMT); + strftime(buf, len, fmt, localtime_r(&t, &tm)); +} diff --git a/sys/contrib/openzfs/lib/libspl/tunables.c b/sys/contrib/openzfs/lib/libspl/tunables.c new file mode 100644 index 000000000000..67dc9710dee8 --- /dev/null +++ b/sys/contrib/openzfs/lib/libspl/tunables.c @@ -0,0 +1,319 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2025, Rob Norris <robn@despairlabs.com> + */ + +#include <stddef.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <errno.h> +#include <limits.h> +#include <inttypes.h> +#include <sys/tunables.h> + +/* + * Userspace tunables. + * + * Tunables are external pointers to global variables that are wired up to the + * host environment in some way that allows the operator to directly change + * their values "under the hood". + * + * In userspace, the "host environment" is the program using libzpool.so. So + * that it can manipulate tunables if it wants, we provide an API to access + * them. + * + * Tunables are declared through the ZFS_MODULE_PARAM* macros, which associate + * a global variable with some metadata we can use to describe and access the + * tunable. This is done by creating a uniquely-named zfs_tunable_t. + * + * At runtime, we need a way to discover these zfs_tunable_t items. Since they + * are declared globally, all over the codebase, there's no central place to + * record or list them. So, we take advantage of the compiler's "linker set" + * feature. + * + * In the ZFS_MODULE_PARAM macro, after we create the zfs_tunable_t, we also + * create a zfs_tunable_t* pointing to it. That pointer is forced into the + * "zfs_tunables" ELF section in compiled object. At link time, the linker will + * collect all these pointers into one single big "zfs_tunable" section, and + * will generate two new symbols in the final object: __start_zfs_tunable and + * __stop_zfs_tunable. These point to the first and last item in that section, + * which allows us to access the pointers in that section like an array, and + * through those pointers access the tunable metadata, and from there the + * actual C variable that the tunable describes. + */ + +extern const zfs_tunable_t *__start_zfs_tunables; +extern const zfs_tunable_t *__stop_zfs_tunables; + +/* + * Because there are no tunables in libspl itself, the above symbols will not + * be generated, which will stop libspl being linked at all. To work around + * that, we force a symbol into that section, and then when iterating, skip + * any NULL pointers. + */ +static void *__zfs_tunable__placeholder + __attribute__((__section__("zfs_tunables"))) + __attribute__((__used__)) = NULL; + +/* + * Find the name tunable by walking through the linker set and comparing names, + * as described above. This is not particularly efficient but it's a fairly + * rare task, so it shouldn't be a big deal. + */ +const zfs_tunable_t * +zfs_tunable_lookup(const char *name) +{ + for (const zfs_tunable_t **ztp = &__start_zfs_tunables; + ztp != &__stop_zfs_tunables; ztp++) { + const zfs_tunable_t *zt = *ztp; + if (zt == NULL) + continue; + if (strcmp(name, zt->zt_name) == 0) + return (zt); + } + + return (NULL); +} + +/* + * Like zfs_tunable_lookup, but call the provided callback for each tunable. + */ +void +zfs_tunable_iter(zfs_tunable_iter_t cb, void *arg) +{ + for (const zfs_tunable_t **ztp = &__start_zfs_tunables; + ztp != &__stop_zfs_tunables; ztp++) { + const zfs_tunable_t *zt = *ztp; + if (zt == NULL) + continue; + if (cb(zt, arg)) + return; + } +} + +/* + * Parse a string into an int or uint. It's easier to have a pair of "generic" + * functions that clamp to a given min and max rather than have multiple + * functions for each width of type. + */ +static int +zfs_tunable_parse_int(const char *val, intmax_t *np, + intmax_t min, intmax_t max) +{ + intmax_t n; + char *end; + errno = 0; + n = strtoimax(val, &end, 0); + if (errno != 0) + return (errno); + if (*end != '\0') + return (EINVAL); + if (n < min || n > max) + return (ERANGE); + *np = n; + return (0); +} + +static int +zfs_tunable_parse_uint(const char *val, uintmax_t *np, + uintmax_t min, uintmax_t max) +{ + uintmax_t n; + char *end; + errno = 0; + n = strtoumax(val, &end, 0); + if (errno != 0) + return (errno); + if (*end != '\0') + return (EINVAL); + if (strchr(val, '-')) + return (ERANGE); + if (n < min || n > max) + return (ERANGE); + *np = n; + return (0); +} + +/* + * Set helpers for each tunable type. Parses the string, and if produces a + * valid value for the tunable, sets it. No effort is made to make sure the + * tunable is of the right type; that's done in zfs_tunable_set() below. + */ +static int +zfs_tunable_set_int(const zfs_tunable_t *zt, const char *val) +{ + intmax_t n; + int err = zfs_tunable_parse_int(val, &n, INT_MIN, INT_MAX); + if (err != 0) + return (err); + *(int *)zt->zt_varp = n; + return (0); +} + +static int +zfs_tunable_set_uint(const zfs_tunable_t *zt, const char *val) +{ + uintmax_t n; + int err = zfs_tunable_parse_uint(val, &n, 0, UINT_MAX); + if (err != 0) + return (err); + *(unsigned int *)zt->zt_varp = n; + return (0); +} + +static int +zfs_tunable_set_ulong(const zfs_tunable_t *zt, const char *val) +{ + uintmax_t n; + int err = zfs_tunable_parse_uint(val, &n, 0, ULONG_MAX); + if (err != 0) + return (err); + *(unsigned long *)zt->zt_varp = n; + return (0); +} + +static int +zfs_tunable_set_u64(const zfs_tunable_t *zt, const char *val) +{ + uintmax_t n; + int err = zfs_tunable_parse_uint(val, &n, 0, UINT64_MAX); + if (err != 0) + return (err); + *(uint64_t *)zt->zt_varp = n; + return (0); +} + +static int +zfs_tunable_set_string(const zfs_tunable_t *zt, const char *val) +{ + (void) zt, (void) val; + /* + * We can't currently handle strings. String tunables are pointers + * into read-only memory, so we can update the pointer, but not the + * contents. That would mean taking an allocation, but we don't have + * an obvious place to free it. + * + * For now, it's no big deal as there's only a couple of string + * tunables anyway. + */ + return (ENOTSUP); +} + +/* + * Get helpers for each tunable type. Converts the value to a string if + * necessary and writes it into the provided buffer. The type is assumed to + * be correct; zfs_tunable_get() below will call the correct function for the + * type. + */ +static int +zfs_tunable_get_int(const zfs_tunable_t *zt, char *val, size_t valsz) +{ + snprintf(val, valsz, "%d", *(int *)zt->zt_varp); + return (0); +} + +static int +zfs_tunable_get_uint(const zfs_tunable_t *zt, char *val, size_t valsz) +{ + snprintf(val, valsz, "%u", *(unsigned int *)zt->zt_varp); + return (0); +} + +static int +zfs_tunable_get_ulong(const zfs_tunable_t *zt, char *val, size_t valsz) +{ + snprintf(val, valsz, "%lu", *(unsigned long *)zt->zt_varp); + return (0); +} + +static int +zfs_tunable_get_u64(const zfs_tunable_t *zt, char *val, size_t valsz) +{ + snprintf(val, valsz, "%"PRIu64, *(uint64_t *)zt->zt_varp); + return (0); +} + +static int +zfs_tunable_get_string(const zfs_tunable_t *zt, char *val, size_t valsz) +{ + strlcpy(val, *(char **)zt->zt_varp, valsz); + return (0); +} + +/* The public set function. Delegates to the type-specific version. */ +int +zfs_tunable_set(const zfs_tunable_t *zt, const char *val) +{ + int err; + switch (zt->zt_type) { + case ZFS_TUNABLE_TYPE_INT: + err = zfs_tunable_set_int(zt, val); + break; + case ZFS_TUNABLE_TYPE_UINT: + err = zfs_tunable_set_uint(zt, val); + break; + case ZFS_TUNABLE_TYPE_ULONG: + err = zfs_tunable_set_ulong(zt, val); + break; + case ZFS_TUNABLE_TYPE_U64: + err = zfs_tunable_set_u64(zt, val); + break; + case ZFS_TUNABLE_TYPE_STRING: + err = zfs_tunable_set_string(zt, val); + break; + default: + err = EOPNOTSUPP; + break; + } + return (err); +} + +/* The public get function. Delegates to the type-specific version. */ +int +zfs_tunable_get(const zfs_tunable_t *zt, char *val, size_t valsz) +{ + int err; + switch (zt->zt_type) { + case ZFS_TUNABLE_TYPE_INT: + err = zfs_tunable_get_int(zt, val, valsz); + break; + case ZFS_TUNABLE_TYPE_UINT: + err = zfs_tunable_get_uint(zt, val, valsz); + break; + case ZFS_TUNABLE_TYPE_ULONG: + err = zfs_tunable_get_ulong(zt, val, valsz); + break; + case ZFS_TUNABLE_TYPE_U64: + err = zfs_tunable_get_u64(zt, val, valsz); + break; + case ZFS_TUNABLE_TYPE_STRING: + err = zfs_tunable_get_string(zt, val, valsz); + break; + default: + err = EOPNOTSUPP; + break; + } + return (err); +} diff --git a/sys/contrib/openzfs/lib/libtpool/thread_pool.c b/sys/contrib/openzfs/lib/libtpool/thread_pool.c index 58b706ddebf5..39b92ae81166 100644 --- a/sys/contrib/openzfs/lib/libtpool/thread_pool.c +++ b/sys/contrib/openzfs/lib/libtpool/thread_pool.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -28,6 +29,7 @@ #include <signal.h> #include <errno.h> #include <assert.h> +#include <limits.h> #include "thread_pool_impl.h" static pthread_mutex_t thread_pool_lock = PTHREAD_MUTEX_INITIALIZER; @@ -422,6 +424,26 @@ tpool_dispatch(tpool_t *tpool, void (*func)(void *), void *arg) pthread_mutex_lock(&tpool->tp_mutex); + if (!(tpool->tp_flags & TP_SUSPEND)) { + if (tpool->tp_idle > 0) + (void) pthread_cond_signal(&tpool->tp_workcv); + else if (tpool->tp_current >= tpool->tp_maximum) { + /* At worker limit. Leave task on queue */ + } else { + if (create_worker(tpool) == 0) { + /* Started a new worker thread */ + tpool->tp_current++; + } else if (tpool->tp_current > 0) { + /* Leave task on queue */ + } else { + /* Cannot start a single worker! */ + pthread_mutex_unlock(&tpool->tp_mutex); + free(job); + return (-1); + } + } + } + if (tpool->tp_head == NULL) tpool->tp_head = job; else @@ -429,14 +451,6 @@ tpool_dispatch(tpool_t *tpool, void (*func)(void *), void *arg) tpool->tp_tail = job; tpool->tp_njobs++; - if (!(tpool->tp_flags & TP_SUSPEND)) { - if (tpool->tp_idle > 0) - (void) pthread_cond_signal(&tpool->tp_workcv); - else if (tpool->tp_current < tpool->tp_maximum && - create_worker(tpool) == 0) - tpool->tp_current++; - } - pthread_mutex_unlock(&tpool->tp_mutex); return (0); } diff --git a/sys/contrib/openzfs/lib/libtpool/thread_pool_impl.h b/sys/contrib/openzfs/lib/libtpool/thread_pool_impl.h index 5349c2ade8c3..e2bffd37d522 100644 --- a/sys/contrib/openzfs/lib/libtpool/thread_pool_impl.h +++ b/sys/contrib/openzfs/lib/libtpool/thread_pool_impl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libunicode/Makefile.am b/sys/contrib/openzfs/lib/libunicode/Makefile.am index 906759471163..e1ac666a5e60 100644 --- a/sys/contrib/openzfs/lib/libunicode/Makefile.am +++ b/sys/contrib/openzfs/lib/libunicode/Makefile.am @@ -3,5 +3,4 @@ libunicode_la_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) $(LIBRARY_CFLAGS) noinst_LTLIBRARIES += libunicode.la nodist_libunicode_la_SOURCES = \ - module/unicode/u8_textprep.c \ - module/unicode/uconv.c + module/unicode/u8_textprep.c diff --git a/sys/contrib/openzfs/lib/libuutil/Makefile.am b/sys/contrib/openzfs/lib/libuutil/Makefile.am index 339f9a064745..b973ce3cca4c 100644 --- a/sys/contrib/openzfs/lib/libuutil/Makefile.am +++ b/sys/contrib/openzfs/lib/libuutil/Makefile.am @@ -9,7 +9,6 @@ libuutil_la_SOURCES = \ %D%/uu_ident.c \ %D%/uu_list.c \ %D%/uu_misc.c \ - %D%/uu_pname.c \ %D%/uu_string.c libuutil_la_LIBADD = \ diff --git a/sys/contrib/openzfs/lib/libuutil/libuutil.abi b/sys/contrib/openzfs/lib/libuutil/libuutil.abi index 766d8843000d..ca2bcdb57dbf 100644 --- a/sys/contrib/openzfs/lib/libuutil/libuutil.abi +++ b/sys/contrib/openzfs/lib/libuutil/libuutil.abi @@ -1,11 +1,13 @@ <abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='libuutil.so.3'> <elf-needed> - <dependency name='libpthread.so.0'/> + <dependency name='libunwind.so.8'/> <dependency name='libc.so.6'/> <dependency name='ld-linux-x86-64.so.2'/> </elf-needed> <elf-function-symbols> <elf-symbol name='_sol_getmntent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='_system_delay_taskq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='_system_taskq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -144,12 +146,41 @@ <elf-symbol name='avl_update_gt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='avl_update_lt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='avl_walk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetgid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetgroups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetngroups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetruid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetuid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_broadcast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_timedwait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_timedwait_hires' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_wait_sig' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='format_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='get_system_hostid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='get_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getexecname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getextmntent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getmntany' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getzoneid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_asprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_cache_reap_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_scnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_vasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='ksid_lookupdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='ksiddomain_rele' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_set_raw_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_assertf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_backtrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_physmem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_set_assert_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='list_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='list_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -173,12 +204,54 @@ <elf-symbol name='membar_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='membar_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='membar_producer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='membar_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='mkdirp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_enter_check_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_tryenter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='p0' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='print_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_uninstall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_force_pseudo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_get_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_get_pseudo_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_tryenter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_tryupgrade' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spl_fstrans_mark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spl_fstrans_unmark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='spl_pagesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='strlcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_alt_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='system_taskq_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='system_taskq_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_cancel_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_create_synced' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_empty_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_init_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_member' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_of_curthread' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait_outstanding' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='utsname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_avl_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_avl_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_avl_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -203,13 +276,8 @@ <elf-symbol name='uu_avl_walk_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_avl_walk_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_check_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_die' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_exit_fatal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_exit_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_exit_usage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_getpname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_list_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_list_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_list_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -239,145 +307,38 @@ <elf-symbol name='uu_msprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_panic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_set_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_setpname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_strbw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_strcaseeq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_strdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_streq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_strerror' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_strndup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_vdie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_vwarn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_vxdie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_xdie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='uu_zalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zk_thread_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> </elf-function-symbols> - <elf-variable-symbols> - <elf-symbol name='uu_exit_fatal_value' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_exit_ok_value' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='uu_exit_usage_value' size='4' 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_tree_t' type-id='b351119f' id='f20fbd51'/> - <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='f20fbd51' size-in-bits='64' id='a3681dea'/> - <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'/> + <abi-instr address-size='64' path='lib/libspl/assert.c' language='LANG_C99'> + <typedef-decl name='__pid_t' type-id='95e97e5e' id='3629bad8'/> + <function-decl name='libspl_backtrace' mangled-name='libspl_backtrace' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_backtrace'> + <parameter type-id='95e97e5e'/> <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 name='getpid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> </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 name='gettid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> </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'/> + <function-decl name='prctl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter is-variadic='yes'/> <return type-id='95e97e5e'/> - </function-type> - </abi-instr> - <abi-instr address-size='64' path='assert.c' language='LANG_C99'> + </function-decl> <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'/> </function-decl> - <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> - <parameter type-id='80f4b756' name='file'/> - <parameter type-id='80f4b756' name='func'/> - <parameter type-id='95e97e5e' name='line'/> - <parameter type-id='80f4b756' name='format'/> - <parameter is-variadic='yes'/> - <return type-id='48b5725f'/> - </function-decl> </abi-instr> - <abi-instr address-size='64' path='atomic.c' language='LANG_C99'> - <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + <abi-instr address-size='64' path='lib/libspl/atomic.c' language='LANG_C99'> <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/> <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> @@ -448,11 +409,6 @@ <parameter type-id='3ff5601b' name='bits'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='atomic_add_long' mangled-name='atomic_add_long' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_long'> - <parameter type-id='64698d33' name='target'/> - <parameter type-id='bd54fe1a' name='bits'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='atomic_sub_ptr' mangled-name='atomic_sub_ptr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_ptr'> <parameter type-id='fe09dd29' name='target'/> <parameter type-id='79a0948f' name='bits'/> @@ -473,11 +429,6 @@ <parameter type-id='3ff5601b' name='bits'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='atomic_sub_long' mangled-name='atomic_sub_long' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_long'> - <parameter type-id='64698d33' name='target'/> - <parameter type-id='bd54fe1a' name='bits'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='atomic_or_8' mangled-name='atomic_or_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_8'> <parameter type-id='aa323ea4' name='target'/> <parameter type-id='b96825af' name='bits'/> @@ -714,13 +665,609 @@ <function-decl name='membar_consumer' mangled-name='membar_consumer' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='membar_consumer'> <return type-id='48b5725f'/> </function-decl> + <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/backtrace.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='768' id='b80f3d9b'> + <subrange length='24' type-id='7359adad' id='fdd3342b'/> + </array-type-def> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='128' id='bc19e735'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='22c546af' size-in-bits='1024' id='498c040b'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='4ea07cdb' size-in-bits='2048' id='4811c35e'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='de572c22' size-in-bits='1472' id='6d3c2f42'> + <subrange length='23' type-id='7359adad' id='fdd0f594'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='256' id='a133ec23'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='512' id='a13e797f'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'> + <subrange length='3' type-id='7359adad' id='56f209d2'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='64' id='3f30d495'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='73d941c6' size-in-bits='8128' id='dc70ec0b'> + <subrange length='127' type-id='7359adad' id='5ed08de5'/> + </array-type-def> + <class-decl name='__sigset_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='b9c97942' visibility='default' id='2616147f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__val' type-id='d2baa450' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__sigset_t' type-id='2616147f' id='b9c97942'/> + <typedef-decl name='sigset_t' type-id='b9c97942' id='daf33c64'/> + <class-decl name='stack_t' size-in-bits='192' is-struct='yes' naming-typedef-id='ac5e685f' visibility='default' id='380f9954'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ss_sp' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ss_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ss_size' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/> + <typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/> + <class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='opaque' type-id='dc70ec0b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='unw_cursor_t' type-id='384a1f22' id='1203d35c'/> + <typedef-decl name='unw_context_t' type-id='190d09ef' id='8f527367'/> + <typedef-decl name='unw_word_t' type-id='9c313c2d' id='73d941c6'/> + <typedef-decl name='unw_tdep_context_t' type-id='c4daa689' id='190d09ef'/> + <typedef-decl name='greg_t' type-id='1eb56b1e' id='de572c22'/> + <typedef-decl name='gregset_t' type-id='6d3c2f42' id='a66f139c'/> + <class-decl name='_libc_fpxreg' size-in-bits='128' is-struct='yes' visibility='default' id='22c546af'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='significand' type-id='3f30d495' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='exponent' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='80'> + <var-decl name='__glibc_reserved1' type-id='ff2536e2' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_xmmreg' size-in-bits='128' is-struct='yes' visibility='default' id='4ea07cdb'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='element' type-id='bc19e735' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_fpstate' size-in-bits='4096' is-struct='yes' visibility='default' id='81cbe5ca'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='cwd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='16'> + <var-decl name='swd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='ftw' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='fop' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='rip' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='rdp' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mxcsr' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='mxcr_mask' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_st' type-id='498c040b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_xmm' type-id='4811c35e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3328'> + <var-decl name='__glibc_reserved1' type-id='b80f3d9b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='fpregset_t' type-id='5b1ab9a8' id='6e5851bb'/> + <class-decl name='mcontext_t' size-in-bits='2048' is-struct='yes' naming-typedef-id='bacab071' visibility='default' id='76fab990'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gregs' type-id='a66f139c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='fpregs' type-id='6e5851bb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='__reserved1' type-id='a13e797f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='mcontext_t' type-id='76fab990' id='bacab071'/> + <class-decl name='ucontext_t' size-in-bits='7744' is-struct='yes' visibility='default' id='1ba65dc8'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='uc_flags' type-id='7359adad' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='uc_link' type-id='4ed508de' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='uc_stack' type-id='ac5e685f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='uc_mcontext' type-id='bacab071' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2368'> + <var-decl name='uc_sigmask' type-id='daf33c64' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3392'> + <var-decl name='__fpregs_mem' type-id='81cbe5ca' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='7488'> + <var-decl name='__ssp' type-id='a133ec23' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ucontext_t' type-id='1ba65dc8' id='c4daa689'/> + <pointer-type-def type-id='81cbe5ca' size-in-bits='64' id='5b1ab9a8'/> + <pointer-type-def type-id='1ba65dc8' size-in-bits='64' id='4ed508de'/> + <pointer-type-def type-id='8f527367' size-in-bits='64' id='2e408b96'/> + <pointer-type-def type-id='1203d35c' size-in-bits='64' id='3946e4d1'/> + <pointer-type-def type-id='190d09ef' size-in-bits='64' id='3e0601f0'/> + <pointer-type-def type-id='73d941c6' size-in-bits='64' id='42f5faab'/> + <function-decl name='write' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='c53620f0'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='2e408b96'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_step' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_reg' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_proc_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_Ux86_64_getcontext' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3e0601f0'/> + <return type-id='95e97e5e'/> + </function-decl> + <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> </abi-instr> - <abi-instr address-size='64' path='getexecname.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/condvar.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> + <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/> + <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/> + <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'> + <subrange length='2' type-id='7359adad' id='52efc4ef'/> + </array-type-def> + <typedef-decl name='kcondvar_t' type-id='62fab762' id='29dbc0dd'/> + <class-decl name='kmutex' size-in-bits='384' is-struct='yes' visibility='default' id='f1cacfe1'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='m_lock' type-id='7a6844eb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='m_owner' type-id='4051f5e7' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='kmutex_t' type-id='f1cacfe1' id='b9eccc8f'/> + <typedef-decl name='hrtime_t' type-id='1eb56b1e' id='cebdd548'/> + <union-decl name='__atomic_wide_counter' size-in-bits='64' naming-typedef-id='f3b40860' visibility='default' id='613ce450'> + <data-member access='public'> + <var-decl name='__value64' type-id='3a47d82b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__value32' 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> + <typedef-decl name='__atomic_wide_counter' type-id='613ce450' id='f3b40860'/> + <union-decl name='pthread_condattr_t' size-in-bits='32' naming-typedef-id='836265dd' visibility='default' id='33dd3aad'> + <data-member access='public'> + <var-decl name='__size' type-id='8e0573fd' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='95e97e5e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_condattr_t' type-id='33dd3aad' id='836265dd'/> + <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='__wseq' type-id='f3b40860' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='__g1_start' type-id='f3b40860' 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> + <typedef-decl name='__clock_t' type-id='bd54fe1a' id='4d66c6d7'/> + <typedef-decl name='__time_t' type-id='bd54fe1a' id='65eda9c0'/> + <typedef-decl name='__suseconds_t' type-id='bd54fe1a' id='5b102a54'/> + <typedef-decl name='__clockid_t' type-id='95e97e5e' id='08f9a87a'/> + <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/> + <typedef-decl name='clock_t' type-id='4d66c6d7' id='4c3a2c61'/> + <typedef-decl name='clockid_t' type-id='08f9a87a' id='a1c3b834'/> + <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tv_nsec' type-id='03085adc' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' id='2a693ac3'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tv_usec' type-id='5b102a54' visibility='default'/> + </data-member> + </class-decl> + <qualified-type-def type-id='836265dd' const='yes' id='7d24c58d'/> + <pointer-type-def type-id='7d24c58d' size-in-bits='64' id='a7e325e5'/> + <qualified-type-def type-id='a7e325e5' restrict='yes' id='4c428e67'/> + <qualified-type-def type-id='a9c79a1f' const='yes' id='cd087e36'/> + <pointer-type-def type-id='cd087e36' size-in-bits='64' id='e05e8614'/> + <qualified-type-def type-id='e05e8614' restrict='yes' id='0be2e71c'/> + <pointer-type-def type-id='29dbc0dd' size-in-bits='64' id='068c4f7e'/> + <pointer-type-def type-id='b9eccc8f' size-in-bits='64' id='78830f38'/> + <pointer-type-def type-id='62fab762' size-in-bits='64' id='db285b03'/> + <qualified-type-def type-id='db285b03' restrict='yes' id='2a468b41'/> + <qualified-type-def type-id='18c91f9e' restrict='yes' id='6e745582'/> + <pointer-type-def type-id='a9c79a1f' size-in-bits='64' id='3d83ba87'/> + <pointer-type-def type-id='2a693ac3' size-in-bits='64' id='896f1b83'/> + <qualified-type-def type-id='896f1b83' restrict='yes' id='4bcf44c1'/> + <qualified-type-def type-id='eaa32e2f' restrict='yes' id='1b7446cd'/> + <function-decl name='pthread_cond_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='4c428e67'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_signal' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_broadcast' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_wait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='6e745582'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_timedwait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='6e745582'/> + <parameter type-id='0be2e71c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='clock_gettime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a1c3b834'/> + <parameter type-id='3d83ba87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='gettimeofday' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4bcf44c1'/> + <parameter type-id='1b7446cd'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_init' mangled-name='cv_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_init'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='arg'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_destroy' mangled-name='cv_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_destroy'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_wait' mangled-name='cv_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_wait'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_wait_sig' mangled-name='cv_wait_sig' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_wait_sig'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_timedwait' mangled-name='cv_timedwait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_timedwait'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='4c3a2c61' name='abstime'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_timedwait_hires' mangled-name='cv_timedwait_hires' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_timedwait_hires'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='cebdd548' name='tim'/> + <parameter type-id='cebdd548' name='res'/> + <parameter type-id='95e97e5e' name='flag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_signal' mangled-name='cv_signal' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_signal'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_broadcast' mangled-name='cv_broadcast' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_broadcast'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/cred.c' language='LANG_C99'> + <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd09'/> + <typedef-decl name='cred_t' type-id='6739dd09' id='a42f1a8f'/> + <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/> + <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/> + <typedef-decl name='gid_t' type-id='d94ec6d9' id='2bb2b96f'/> + <typedef-decl name='uid_t' type-id='cc5fcceb' id='354978ed'/> + <pointer-type-def type-id='a42f1a8f' size-in-bits='64' id='f89fcf80'/> + <pointer-type-def type-id='2bb2b96f' size-in-bits='64' id='b52814e6'/> + <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd09'/> + <function-decl name='crgetuid' mangled-name='crgetuid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetuid'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='354978ed'/> + </function-decl> + <function-decl name='crgetngroups' mangled-name='crgetngroups' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetngroups'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='crgetgroups' mangled-name='crgetgroups' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetgroups'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='b52814e6'/> + </function-decl> + </abi-instr> + <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> + <function-decl name='getexecname_impl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <return type-id='79a0948f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/kmem.c' language='LANG_C99'> + <typedef-decl name='fstrans_cookie_t' type-id='95e97e5e' id='059934c1'/> + <qualified-type-def type-id='26a90f95' restrict='yes' id='266fe297'/> + <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> + <qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/> + <function-decl name='__vasprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='kmem_vasprintf' mangled-name='kmem_vasprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_vasprintf'> + <parameter type-id='80f4b756' name='fmt'/> + <parameter type-id='b7f2d5e6' name='adx'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='kmem_asprintf' mangled-name='kmem_asprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_asprintf'> + <parameter type-id='80f4b756' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='kmem_scnprintf' mangled-name='kmem_scnprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_scnprintf'> + <parameter type-id='266fe297' name='str'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='9d26089a' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='spl_fstrans_unmark' mangled-name='spl_fstrans_unmark' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spl_fstrans_unmark'> + <parameter type-id='059934c1' name='cookie'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='kmem_cache_reap_active' mangled-name='kmem_cache_reap_active' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_reap_active'> + <return type-id='95e97e5e'/> + </function-decl> </abi-instr> - <abi-instr address-size='64' path='list.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/kstat.c' language='LANG_C99'> + <class-decl name='kstat' size-in-bits='448' is-struct='yes' visibility='default' id='5f5c9d88'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ks_flags' type-id='d8bf0010' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ks_data' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ks_ndata' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='ks_data_size' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='ks_update' type-id='8cf7b7e1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='ks_private' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='ks_lock' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='kstat_t' type-id='5f5c9d88' id='dd12e024'/> + <typedef-decl name='uchar_t' type-id='002ac4a6' id='d8bf0010'/> + <typedef-decl name='__loff_t' type-id='724e4de6' id='00c9d214'/> + <typedef-decl name='loff_t' type-id='00c9d214' id='69bf7bee'/> + <pointer-type-def type-id='9d5d322a' size-in-bits='64' id='bbe97414'/> + <pointer-type-def type-id='05b3c714' size-in-bits='64' id='27cc5c36'/> + <pointer-type-def type-id='7a9ace65' size-in-bits='64' id='8cf7b7e1'/> + <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/> + <pointer-type-def type-id='dd12e024' size-in-bits='64' id='46e5e463'/> + <pointer-type-def type-id='527a97c5' size-in-bits='64' id='673f2af9'/> + <function-decl name='kstat_create' mangled-name='kstat_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_create'> + <parameter type-id='80f4b756' name='module'/> + <parameter type-id='95e97e5e' name='instance'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='80f4b756' name='class'/> + <parameter type-id='d8bf0010' name='type'/> + <parameter type-id='ee1f298e' name='ndata'/> + <parameter type-id='d8bf0010' name='ks_flag'/> + <return type-id='46e5e463'/> + </function-decl> + <function-decl name='kstat_install' mangled-name='kstat_install' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_install'> + <parameter type-id='46e5e463' name='ksp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='kstat_set_raw_ops' mangled-name='kstat_set_raw_ops' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_set_raw_ops'> + <parameter type-id='46e5e463' name='ksp'/> + <parameter type-id='bbe97414' name='headers'/> + <parameter type-id='27cc5c36' name='data'/> + <parameter type-id='673f2af9' name='addr'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='9d5d322a'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='05b3c714'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='7a9ace65'> + <parameter type-id='0e87f9be'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='527a97c5'> + <parameter type-id='46e5e463'/> + <parameter type-id='69bf7bee'/> + <return type-id='eaa32e2f'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/libspl.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'> + <subrange length='65' type-id='7359adad' id='b50e2e4a'/> + </array-type-def> + <typedef-decl name='utsname_t' type-id='414a2ac6' id='5278297a'/> + <typedef-decl name='uint64_t' type-id='8910171f' id='9c313c2d'/> + <typedef-decl name='__uint64_t' type-id='7359adad' id='8910171f'/> + <class-decl name='utsname' size-in-bits='3120' is-struct='yes' visibility='default' id='414a2ac6'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='sysname' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='520'> + <var-decl name='nodename' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='release' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1560'> + <var-decl name='version' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2080'> + <var-decl name='machine' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2600'> + <var-decl name='domainname' type-id='5ddd38d2' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='414a2ac6' size-in-bits='64' id='a6724cec'/> + <pointer-type-def type-id='5278297a' size-in-bits='64' id='5c7868ad'/> + <function-decl name='sysconf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='uname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6724cec'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='libspl_physmem' mangled-name='libspl_physmem' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_physmem'> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='utsname' mangled-name='utsname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utsname'> + <return type-id='5c7868ad'/> + </function-decl> + <function-decl name='libspl_init' mangled-name='libspl_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='libspl_fini' mangled-name='libspl_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_fini'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_init' mangled-name='random_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_fini' mangled-name='random_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_fini'> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <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'> @@ -731,14 +1278,11 @@ <var-decl name='prev' type-id='b03eadb4' visibility='default'/> </data-member> </class-decl> - <class-decl name='list' size-in-bits='256' is-struct='yes' visibility='default' id='e824dae9'> + <class-decl name='list' size-in-bits='192' is-struct='yes' visibility='default' id='e824dae9'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='list_size' type-id='b59d7dce' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> <var-decl name='list_offset' type-id='b59d7dce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='128'> + <data-member access='public' layout-offset-in-bits='64'> <var-decl name='list_head' type-id='b0b5e45e' visibility='default'/> </data-member> </class-decl> @@ -831,34 +1375,120 @@ <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='f0981eeb' id='e1c52942'/> <typedef-decl name='mode_t' type-id='e1c52942' id='d50d396c'/> + <typedef-decl name='wchar_t' type-id='95e97e5e' id='928221d2'/> + <qualified-type-def type-id='928221d2' const='yes' id='effb3702'/> + <pointer-type-def type-id='effb3702' size-in-bits='64' id='f077d3f8'/> + <qualified-type-def type-id='f077d3f8' restrict='yes' id='598aab80'/> + <pointer-type-def type-id='928221d2' size-in-bits='64' id='323d93c1'/> + <qualified-type-def type-id='323d93c1' restrict='yes' id='f1358bc3'/> + <function-decl name='calloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='strdup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strrchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='access' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__mbstowcs_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f1358bc3'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__wcstombs_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='598aab80'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='mkdir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='e1c52942'/> + <return type-id='95e97e5e'/> + </function-decl> <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'/> <parameter type-id='d50d396c' name='mode'/> <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/mutex.c' language='LANG_C99'> + <function-decl name='pthread_mutex_trylock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_init' mangled-name='mutex_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_init'> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='cookie'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_destroy' mangled-name='mutex_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_destroy'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_enter' mangled-name='mutex_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_enter'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_enter_check_return' mangled-name='mutex_enter_check_return' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_enter_check_return'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_tryenter' mangled-name='mutex_tryenter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_tryenter'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_exit' mangled-name='mutex_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_exit'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/os/linux/getexecname.c' language='LANG_C99'> + <function-decl name='__readlink_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/os/linux/gethostid.c' language='LANG_C99'> + <function-decl name='fclose' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strtoull' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='3a47d82b'/> + </function-decl> <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> - <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> </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> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> - <subrange length='1' type-id='7359adad' id='52f813b4'/> - </array-type-def> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> - <subrange length='20' type-id='7359adad' id='fdca39cf'/> - </array-type-def> - <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> - <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> - <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> <class-decl name='mnttab' size-in-bits='256' is-struct='yes' visibility='default' id='1b055409'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='mnt_special' type-id='26a90f95' visibility='default'/> @@ -893,6 +1523,26 @@ <var-decl name='mnt_minor' type-id='3502e3ff' visibility='default'/> </data-member> </class-decl> + <class-decl name='mntent' size-in-bits='320' is-struct='yes' visibility='default' id='56fe4a37'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='mnt_fsname' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='mnt_dir' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='mnt_type' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mnt_opts' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='mnt_freq' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='mnt_passno' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> <class-decl name='stat64' size-in-bits='1152' is-struct='yes' visibility='default' id='0bbec9cd'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='st_dev' type-id='35ed8932' visibility='default'/> @@ -941,188 +1591,778 @@ </data-member> </class-decl> <typedef-decl name='__dev_t' type-id='7359adad' id='35ed8932'/> - <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/> - <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/> <typedef-decl name='__ino64_t' type-id='7359adad' id='71288a47'/> <typedef-decl name='__nlink_t' type-id='7359adad' id='80f0b9df'/> - <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> - <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> - <typedef-decl name='__time_t' type-id='bd54fe1a' id='65eda9c0'/> <typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/> <typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/> - <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/> - <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> - <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> - <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/> + <pointer-type-def type-id='56fe4a37' size-in-bits='64' id='b6b61d2f'/> + <qualified-type-def type-id='b6b61d2f' restrict='yes' id='3cad23cd'/> + <pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/> + <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/> + <qualified-type-def type-id='62f7a03d' restrict='yes' id='f1cadedf'/> + <function-decl name='getmntent_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='3cad23cd'/> + <parameter type-id='266fe297'/> + <parameter type-id='95e97e5e'/> + <return type-id='b6b61d2f'/> + </function-decl> + <function-decl name='feof' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strerror' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='stat64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='f1cadedf'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getmntany' mangled-name='getmntany' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getmntany'> + <parameter type-id='822cd80b' name='fp'/> + <parameter type-id='9d424d31' name='mgetp'/> + <parameter type-id='9d424d31' name='mrefp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_sol_getmntent' mangled-name='_sol_getmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_sol_getmntent'> + <parameter type-id='822cd80b' name='fp'/> + <parameter type-id='9d424d31' name='mgetp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getextmntent' mangled-name='getextmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getextmntent'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='394fc496' name='entry'/> + <parameter type-id='62f7a03d' name='statbuf'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/os/linux/zone.c' language='LANG_C99'> + <typedef-decl name='zoneid_t' type-id='3502e3ff' id='4da03624'/> + <function-decl name='strtoul' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='7359adad'/> + </function-decl> + <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='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='lib/libspl/procfs_list.c' language='LANG_C99'> + <class-decl name='procfs_list' size-in-bits='768' is-struct='yes' visibility='default' id='0f4d3b87'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + <var-decl name='pl_private' type-id='eaa32e2f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + <var-decl name='pl_lock' type-id='b9eccc8f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='pl_list' type-id='0899125f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='pl_next_id' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='pl_node_offset' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='procfs_list_t' type-id='0f4d3b87' id='e5b5a21b'/> + <class-decl name='seq_file' is-struct='yes' visibility='default' id='f3415517'/> + <pointer-type-def type-id='be39c944' size-in-bits='64' id='b5c3ae96'/> + <pointer-type-def type-id='86932239' size-in-bits='64' id='6255c89d'/> + <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/> + <pointer-type-def type-id='e5b5a21b' size-in-bits='64' id='7f432372'/> + <pointer-type-def type-id='f3415517' size-in-bits='64' id='f8dc9def'/> + <function-decl name='seq_printf' mangled-name='seq_printf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_printf'> + <parameter type-id='f8dc9def' name='m'/> + <parameter type-id='80f4b756' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_install' mangled-name='procfs_list_install' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_install'> + <parameter type-id='80f4b756' name='module'/> + <parameter type-id='80f4b756' name='submodule'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d50d396c' name='mode'/> + <parameter type-id='7f432372' name='procfs_list'/> + <parameter type-id='0131eb61' name='show'/> + <parameter type-id='6255c89d' name='show_header'/> + <parameter type-id='b5c3ae96' name='clear'/> + <parameter type-id='b59d7dce' name='procfs_list_node_off'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_uninstall' mangled-name='procfs_list_uninstall' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_uninstall'> + <parameter type-id='7f432372' name='procfs_list'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_destroy' mangled-name='procfs_list_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_destroy'> + <parameter type-id='7f432372' name='procfs_list'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_add' mangled-name='procfs_list_add' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_add'> + <parameter type-id='7f432372' name='procfs_list'/> + <parameter type-id='eaa32e2f' name='p'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='be39c944'> + <parameter type-id='7f432372'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='86932239'> + <parameter type-id='f8dc9def'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='cf9ec29d'> + <parameter type-id='f8dc9def'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/random.c' language='LANG_C99'> + <pointer-type-def type-id='b96825af' size-in-bits='64' id='ae3e8ca6'/> + <function-decl name='close' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__open_too_many_args' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__open_missing_mode' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__read_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='random_force_pseudo' mangled-name='random_force_pseudo' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_force_pseudo'> + <parameter type-id='c19b74c3' name='onoff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_get_bytes' mangled-name='random_get_bytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_get_bytes'> + <parameter type-id='ae3e8ca6' name='ptr'/> + <parameter type-id='b59d7dce' name='len'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='random_get_pseudo_bytes' mangled-name='random_get_pseudo_bytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_get_pseudo_bytes'> + <parameter type-id='ae3e8ca6' name='ptr'/> + <parameter type-id='b59d7dce' name='len'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/rwlock.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'> + <subrange length='56' type-id='7359adad' id='f8137894'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='56' id='08f7ce77'> + <subrange length='7' type-id='7359adad' id='16fc326e'/> + </array-type-def> + <class-decl name='krwlock' size-in-bits='576' is-struct='yes' visibility='default' id='4361e3b2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='rw_lock' type-id='3f680bc6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='rw_owner' type-id='4051f5e7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='rw_readers' type-id='3502e3ff' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='krwlock_t' type-id='4361e3b2' id='477df69a'/> + <typedef-decl name='krw_t' type-id='95e97e5e' id='932eed5d'/> + <union-decl name='pthread_rwlock_t' size-in-bits='448' naming-typedef-id='3f680bc6' visibility='default' id='981886f6'> + <data-member access='public'> + <var-decl name='__data' type-id='afe414a4' visibility='default'/> + </data-member> + <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_rwlock_t' type-id='981886f6' id='3f680bc6'/> + <union-decl name='pthread_rwlockattr_t' size-in-bits='64' naming-typedef-id='1b1c4591' visibility='default' id='b8e57521'> + <data-member access='public'> + <var-decl name='__size' type-id='8e100159' 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_rwlockattr_t' type-id='b8e57521' id='1b1c4591'/> + <class-decl name='__pthread_rwlock_arch_t' size-in-bits='448' is-struct='yes' visibility='default' id='afe414a4'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__readers' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='__writers' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='__wrphase_futex' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='__writers_futex' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + <var-decl name='__pad3' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='__pad4' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + <var-decl name='__cur_writer' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='__shared' type-id='95e97e5e' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> + <var-decl name='__rwelision' type-id='28577a57' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='264'> + <var-decl name='__pad1' type-id='08f7ce77' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + <var-decl name='__pad2' type-id='7359adad' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> + <var-decl name='__flags' type-id='f0981eeb' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> + </class-decl> + <qualified-type-def type-id='1b1c4591' const='yes' id='52c85581'/> + <pointer-type-def type-id='52c85581' size-in-bits='64' id='fc5edc31'/> + <qualified-type-def type-id='fc5edc31' restrict='yes' id='295e8f33'/> + <pointer-type-def type-id='477df69a' size-in-bits='64' id='0126db61'/> + <pointer-type-def type-id='3f680bc6' size-in-bits='64' id='a6210c87'/> + <qualified-type-def type-id='a6210c87' restrict='yes' id='27210b05'/> + <qualified-type-def type-id='3502e3ff' volatile='yes' id='d0290e74'/> + <pointer-type-def type-id='d0290e74' size-in-bits='64' id='0ea19dfa'/> + <function-decl name='atomic_inc_uint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0ea19dfa'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='atomic_dec_uint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0ea19dfa'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_rwlock_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='27210b05'/> + <parameter type-id='295e8f33'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_rdlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_tryrdlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_wrlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_trywrlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rw_init' mangled-name='rw_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_init'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='arg'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_destroy' mangled-name='rw_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_destroy'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_enter' mangled-name='rw_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_enter'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='932eed5d' name='rw'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_exit' mangled-name='rw_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_exit'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_tryenter' mangled-name='rw_tryenter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_tryenter'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='932eed5d' name='rw'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rw_tryupgrade' mangled-name='rw_tryupgrade' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_tryupgrade'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/sid.c' language='LANG_C99'> + <class-decl name='ksiddomain' size-in-bits='128' is-struct='yes' visibility='default' id='b3a38f42'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='kd_ref' type-id='3502e3ff' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='kd_len' type-id='3502e3ff' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='kd_name' type-id='26a90f95' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='640'> - <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> + </class-decl> + <typedef-decl name='ksiddomain_t' type-id='b3a38f42' id='db2eb030'/> + <pointer-type-def type-id='db2eb030' size-in-bits='64' id='3b684881'/> + <function-decl name='ksid_lookupdomain' mangled-name='ksid_lookupdomain' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksid_lookupdomain'> + <parameter type-id='80f4b756' name='dom'/> + <return type-id='3b684881'/> + </function-decl> + <function-decl name='ksiddomain_rele' mangled-name='ksiddomain_rele' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksiddomain_rele'> + <parameter type-id='3b684881' name='ksid'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <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'/> + <parameter type-id='b59d7dce' name='dstsize'/> + <return type-id='b59d7dce'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/taskq.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'> + <subrange length='32' type-id='7359adad' id='ae5bde82'/> + </array-type-def> + <typedef-decl name='pri_t' type-id='a2185560' id='c497180a'/> + <typedef-decl name='taskqid_t' type-id='e475ab95' id='de0ea20e'/> + <typedef-decl name='task_func_t' type-id='c5c76c9c' id='d8481e1f'/> + <class-decl name='taskq_ent' size-in-bits='320' is-struct='yes' visibility='default' id='cfda1b05'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tqent_next' type-id='67918d75' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='704'> - <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tqent_prev' type-id='67918d75' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='768'> - <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='tqent_func' type-id='41cce5ce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='832'> - <var-decl name='_chain' type-id='dca988a5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='tqent_arg' type-id='eaa32e2f' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='896'> - <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tqent_flags' type-id='e475ab95' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='928'> - <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + </class-decl> + <typedef-decl name='taskq_ent_t' type-id='cfda1b05' id='65d297d1'/> + <class-decl name='taskq' size-in-bits='3072' is-struct='yes' visibility='default' id='1804594f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tq_name' type-id='16dc656a' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='960'> - <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tq_lock' type-id='b9eccc8f' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1024'> - <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='tq_threadlock' type-id='477df69a' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1040'> - <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='tq_dispatch_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1048'> - <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1600'> + <var-decl name='tq_wait_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1088'> - <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1984'> + <var-decl name='tq_threadlist' type-id='6e87b565' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1152'> - <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2048'> + <var-decl name='tq_flags' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1216'> - <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2080'> + <var-decl name='tq_active' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1280'> - <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2112'> + <var-decl name='tq_nthreads' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1344'> - <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2144'> + <var-decl name='tq_nalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1408'> - <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2176'> + <var-decl name='tq_minalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1472'> - <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2208'> + <var-decl name='tq_maxalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1536'> - <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2240'> + <var-decl name='tq_maxalloc_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1568'> - <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2624'> + <var-decl name='tq_maxalloc_wait' type-id='95e97e5e' visibility='default'/> </data-member> - </class-decl> - <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2688'> + <var-decl name='tq_freelist' type-id='3a4f23d4' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='tv_nsec' type-id='03085adc' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2752'> + <var-decl name='tq_task' type-id='65d297d1' visibility='default'/> </data-member> </class-decl> - <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> - <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> - <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> - <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> - <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> - <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> - <pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/> - <pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/> - <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/> - <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> - <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> - <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> - <function-decl name='getmntany' mangled-name='getmntany' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getmntany'> - <parameter type-id='822cd80b' name='fp'/> - <parameter type-id='9d424d31' name='mgetp'/> - <parameter type-id='9d424d31' name='mrefp'/> + <typedef-decl name='taskq_t' type-id='1804594f' id='ef507f03'/> + <typedef-decl name='kthread_t' type-id='4051f5e7' id='9bccee1a'/> + <pointer-type-def type-id='9bccee1a' size-in-bits='64' id='6ae5a80d'/> + <pointer-type-def type-id='6ae5a80d' size-in-bits='64' id='6e87b565'/> + <pointer-type-def type-id='6e87b565' size-in-bits='64' id='4ea26b5d'/> + <pointer-type-def type-id='d8481e1f' size-in-bits='64' id='41cce5ce'/> + <pointer-type-def type-id='cfda1b05' size-in-bits='64' id='67918d75'/> + <pointer-type-def type-id='65d297d1' size-in-bits='64' id='3a4f23d4'/> + <pointer-type-def type-id='ef507f03' size-in-bits='64' id='4f8ed29a'/> + <function-decl name='zk_thread_create' mangled-name='zk_thread_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zk_thread_create'> + <parameter type-id='80f4b756'/> + <parameter type-id='b7f9d8e6'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='95e97e5e'/> + <return type-id='6ae5a80d'/> + </function-decl> + <function-decl name='pthread_exit' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_key_delete' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='_sol_getmntent' mangled-name='_sol_getmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_sol_getmntent'> - <parameter type-id='822cd80b' name='fp'/> - <parameter type-id='9d424d31' name='mgetp'/> + <function-decl name='_system_taskq' mangled-name='_system_taskq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_system_taskq'> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='_system_delay_taskq' mangled-name='_system_delay_taskq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_system_delay_taskq'> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_dispatch' mangled-name='taskq_dispatch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='tqflags'/> + <return type-id='de0ea20e'/> + </function-decl> + <function-decl name='taskq_dispatch_delay' mangled-name='taskq_dispatch_delay' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch_delay'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='tqflags'/> + <parameter type-id='4c3a2c61' name='expire_time'/> + <return type-id='de0ea20e'/> + </function-decl> + <function-decl name='taskq_empty_ent' mangled-name='taskq_empty_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_empty_ent'> + <parameter type-id='3a4f23d4' name='t'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='getextmntent' mangled-name='getextmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getextmntent'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='394fc496' name='entry'/> - <parameter type-id='62f7a03d' name='statbuf'/> + <function-decl name='taskq_init_ent' mangled-name='taskq_init_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_init_ent'> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_dispatch_ent' mangled-name='taskq_dispatch_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch_ent'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='flags'/> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_wait' mangled-name='taskq_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_wait'> + <parameter type-id='4f8ed29a' name='tq'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_wait_id' mangled-name='taskq_wait_id' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_wait_id'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='de0ea20e' name='id'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_create' mangled-name='taskq_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_create'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='95e97e5e' name='nthreads'/> + <parameter type-id='c497180a' name='pri'/> + <parameter type-id='95e97e5e' name='minalloc'/> + <parameter type-id='95e97e5e' name='maxalloc'/> + <parameter type-id='3502e3ff' name='flags'/> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_destroy' mangled-name='taskq_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_destroy'> + <parameter type-id='4f8ed29a' name='tq'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_create_synced' mangled-name='taskq_create_synced' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_create_synced'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='95e97e5e' name='nthreads'/> + <parameter type-id='c497180a' name='pri'/> + <parameter type-id='95e97e5e' name='minalloc'/> + <parameter type-id='95e97e5e' name='maxalloc'/> + <parameter type-id='3502e3ff' name='flags'/> + <parameter type-id='4ea26b5d' name='ktpp'/> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_member' mangled-name='taskq_member' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_member'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='6ae5a80d' name='t'/> <return type-id='95e97e5e'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='os/linux/zone.c' language='LANG_C99'> - <typedef-decl name='zoneid_t' type-id='3502e3ff' 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 name='taskq_of_curthread' mangled-name='taskq_of_curthread' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_of_curthread'> + <return type-id='4f8ed29a'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='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 name='taskq_cancel_id' mangled-name='taskq_cancel_id' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_cancel_id'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='de0ea20e' name='id'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='system_taskq_init' mangled-name='system_taskq_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='system_taskq_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='system_taskq_fini' mangled-name='system_taskq_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='system_taskq_fini'> + <return type-id='48b5725f'/> </function-decl> + <function-type size-in-bits='64' id='c5c76c9c'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-type> </abi-instr> - <abi-instr address-size='64' path='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'/> - <parameter type-id='b59d7dce' name='dstsize'/> - <return type-id='b59d7dce'/> + <abi-instr address-size='64' path='lib/libspl/thread.c' language='LANG_C99'> + <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'/> + <qualified-type-def type-id='7d8569fd' const='yes' id='e06dee2d'/> + <pointer-type-def type-id='e06dee2d' size-in-bits='64' id='540db505'/> + <qualified-type-def type-id='540db505' restrict='yes' id='e1815e87'/> + <pointer-type-def type-id='7d8569fd' size-in-bits='64' id='7347a39e'/> + <pointer-type-def type-id='4051f5e7' size-in-bits='64' id='e01b5462'/> + <qualified-type-def type-id='e01b5462' restrict='yes' id='cc338b26'/> + <pointer-type-def type-id='cd5d79f4' size-in-bits='64' id='5ad9edb6'/> + <function-decl name='pthread_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='cc338b26'/> + <parameter type-id='e1815e87'/> + <parameter type-id='5ad9edb6'/> + <parameter type-id='1b7446cd'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setdetachstate' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setguardsize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setstacksize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_setname_np' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4051f5e7'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strtol' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='getenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> </function-decl> + <function-decl name='__sysconf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='p0' mangled-name='p0' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='p0'> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='cd5d79f4'> + <parameter type-id='eaa32e2f'/> + <return type-id='eaa32e2f'/> + </function-type> </abi-instr> - <abi-instr address-size='64' path='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'/> - <parameter type-id='b59d7dce' name='len'/> + <abi-instr address-size='64' path='lib/libspl/timestamp.c' language='LANG_C99'> + <typedef-decl name='nl_item' type-id='95e97e5e' id='03b79a94'/> + <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' id='dddf6ca2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tm_sec' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='tm_min' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tm_hour' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='tm_mday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='tm_mon' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='tm_year' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='tm_wday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='tm_yday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tm_isdst' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='tm_gmtoff' type-id='bd54fe1a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='tm_zone' type-id='80f4b756' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='time_t' type-id='65eda9c0' id='c9d12d66'/> + <qualified-type-def type-id='c9d12d66' const='yes' id='588b3216'/> + <pointer-type-def type-id='588b3216' size-in-bits='64' id='9f201474'/> + <qualified-type-def type-id='9f201474' restrict='yes' id='d6e2847c'/> + <qualified-type-def type-id='dddf6ca2' const='yes' id='e824a34f'/> + <pointer-type-def type-id='e824a34f' size-in-bits='64' id='d6ad37ff'/> + <qualified-type-def type-id='d6ad37ff' restrict='yes' id='f8c6051d'/> + <pointer-type-def type-id='c9d12d66' size-in-bits='64' id='b2eb2c3f'/> + <pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/> + <qualified-type-def type-id='d915a820' restrict='yes' id='f099ad08'/> + <function-decl name='nl_langinfo' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='03b79a94'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='time' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b2eb2c3f'/> + <return type-id='c9d12d66'/> + </function-decl> + <function-decl name='strftime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='9d26089a'/> + <parameter type-id='f8c6051d'/> <return type-id='b59d7dce'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='timestamp.c' language='LANG_C99'> + <function-decl name='localtime_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='d6e2847c'/> + <parameter type-id='f099ad08'/> + <return type-id='d915a820'/> + </function-decl> + <function-decl name='__printf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> <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> + <function-decl name='get_timestamp' mangled-name='get_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_timestamp'> + <parameter type-id='3502e3ff' name='timestamp_fmt'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='95e97e5e' name='len'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='format_timestamp' mangled-name='format_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='format_timestamp'> + <parameter type-id='c9d12d66' name='t'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='95e97e5e' name='len'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/tunables.c' language='LANG_C99'> + <typedef-decl name='intmax_t' type-id='5b475db0' id='e104d842'/> + <typedef-decl name='uintmax_t' type-id='04d82f4b' id='f8b828c9'/> + <typedef-decl name='__intmax_t' type-id='bd54fe1a' id='5b475db0'/> + <typedef-decl name='__uintmax_t' type-id='7359adad' id='04d82f4b'/> + <function-decl name='strtoimax' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='e104d842'/> + </function-decl> + <function-decl name='strtoumax' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='f8b828c9'/> + </function-decl> </abi-instr> - <abi-instr address-size='64' path='uu_alloc.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libuutil/uu_alloc.c' language='LANG_C99'> <type-decl name='char' size-in-bits='8' id='a84c031d'/> + <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/> <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> <type-decl name='variadic parameter type' id='2c1145c5'/> <type-decl name='void' id='48b5725f'/> + <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/> <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/> <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/> <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/> + <function-decl name='uu_set_error' mangled-name='uu_set_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_set_error'> + <parameter type-id='3502e3ff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='malloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='strnlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> <function-decl name='uu_zalloc' mangled-name='uu_zalloc' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_zalloc'> <parameter type-id='b59d7dce' name='n'/> <return type-id='eaa32e2f'/> @@ -1151,13 +2391,16 @@ <return type-id='26a90f95'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='uu_avl.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libuutil/uu_avl.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> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'> <subrange length='40' type-id='7359adad' id='8f80b239'/> </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32' id='8e0573fd'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='512' id='59daf3ef'> <subrange length='64' type-id='7359adad' id='b10be967'/> </array-type-def> @@ -1169,7 +2412,6 @@ <subrange length='3' type-id='7359adad' id='56f209d2'/> </array-type-def> <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/> - <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/> <typedef-decl name='uu_compare_fn_t' type-id='add6e811' id='40f93560'/> <typedef-decl name='uu_walk_fn_t' type-id='96ee24a5' id='9d1aa0dc'/> <typedef-decl name='uu_avl_pool_t' type-id='12a530a8' id='7f84e390'/> @@ -1204,16 +2446,16 @@ </class-decl> <class-decl name='uu_avl' size-in-bits='960' is-struct='yes' visibility='default' id='4af029d1'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='ua_next_enc' type-id='e475ab95' visibility='default'/> + <var-decl name='ua_next' type-id='a5c21a38' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='ua_prev_enc' type-id='e475ab95' visibility='default'/> + <var-decl name='ua_prev' type-id='a5c21a38' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> <var-decl name='ua_pool' type-id='de82c773' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='ua_parent_enc' type-id='e475ab95' visibility='default'/> + <var-decl name='ua_parent' type-id='eaa32e2f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> <var-decl name='ua_debug' type-id='b96825af' visibility='default'/> @@ -1260,6 +2502,8 @@ <var-decl name='uap_null_avl' type-id='bb7f0973' visibility='default'/> </data-member> </class-decl> + <typedef-decl name='avl_tree_t' type-id='b351119f' id='f20fbd51'/> + <typedef-decl name='avl_index_t' type-id='e475ab95' id='fba6cb51'/> <class-decl name='avl_node' size-in-bits='192' is-struct='yes' visibility='default' id='428b67b3'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='avl_child' type-id='f0f65199' visibility='default'/> @@ -1287,6 +2531,15 @@ </class-decl> <typedef-decl name='ulong_t' type-id='7359adad' id='ee1f298e'/> <typedef-decl name='uintptr_t' type-id='7359adad' id='e475ab95'/> + <union-decl name='pthread_mutexattr_t' size-in-bits='32' naming-typedef-id='8afd6070' visibility='default' id='7300eb00'> + <data-member access='public'> + <var-decl name='__size' type-id='8e0573fd' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='95e97e5e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_mutexattr_t' type-id='7300eb00' id='8afd6070'/> <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'/> @@ -1341,8 +2594,14 @@ <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/> <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/> <pointer-type-def type-id='0e01899c' size-in-bits='64' id='4d98cd5a'/> + <pointer-type-def type-id='fba6cb51' size-in-bits='64' id='32adbf30'/> <pointer-type-def type-id='428b67b3' size-in-bits='64' id='bf311473'/> + <pointer-type-def type-id='b351119f' size-in-bits='64' id='716943c7'/> + <pointer-type-def type-id='f20fbd51' size-in-bits='64' id='a3681dea'/> + <qualified-type-def type-id='8afd6070' const='yes' id='1d853360'/> + <pointer-type-def type-id='1d853360' size-in-bits='64' id='c2afbd7e'/> <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/> + <pointer-type-def type-id='7a6844eb' size-in-bits='64' id='18c91f9e'/> <pointer-type-def type-id='5d7f5fc8' size-in-bits='64' id='813a2225'/> <pointer-type-def type-id='73a65116' size-in-bits='64' id='2dc35b9d'/> <pointer-type-def type-id='7f84e390' size-in-bits='64' id='de82c773'/> @@ -1351,6 +2610,96 @@ <pointer-type-def type-id='40f93560' size-in-bits='64' id='d502b39f'/> <pointer-type-def type-id='9d1aa0dc' size-in-bits='64' id='30a42b6d'/> <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> + <function-decl name='uu_check_name' mangled-name='uu_check_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_check_name'> + <parameter type-id='80f4b756'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='uu_panic' mangled-name='uu_panic' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_panic'> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <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'/> + <parameter type-id='585e1de9'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='48b5725f'/> + </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'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='32adbf30'/> + <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'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='fba6cb51'/> + <return type-id='48b5725f'/> + </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'/> + <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'/> + <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'/> + <parameter type-id='fba6cb51'/> + <parameter type-id='95e97e5e'/> + <return type-id='eaa32e2f'/> + </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'/> + <parameter type-id='eaa32e2f'/> + <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'/> + <return type-id='ee1f298e'/> + </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'/> + <parameter type-id='63e171df'/> + <return type-id='eaa32e2f'/> + </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'/> + <return type-id='48b5725f'/> + </function-decl> + <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='716943c7'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='95e97e5e'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='strlcpy' mangled-name='strlcpy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'> + <parameter type-id='26a90f95'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='pthread_mutex_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <parameter type-id='c2afbd7e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_lock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='uu_avl_pool_create' mangled-name='uu_avl_pool_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_avl_pool_create'> <parameter type-id='80f4b756' name='name'/> <parameter type-id='b59d7dce' name='objsize'/> @@ -1466,6 +2815,11 @@ <function-decl name='uu_avl_release' mangled-name='uu_avl_release' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_avl_release'> <return type-id='48b5725f'/> </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='add6e811'> <parameter type-id='eaa32e2f'/> <parameter type-id='eaa32e2f'/> @@ -1473,15 +2827,14 @@ <return type-id='95e97e5e'/> </function-type> </abi-instr> - <abi-instr address-size='64' path='uu_ident.c' language='LANG_C99'> - <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> - <function-decl name='uu_check_name' mangled-name='uu_check_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_check_name'> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='3502e3ff' name='flags'/> - <return type-id='95e97e5e'/> + <abi-instr address-size='64' path='lib/libuutil/uu_ident.c' language='LANG_C99'> + <function-decl name='strchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='uu_list.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libuutil/uu_list.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='e475ab95' size-in-bits='128' id='d0e9cdae'> <subrange length='2' type-id='7359adad' id='52efc4ef'/> </array-type-def> @@ -1526,16 +2879,16 @@ </class-decl> <class-decl name='uu_list' size-in-bits='896' is-struct='yes' visibility='default' id='1d04bdf0'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='ul_next_enc' type-id='e475ab95' visibility='default'/> + <var-decl name='ul_next' type-id='0c0b229b' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='ul_prev_enc' type-id='e475ab95' visibility='default'/> + <var-decl name='ul_prev' type-id='0c0b229b' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> <var-decl name='ul_pool' type-id='0941e04e' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='ul_parent_enc' type-id='e475ab95' visibility='default'/> + <var-decl name='ul_parent' type-id='eaa32e2f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> <var-decl name='ul_offset' type-id='b59d7dce' visibility='default'/> @@ -1726,25 +3079,16 @@ <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='uu_misc.c' language='LANG_C99'> - <function-decl name='uu_set_error' mangled-name='uu_set_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_set_error'> - <parameter type-id='3502e3ff' name='code'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='uu_error' mangled-name='uu_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_error'> - <return type-id='8f92235e'/> - </function-decl> - <function-decl name='uu_strerror' mangled-name='uu_strerror' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_strerror'> - <parameter type-id='8f92235e' name='code'/> - <return type-id='80f4b756'/> - </function-decl> - <function-decl name='uu_panic' mangled-name='uu_panic' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_panic'> - <parameter type-id='80f4b756' name='format'/> - <parameter is-variadic='yes'/> - <return type-id='48b5725f'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='uu_pname.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libuutil/uu_misc.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> + <subrange length='1' type-id='7359adad' id='52f813b4'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> + <subrange length='20' type-id='7359adad' id='fdca39cf'/> + </array-type-def> + <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> + <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> + <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> <class-decl name='__va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='d5027220'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='gp_offset' type-id='f0981eeb' visibility='default'/> @@ -1759,65 +3103,175 @@ <var-decl name='reg_save_area' type-id='eaa32e2f' visibility='default'/> </data-member> </class-decl> + <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + <typedef-decl name='pthread_t' type-id='7359adad' id='4051f5e7'/> + <typedef-decl name='pthread_key_t' type-id='f0981eeb' id='2de5383b'/> + <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> + <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> + <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> + <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> + <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='768'> + <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='_chain' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='896'> + <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='928'> + <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1024'> + <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1048'> + <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1088'> + <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1152'> + <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1344'> + <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1408'> + <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1568'> + <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> + <qualified-type-def type-id='822cd80b' restrict='yes' id='e75a27e9'/> + <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> + <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> + <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> + <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> + <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> <pointer-type-def type-id='d5027220' size-in-bits='64' id='b7f2d5e6'/> + <qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/> <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/> - <var-decl name='uu_exit_ok_value' type-id='95e97e5e' mangled-name='uu_exit_ok_value' visibility='default' elf-symbol-id='uu_exit_ok_value'/> - <var-decl name='uu_exit_fatal_value' type-id='95e97e5e' mangled-name='uu_exit_fatal_value' visibility='default' elf-symbol-id='uu_exit_fatal_value'/> - <var-decl name='uu_exit_usage_value' type-id='95e97e5e' mangled-name='uu_exit_usage_value' visibility='default' elf-symbol-id='uu_exit_usage_value'/> - <function-decl name='uu_exit_ok' mangled-name='uu_exit_ok' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_exit_ok'> + <pointer-type-def type-id='2de5383b' size-in-bits='64' id='ce04b822'/> + <pointer-type-def type-id='ee076206' size-in-bits='64' id='953b12f8'/> + <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/> + <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> + <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> + <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <function-decl name='__errno_location' visibility='default' binding='global' size-in-bits='64'> <return type-id='7292109c'/> </function-decl> - <function-decl name='uu_exit_fatal' mangled-name='uu_exit_fatal' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_exit_fatal'> - <return type-id='7292109c'/> + <function-decl name='dcgettext' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> </function-decl> - <function-decl name='uu_exit_usage' mangled-name='uu_exit_usage' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_exit_usage'> - <return type-id='7292109c'/> + <function-decl name='pthread_self' visibility='default' binding='global' size-in-bits='64'> + <return type-id='4051f5e7'/> </function-decl> - <function-decl name='uu_alt_exit' mangled-name='uu_alt_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_alt_exit'> - <parameter type-id='95e97e5e' name='profile'/> - <return type-id='48b5725f'/> + <function-decl name='pthread_key_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ce04b822'/> + <parameter type-id='b7f9d8e6'/> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='uu_vwarn' mangled-name='uu_vwarn' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_vwarn'> - <parameter type-id='80f4b756' name='format'/> - <parameter type-id='b7f2d5e6' name='alist'/> - <return type-id='48b5725f'/> + <function-decl name='pthread_getspecific' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> + <return type-id='eaa32e2f'/> </function-decl> - <function-decl name='uu_warn' mangled-name='uu_warn' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_warn'> - <parameter type-id='80f4b756' name='format'/> - <parameter is-variadic='yes'/> - <return type-id='48b5725f'/> + <function-decl name='pthread_setspecific' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='uu_vdie' mangled-name='uu_vdie' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_vdie'> - <parameter type-id='80f4b756' name='format'/> - <parameter type-id='b7f2d5e6' name='alist'/> - <return type-id='48b5725f'/> + <function-decl name='pthread_atfork' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='953b12f8'/> + <parameter type-id='953b12f8'/> + <parameter type-id='953b12f8'/> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='uu_die' mangled-name='uu_die' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_die'> - <parameter type-id='80f4b756' name='format'/> - <parameter is-variadic='yes'/> + <function-decl name='abort' visibility='default' binding='global' size-in-bits='64'> <return type-id='48b5725f'/> </function-decl> - <function-decl name='uu_vxdie' mangled-name='uu_vxdie' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_vxdie'> - <parameter type-id='95e97e5e' name='status'/> - <parameter type-id='80f4b756' name='format'/> - <parameter type-id='b7f2d5e6' name='alist'/> - <return type-id='48b5725f'/> + <function-decl name='pause' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='uu_xdie' mangled-name='uu_xdie' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_xdie'> - <parameter type-id='95e97e5e' name='status'/> - <parameter type-id='80f4b756' name='format'/> - <parameter is-variadic='yes'/> - <return type-id='48b5725f'/> + <function-decl name='__vfprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='uu_setpname' mangled-name='uu_setpname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_setpname'> - <parameter type-id='26a90f95' name='arg0'/> - <return type-id='80f4b756'/> + <function-decl name='uu_error' mangled-name='uu_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_error'> + <return type-id='8f92235e'/> </function-decl> - <function-decl name='uu_getpname' mangled-name='uu_getpname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_getpname'> + <function-decl name='uu_strerror' mangled-name='uu_strerror' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_strerror'> + <parameter type-id='8f92235e' name='code'/> <return type-id='80f4b756'/> </function-decl> + <function-type size-in-bits='64' id='ee076206'> + <return type-id='48b5725f'/> + </function-type> </abi-instr> - <abi-instr address-size='64' path='uu_string.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libuutil/uu_string.c' language='LANG_C99'> <type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/> <enum-decl name='boolean_t' naming-typedef-id='c19b74c3' id='f58c8277'> <underlying-type type-id='9cac1fee'/> @@ -1825,6 +3279,22 @@ <enumerator name='B_TRUE' value='1'/> </enum-decl> <typedef-decl name='boolean_t' type-id='f58c8277' id='c19b74c3'/> + <function-decl name='strcmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strncmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strcasecmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='uu_streq' mangled-name='uu_streq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uu_streq'> <parameter type-id='80f4b756' name='a'/> <parameter type-id='80f4b756' name='b'/> @@ -1841,4 +3311,50 @@ <return type-id='c19b74c3'/> </function-decl> </abi-instr> + <abi-instr address-size='64' path='module/avl/avl.c' language='LANG_C99'> + <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <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_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_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> + </abi-instr> </abi-corpus> diff --git a/sys/contrib/openzfs/lib/libuutil/uu_alloc.c b/sys/contrib/openzfs/lib/libuutil/uu_alloc.c index 2bef759d525e..dc2276e3d8b0 100644 --- a/sys/contrib/openzfs/lib/libuutil/uu_alloc.c +++ b/sys/contrib/openzfs/lib/libuutil/uu_alloc.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libuutil/uu_avl.c b/sys/contrib/openzfs/lib/libuutil/uu_avl.c index 53def0e073fd..a741bfa0fc94 100644 --- a/sys/contrib/openzfs/lib/libuutil/uu_avl.c +++ b/sys/contrib/openzfs/lib/libuutil/uu_avl.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -97,8 +98,8 @@ uu_avl_pool_create(const char *name, size_t objsize, size_t nodeoffset, (void) pthread_mutex_init(&pp->uap_lock, NULL); - pp->uap_null_avl.ua_next_enc = UU_PTR_ENCODE(&pp->uap_null_avl); - pp->uap_null_avl.ua_prev_enc = UU_PTR_ENCODE(&pp->uap_null_avl); + pp->uap_null_avl.ua_next = &pp->uap_null_avl; + pp->uap_null_avl.ua_prev = &pp->uap_null_avl; (void) pthread_mutex_lock(&uu_apool_list_lock); pp->uap_next = next = &uu_null_apool; @@ -114,10 +115,8 @@ void uu_avl_pool_destroy(uu_avl_pool_t *pp) { if (pp->uap_debug) { - if (pp->uap_null_avl.ua_next_enc != - UU_PTR_ENCODE(&pp->uap_null_avl) || - pp->uap_null_avl.ua_prev_enc != - UU_PTR_ENCODE(&pp->uap_null_avl)) { + if (pp->uap_null_avl.ua_next != &pp->uap_null_avl || + pp->uap_null_avl.ua_prev != &pp->uap_null_avl) { uu_panic("uu_avl_pool_destroy: Pool \"%.*s\" (%p) has " "outstanding avls, or is corrupt.\n", (int)sizeof (pp->uap_name), pp->uap_name, @@ -224,7 +223,7 @@ uu_avl_create(uu_avl_pool_t *pp, void *parent, uint32_t flags) } ap->ua_pool = pp; - ap->ua_parent_enc = UU_PTR_ENCODE(parent); + ap->ua_parent = parent; ap->ua_debug = pp->uap_debug || (flags & UU_AVL_DEBUG); ap->ua_index = (pp->uap_last_index = INDEX_NEXT(pp->uap_last_index)); @@ -236,11 +235,11 @@ uu_avl_create(uu_avl_pool_t *pp, void *parent, uint32_t flags) (void) pthread_mutex_lock(&pp->uap_lock); next = &pp->uap_null_avl; - prev = UU_PTR_DECODE(next->ua_prev_enc); - ap->ua_next_enc = UU_PTR_ENCODE(next); - ap->ua_prev_enc = UU_PTR_ENCODE(prev); - next->ua_prev_enc = UU_PTR_ENCODE(ap); - prev->ua_next_enc = UU_PTR_ENCODE(ap); + prev = next->ua_prev; + ap->ua_next = next; + ap->ua_prev = prev; + next->ua_prev = ap; + prev->ua_next = ap; (void) pthread_mutex_unlock(&pp->uap_lock); return (ap); @@ -263,11 +262,11 @@ uu_avl_destroy(uu_avl_t *ap) } } (void) pthread_mutex_lock(&pp->uap_lock); - UU_AVL_PTR(ap->ua_next_enc)->ua_prev_enc = ap->ua_prev_enc; - UU_AVL_PTR(ap->ua_prev_enc)->ua_next_enc = ap->ua_next_enc; + ap->ua_next->ua_prev = ap->ua_prev; + ap->ua_prev->ua_next = ap->ua_next; (void) pthread_mutex_unlock(&pp->uap_lock); - ap->ua_prev_enc = UU_PTR_ENCODE(NULL); - ap->ua_next_enc = UU_PTR_ENCODE(NULL); + ap->ua_prev = NULL; + ap->ua_next = NULL; ap->ua_pool = NULL; avl_destroy(&ap->ua_tree); diff --git a/sys/contrib/openzfs/lib/libuutil/uu_ident.c b/sys/contrib/openzfs/lib/libuutil/uu_ident.c index 382139316ebc..87fde4d98086 100644 --- a/sys/contrib/openzfs/lib/libuutil/uu_ident.c +++ b/sys/contrib/openzfs/lib/libuutil/uu_ident.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -7,7 +8,7 @@ * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libuutil/uu_list.c b/sys/contrib/openzfs/lib/libuutil/uu_list.c index c3a447d01de3..6c303bde9c81 100644 --- a/sys/contrib/openzfs/lib/libuutil/uu_list.c +++ b/sys/contrib/openzfs/lib/libuutil/uu_list.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -93,8 +94,8 @@ uu_list_pool_create(const char *name, size_t objsize, (void) pthread_mutex_init(&pp->ulp_lock, NULL); - pp->ulp_null_list.ul_next_enc = UU_PTR_ENCODE(&pp->ulp_null_list); - pp->ulp_null_list.ul_prev_enc = UU_PTR_ENCODE(&pp->ulp_null_list); + pp->ulp_null_list.ul_next = &pp->ulp_null_list; + pp->ulp_null_list.ul_prev = &pp->ulp_null_list; (void) pthread_mutex_lock(&uu_lpool_list_lock); pp->ulp_next = next = &uu_null_lpool; @@ -110,10 +111,8 @@ void uu_list_pool_destroy(uu_list_pool_t *pp) { if (pp->ulp_debug) { - if (pp->ulp_null_list.ul_next_enc != - UU_PTR_ENCODE(&pp->ulp_null_list) || - pp->ulp_null_list.ul_prev_enc != - UU_PTR_ENCODE(&pp->ulp_null_list)) { + if (pp->ulp_null_list.ul_next != &pp->ulp_null_list || + pp->ulp_null_list.ul_prev != &pp->ulp_null_list) { uu_panic("uu_list_pool_destroy: Pool \"%.*s\" (%p) has " "outstanding lists, or is corrupt.\n", (int)sizeof (pp->ulp_name), pp->ulp_name, @@ -202,7 +201,7 @@ uu_list_create(uu_list_pool_t *pp, void *parent, uint32_t flags) } lp->ul_pool = pp; - lp->ul_parent_enc = UU_PTR_ENCODE(parent); + lp->ul_parent = parent; lp->ul_offset = pp->ulp_nodeoffset; lp->ul_debug = pp->ulp_debug || (flags & UU_LIST_DEBUG); lp->ul_sorted = (flags & UU_LIST_SORTED); @@ -217,11 +216,11 @@ uu_list_create(uu_list_pool_t *pp, void *parent, uint32_t flags) (void) pthread_mutex_lock(&pp->ulp_lock); next = &pp->ulp_null_list; - prev = UU_PTR_DECODE(next->ul_prev_enc); - lp->ul_next_enc = UU_PTR_ENCODE(next); - lp->ul_prev_enc = UU_PTR_ENCODE(prev); - next->ul_prev_enc = UU_PTR_ENCODE(lp); - prev->ul_next_enc = UU_PTR_ENCODE(lp); + prev = next->ul_prev; + lp->ul_next = next; + lp->ul_prev = prev; + next->ul_prev = lp; + prev->ul_next = lp; (void) pthread_mutex_unlock(&pp->ulp_lock); return (lp); @@ -250,11 +249,11 @@ uu_list_destroy(uu_list_t *lp) } (void) pthread_mutex_lock(&pp->ulp_lock); - UU_LIST_PTR(lp->ul_next_enc)->ul_prev_enc = lp->ul_prev_enc; - UU_LIST_PTR(lp->ul_prev_enc)->ul_next_enc = lp->ul_next_enc; + lp->ul_next->ul_prev = lp->ul_prev; + lp->ul_prev->ul_next = lp->ul_next; (void) pthread_mutex_unlock(&pp->ulp_lock); - lp->ul_prev_enc = UU_PTR_ENCODE(NULL); - lp->ul_next_enc = UU_PTR_ENCODE(NULL); + lp->ul_prev = NULL; + lp->ul_next = NULL; lp->ul_pool = NULL; uu_free(lp); } @@ -507,14 +506,20 @@ uu_list_walk(uu_list_t *lp, uu_walk_fn_t *func, void *private, uint32_t flags) } if (lp->ul_debug || robust) { - uu_list_walk_t my_walk; + uu_list_walk_t *my_walk; void *e; - list_walk_init(&my_walk, lp, flags); + my_walk = uu_zalloc(sizeof (*my_walk)); + if (my_walk == NULL) + return (-1); + + list_walk_init(my_walk, lp, flags); while (status == UU_WALK_NEXT && - (e = uu_list_walk_next(&my_walk)) != NULL) + (e = uu_list_walk_next(my_walk)) != NULL) status = (*func)(e, private); - list_walk_fini(&my_walk); + list_walk_fini(my_walk); + + uu_free(my_walk); } else { if (!reverse) { for (np = lp->ul_null_node.uln_next; diff --git a/sys/contrib/openzfs/lib/libuutil/uu_misc.c b/sys/contrib/openzfs/lib/libuutil/uu_misc.c index a8478ace9a73..1166fdfb2231 100644 --- a/sys/contrib/openzfs/lib/libuutil/uu_misc.c +++ b/sys/contrib/openzfs/lib/libuutil/uu_misc.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libuutil/uu_pname.c b/sys/contrib/openzfs/lib/libuutil/uu_pname.c deleted file mode 100644 index 610b8585dcbf..000000000000 --- a/sys/contrib/openzfs/lib/libuutil/uu_pname.c +++ /dev/null @@ -1,202 +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 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - - - -#include "libuutil_common.h" - -#include <libintl.h> -#include <limits.h> -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> -#include <stdio.h> -#include <errno.h> -#include <wchar.h> -#include <unistd.h> - -static const char *pname; - -static __attribute__((noreturn)) void -uu_die_internal(int status, const char *format, va_list alist); - -int uu_exit_ok_value = EXIT_SUCCESS; -int uu_exit_fatal_value = EXIT_FAILURE; -int uu_exit_usage_value = 2; - -int * -uu_exit_ok(void) -{ - return (&uu_exit_ok_value); -} - -int * -uu_exit_fatal(void) -{ - return (&uu_exit_fatal_value); -} - -int * -uu_exit_usage(void) -{ - return (&uu_exit_usage_value); -} - -void -uu_alt_exit(int profile) -{ - switch (profile) { - case UU_PROFILE_DEFAULT: - uu_exit_ok_value = EXIT_SUCCESS; - uu_exit_fatal_value = EXIT_FAILURE; - uu_exit_usage_value = 2; - break; - case UU_PROFILE_LAUNCHER: - uu_exit_ok_value = EXIT_SUCCESS; - uu_exit_fatal_value = 124; - uu_exit_usage_value = 125; - break; - } -} - -static __attribute__((format(printf, 2, 0))) void -uu_warn_internal(int err, const char *format, va_list alist) -{ - if (pname != NULL) - (void) fprintf(stderr, "%s: ", pname); - - if (format != NULL) - (void) vfprintf(stderr, format, alist); - - if (strrchr(format, '\n') == NULL) - (void) fprintf(stderr, ": %s\n", strerror(err)); -} - -void -uu_vwarn(const char *format, va_list alist) -{ - uu_warn_internal(errno, format, alist); -} - -void -uu_warn(const char *format, ...) -{ - va_list alist; - va_start(alist, format); - uu_warn_internal(errno, format, alist); - va_end(alist); -} - -static __attribute__((format(printf, 2, 0))) __attribute__((noreturn)) void -uu_die_internal(int status, const char *format, va_list alist) -{ - uu_warn_internal(errno, format, alist); -#ifdef DEBUG - { - char *cp; - - if (!issetugid()) { - cp = getenv("UU_DIE_ABORTS"); - if (cp != NULL && *cp != '\0') - abort(); - } - } -#endif - exit(status); -} - -void -uu_vdie(const char *format, va_list alist) -{ - uu_die_internal(UU_EXIT_FATAL, format, alist); -} - -void -uu_die(const char *format, ...) -{ - va_list alist; - va_start(alist, format); - uu_die_internal(UU_EXIT_FATAL, format, alist); - va_end(alist); -} - -void -uu_vxdie(int status, const char *format, va_list alist) -{ - uu_die_internal(status, format, alist); -} - -void -uu_xdie(int status, const char *format, ...) -{ - va_list alist; - va_start(alist, format); - uu_die_internal(status, format, alist); - va_end(alist); -} - -const char * -uu_setpname(char *arg0) -{ - /* - * Having a NULL argv[0], while uncommon, is possible. It - * makes more sense to handle this event in uu_setpname rather - * than in each of its consumers. - */ - if (arg0 == NULL) { - pname = getexecname(); - if (pname == NULL) - pname = "unknown_command"; - return (pname); - } - - /* - * Guard against '/' at end of command invocation. - */ - for (;;) { - char *p = strrchr(arg0, '/'); - if (p == NULL) { - pname = arg0; - break; - } else { - if (*(p + 1) == '\0') { - *p = '\0'; - continue; - } - - pname = p + 1; - break; - } - } - - return (pname); -} - -const char * -uu_getpname(void) -{ - return (pname); -} diff --git a/sys/contrib/openzfs/lib/libuutil/uu_string.c b/sys/contrib/openzfs/lib/libuutil/uu_string.c index 67024c3b50b4..76f0a082607a 100644 --- a/sys/contrib/openzfs/lib/libuutil/uu_string.c +++ b/sys/contrib/openzfs/lib/libuutil/uu_string.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libzdb/Makefile.am b/sys/contrib/openzfs/lib/libzdb/Makefile.am new file mode 100644 index 000000000000..ec4fd92b984e --- /dev/null +++ b/sys/contrib/openzfs/lib/libzdb/Makefile.am @@ -0,0 +1,7 @@ +libzdb_la_CFLAGS = $(AM_CFLAGS) $(LIBRARY_CFLAGS) +libzdb_la_CFLAGS += -fvisibility=hidden + +noinst_LTLIBRARIES += libzdb.la + +libzdb_la_SOURCES = \ + %D%/libzdb.c diff --git a/sys/contrib/openzfs/lib/libzdb/libzdb.c b/sys/contrib/openzfs/lib/libzdb/libzdb.c new file mode 100644 index 000000000000..cca1327b1b03 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzdb/libzdb.c @@ -0,0 +1,102 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <ctype.h> +#include <getopt.h> +#include <openssl/evp.h> +#include <sys/zfs_context.h> +#include <sys/spa.h> +#include <sys/spa_impl.h> +#include <sys/dmu.h> +#include <sys/zap.h> +#include <sys/fs/zfs.h> +#include <sys/zfs_znode.h> +#include <sys/zfs_sa.h> +#include <sys/sa.h> +#include <sys/sa_impl.h> +#include <sys/vdev.h> +#include <sys/vdev_impl.h> +#include <sys/metaslab_impl.h> +#include <sys/dmu_objset.h> +#include <sys/dsl_dir.h> +#include <sys/dsl_dataset.h> +#include <sys/dsl_pool.h> +#include <sys/dsl_bookmark.h> +#include <sys/dbuf.h> +#include <sys/zil.h> +#include <sys/zil_impl.h> +#include <sys/stat.h> +#include <sys/resource.h> +#include <sys/dmu_send.h> +#include <sys/dmu_traverse.h> +#include <sys/zio_checksum.h> +#include <sys/zio_compress.h> +#include <sys/zfs_fuid.h> +#include <sys/arc.h> +#include <sys/arc_impl.h> +#include <sys/ddt.h> +#include <sys/zfeature.h> +#include <sys/abd.h> +#include <sys/blkptr.h> +#include <sys/dsl_crypt.h> +#include <sys/dsl_scan.h> +#include <sys/btree.h> +#include <sys/brt.h> +#include <sys/brt_impl.h> +#include <zfs_comutil.h> +#include <sys/zstd/zstd.h> + +#include <libnvpair.h> +#include <libzutil.h> + +#include <libzdb.h> + +const char * +zdb_ot_name(dmu_object_type_t type) +{ + if (type < DMU_OT_NUMTYPES) + return (dmu_ot[type].ot_name); + else if ((type & DMU_OT_NEWTYPE) && + ((type & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS)) + return (dmu_ot_byteswap[type & DMU_OT_BYTESWAP_MASK].ob_name); + else + return ("UNKNOWN"); +} + +int +livelist_compare(const void *larg, const void *rarg) +{ + const blkptr_t *l = larg; + const blkptr_t *r = rarg; + + /* Sort them according to dva[0] */ + uint64_t l_dva0_vdev, r_dva0_vdev; + l_dva0_vdev = DVA_GET_VDEV(&l->blk_dva[0]); + r_dva0_vdev = DVA_GET_VDEV(&r->blk_dva[0]); + if (l_dva0_vdev < r_dva0_vdev) + return (-1); + else if (l_dva0_vdev > r_dva0_vdev) + return (+1); + + /* if vdevs are equal, sort by offsets. */ + uint64_t l_dva0_offset; + uint64_t r_dva0_offset; + l_dva0_offset = DVA_GET_OFFSET(&l->blk_dva[0]); + r_dva0_offset = DVA_GET_OFFSET(&r->blk_dva[0]); + if (l_dva0_offset < r_dva0_offset) { + return (-1); + } else if (l_dva0_offset > r_dva0_offset) { + return (+1); + } + + /* + * Since we're storing blkptrs without cancelling FREE/ALLOC pairs, + * it's possible the offsets are equal. In that case, sort by txg + */ + if (BP_GET_BIRTH(l) < BP_GET_BIRTH(r)) { + return (-1); + } else if (BP_GET_BIRTH(l) > BP_GET_BIRTH(r)) { + return (+1); + } + return (0); +} diff --git a/sys/contrib/openzfs/lib/libzfs/Makefile.am b/sys/contrib/openzfs/lib/libzfs/Makefile.am index f5eb84679204..e2cbca47b9a3 100644 --- a/sys/contrib/openzfs/lib/libzfs/Makefile.am +++ b/sys/contrib/openzfs/lib/libzfs/Makefile.am @@ -34,8 +34,6 @@ dist_libzfs_la_SOURCES += \ endif nodist_libzfs_la_SOURCES = \ - module/icp/algs/sha2/sha2.c \ - \ module/zcommon/cityhash.c \ module/zcommon/zfeature_common.c \ module/zcommon/zfs_comutil.c \ @@ -49,10 +47,10 @@ nodist_libzfs_la_SOURCES = \ module/zcommon/zfs_fletcher_superscalar4.c \ module/zcommon/zfs_namecheck.c \ module/zcommon/zfs_prop.c \ + module/zcommon/zfs_valstr.c \ module/zcommon/zpool_prop.c \ module/zcommon/zprop_common.c - libzfs_la_LIBADD = \ libshare.la \ libzfs_core.la \ @@ -60,7 +58,7 @@ libzfs_la_LIBADD = \ libzutil.la \ libuutil.la -libzfs_la_LIBADD += -lm $(LIBCRYPTO_LIBS) $(ZLIB_LIBS) $(LIBFETCH_LIBS) $(LTLIBINTL) +libzfs_la_LIBADD += -lrt -lm $(LIBCRYPTO_LIBS) $(ZLIB_LIBS) $(LIBFETCH_LIBS) $(LTLIBINTL) libzfs_la_LDFLAGS = -pthread @@ -72,7 +70,7 @@ if BUILD_FREEBSD libzfs_la_LIBADD += -lutil -lgeom endif -libzfs_la_LDFLAGS += -version-info 5:0:1 +libzfs_la_LDFLAGS += -version-info 7:0:0 pkgconfig_DATA += %D%/libzfs.pc diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs.abi b/sys/contrib/openzfs/lib/libzfs/libzfs.abi index fb5e01b82c40..f481b6221e4d 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs.abi +++ b/sys/contrib/openzfs/lib/libzfs/libzfs.abi @@ -1,22 +1,22 @@ -<abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='libzfs.so.4'> +<abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='libzfs.so.7'> <elf-needed> <dependency name='libzfs_core.so.3'/> <dependency name='libnvpair.so.3'/> + <dependency name='libunwind.so.8'/> <dependency name='libuuid.so.1'/> - <dependency name='librt.so.1'/> <dependency name='libblkid.so.1'/> <dependency name='libudev.so.1'/> <dependency name='libuutil.so.3'/> <dependency name='libm.so.6'/> - <dependency name='libcrypto.so.1.1'/> + <dependency name='libcrypto.so.3'/> <dependency name='libz.so.1'/> - <dependency name='libdl.so.2'/> - <dependency name='libpthread.so.0'/> <dependency name='libc.so.6'/> <dependency name='ld-linux-x86-64.so.2'/> </elf-needed> <elf-function-symbols> <elf-symbol name='_sol_getmntent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='_system_delay_taskq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='_system_taskq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -156,9 +156,25 @@ <elf-symbol name='avl_update_lt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='avl_walk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='bookmark_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cityhash1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cityhash2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cityhash3' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='cityhash4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='color_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='color_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetgid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetgroups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetngroups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetruid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetuid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_broadcast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_timedwait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_timedwait_hires' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_wait_sig' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='dataset_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='dataset_nestcheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='efi_alloc_and_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -182,8 +198,11 @@ <elf-symbol name='fletcher_4_native' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='fletcher_4_native_varsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='fletcher_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='format_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fsleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='get_dataset_depth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='get_system_hostid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='get_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getexecname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getextmntent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getmntany' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -191,7 +210,22 @@ <elf-symbol name='getzoneid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='is_mounted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='is_mpath_whole_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_asprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_cache_reap_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_scnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_vasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='ksid_lookupdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='ksiddomain_rele' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_set_raw_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libpc_error_description' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_assertf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_backtrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_physmem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_set_assert_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libzfs_add_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libzfs_envvar_is_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -234,22 +268,65 @@ <elf-symbol name='membar_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='membar_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='membar_producer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='membar_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='mkdirp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='mountpoint_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_enter_check_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_tryenter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='p0' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='permset_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='pool_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='print_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='printf_color' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_uninstall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_force_pseudo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_get_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_get_pseudo_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_tryenter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_tryupgrade' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_commit_shares' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_disable_share' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_enable_share' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_errorstr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_is_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='sa_truncate_shares' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_validate_shareopts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='snapshot_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spl_fstrans_mark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spl_fstrans_unmark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='spl_pagesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='strlcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='system_taskq_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='system_taskq_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_cancel_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_create_synced' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_empty_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_init_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_member' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_of_curthread' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait_outstanding' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='tpool_abandon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='tpool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='tpool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -260,6 +337,9 @@ <elf-symbol name='tpool_suspended' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='tpool_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='update_vdev_config_dev_strs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='update_vdev_config_dev_sysfs_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='use_color' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='utsname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='vdev_expand_proplist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='vdev_name_to_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='vdev_prop_align_right' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -276,6 +356,7 @@ <elf-symbol name='vdev_prop_to_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='vdev_prop_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='vdev_prop_values' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zcmd_print_json' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfeature_depends_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfeature_is_supported' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfeature_is_valid_guid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -334,18 +415,26 @@ <elf-symbol name='zfs_hold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_hold_nvl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_is_encrypted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_is_mounted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_is_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_isnumber' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_bookmarks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_bookmarks_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_children' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_children_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_dependents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_dependents_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_filesystems' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_filesystems_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_mounted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_root' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_snapshots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_snapshots_sorted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_snapshots_sorted_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_snapshots_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_iter_snapspec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_iter_snapspec_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_mod_supported' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_mount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_mount_at' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -388,6 +477,7 @@ <elf-symbol name='zfs_prop_readonly' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_prop_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_prop_set_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_prop_set_list_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_prop_setonce' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_prop_string_to_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_prop_to_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -413,6 +503,8 @@ <elf-symbol name='zfs_send_resume_token_to_nvlist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_send_saved' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_set_fsacl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_setproctitle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_setproctitle_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_share' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_show_diffs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_smb_acl_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -428,6 +520,7 @@ <elf-symbol name='zfs_strcmp_pathname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_strip_partition' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_strip_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_truncate_shares' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_type_to_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_unmount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_unmountall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -436,23 +529,38 @@ <elf-symbol name='zfs_userns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_userspace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_valid_proplist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_flag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_flag_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_flag_pairs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_priority' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_stage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_stage_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_stage_pairs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_valstr_zio_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_version_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_version_nvlist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_version_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_version_userland' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_wait_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_zpl_version_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zk_thread_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_add_propname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_checkpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_clear_label' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_collect_leaves' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_collect_unsup_feat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_ddt_prune' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_default_search_paths' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_disable_datasets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_disable_datasets_os' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_disable_volume_os' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_discard_checkpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_disk_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_dump_ddt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_enable_datasets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_events_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -464,6 +572,7 @@ <elf-symbol name='zpool_export_force' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_feature_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_find_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_find_parent_vdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_find_vdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_find_vdev_by_physpath' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_free_handles' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -476,20 +585,22 @@ <elf-symbol name='zpool_get_history' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_load_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='zpool_get_physpath' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_prop_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_state_str' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_get_userprop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_vdev_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_get_vdev_prop_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_getenv_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_history_unpack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_import_props' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_import_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_in_use' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_initialize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_initialize_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_initialize_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_is_draid_spare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -503,7 +614,9 @@ <elf-symbol name='zpool_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_open_canfail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_pool_state_to_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='zpool_print_unsup_feat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_prefetch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_prepare_and_label_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_prepare_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_prop_align_right' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_prop_column_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_prop_default_numeric' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -525,17 +638,21 @@ <elf-symbol name='zpool_props_refresh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_read_label' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_refresh_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_refresh_stats_from_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_reguid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_reopen_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_scan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_scan_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_search_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_set_bootenv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_set_guid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_set_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_set_vdev_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_skip_pool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_state_to_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_sync_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_trim_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_upgrade' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_vdev_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_vdev_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -549,15 +666,21 @@ <elf-symbol name='zpool_vdev_path_to_guid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_vdev_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_vdev_remove_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_vdev_remove_wanted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_vdev_script_alloc_env' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_vdev_script_free_env' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zpool_vdev_set_removed_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_vdev_split' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zpool_wait_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zprop_collect_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_free_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_get_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_index_to_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_iter_common' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_name_to_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zprop_nvlist_one_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_print_one_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_random_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zprop_register_hidden' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -575,205 +698,78 @@ <elf-variable-symbols> <elf-symbol name='efi_debug' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='fletcher_4_abd_ops' size='24' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_avx2_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_avx512bw_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_avx512f_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_sse2_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_ssse3_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_superscalar4_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='fletcher_4_superscalar_ops' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_avx2_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_avx512bw_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_avx512f_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_sse2_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_ssse3_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_superscalar4_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='fletcher_4_superscalar_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libzfs_config_ops' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='sa_protocol_names' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='spa_feature_table' size='2072' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spa_feature_table' size='2632' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfeature_checks_disable' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> - <elf-symbol name='zfs_deleg_perm_tab' size='512' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zfs_deleg_perm_tab' size='544' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='zfs_history_event_names' size='328' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <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='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> - <array-type-def dimensions='1' type-id='a65ae39c' size-in-bits='960' id='fa198beb'> - <subrange length='1' type-id='7359adad' id='52f813b4'/> - </array-type-def> - <array-type-def dimensions='1' type-id='b96825af' size-in-bits='48' id='0f562bd0'> - <subrange length='6' type-id='7359adad' id='52fa524b'/> - </array-type-def> - <array-type-def dimensions='1' type-id='3502e3ff' size-in-bits='384' id='dba89ba3'> - <subrange length='12' type-id='7359adad' id='84827bdc'/> - </array-type-def> - <array-type-def dimensions='1' type-id='3502e3ff' size-in-bits='256' id='01d84ed4'> - <subrange length='8' type-id='7359adad' id='56e0c0b1'/> - </array-type-def> - <class-decl name='dk_part' size-in-bits='960' is-struct='yes' visibility='default' id='a65ae39c'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='p_start' type-id='804dc465' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='p_size' type-id='804dc465' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='p_guid' type-id='214f32ea' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='p_tag' type-id='d908a348' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='272'> - <var-decl name='p_flag' type-id='d908a348' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='288'> - <var-decl name='p_name' type-id='16e6f2c6' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='p_uguid' type-id='214f32ea' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='704'> - <var-decl name='p_resv' type-id='01d84ed4' visibility='default'/> - </data-member> - </class-decl> - <class-decl name='dk_gpt' size-in-bits='1920' is-struct='yes' visibility='default' id='dd4a2e5a'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='efi_version' type-id='3502e3ff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32'> - <var-decl name='efi_nparts' type-id='3502e3ff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='efi_part_size' type-id='3502e3ff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='96'> - <var-decl name='efi_lbasize' type-id='3502e3ff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='efi_last_lba' type-id='804dc465' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='efi_first_u_lba' type-id='804dc465' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='efi_last_u_lba' type-id='804dc465' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='efi_disk_uguid' type-id='214f32ea' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='efi_flags' type-id='3502e3ff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='480'> - <var-decl name='efi_reserved1' type-id='3502e3ff' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='efi_altern_lba' type-id='804dc465' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='efi_reserved' type-id='dba89ba3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='960'> - <var-decl name='efi_parts' type-id='fa198beb' visibility='default'/> - </data-member> - </class-decl> - <class-decl name='uuid' size-in-bits='128' is-struct='yes' visibility='default' id='214f32ea'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='time_low' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32'> - <var-decl name='time_mid' type-id='149c6638' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='48'> - <var-decl name='time_hi_and_version' type-id='149c6638' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='clock_seq_hi_and_reserved' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='72'> - <var-decl name='clock_seq_low' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='80'> - <var-decl name='node_addr' type-id='0f562bd0' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='ushort_t' type-id='8efea9e5' id='d908a348'/> - <pointer-type-def type-id='dd4a2e5a' size-in-bits='64' id='0d8119a8'/> - <pointer-type-def type-id='0d8119a8' size-in-bits='64' id='c43b27a6'/> + <typedef-decl name='uInt' type-id='f0981eeb' id='09110a74'/> <var-decl name='efi_debug' type-id='95e97e5e' mangled-name='efi_debug' visibility='default' elf-symbol-id='efi_debug'/> - <function-decl name='efi_alloc_and_init' mangled-name='efi_alloc_and_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_alloc_and_init'> - <parameter type-id='95e97e5e' name='fd'/> - <parameter type-id='8f92235e' name='nparts'/> - <parameter type-id='c43b27a6' name='vtoc'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='efi_alloc_and_read' mangled-name='efi_alloc_and_read' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_alloc_and_read'> - <parameter type-id='95e97e5e' name='fd'/> - <parameter type-id='c43b27a6' name='vtoc'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='efi_rescan' mangled-name='efi_rescan' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_rescan'> - <parameter type-id='95e97e5e' name='fd'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='efi_use_whole_disk' mangled-name='efi_use_whole_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_use_whole_disk'> - <parameter type-id='95e97e5e' name='fd'/> - <return type-id='95e97e5e'/> + <function-decl name='uuid_generate' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='cf536864'/> + <return type-id='48b5725f'/> </function-decl> - <function-decl name='efi_write' mangled-name='efi_write' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_write'> - <parameter type-id='95e97e5e' name='fd'/> - <parameter type-id='0d8119a8' name='vtoc'/> + <function-decl name='uuid_is_null' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='354f7eb9'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='efi_free' mangled-name='efi_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_free'> - <parameter type-id='0d8119a8' name='ptr'/> - <return type-id='48b5725f'/> + <function-decl name='crc32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5bbcce85'/> + <parameter type-id='e8cb3e0e'/> + <parameter type-id='09110a74'/> + <return type-id='5bbcce85'/> </function-decl> <function-decl name='efi_err_check' mangled-name='efi_err_check' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_err_check'> <parameter type-id='0d8119a8' name='vtoc'/> <return type-id='48b5725f'/> </function-decl> - <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='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> <var-decl name='sa_protocol_names' type-id='2d6895a3' mangled-name='sa_protocol_names' visibility='default' elf-symbol-id='sa_protocol_names'/> - <function-decl name='sa_enable_share' mangled-name='sa_enable_share' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_enable_share'> - <parameter type-id='80f4b756' name='zfsname'/> - <parameter type-id='80f4b756' name='mountpoint'/> - <parameter type-id='80f4b756' name='shareopts'/> - <parameter type-id='9155d4b5' name='protocol'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='sa_disable_share' mangled-name='sa_disable_share' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_disable_share'> - <parameter type-id='80f4b756' name='mountpoint'/> - <parameter type-id='9155d4b5' name='protocol'/> + <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> + </abi-instr> + <abi-instr address-size='64' path='lib/libshare/nfs.c' language='LANG_C99'> + <function-decl name='rename' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='sa_is_shared' mangled-name='sa_is_shared' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_is_shared'> - <parameter type-id='80f4b756' name='mountpoint'/> - <parameter type-id='9155d4b5' name='protocol'/> - <return type-id='c19b74c3'/> + <function-decl name='memchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> </function-decl> - <function-decl name='sa_commit_shares' mangled-name='sa_commit_shares' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_commit_shares'> - <parameter type-id='9155d4b5' name='protocol'/> - <return type-id='48b5725f'/> + <function-decl name='flock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='sa_validate_shareopts' mangled-name='sa_validate_shareopts' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_validate_shareopts'> - <parameter type-id='80f4b756' name='options'/> - <parameter type-id='9155d4b5' name='protocol'/> + <function-decl name='fchmod' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='e1c52942'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='sa_errorstr' mangled-name='sa_errorstr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_errorstr'> - <parameter type-id='95e97e5e' name='err'/> - <return type-id='80f4b756'/> + <function-decl name='mkdir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='e1c52942'/> + <return type-id='95e97e5e'/> </function-decl> - <enum-decl name='sa_protocol' id='9155d4b5'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='SA_PROTOCOL_NFS' value='0'/> - <enumerator name='SA_PROTOCOL_SMB' value='1'/> - <enumerator name='SA_PROTOCOL_COUNT' value='2'/> - </enum-decl> </abi-instr> <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'> @@ -788,7 +784,7 @@ </data-member> </class-decl> <typedef-decl name='sa_share_impl_t' type-id='946a2c6b' id='a48b47d0'/> - <class-decl name='sa_fstype_t' size-in-bits='320' is-struct='yes' naming-typedef-id='639af739' visibility='default' id='944afa86'> + <class-decl name='sa_fstype_t' size-in-bits='384' is-struct='yes' naming-typedef-id='639af739' visibility='default' id='944afa86'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='enable_share' type-id='2f78a9c1' visibility='default'/> </data-member> @@ -804,6 +800,9 @@ <data-member access='public' layout-offset-in-bits='256'> <var-decl name='commit_shares' type-id='797ee7da' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='truncate_shares' type-id='5d51038b' visibility='default'/> + </data-member> </class-decl> <typedef-decl name='sa_fstype_t' type-id='944afa86' id='639af739'/> <qualified-type-def type-id='639af739' const='yes' id='d19dbca9'/> @@ -815,9 +814,35 @@ <qualified-type-def type-id='70487b28' const='yes' id='f194a8fb'/> <pointer-type-def type-id='c13578bc' size-in-bits='64' id='fa1f29ce'/> <qualified-type-def type-id='fa1f29ce' const='yes' id='2f78a9c1'/> + <pointer-type-def type-id='723e6cf2' size-in-bits='64' id='1d99e49c'/> <pointer-type-def type-id='86373eb1' size-in-bits='64' id='f337456d'/> <qualified-type-def type-id='f337456d' const='yes' id='81020bc2'/> + <qualified-type-def type-id='953b12f8' const='yes' id='5d51038b'/> <var-decl name='libshare_nfs_type' type-id='d19dbca9' visibility='default'/> + <function-decl name='nfs_escape_mountpoint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='9b23c9ad'/> + <parameter type-id='37e3bd22'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nfs_is_shared_impl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='a48b47d0'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nfs_toggle_share' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='a48b47d0'/> + <parameter type-id='1d99e49c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nfs_reset_shares' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> <function-type size-in-bits='64' id='276427e1'> <return type-id='95e97e5e'/> </function-type> @@ -829,47 +854,56 @@ <parameter type-id='a48b47d0'/> <return type-id='95e97e5e'/> </function-type> + <function-type size-in-bits='64' id='723e6cf2'> + <parameter type-id='a48b47d0'/> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-type> <function-type size-in-bits='64' id='86373eb1'> <parameter type-id='a48b47d0'/> <return type-id='c19b74c3'/> </function-type> + <function-type size-in-bits='64' id='ee076206'> + <return type-id='48b5725f'/> + </function-type> </abi-instr> <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'/> + <function-decl name='__fgets_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='e75a27e9'/> + <return type-id='26a90f95'/> + </function-decl> </abi-instr> <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'/> + <function-decl name='libspl_backtrace' mangled-name='libspl_backtrace' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_backtrace'> + <parameter type-id='95e97e5e'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> - <parameter type-id='80f4b756' name='file'/> - <parameter type-id='80f4b756' name='func'/> - <parameter type-id='95e97e5e' name='line'/> - <parameter type-id='80f4b756' name='format'/> + <function-decl name='gettid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='prctl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <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'/> </function-decl> </abi-instr> <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'/> - <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> - <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> <typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/> - <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/> - <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/> <qualified-type-def type-id='149c6638' volatile='yes' id='5120c5f7'/> <pointer-type-def type-id='5120c5f7' size-in-bits='64' id='93977ae7'/> - <qualified-type-def type-id='8f92235e' volatile='yes' id='430e0681'/> - <pointer-type-def type-id='430e0681' size-in-bits='64' id='3a147f31'/> <qualified-type-def type-id='b96825af' volatile='yes' id='84ff7d66'/> <pointer-type-def type-id='84ff7d66' size-in-bits='64' id='aa323ea4'/> <qualified-type-def type-id='ee1f298e' volatile='yes' id='6f7e09cb'/> <pointer-type-def type-id='6f7e09cb' size-in-bits='64' id='64698d33'/> - <qualified-type-def type-id='48b5725f' volatile='yes' id='b0b3cbf9'/> - <pointer-type-def type-id='b0b3cbf9' size-in-bits='64' id='fe09dd29'/> <function-decl name='atomic_inc_8' mangled-name='atomic_inc_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_8'> <parameter type-id='aa323ea4' name='target'/> <return type-id='48b5725f'/> @@ -922,11 +956,6 @@ <parameter type-id='3ff5601b' name='bits'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='atomic_add_long' mangled-name='atomic_add_long' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_long'> - <parameter type-id='64698d33' name='target'/> - <parameter type-id='bd54fe1a' name='bits'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='atomic_sub_ptr' mangled-name='atomic_sub_ptr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_ptr'> <parameter type-id='fe09dd29' name='target'/> <parameter type-id='79a0948f' name='bits'/> @@ -947,11 +976,6 @@ <parameter type-id='3ff5601b' name='bits'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='atomic_sub_long' mangled-name='atomic_sub_long' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_long'> - <parameter type-id='64698d33' name='target'/> - <parameter type-id='bd54fe1a' name='bits'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='atomic_or_8' mangled-name='atomic_or_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_8'> <parameter type-id='aa323ea4' name='target'/> <parameter type-id='b96825af' name='bits'/> @@ -1154,11 +1178,6 @@ <parameter type-id='149c6638' name='bits'/> <return type-id='149c6638'/> </function-decl> - <function-decl name='atomic_swap_32' mangled-name='atomic_swap_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_swap_32'> - <parameter type-id='3a147f31' name='target'/> - <parameter type-id='8f92235e' name='bits'/> - <return type-id='8f92235e'/> - </function-decl> <function-decl name='atomic_swap_ulong' mangled-name='atomic_swap_ulong' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_swap_ulong'> <parameter type-id='64698d33' name='target'/> <parameter type-id='ee1f298e' name='bits'/> @@ -1182,17 +1201,453 @@ <function-decl name='membar_enter' mangled-name='membar_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='membar_enter'> <return type-id='48b5725f'/> </function-decl> - <function-decl name='membar_producer' mangled-name='membar_producer' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='membar_producer'> + <function-decl name='membar_consumer' mangled-name='membar_consumer' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='membar_consumer'> <return type-id='48b5725f'/> </function-decl> - <function-decl name='membar_consumer' mangled-name='membar_consumer' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='membar_consumer'> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/backtrace.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='768' id='b80f3d9b'> + <subrange length='24' type-id='7359adad' id='fdd3342b'/> + </array-type-def> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='128' id='bc19e735'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='22c546af' size-in-bits='1024' id='498c040b'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='4ea07cdb' size-in-bits='2048' id='4811c35e'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='de572c22' size-in-bits='1472' id='6d3c2f42'> + <subrange length='23' type-id='7359adad' id='fdd0f594'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='256' id='a133ec23'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='512' id='a13e797f'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'> + <subrange length='3' type-id='7359adad' id='56f209d2'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='64' id='3f30d495'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='73d941c6' size-in-bits='8128' id='dc70ec0b'> + <subrange length='127' type-id='7359adad' id='5ed08de5'/> + </array-type-def> + <class-decl name='stack_t' size-in-bits='192' is-struct='yes' naming-typedef-id='ac5e685f' visibility='default' id='380f9954'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ss_sp' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ss_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ss_size' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/> + <typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/> + <class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='opaque' type-id='dc70ec0b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='unw_cursor_t' type-id='384a1f22' id='1203d35c'/> + <typedef-decl name='unw_context_t' type-id='190d09ef' id='8f527367'/> + <typedef-decl name='unw_word_t' type-id='9c313c2d' id='73d941c6'/> + <typedef-decl name='unw_tdep_context_t' type-id='c4daa689' id='190d09ef'/> + <typedef-decl name='greg_t' type-id='1eb56b1e' id='de572c22'/> + <typedef-decl name='gregset_t' type-id='6d3c2f42' id='a66f139c'/> + <class-decl name='_libc_fpxreg' size-in-bits='128' is-struct='yes' visibility='default' id='22c546af'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='significand' type-id='3f30d495' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='exponent' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='80'> + <var-decl name='__glibc_reserved1' type-id='ff2536e2' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_xmmreg' size-in-bits='128' is-struct='yes' visibility='default' id='4ea07cdb'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='element' type-id='bc19e735' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_fpstate' size-in-bits='4096' is-struct='yes' visibility='default' id='81cbe5ca'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='cwd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='16'> + <var-decl name='swd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='ftw' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='fop' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='rip' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='rdp' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mxcsr' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='mxcr_mask' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_st' type-id='498c040b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_xmm' type-id='4811c35e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3328'> + <var-decl name='__glibc_reserved1' type-id='b80f3d9b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='fpregset_t' type-id='5b1ab9a8' id='6e5851bb'/> + <class-decl name='mcontext_t' size-in-bits='2048' is-struct='yes' naming-typedef-id='bacab071' visibility='default' id='76fab990'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gregs' type-id='a66f139c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='fpregs' type-id='6e5851bb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='__reserved1' type-id='a13e797f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='mcontext_t' type-id='76fab990' id='bacab071'/> + <class-decl name='ucontext_t' size-in-bits='7744' is-struct='yes' visibility='default' id='1ba65dc8'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='uc_flags' type-id='7359adad' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='uc_link' type-id='4ed508de' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='uc_stack' type-id='ac5e685f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='uc_mcontext' type-id='bacab071' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2368'> + <var-decl name='uc_sigmask' type-id='daf33c64' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3392'> + <var-decl name='__fpregs_mem' type-id='81cbe5ca' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='7488'> + <var-decl name='__ssp' type-id='a133ec23' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ucontext_t' type-id='1ba65dc8' id='c4daa689'/> + <pointer-type-def type-id='81cbe5ca' size-in-bits='64' id='5b1ab9a8'/> + <pointer-type-def type-id='1ba65dc8' size-in-bits='64' id='4ed508de'/> + <pointer-type-def type-id='8f527367' size-in-bits='64' id='2e408b96'/> + <pointer-type-def type-id='1203d35c' size-in-bits='64' id='3946e4d1'/> + <pointer-type-def type-id='190d09ef' size-in-bits='64' id='3e0601f0'/> + <pointer-type-def type-id='73d941c6' size-in-bits='64' id='42f5faab'/> + <function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='c53620f0'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='2e408b96'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_step' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_reg' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_proc_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_Ux86_64_getcontext' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3e0601f0'/> + <return type-id='95e97e5e'/> + </function-decl> + <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/condvar.c' language='LANG_C99'> + <typedef-decl name='kcondvar_t' type-id='62fab762' id='29dbc0dd'/> + <class-decl name='kmutex' size-in-bits='384' is-struct='yes' visibility='default' id='f1cacfe1'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='m_lock' type-id='7a6844eb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='m_owner' type-id='4051f5e7' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='kmutex_t' type-id='f1cacfe1' id='b9eccc8f'/> + <typedef-decl name='hrtime_t' type-id='1eb56b1e' id='cebdd548'/> + <typedef-decl name='__suseconds_t' type-id='bd54fe1a' id='5b102a54'/> + <typedef-decl name='clock_t' type-id='4d66c6d7' id='4c3a2c61'/> + <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' id='2a693ac3'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tv_usec' type-id='5b102a54' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='29dbc0dd' size-in-bits='64' id='068c4f7e'/> + <pointer-type-def type-id='b9eccc8f' size-in-bits='64' id='78830f38'/> + <pointer-type-def type-id='2a693ac3' size-in-bits='64' id='896f1b83'/> + <qualified-type-def type-id='896f1b83' restrict='yes' id='4bcf44c1'/> + <function-decl name='pthread_cond_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='gettimeofday' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4bcf44c1'/> + <parameter type-id='1b7446cd'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_init' mangled-name='cv_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_init'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='arg'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_destroy' mangled-name='cv_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_destroy'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_wait' mangled-name='cv_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_wait'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_wait_sig' mangled-name='cv_wait_sig' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_wait_sig'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_timedwait' mangled-name='cv_timedwait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_timedwait'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='4c3a2c61' name='abstime'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_timedwait_hires' mangled-name='cv_timedwait_hires' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_timedwait_hires'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='cebdd548' name='tim'/> + <parameter type-id='cebdd548' name='res'/> + <parameter type-id='95e97e5e' name='flag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_signal' mangled-name='cv_signal' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_signal'> + <parameter type-id='068c4f7e' name='cv'/> <return type-id='48b5725f'/> </function-decl> + <function-decl name='cv_broadcast' mangled-name='cv_broadcast' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_broadcast'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + <qualified-type-def type-id='eaa32e2f' restrict='yes' id='1b7446cd'/> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/cred.c' language='LANG_C99'> + <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd09'/> + <typedef-decl name='cred_t' type-id='6739dd09' id='a42f1a8f'/> + <typedef-decl name='gid_t' type-id='d94ec6d9' id='2bb2b96f'/> + <pointer-type-def type-id='a42f1a8f' size-in-bits='64' id='f89fcf80'/> + <pointer-type-def type-id='2bb2b96f' size-in-bits='64' id='b52814e6'/> + <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd09'/> + <function-decl name='crgetuid' mangled-name='crgetuid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetuid'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='354978ed'/> + </function-decl> + <function-decl name='crgetngroups' mangled-name='crgetngroups' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetngroups'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='crgetgroups' mangled-name='crgetgroups' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetgroups'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='b52814e6'/> + </function-decl> </abi-instr> <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> + <function-decl name='getexecname_impl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <return type-id='79a0948f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/kmem.c' language='LANG_C99'> + <typedef-decl name='fstrans_cookie_t' type-id='95e97e5e' id='059934c1'/> + <function-decl name='kmem_vasprintf' mangled-name='kmem_vasprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_vasprintf'> + <parameter type-id='80f4b756' name='fmt'/> + <parameter type-id='b7f2d5e6' name='adx'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='kmem_asprintf' mangled-name='kmem_asprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_asprintf'> + <parameter type-id='80f4b756' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='kmem_scnprintf' mangled-name='kmem_scnprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_scnprintf'> + <parameter type-id='266fe297' name='str'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='9d26089a' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='spl_fstrans_unmark' mangled-name='spl_fstrans_unmark' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spl_fstrans_unmark'> + <parameter type-id='059934c1' name='cookie'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='kmem_cache_reap_active' mangled-name='kmem_cache_reap_active' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_reap_active'> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/kstat.c' language='LANG_C99'> + <class-decl name='kstat' size-in-bits='448' is-struct='yes' visibility='default' id='5f5c9d88'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ks_flags' type-id='d8bf0010' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ks_data' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ks_ndata' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='ks_data_size' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='ks_update' type-id='8cf7b7e1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='ks_private' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='ks_lock' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='kstat_t' type-id='5f5c9d88' id='dd12e024'/> + <typedef-decl name='uchar_t' type-id='002ac4a6' id='d8bf0010'/> + <typedef-decl name='__loff_t' type-id='724e4de6' id='00c9d214'/> + <typedef-decl name='loff_t' type-id='00c9d214' id='69bf7bee'/> + <pointer-type-def type-id='9d5d322a' size-in-bits='64' id='bbe97414'/> + <pointer-type-def type-id='05b3c714' size-in-bits='64' id='27cc5c36'/> + <pointer-type-def type-id='7a9ace65' size-in-bits='64' id='8cf7b7e1'/> + <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/> + <pointer-type-def type-id='dd12e024' size-in-bits='64' id='46e5e463'/> + <pointer-type-def type-id='527a97c5' size-in-bits='64' id='673f2af9'/> + <function-decl name='kstat_create' mangled-name='kstat_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_create'> + <parameter type-id='80f4b756' name='module'/> + <parameter type-id='95e97e5e' name='instance'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='80f4b756' name='class'/> + <parameter type-id='d8bf0010' name='type'/> + <parameter type-id='ee1f298e' name='ndata'/> + <parameter type-id='d8bf0010' name='ks_flag'/> + <return type-id='46e5e463'/> + </function-decl> + <function-decl name='kstat_install' mangled-name='kstat_install' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_install'> + <parameter type-id='46e5e463' name='ksp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='kstat_set_raw_ops' mangled-name='kstat_set_raw_ops' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_set_raw_ops'> + <parameter type-id='46e5e463' name='ksp'/> + <parameter type-id='bbe97414' name='headers'/> + <parameter type-id='27cc5c36' name='data'/> + <parameter type-id='673f2af9' name='addr'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='9d5d322a'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='05b3c714'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='7a9ace65'> + <parameter type-id='0e87f9be'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='527a97c5'> + <parameter type-id='46e5e463'/> + <parameter type-id='69bf7bee'/> + <return type-id='eaa32e2f'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/libspl.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'> + <subrange length='65' type-id='7359adad' id='b50e2e4a'/> + </array-type-def> + <typedef-decl name='utsname_t' type-id='414a2ac6' id='5278297a'/> + <class-decl name='utsname' size-in-bits='3120' is-struct='yes' visibility='default' id='414a2ac6'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='sysname' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='520'> + <var-decl name='nodename' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='release' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1560'> + <var-decl name='version' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2080'> + <var-decl name='machine' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2600'> + <var-decl name='domainname' type-id='5ddd38d2' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='414a2ac6' size-in-bits='64' id='a6724cec'/> + <pointer-type-def type-id='5278297a' size-in-bits='64' id='5c7868ad'/> + <function-decl name='uname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6724cec'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='libspl_physmem' mangled-name='libspl_physmem' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_physmem'> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='utsname' mangled-name='utsname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utsname'> + <return type-id='5c7868ad'/> + </function-decl> + <function-decl name='libspl_init' mangled-name='libspl_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='libspl_fini' mangled-name='libspl_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_fini'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_init' mangled-name='random_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_fini' mangled-name='random_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_fini'> + <return type-id='48b5725f'/> + </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libspl/list.c' language='LANG_C99'> <typedef-decl name='list_node_t' type-id='b0b5e45e' id='b21843b2'/> @@ -1205,14 +1660,11 @@ <var-decl name='prev' type-id='b03eadb4' visibility='default'/> </data-member> </class-decl> - <class-decl name='list' size-in-bits='256' is-struct='yes' visibility='default' id='e824dae9'> + <class-decl name='list' size-in-bits='192' is-struct='yes' visibility='default' id='e824dae9'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='list_size' type-id='b59d7dce' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> <var-decl name='list_offset' type-id='b59d7dce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='128'> + <data-member access='public' layout-offset-in-bits='64'> <var-decl name='list_head' type-id='b0b5e45e' visibility='default'/> </data-member> </class-decl> @@ -1306,292 +1758,639 @@ </function-decl> </abi-instr> <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'/> - <parameter type-id='d50d396c' name='mode'/> - <return type-id='95e97e5e'/> + <typedef-decl name='wchar_t' type-id='95e97e5e' id='928221d2'/> + <qualified-type-def type-id='928221d2' const='yes' id='effb3702'/> + <pointer-type-def type-id='effb3702' size-in-bits='64' id='f077d3f8'/> + <qualified-type-def type-id='f077d3f8' restrict='yes' id='598aab80'/> + <pointer-type-def type-id='928221d2' size-in-bits='64' id='323d93c1'/> + <qualified-type-def type-id='323d93c1' restrict='yes' id='f1358bc3'/> + <function-decl name='__mbstowcs_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f1358bc3'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__wcstombs_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='598aab80'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> </function-decl> </abi-instr> - <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'/> + <abi-instr address-size='64' path='lib/libspl/mutex.c' language='LANG_C99'> + <function-decl name='pthread_mutex_trylock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_init' mangled-name='mutex_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_init'> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='cookie'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_destroy' mangled-name='mutex_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_destroy'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_enter' mangled-name='mutex_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_enter'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_enter_check_return' mangled-name='mutex_enter_check_return' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_enter_check_return'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_tryenter' mangled-name='mutex_tryenter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_tryenter'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_exit' mangled-name='mutex_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_exit'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> </function-decl> </abi-instr> <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> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> - <subrange length='1' type-id='7359adad' id='52f813b4'/> - </array-type-def> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> - <subrange length='20' type-id='7359adad' id='fdca39cf'/> - </array-type-def> - <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> - <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> - <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> - <class-decl name='extmnttab' size-in-bits='320' is-struct='yes' visibility='default' id='0c544dc0'> + <pointer-type-def type-id='56fe4a37' size-in-bits='64' id='b6b61d2f'/> + <qualified-type-def type-id='b6b61d2f' restrict='yes' id='3cad23cd'/> + <function-decl name='getmntent_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='3cad23cd'/> + <parameter type-id='266fe297'/> + <parameter type-id='95e97e5e'/> + <return type-id='b6b61d2f'/> + </function-decl> + <function-decl name='feof' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/procfs_list.c' language='LANG_C99'> + <class-decl name='procfs_list' size-in-bits='768' is-struct='yes' visibility='default' id='0f4d3b87'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='mnt_special' type-id='26a90f95' visibility='default'/> + <var-decl name='pl_private' type-id='eaa32e2f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='mnt_mountp' type-id='26a90f95' visibility='default'/> + <var-decl name='pl_lock' type-id='b9eccc8f' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='mnt_fstype' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='pl_list' type-id='0899125f' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='mnt_mntopts' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='pl_next_id' type-id='9c313c2d' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='mnt_major' type-id='3502e3ff' visibility='default'/> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='pl_node_offset' type-id='b59d7dce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='288'> - <var-decl name='mnt_minor' type-id='3502e3ff' visibility='default'/> + </class-decl> + <typedef-decl name='procfs_list_t' type-id='0f4d3b87' id='e5b5a21b'/> + <class-decl name='seq_file' is-struct='yes' visibility='default' id='f3415517'/> + <pointer-type-def type-id='be39c944' size-in-bits='64' id='b5c3ae96'/> + <pointer-type-def type-id='86932239' size-in-bits='64' id='6255c89d'/> + <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/> + <pointer-type-def type-id='e5b5a21b' size-in-bits='64' id='7f432372'/> + <pointer-type-def type-id='f3415517' size-in-bits='64' id='f8dc9def'/> + <function-decl name='seq_printf' mangled-name='seq_printf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_printf'> + <parameter type-id='f8dc9def' name='m'/> + <parameter type-id='80f4b756' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_install' mangled-name='procfs_list_install' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_install'> + <parameter type-id='80f4b756' name='module'/> + <parameter type-id='80f4b756' name='submodule'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d50d396c' name='mode'/> + <parameter type-id='7f432372' name='procfs_list'/> + <parameter type-id='0131eb61' name='show'/> + <parameter type-id='6255c89d' name='show_header'/> + <parameter type-id='b5c3ae96' name='clear'/> + <parameter type-id='b59d7dce' name='procfs_list_node_off'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_uninstall' mangled-name='procfs_list_uninstall' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_uninstall'> + <parameter type-id='7f432372' name='procfs_list'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_destroy' mangled-name='procfs_list_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_destroy'> + <parameter type-id='7f432372' name='procfs_list'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_add' mangled-name='procfs_list_add' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_add'> + <parameter type-id='7f432372' name='procfs_list'/> + <parameter type-id='eaa32e2f' name='p'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='be39c944'> + <parameter type-id='7f432372'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='86932239'> + <parameter type-id='f8dc9def'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='cf9ec29d'> + <parameter type-id='f8dc9def'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/random.c' language='LANG_C99'> + <function-decl name='random_force_pseudo' mangled-name='random_force_pseudo' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_force_pseudo'> + <parameter type-id='c19b74c3' name='onoff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_get_bytes' mangled-name='random_get_bytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_get_bytes'> + <parameter type-id='ae3e8ca6' name='ptr'/> + <parameter type-id='b59d7dce' name='len'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='random_get_pseudo_bytes' mangled-name='random_get_pseudo_bytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_get_pseudo_bytes'> + <parameter type-id='ae3e8ca6' name='ptr'/> + <parameter type-id='b59d7dce' name='len'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/rwlock.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='56' id='08f7ce77'> + <subrange length='7' type-id='7359adad' id='16fc326e'/> + </array-type-def> + <class-decl name='krwlock' size-in-bits='576' is-struct='yes' visibility='default' id='4361e3b2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='rw_lock' type-id='3f680bc6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='rw_owner' type-id='4051f5e7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='rw_readers' type-id='3502e3ff' visibility='default'/> </data-member> </class-decl> - <class-decl name='stat64' size-in-bits='1152' is-struct='yes' visibility='default' id='0bbec9cd'> + <typedef-decl name='krwlock_t' type-id='4361e3b2' id='477df69a'/> + <typedef-decl name='krw_t' type-id='95e97e5e' id='932eed5d'/> + <union-decl name='pthread_rwlock_t' size-in-bits='448' naming-typedef-id='3f680bc6' visibility='default' id='981886f6'> + <data-member access='public'> + <var-decl name='__data' type-id='afe414a4' visibility='default'/> + </data-member> + <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_rwlock_t' type-id='981886f6' id='3f680bc6'/> + <union-decl name='pthread_rwlockattr_t' size-in-bits='64' naming-typedef-id='1b1c4591' visibility='default' id='b8e57521'> + <data-member access='public'> + <var-decl name='__size' type-id='8e100159' 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_rwlockattr_t' type-id='b8e57521' id='1b1c4591'/> + <class-decl name='__pthread_rwlock_arch_t' size-in-bits='448' is-struct='yes' visibility='default' id='afe414a4'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='st_dev' type-id='35ed8932' visibility='default'/> + <var-decl name='__readers' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='__writers' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='st_ino' type-id='71288a47' visibility='default'/> + <var-decl name='__wrphase_futex' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='__writers_futex' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='st_nlink' type-id='80f0b9df' visibility='default'/> + <var-decl name='__pad3' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='__pad4' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='st_mode' type-id='e1c52942' visibility='default'/> + <var-decl name='__cur_writer' type-id='95e97e5e' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='224'> - <var-decl name='st_uid' type-id='cc5fcceb' visibility='default'/> + <var-decl name='__shared' type-id='95e97e5e' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='st_gid' type-id='d94ec6d9' visibility='default'/> + <var-decl name='__rwelision' type-id='28577a57' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='288'> - <var-decl name='__pad0' type-id='95e97e5e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='264'> + <var-decl name='__pad1' type-id='08f7ce77' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='st_rdev' type-id='35ed8932' visibility='default'/> + <var-decl name='__pad2' type-id='7359adad' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='st_size' type-id='79989e9c' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='st_blksize' type-id='d3f10a7f' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='st_blocks' type-id='4e711bf1' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='st_atim' type-id='a9c79a1f' visibility='default'/> + <var-decl name='__flags' type-id='f0981eeb' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='704'> - <var-decl name='st_mtim' type-id='a9c79a1f' visibility='default'/> + </class-decl> + <qualified-type-def type-id='1b1c4591' const='yes' id='52c85581'/> + <pointer-type-def type-id='52c85581' size-in-bits='64' id='fc5edc31'/> + <qualified-type-def type-id='fc5edc31' restrict='yes' id='295e8f33'/> + <pointer-type-def type-id='477df69a' size-in-bits='64' id='0126db61'/> + <pointer-type-def type-id='3f680bc6' size-in-bits='64' id='a6210c87'/> + <qualified-type-def type-id='a6210c87' restrict='yes' id='27210b05'/> + <qualified-type-def type-id='3502e3ff' volatile='yes' id='d0290e74'/> + <pointer-type-def type-id='d0290e74' size-in-bits='64' id='0ea19dfa'/> + <function-decl name='atomic_inc_uint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0ea19dfa'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='atomic_dec_uint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0ea19dfa'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_rwlock_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='27210b05'/> + <parameter type-id='295e8f33'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_rdlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_tryrdlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_wrlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_trywrlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rw_init' mangled-name='rw_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_init'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='arg'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_destroy' mangled-name='rw_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_destroy'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_enter' mangled-name='rw_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_enter'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='932eed5d' name='rw'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_exit' mangled-name='rw_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_exit'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_tryenter' mangled-name='rw_tryenter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_tryenter'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='932eed5d' name='rw'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rw_tryupgrade' mangled-name='rw_tryupgrade' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_tryupgrade'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/sid.c' language='LANG_C99'> + <class-decl name='ksiddomain' size-in-bits='128' is-struct='yes' visibility='default' id='b3a38f42'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='kd_ref' type-id='3502e3ff' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='832'> - <var-decl name='st_ctim' type-id='a9c79a1f' visibility='default'/> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='kd_len' type-id='3502e3ff' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='960'> - <var-decl name='__glibc_reserved' type-id='083f8d58' visibility='default'/> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='kd_name' type-id='26a90f95' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='__dev_t' type-id='7359adad' id='35ed8932'/> - <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/> - <typedef-decl name='__ino64_t' type-id='7359adad' id='71288a47'/> - <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/> - <typedef-decl name='__nlink_t' type-id='7359adad' id='80f0b9df'/> - <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> - <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> - <typedef-decl name='__time_t' type-id='bd54fe1a' id='65eda9c0'/> - <typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/> - <typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/> - <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/> - <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> - <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> - <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <typedef-decl name='ksiddomain_t' type-id='b3a38f42' id='db2eb030'/> + <pointer-type-def type-id='db2eb030' size-in-bits='64' id='3b684881'/> + <function-decl name='ksid_lookupdomain' mangled-name='ksid_lookupdomain' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksid_lookupdomain'> + <parameter type-id='80f4b756' name='dom'/> + <return type-id='3b684881'/> + </function-decl> + <function-decl name='ksiddomain_rele' mangled-name='ksiddomain_rele' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksiddomain_rele'> + <parameter type-id='3b684881' name='ksid'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/taskq.c' language='LANG_C99'> + <typedef-decl name='pri_t' type-id='a2185560' id='c497180a'/> + <typedef-decl name='taskqid_t' type-id='e475ab95' id='de0ea20e'/> + <typedef-decl name='task_func_t' type-id='c5c76c9c' id='d8481e1f'/> + <class-decl name='taskq_ent' size-in-bits='320' is-struct='yes' visibility='default' id='cfda1b05'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + <var-decl name='tqent_next' type-id='67918d75' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + <var-decl name='tqent_prev' type-id='67918d75' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + <var-decl name='tqent_func' type-id='41cce5ce' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + <var-decl name='tqent_arg' type-id='eaa32e2f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + <var-decl name='tqent_flags' type-id='e475ab95' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + </class-decl> + <typedef-decl name='taskq_ent_t' type-id='cfda1b05' id='65d297d1'/> + <class-decl name='taskq' size-in-bits='3072' is-struct='yes' visibility='default' id='1804594f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tq_name' type-id='16dc656a' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tq_lock' type-id='b9eccc8f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='640'> - <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='704'> - <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='768'> - <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='832'> - <var-decl name='_chain' type-id='dca988a5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='896'> - <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='928'> - <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + <var-decl name='tq_threadlock' type-id='477df69a' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='960'> - <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1024'> - <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='1040'> - <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='tq_dispatch_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1048'> - <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1600'> + <var-decl name='tq_wait_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1088'> - <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1984'> + <var-decl name='tq_threadlist' type-id='6e87b565' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1152'> - <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2048'> + <var-decl name='tq_flags' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1216'> - <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2080'> + <var-decl name='tq_active' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1280'> - <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2112'> + <var-decl name='tq_nthreads' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1344'> - <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2144'> + <var-decl name='tq_nalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1408'> - <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2176'> + <var-decl name='tq_minalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1472'> - <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2208'> + <var-decl name='tq_maxalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1536'> - <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2240'> + <var-decl name='tq_maxalloc_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1568'> - <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2624'> + <var-decl name='tq_maxalloc_wait' type-id='95e97e5e' visibility='default'/> </data-member> - </class-decl> - <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2688'> + <var-decl name='tq_freelist' type-id='3a4f23d4' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='tv_nsec' type-id='03085adc' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2752'> + <var-decl name='tq_task' type-id='65d297d1' visibility='default'/> </data-member> </class-decl> - <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> - <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> - <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> - <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> - <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> - <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> - <pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/> - <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/> - <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> - <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> - <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> - <function-decl name='getmntany' mangled-name='getmntany' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getmntany'> - <parameter type-id='822cd80b' name='fp'/> - <parameter type-id='9d424d31' name='mgetp'/> - <parameter type-id='9d424d31' name='mrefp'/> + <typedef-decl name='taskq_t' type-id='1804594f' id='ef507f03'/> + <typedef-decl name='kthread_t' type-id='4051f5e7' id='9bccee1a'/> + <typedef-decl name='pthread_key_t' type-id='f0981eeb' id='2de5383b'/> + <pointer-type-def type-id='9bccee1a' size-in-bits='64' id='6ae5a80d'/> + <pointer-type-def type-id='6ae5a80d' size-in-bits='64' id='6e87b565'/> + <pointer-type-def type-id='6e87b565' size-in-bits='64' id='4ea26b5d'/> + <pointer-type-def type-id='2de5383b' size-in-bits='64' id='ce04b822'/> + <pointer-type-def type-id='d8481e1f' size-in-bits='64' id='41cce5ce'/> + <pointer-type-def type-id='cfda1b05' size-in-bits='64' id='67918d75'/> + <pointer-type-def type-id='65d297d1' size-in-bits='64' id='3a4f23d4'/> + <pointer-type-def type-id='ef507f03' size-in-bits='64' id='4f8ed29a'/> + <function-decl name='zk_thread_create' mangled-name='zk_thread_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zk_thread_create'> + <parameter type-id='80f4b756'/> + <parameter type-id='b7f9d8e6'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='95e97e5e'/> + <return type-id='6ae5a80d'/> + </function-decl> + <function-decl name='pthread_key_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ce04b822'/> + <parameter type-id='b7f9d8e6'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='_sol_getmntent' mangled-name='_sol_getmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_sol_getmntent'> - <parameter type-id='822cd80b' name='fp'/> - <parameter type-id='9d424d31' name='mgetp'/> + <function-decl name='pthread_key_delete' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='getextmntent' mangled-name='getextmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getextmntent'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='394fc496' name='entry'/> - <parameter type-id='62f7a03d' name='statbuf'/> + <function-decl name='pthread_getspecific' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='pthread_setspecific' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> + <parameter type-id='eaa32e2f'/> <return type-id='95e97e5e'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='lib/libspl/os/linux/zone.c' language='LANG_C99'> - <typedef-decl name='zoneid_t' type-id='3502e3ff' 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 name='_system_taskq' mangled-name='_system_taskq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_system_taskq'> + <return type-id='4f8ed29a'/> </function-decl> - </abi-instr> - <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 name='_system_delay_taskq' mangled-name='_system_delay_taskq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_system_delay_taskq'> + <return type-id='4f8ed29a'/> </function-decl> - </abi-instr> - <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'/> - <parameter type-id='b59d7dce' name='dstsize'/> - <return type-id='b59d7dce'/> + <function-decl name='taskq_dispatch' mangled-name='taskq_dispatch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='tqflags'/> + <return type-id='de0ea20e'/> + </function-decl> + <function-decl name='taskq_dispatch_delay' mangled-name='taskq_dispatch_delay' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch_delay'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='tqflags'/> + <parameter type-id='4c3a2c61' name='expire_time'/> + <return type-id='de0ea20e'/> + </function-decl> + <function-decl name='taskq_empty_ent' mangled-name='taskq_empty_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_empty_ent'> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='taskq_init_ent' mangled-name='taskq_init_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_init_ent'> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_dispatch_ent' mangled-name='taskq_dispatch_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch_ent'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='flags'/> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_wait' mangled-name='taskq_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_wait'> + <parameter type-id='4f8ed29a' name='tq'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_wait_id' mangled-name='taskq_wait_id' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_wait_id'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='de0ea20e' name='id'/> + <return type-id='48b5725f'/> </function-decl> + <function-decl name='taskq_create' mangled-name='taskq_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_create'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='95e97e5e' name='nthreads'/> + <parameter type-id='c497180a' name='pri'/> + <parameter type-id='95e97e5e' name='minalloc'/> + <parameter type-id='95e97e5e' name='maxalloc'/> + <parameter type-id='3502e3ff' name='flags'/> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_destroy' mangled-name='taskq_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_destroy'> + <parameter type-id='4f8ed29a' name='tq'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_create_synced' mangled-name='taskq_create_synced' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_create_synced'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='95e97e5e' name='nthreads'/> + <parameter type-id='c497180a' name='pri'/> + <parameter type-id='95e97e5e' name='minalloc'/> + <parameter type-id='95e97e5e' name='maxalloc'/> + <parameter type-id='3502e3ff' name='flags'/> + <parameter type-id='4ea26b5d' name='ktpp'/> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_member' mangled-name='taskq_member' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_member'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='6ae5a80d' name='t'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='taskq_of_curthread' mangled-name='taskq_of_curthread' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_of_curthread'> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_cancel_id' mangled-name='taskq_cancel_id' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_cancel_id'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='de0ea20e' name='id'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='system_taskq_init' mangled-name='system_taskq_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='system_taskq_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='system_taskq_fini' mangled-name='system_taskq_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='system_taskq_fini'> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='c5c76c9c'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-type> </abi-instr> - <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'/> - <parameter type-id='b59d7dce' name='len'/> - <return type-id='b59d7dce'/> + <abi-instr address-size='64' path='lib/libspl/thread.c' language='LANG_C99'> + <function-decl name='pthread_attr_setstacksize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_setname_np' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4051f5e7'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='p0' mangled-name='p0' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='p0'> + <return type-id='48b5725f'/> </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libspl/timestamp.c' language='LANG_C99'> + <typedef-decl name='nl_item' type-id='95e97e5e' id='03b79a94'/> + <function-decl name='nl_langinfo' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='03b79a94'/> + <return type-id='26a90f95'/> + </function-decl> <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> + <function-decl name='get_timestamp' mangled-name='get_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_timestamp'> + <parameter type-id='3502e3ff' name='timestamp_fmt'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='95e97e5e' name='len'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='format_timestamp' mangled-name='format_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='format_timestamp'> + <parameter type-id='c9d12d66' name='t'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='95e97e5e' name='len'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/tunables.c' language='LANG_C99'> + <typedef-decl name='intmax_t' type-id='5b475db0' id='e104d842'/> + <typedef-decl name='uintmax_t' type-id='04d82f4b' id='f8b828c9'/> + <typedef-decl name='__intmax_t' type-id='bd54fe1a' id='5b475db0'/> + <typedef-decl name='__uintmax_t' type-id='7359adad' id='04d82f4b'/> + <function-decl name='strtoimax' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='e104d842'/> + </function-decl> + <function-decl name='strtoumax' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='f8b828c9'/> + </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libtpool/thread_pool.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='49ef3ffd' size-in-bits='1024' id='a14403f5'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> <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> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'> - <subrange length='56' type-id='7359adad' id='f8137894'/> - </array-type-def> - <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/> <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'> <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'> + <union-decl name='__atomic_wide_counter' size-in-bits='64' naming-typedef-id='f3b40860' visibility='default' id='613ce450'> <data-member access='public'> - <var-decl name='__size' type-id='6093ff7c' visibility='default'/> + <var-decl name='__value64' type-id='3a47d82b' visibility='default'/> </data-member> <data-member access='public'> - <var-decl name='__align' type-id='bd54fe1a' visibility='default'/> + <var-decl name='__value32' type-id='e7f43f72' visibility='default'/> </data-member> </union-decl> - <typedef-decl name='pthread_attr_t' type-id='b63afacd' id='7d8569fd'/> + <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> + <typedef-decl name='__atomic_wide_counter' type-id='613ce450' id='f3b40860'/> + <typedef-decl name='__cpu_mask' type-id='7359adad' id='49ef3ffd'/> + <class-decl name='cpu_set_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='8037c762' visibility='default' id='1f20d231'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__bits' type-id='a14403f5' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='cpu_set_t' type-id='1f20d231' id='8037c762'/> + <union-decl name='pthread_condattr_t' size-in-bits='32' naming-typedef-id='836265dd' visibility='default' id='33dd3aad'> + <data-member access='public'> + <var-decl name='__size' type-id='8e0573fd' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='95e97e5e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_condattr_t' type-id='33dd3aad' id='836265dd'/> <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'/> @@ -1606,10 +2405,10 @@ <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'/> + <var-decl name='__wseq' type-id='f3b40860' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='' type-id='ac5ab596' visibility='default'/> + <var-decl name='__g1_start' type-id='f3b40860' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> <var-decl name='__g_refs' type-id='0d532ec1' visibility='default'/> @@ -1627,30 +2426,11 @@ <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'> + <class-decl name='sched_param' size-in-bits='32' is-struct='yes' visibility='default' id='0897719a'> <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'/> + <var-decl name='sched_priority' type-id='95e97e5e' 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'> @@ -1672,6 +2452,181 @@ <var-decl name='tpa_tid' type-id='4051f5e7' visibility='default'/> </data-member> </class-decl> + <qualified-type-def type-id='8037c762' const='yes' id='f50ea9b2'/> + <pointer-type-def type-id='f50ea9b2' size-in-bits='64' id='5e14fa48'/> + <qualified-type-def type-id='836265dd' const='yes' id='7d24c58d'/> + <pointer-type-def type-id='7d24c58d' size-in-bits='64' id='a7e325e5'/> + <qualified-type-def type-id='a7e325e5' restrict='yes' id='4c428e67'/> + <qualified-type-def type-id='0897719a' const='yes' id='c4a7b189'/> + <pointer-type-def type-id='c4a7b189' size-in-bits='64' id='36fca399'/> + <qualified-type-def type-id='36fca399' restrict='yes' id='37e4897b'/> + <qualified-type-def type-id='e05e8614' restrict='yes' id='0be2e71c'/> + <pointer-type-def type-id='8037c762' size-in-bits='64' id='d74a6869'/> + <qualified-type-def type-id='7292109c' restrict='yes' id='6942f6a4'/> + <qualified-type-def type-id='7347a39e' restrict='yes' id='578ba182'/> + <pointer-type-def type-id='62fab762' size-in-bits='64' id='db285b03'/> + <qualified-type-def type-id='db285b03' restrict='yes' id='2a468b41'/> + <qualified-type-def type-id='18c91f9e' restrict='yes' id='6e745582'/> + <pointer-type-def type-id='0897719a' size-in-bits='64' id='23cbcb08'/> + <qualified-type-def type-id='23cbcb08' restrict='yes' id='b09b2050'/> + <pointer-type-def type-id='6fcda10e' size-in-bits='64' id='ad33e5e7'/> + <pointer-type-def type-id='66a0afc9' size-in-bits='64' id='f32b30e4'/> + <qualified-type-def type-id='63e171df' restrict='yes' id='9e7a3a7d'/> + <function-decl name='pthread_self' visibility='default' binding='global' size-in-bits='64'> + <return type-id='4051f5e7'/> + </function-decl> + <function-decl name='pthread_attr_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getdetachstate' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='540db505'/> + <parameter type-id='7292109c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setdetachstate' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getguardsize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='540db505'/> + <parameter type-id='78c01427'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setguardsize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getschedparam' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e1815e87'/> + <parameter type-id='b09b2050'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setschedparam' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='578ba182'/> + <parameter type-id='37e4897b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getschedpolicy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e1815e87'/> + <parameter type-id='6942f6a4'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setschedpolicy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getinheritsched' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e1815e87'/> + <parameter type-id='6942f6a4'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setinheritsched' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getscope' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e1815e87'/> + <parameter type-id='6942f6a4'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setscope' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getstack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e1815e87'/> + <parameter type-id='9e7a3a7d'/> + <parameter type-id='d19b2c25'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setstack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setaffinity_np' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='5e14fa48'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_getaffinity_np' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='540db505'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='d74a6869'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_setcancelstate' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='7292109c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_setcanceltype' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='7292109c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='4c428e67'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_signal' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_broadcast' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_wait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='6e745582'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_timedwait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='6e745582'/> + <parameter type-id='0be2e71c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__sysconf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='tpool_abandon' mangled-name='tpool_abandon' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_abandon'> + <parameter type-id='9cf59a50' name='tpool'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='tpool_suspend' mangled-name='tpool_suspend' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_suspend'> + <parameter type-id='9cf59a50' name='tpool'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='tpool_suspended' mangled-name='tpool_suspended' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_suspended'> + <parameter type-id='9cf59a50' name='tpool'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='tpool_resume' mangled-name='tpool_resume' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_resume'> + <parameter type-id='9cf59a50' name='tpool'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='tpool_member' mangled-name='tpool_member' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_member'> + <parameter type-id='9cf59a50' name='tpool'/> + <return type-id='95e97e5e'/> + </function-decl> + <pointer-type-def type-id='b1bbf10d' size-in-bits='64' id='9cf59a50'/> + <typedef-decl name='tpool_t' type-id='88d1b7f9' id='b1bbf10d'/> <class-decl name='tpool' size-in-bits='2496' is-struct='yes' visibility='default' id='88d1b7f9'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='tp_forw' type-id='9cf59a50' visibility='default'/> @@ -1725,61 +2680,8 @@ <var-decl name='tp_idle' type-id='95e97e5e' visibility='default'/> </data-member> </class-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'/> - <pointer-type-def type-id='b1bbf10d' size-in-bits='64' id='9cf59a50'/> - <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/> - <function-decl name='tpool_create' mangled-name='tpool_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_create'> - <parameter type-id='3502e3ff' name='min_threads'/> - <parameter type-id='3502e3ff' name='max_threads'/> - <parameter type-id='3502e3ff' name='linger'/> - <parameter type-id='7347a39e' name='attr'/> - <return type-id='9cf59a50'/> - </function-decl> - <function-decl name='tpool_dispatch' mangled-name='tpool_dispatch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_dispatch'> - <parameter type-id='9cf59a50' name='tpool'/> - <parameter type-id='b7f9d8e6' name='func'/> - <parameter type-id='eaa32e2f' name='arg'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='tpool_destroy' mangled-name='tpool_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_destroy'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='tpool_abandon' mangled-name='tpool_abandon' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_abandon'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='tpool_wait' mangled-name='tpool_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_wait'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='tpool_suspend' mangled-name='tpool_suspend' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_suspend'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='tpool_suspended' mangled-name='tpool_suspended' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_suspended'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='tpool_resume' mangled-name='tpool_resume' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_resume'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='tpool_member' mangled-name='tpool_member' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_member'> - <parameter type-id='9cf59a50' name='tpool'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-type size-in-bits='64' id='c5c76c9c'> - <parameter type-id='eaa32e2f'/> - <return type-id='48b5725f'/> - </function-type> </abi-instr> <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='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> @@ -1796,20 +2698,36 @@ <class-decl name='re_dfa_t' is-struct='yes' visibility='default' is-declaration-only='yes' id='b48d2441'/> <class-decl name='uu_avl' is-struct='yes' visibility='default' is-declaration-only='yes' id='4af029d1'/> <class-decl name='uu_avl_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='12a530a8'/> + <class-decl name='uu_avl_walk' is-struct='yes' visibility='default' is-declaration-only='yes' id='e70a39e3'/> + <array-type-def dimensions='1' type-id='80f4b756' size-in-bits='256' id='71dc54ac'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> <type-decl name='int' size-in-bits='32' id='95e97e5e'/> <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/> <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/> <type-decl name='short int' size-in-bits='16' id='a2185560'/> + <array-type-def dimensions='1' type-id='e475ab95' size-in-bits='192' id='0ce65a8b'> + <subrange length='3' type-id='7359adad' id='56f209d2'/> + </array-type-def> <type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/> <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/> <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/> <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> + <type-decl name='void' id='48b5725f'/> + <typedef-decl name='uu_compare_fn_t' type-id='add6e811' id='40f93560'/> <typedef-decl name='uu_avl_pool_t' type-id='12a530a8' id='7f84e390'/> <typedef-decl name='uu_avl_t' type-id='4af029d1' id='bb7f0973'/> + <class-decl name='uu_avl_node' size-in-bits='192' is-struct='yes' visibility='default' id='f65f4326'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='uan_opaque' type-id='0ce65a8b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='uu_avl_node_t' type-id='f65f4326' id='73a65116'/> + <typedef-decl name='uu_avl_walk_t' type-id='e70a39e3' id='edd8457b'/> + <typedef-decl name='uu_avl_index_t' type-id='e475ab95' id='5d7f5fc8'/> <typedef-decl name='zfs_handle_t' type-id='f6ee4445' id='775509eb'/> <typedef-decl name='zpool_handle_t' type-id='67002a8a' id='b1efc708'/> <typedef-decl name='libzfs_handle_t' type-id='c8a9d9d8' id='95942d0c'/> - <typedef-decl name='zpool_iter_f' type-id='3aebb66f' id='fa476e62'/> <typedef-decl name='zfs_iter_f' type-id='5571cde4' id='d8e49ab9'/> <typedef-decl name='avl_tree_t' type-id='b351119f' id='f20fbd51'/> <class-decl name='avl_node' size-in-bits='192' is-struct='yes' visibility='default' id='428b67b3'> @@ -1862,6 +2780,9 @@ <data-member access='public' layout-offset-in-bits='248'> <var-decl name='dds_origin' type-id='d1617432' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='2296'> + <var-decl name='dds_flags' type-id='b96825af' visibility='default'/> + </data-member> </class-decl> <typedef-decl name='dmu_objset_stats_t' type-id='098f0221' id='b2c14f17'/> <enum-decl name='zfs_type_t' naming-typedef-id='2e45de5d' id='5d8f7321'> @@ -1886,6 +2807,130 @@ <enumerator name='DMU_OST_NUMTYPES' value='6'/> </enum-decl> <typedef-decl name='dmu_objset_type_t' type-id='6b1b19f9' id='230f1e16'/> + <enum-decl name='zfs_prop_t' naming-typedef-id='58603c44' id='4b000d60'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPROP_CONT' value='-2'/> + <enumerator name='ZPROP_INVAL' value='-1'/> + <enumerator name='ZPROP_USERPROP' value='-1'/> + <enumerator name='ZFS_PROP_TYPE' value='0'/> + <enumerator name='ZFS_PROP_CREATION' value='1'/> + <enumerator name='ZFS_PROP_USED' value='2'/> + <enumerator name='ZFS_PROP_AVAILABLE' value='3'/> + <enumerator name='ZFS_PROP_REFERENCED' value='4'/> + <enumerator name='ZFS_PROP_COMPRESSRATIO' value='5'/> + <enumerator name='ZFS_PROP_MOUNTED' value='6'/> + <enumerator name='ZFS_PROP_ORIGIN' value='7'/> + <enumerator name='ZFS_PROP_QUOTA' value='8'/> + <enumerator name='ZFS_PROP_RESERVATION' value='9'/> + <enumerator name='ZFS_PROP_VOLSIZE' value='10'/> + <enumerator name='ZFS_PROP_VOLBLOCKSIZE' value='11'/> + <enumerator name='ZFS_PROP_RECORDSIZE' value='12'/> + <enumerator name='ZFS_PROP_MOUNTPOINT' value='13'/> + <enumerator name='ZFS_PROP_SHARENFS' value='14'/> + <enumerator name='ZFS_PROP_CHECKSUM' value='15'/> + <enumerator name='ZFS_PROP_COMPRESSION' value='16'/> + <enumerator name='ZFS_PROP_ATIME' value='17'/> + <enumerator name='ZFS_PROP_DEVICES' value='18'/> + <enumerator name='ZFS_PROP_EXEC' value='19'/> + <enumerator name='ZFS_PROP_SETUID' value='20'/> + <enumerator name='ZFS_PROP_READONLY' value='21'/> + <enumerator name='ZFS_PROP_ZONED' value='22'/> + <enumerator name='ZFS_PROP_SNAPDIR' value='23'/> + <enumerator name='ZFS_PROP_ACLMODE' value='24'/> + <enumerator name='ZFS_PROP_ACLINHERIT' value='25'/> + <enumerator name='ZFS_PROP_CREATETXG' value='26'/> + <enumerator name='ZFS_PROP_NAME' value='27'/> + <enumerator name='ZFS_PROP_CANMOUNT' value='28'/> + <enumerator name='ZFS_PROP_ISCSIOPTIONS' value='29'/> + <enumerator name='ZFS_PROP_XATTR' value='30'/> + <enumerator name='ZFS_PROP_NUMCLONES' value='31'/> + <enumerator name='ZFS_PROP_COPIES' value='32'/> + <enumerator name='ZFS_PROP_VERSION' value='33'/> + <enumerator name='ZFS_PROP_UTF8ONLY' value='34'/> + <enumerator name='ZFS_PROP_NORMALIZE' value='35'/> + <enumerator name='ZFS_PROP_CASE' value='36'/> + <enumerator name='ZFS_PROP_VSCAN' value='37'/> + <enumerator name='ZFS_PROP_NBMAND' value='38'/> + <enumerator name='ZFS_PROP_SHARESMB' value='39'/> + <enumerator name='ZFS_PROP_REFQUOTA' value='40'/> + <enumerator name='ZFS_PROP_REFRESERVATION' value='41'/> + <enumerator name='ZFS_PROP_GUID' value='42'/> + <enumerator name='ZFS_PROP_PRIMARYCACHE' value='43'/> + <enumerator name='ZFS_PROP_SECONDARYCACHE' value='44'/> + <enumerator name='ZFS_PROP_USEDSNAP' value='45'/> + <enumerator name='ZFS_PROP_USEDDS' value='46'/> + <enumerator name='ZFS_PROP_USEDCHILD' value='47'/> + <enumerator name='ZFS_PROP_USEDREFRESERV' value='48'/> + <enumerator name='ZFS_PROP_USERACCOUNTING' value='49'/> + <enumerator name='ZFS_PROP_STMF_SHAREINFO' value='50'/> + <enumerator name='ZFS_PROP_DEFER_DESTROY' value='51'/> + <enumerator name='ZFS_PROP_USERREFS' value='52'/> + <enumerator name='ZFS_PROP_LOGBIAS' value='53'/> + <enumerator name='ZFS_PROP_UNIQUE' value='54'/> + <enumerator name='ZFS_PROP_OBJSETID' value='55'/> + <enumerator name='ZFS_PROP_DEDUP' value='56'/> + <enumerator name='ZFS_PROP_MLSLABEL' value='57'/> + <enumerator name='ZFS_PROP_SYNC' value='58'/> + <enumerator name='ZFS_PROP_DNODESIZE' value='59'/> + <enumerator name='ZFS_PROP_REFRATIO' value='60'/> + <enumerator name='ZFS_PROP_WRITTEN' value='61'/> + <enumerator name='ZFS_PROP_CLONES' value='62'/> + <enumerator name='ZFS_PROP_LOGICALUSED' value='63'/> + <enumerator name='ZFS_PROP_LOGICALREFERENCED' value='64'/> + <enumerator name='ZFS_PROP_INCONSISTENT' value='65'/> + <enumerator name='ZFS_PROP_VOLMODE' value='66'/> + <enumerator name='ZFS_PROP_FILESYSTEM_LIMIT' value='67'/> + <enumerator name='ZFS_PROP_SNAPSHOT_LIMIT' value='68'/> + <enumerator name='ZFS_PROP_FILESYSTEM_COUNT' value='69'/> + <enumerator name='ZFS_PROP_SNAPSHOT_COUNT' value='70'/> + <enumerator name='ZFS_PROP_SNAPDEV' value='71'/> + <enumerator name='ZFS_PROP_ACLTYPE' value='72'/> + <enumerator name='ZFS_PROP_SELINUX_CONTEXT' value='73'/> + <enumerator name='ZFS_PROP_SELINUX_FSCONTEXT' value='74'/> + <enumerator name='ZFS_PROP_SELINUX_DEFCONTEXT' value='75'/> + <enumerator name='ZFS_PROP_SELINUX_ROOTCONTEXT' value='76'/> + <enumerator name='ZFS_PROP_RELATIME' value='77'/> + <enumerator name='ZFS_PROP_REDUNDANT_METADATA' value='78'/> + <enumerator name='ZFS_PROP_OVERLAY' value='79'/> + <enumerator name='ZFS_PROP_PREV_SNAP' value='80'/> + <enumerator name='ZFS_PROP_RECEIVE_RESUME_TOKEN' value='81'/> + <enumerator name='ZFS_PROP_ENCRYPTION' value='82'/> + <enumerator name='ZFS_PROP_KEYLOCATION' value='83'/> + <enumerator name='ZFS_PROP_KEYFORMAT' value='84'/> + <enumerator name='ZFS_PROP_PBKDF2_SALT' value='85'/> + <enumerator name='ZFS_PROP_PBKDF2_ITERS' value='86'/> + <enumerator name='ZFS_PROP_ENCRYPTION_ROOT' value='87'/> + <enumerator name='ZFS_PROP_KEY_GUID' value='88'/> + <enumerator name='ZFS_PROP_KEYSTATUS' value='89'/> + <enumerator name='ZFS_PROP_REMAPTXG' value='90'/> + <enumerator name='ZFS_PROP_SPECIAL_SMALL_BLOCKS' value='91'/> + <enumerator name='ZFS_PROP_IVSET_GUID' value='92'/> + <enumerator name='ZFS_PROP_REDACTED' value='93'/> + <enumerator name='ZFS_PROP_REDACT_SNAPS' value='94'/> + <enumerator name='ZFS_PROP_SNAPSHOTS_CHANGED' value='95'/> + <enumerator name='ZFS_PROP_PREFETCH' value='96'/> + <enumerator name='ZFS_PROP_VOLTHREADING' value='97'/> + <enumerator name='ZFS_PROP_DIRECT' value='98'/> + <enumerator name='ZFS_PROP_LONGNAME' value='99'/> + <enumerator name='ZFS_PROP_DEFAULTUSERQUOTA' value='100'/> + <enumerator name='ZFS_PROP_DEFAULTGROUPQUOTA' value='101'/> + <enumerator name='ZFS_PROP_DEFAULTPROJECTQUOTA' value='102'/> + <enumerator name='ZFS_PROP_DEFAULTUSEROBJQUOTA' value='103'/> + <enumerator name='ZFS_PROP_DEFAULTGROUPOBJQUOTA' value='104'/> + <enumerator name='ZFS_PROP_DEFAULTPROJECTOBJQUOTA' value='105'/> + <enumerator name='ZFS_NUM_PROPS' value='106'/> + </enum-decl> + <typedef-decl name='zfs_prop_t' type-id='4b000d60' id='58603c44'/> + <enum-decl name='zprop_source_t' naming-typedef-id='a2256d42' id='5903f80e'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPROP_SRC_NONE' value='1'/> + <enumerator name='ZPROP_SRC_DEFAULT' value='2'/> + <enumerator name='ZPROP_SRC_TEMPORARY' value='4'/> + <enumerator name='ZPROP_SRC_LOCAL' value='8'/> + <enumerator name='ZPROP_SRC_INHERITED' value='16'/> + <enumerator name='ZPROP_SRC_RECEIVED' value='32'/> + </enum-decl> + <typedef-decl name='zprop_source_t' type-id='5903f80e' id='a2256d42'/> <class-decl name='nvlist' size-in-bits='192' is-struct='yes' visibility='default' id='ac266fd9'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='nvl_version' type-id='3ff5601b' visibility='default'/> @@ -1904,15 +2949,23 @@ </data-member> </class-decl> <typedef-decl name='nvlist_t' type-id='ac266fd9' id='8e8d4be3'/> + <enum-decl name='sa_protocol' id='9155d4b5'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='SA_PROTOCOL_NFS' value='0'/> + <enumerator name='SA_PROTOCOL_SMB' value='1'/> + <enumerator name='SA_PROTOCOL_COUNT' value='2'/> + </enum-decl> <enum-decl name='boolean_t' naming-typedef-id='c19b74c3' id='f58c8277'> <underlying-type type-id='9cac1fee'/> <enumerator name='B_FALSE' value='0'/> <enumerator name='B_TRUE' value='1'/> </enum-decl> <typedef-decl name='boolean_t' type-id='f58c8277' id='c19b74c3'/> + <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> <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='zoneid_t' type-id='3502e3ff' id='4da03624'/> <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'> @@ -2114,7 +3167,7 @@ <var-decl name='zfs_props_table' type-id='ae3e8ca6' visibility='default'/> </data-member> </class-decl> - <class-decl name='zpool_handle' size-in-bits='2560' is-struct='yes' visibility='default' id='67002a8a'> + <class-decl name='zpool_handle' size-in-bits='2816' is-struct='yes' visibility='default' id='67002a8a'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='zpool_hdl' type-id='b0382bb3' visibility='default'/> </data-member> @@ -2127,45 +3180,713 @@ <data-member access='public' layout-offset-in-bits='2176'> <var-decl name='zpool_state' type-id='95e97e5e' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='2208'> + <var-decl name='zpool_n_propnames' type-id='f0981eeb' visibility='default'/> + </data-member> <data-member access='public' layout-offset-in-bits='2240'> + <var-decl name='zpool_propnames' type-id='71dc54ac' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2496'> <var-decl name='zpool_config_size' type-id='b59d7dce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='2304'> + <data-member access='public' layout-offset-in-bits='2560'> <var-decl name='zpool_config' type-id='5ce45b60' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='2368'> + <data-member access='public' layout-offset-in-bits='2624'> <var-decl name='zpool_old_config' type-id='5ce45b60' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='2432'> + <data-member access='public' layout-offset-in-bits='2688'> <var-decl name='zpool_props' type-id='5ce45b60' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='2496'> + <data-member access='public' layout-offset-in-bits='2752'> <var-decl name='zpool_start_block' type-id='804dc465' visibility='default'/> </data-member> </class-decl> <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'/> <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/> + <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/> <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/> + <qualified-type-def type-id='9155d4b5' const='yes' id='9f2c1699'/> + <pointer-type-def type-id='9f2c1699' size-in-bits='64' id='4567bbc9'/> + <qualified-type-def type-id='775509eb' const='yes' id='5eadf2db'/> + <pointer-type-def type-id='5eadf2db' size-in-bits='64' id='fcd57163'/> <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/> <pointer-type-def type-id='cb9628fa' size-in-bits='64' id='5571cde4'/> - <pointer-type-def type-id='2bce87e3' size-in-bits='64' id='3aebb66f'/> <pointer-type-def type-id='95942d0c' size-in-bits='64' id='b0382bb3'/> <pointer-type-def type-id='8e8d4be3' size-in-bits='64' id='5ce45b60'/> - <pointer-type-def type-id='5ce45b60' size-in-bits='64' id='857bb57e'/> <pointer-type-def type-id='b48d2441' size-in-bits='64' id='33976309'/> <pointer-type-def type-id='b96825af' size-in-bits='64' id='ae3e8ca6'/> <pointer-type-def type-id='002ac4a6' size-in-bits='64' id='cf536864'/> + <pointer-type-def type-id='5d7f5fc8' size-in-bits='64' id='813a2225'/> + <pointer-type-def type-id='73a65116' size-in-bits='64' id='2dc35b9d'/> <pointer-type-def type-id='7f84e390' size-in-bits='64' id='de82c773'/> <pointer-type-def type-id='bb7f0973' size-in-bits='64' id='a5c21a38'/> + <pointer-type-def type-id='edd8457b' size-in-bits='64' id='5842d146'/> + <pointer-type-def type-id='40f93560' size-in-bits='64' id='d502b39f'/> <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/> <pointer-type-def type-id='775509eb' size-in-bits='64' id='9200a744'/> <pointer-type-def type-id='b1efc708' size-in-bits='64' id='4c81de99'/> + <pointer-type-def type-id='a2256d42' size-in-bits='64' id='debc6aa3'/> <class-decl name='re_dfa_t' is-struct='yes' visibility='default' is-declaration-only='yes' id='b48d2441'/> <class-decl name='uu_avl' is-struct='yes' visibility='default' is-declaration-only='yes' id='4af029d1'/> <class-decl name='uu_avl_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='12a530a8'/> + <class-decl name='uu_avl_walk' is-struct='yes' visibility='default' is-declaration-only='yes' id='e70a39e3'/> + <function-decl name='uu_avl_pool_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='d502b39f'/> + <parameter type-id='8f92235e'/> + <return type-id='de82c773'/> + </function-decl> + <function-decl name='uu_avl_pool_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='de82c773'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='uu_avl_node_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='2dc35b9d'/> + <parameter type-id='de82c773'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='uu_avl_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='de82c773'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='8f92235e'/> + <return type-id='a5c21a38'/> + </function-decl> + <function-decl name='uu_avl_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='uu_avl_last' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='uu_avl_walk_start' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <parameter type-id='8f92235e'/> + <return type-id='5842d146'/> + </function-decl> + <function-decl name='uu_avl_walk_next' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5842d146'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='uu_avl_walk_end' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5842d146'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='uu_avl_find' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='813a2225'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='uu_avl_insert' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='5d7f5fc8'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='uu_avl_remove' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_get_handle' mangled-name='zfs_get_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_handle'> + <parameter type-id='9200a744'/> + <return type-id='b0382bb3'/> + </function-decl> + <function-decl name='zfs_open' mangled-name='zfs_open' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_open'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='9200a744'/> + </function-decl> + <function-decl name='zfs_close' mangled-name='zfs_close' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_close'> + <parameter type-id='9200a744'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_get_name' mangled-name='zfs_get_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_name'> + <parameter type-id='fcd57163'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_prop_get' mangled-name='zfs_prop_get' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get'> + <parameter type-id='9200a744'/> + <parameter type-id='58603c44'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='debc6aa3'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='c19b74c3'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_prop_get_int' mangled-name='zfs_prop_get_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_int'> + <parameter type-id='9200a744'/> + <parameter type-id='58603c44'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zfs_iter_children_v2' mangled-name='zfs_iter_children_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_children_v2'> + <parameter type-id='9200a744'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='d8e49ab9'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_iter_dependents_v2' mangled-name='zfs_iter_dependents_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_dependents_v2'> + <parameter type-id='9200a744'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='d8e49ab9'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_iter_filesystems_v2' mangled-name='zfs_iter_filesystems_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_filesystems_v2'> + <parameter type-id='9200a744'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='d8e49ab9'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_iter_mounted' mangled-name='zfs_iter_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_mounted'> + <parameter type-id='9200a744'/> + <parameter type-id='d8e49ab9'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_refresh_properties' mangled-name='zfs_refresh_properties' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_refresh_properties'> + <parameter type-id='9200a744'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_is_mounted' mangled-name='zfs_is_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_is_mounted'> + <parameter type-id='9200a744'/> + <parameter type-id='9b23c9ad'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_mount' mangled-name='zfs_mount' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mount'> + <parameter type-id='9200a744'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_unmount' mangled-name='zfs_unmount' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_unmount'> + <parameter type-id='9200a744'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_is_shared' mangled-name='zfs_is_shared' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_is_shared'> + <parameter type-id='9200a744'/> + <parameter type-id='9b23c9ad'/> + <parameter type-id='4567bbc9'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_share' mangled-name='zfs_share' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_share'> + <parameter type-id='9200a744'/> + <parameter type-id='4567bbc9'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_unshare' mangled-name='zfs_unshare' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_unshare'> + <parameter type-id='9200a744'/> + <parameter type-id='80f4b756'/> + <parameter type-id='4567bbc9'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_commit_shares' mangled-name='zfs_commit_shares' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_commit_shares'> + <parameter type-id='4567bbc9'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='sa_commit_shares' mangled-name='sa_commit_shares' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_commit_shares'> + <parameter type-id='9155d4b5'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strlcat' mangled-name='strlcat' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcat'> + <parameter type-id='26a90f95'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='strlcpy' mangled-name='strlcpy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'> + <parameter type-id='26a90f95'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <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> + <function-decl name='free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strcmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strncmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='zfs_error' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_alloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='remove_mountpoint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9200a744'/> + <return type-id='48b5725f'/> + </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='add6e811'> + <parameter type-id='eaa32e2f'/> + <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'/> + <return type-id='95e97e5e'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libzfs/libzfs_config.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2816' id='514368c7'> + <subrange length='352' type-id='7359adad' id='b715cd6f'/> + </array-type-def> + <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> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='65536' id='163f6aa5'> + <subrange length='8192' type-id='7359adad' id='c88f397d'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'> + <subrange length='infinite' type-id='7359adad' id='031f2035'/> + </array-type-def> + <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='128' id='c1c22e6c'> + <subrange length='2' type-id='7359adad' id='52efc4ef'/> + </array-type-def> + <array-type-def dimensions='1' type-id='b96825af' size-in-bits='24' id='d3490169'> + <subrange length='3' type-id='7359adad' id='56f209d2'/> + </array-type-def> + <type-decl name='variadic parameter type' id='2c1145c5'/> + <typedef-decl name='zpool_iter_f' type-id='3aebb66f' id='fa476e62'/> + <enum-decl name='data_type_t' naming-typedef-id='8d0687d2' id='aeeae136'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='DATA_TYPE_DONTCARE' value='-1'/> + <enumerator name='DATA_TYPE_UNKNOWN' value='0'/> + <enumerator name='DATA_TYPE_BOOLEAN' value='1'/> + <enumerator name='DATA_TYPE_BYTE' value='2'/> + <enumerator name='DATA_TYPE_INT16' value='3'/> + <enumerator name='DATA_TYPE_UINT16' value='4'/> + <enumerator name='DATA_TYPE_INT32' value='5'/> + <enumerator name='DATA_TYPE_UINT32' value='6'/> + <enumerator name='DATA_TYPE_INT64' value='7'/> + <enumerator name='DATA_TYPE_UINT64' value='8'/> + <enumerator name='DATA_TYPE_STRING' value='9'/> + <enumerator name='DATA_TYPE_BYTE_ARRAY' value='10'/> + <enumerator name='DATA_TYPE_INT16_ARRAY' value='11'/> + <enumerator name='DATA_TYPE_UINT16_ARRAY' value='12'/> + <enumerator name='DATA_TYPE_INT32_ARRAY' value='13'/> + <enumerator name='DATA_TYPE_UINT32_ARRAY' value='14'/> + <enumerator name='DATA_TYPE_INT64_ARRAY' value='15'/> + <enumerator name='DATA_TYPE_UINT64_ARRAY' value='16'/> + <enumerator name='DATA_TYPE_STRING_ARRAY' value='17'/> + <enumerator name='DATA_TYPE_HRTIME' value='18'/> + <enumerator name='DATA_TYPE_NVLIST' value='19'/> + <enumerator name='DATA_TYPE_NVLIST_ARRAY' value='20'/> + <enumerator name='DATA_TYPE_BOOLEAN_VALUE' value='21'/> + <enumerator name='DATA_TYPE_INT8' value='22'/> + <enumerator name='DATA_TYPE_UINT8' value='23'/> + <enumerator name='DATA_TYPE_BOOLEAN_ARRAY' value='24'/> + <enumerator name='DATA_TYPE_INT8_ARRAY' value='25'/> + <enumerator name='DATA_TYPE_UINT8_ARRAY' value='26'/> + <enumerator name='DATA_TYPE_DOUBLE' value='27'/> + </enum-decl> + <typedef-decl name='data_type_t' type-id='aeeae136' id='8d0687d2'/> + <class-decl name='nvpair' size-in-bits='128' is-struct='yes' visibility='default' id='1c34e459'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='nvp_size' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='nvp_name_sz' type-id='23bd8cb5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='nvp_reserve' type-id='23bd8cb5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='nvp_value_elem' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='nvp_type' type-id='8d0687d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='nvp_name' type-id='e84913bd' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='nvpair_t' type-id='1c34e459' id='57928edf'/> + <class-decl name='drr_begin' size-in-bits='2432' is-struct='yes' visibility='default' id='09fcdc01'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_magic' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_versioninfo' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_creation_time' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_type' type-id='230f1e16' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='drr_flags' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='drr_fromguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='drr_toname' type-id='d1617432' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='zinject_record' size-in-bits='2944' is-struct='yes' visibility='default' id='3216f820'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zi_objset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='zi_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='zi_start' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='zi_end' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='zi_guid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='zi_level' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='352'> + <var-decl name='zi_error' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='zi_type' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='zi_freq' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='480'> + <var-decl name='zi_failfast' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='zi_func' type-id='d1617432' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2560'> + <var-decl name='zi_iotype' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2592'> + <var-decl name='zi_duration' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2624'> + <var-decl name='zi_timer' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2688'> + <var-decl name='zi_nlanes' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2752'> + <var-decl name='zi_cmd' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2784'> + <var-decl name='zi_dvas' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2816'> + <var-decl name='zi_match_count' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2880'> + <var-decl name='zi_inject_count' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zinject_record_t' type-id='3216f820' id='a4301ca6'/> + <class-decl name='zfs_share' size-in-bits='256' is-struct='yes' visibility='default' id='feb6f2da'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='z_exportdata' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='z_sharedata' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='z_sharetype' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='z_sharemax' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_share_t' type-id='feb6f2da' id='ee5cec36'/> + <class-decl name='zfs_cmd' size-in-bits='109952' is-struct='yes' visibility='default' id='3522cd69'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zc_name' type-id='d16c6df4' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32768'> + <var-decl name='zc_nvlist_src' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32832'> + <var-decl name='zc_nvlist_src_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32896'> + <var-decl name='zc_nvlist_dst' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32960'> + <var-decl name='zc_nvlist_dst_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33024'> + <var-decl name='zc_nvlist_dst_filled' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33056'> + <var-decl name='zc_pad2' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33088'> + <var-decl name='zc_history' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33152'> + <var-decl name='zc_value' type-id='163f6aa5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='98688'> + <var-decl name='zc_string' type-id='d1617432' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100736'> + <var-decl name='zc_guid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100800'> + <var-decl name='zc_nvlist_conf' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100864'> + <var-decl name='zc_nvlist_conf_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100928'> + <var-decl name='zc_cookie' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100992'> + <var-decl name='zc_objset_type' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101056'> + <var-decl name='zc_perm_action' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101120'> + <var-decl name='zc_history_len' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101184'> + <var-decl name='zc_history_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101248'> + <var-decl name='zc_obj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101312'> + <var-decl name='zc_iflags' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101376'> + <var-decl name='zc_share' type-id='ee5cec36' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101632'> + <var-decl name='zc_objset_stats' type-id='b2c14f17' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='103936'> + <var-decl name='zc_begin_record' type-id='09fcdc01' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='106368'> + <var-decl name='' type-id='ac5ab595' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109312'> + <var-decl name='zc_cleanup_fd' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109344'> + <var-decl name='zc_simple' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109352'> + <var-decl name='zc_pad' type-id='d3490169' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109376'> + <var-decl name='zc_sendobj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109440'> + <var-decl name='zc_fromobj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109504'> + <var-decl name='zc_createtxg' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109568'> + <var-decl name='zc_stat' type-id='0371a9c7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109888'> + <var-decl name='zc_zoneid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__' size-in-bits='2944' is-anonymous='yes' visibility='default' id='ac5ab595'> + <data-member access='public'> + <var-decl name='zc_inject_record' type-id='a4301ca6' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='' type-id='e7f43f73' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='__anonymous_struct__' size-in-bits='2944' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f73'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zc_pad1' type-id='514368c7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2816'> + <var-decl name='zc_defer_destroy' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2848'> + <var-decl name='zc_flags' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2880'> + <var-decl name='zc_action_handle' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_cmd_t' type-id='3522cd69' id='a5559cdd'/> + <class-decl name='zfs_stat' size-in-bits='320' is-struct='yes' visibility='default' id='6417f0b9'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zs_gen' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='zs_mode' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='zs_links' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='zs_ctime' type-id='c1c22e6c' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_stat_t' type-id='6417f0b9' id='0371a9c7'/> + <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> + <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/> + <pointer-type-def type-id='c19b74c3' size-in-bits='64' id='37e3bd22'/> + <qualified-type-def type-id='8e8d4be3' const='yes' id='693c3853'/> + <pointer-type-def type-id='693c3853' size-in-bits='64' id='22cce67b'/> + <qualified-type-def type-id='57928edf' const='yes' id='642ee20f'/> + <pointer-type-def type-id='642ee20f' size-in-bits='64' id='dace003f'/> + <pointer-type-def type-id='2bce87e3' size-in-bits='64' id='3aebb66f'/> + <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/> + <pointer-type-def type-id='5ce45b60' size-in-bits='64' id='857bb57e'/> + <pointer-type-def type-id='57928edf' size-in-bits='64' id='3fa542f0'/> + <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> + <pointer-type-def type-id='3522cd69' size-in-bits='64' id='b65f7fd1'/> + <pointer-type-def type-id='a5559cdd' size-in-bits='64' id='e4ec4540'/> + <pointer-type-def type-id='4c81de99' size-in-bits='64' id='237193c9'/> + <function-decl name='uu_avl_first' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='uu_avl_next' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <parameter type-id='eaa32e2f'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='uu_avl_teardown' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a5c21a38'/> + <parameter type-id='63e171df'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='zfs_standard_error' mangled-name='zfs_standard_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_standard_error'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_ioctl' mangled-name='zfs_ioctl' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_ioctl'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='b65f7fd1'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_dup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='857bb57e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_exists' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nvlist_next_nvpair' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='dace003f'/> + <return type-id='3fa542f0'/> + </function-decl> + <function-decl name='nvpair_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='fnvlist_dup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvpair_value_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3fa542f0'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__errno_location' visibility='default' binding='global' size-in-bits='64'> + <return type-id='7292109c'/> + </function-decl> + <function-decl name='dcgettext' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='getenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> <function-decl name='zpool_get_config' mangled-name='zpool_get_config' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_config'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='857bb57e' name='oldconfig'/> @@ -2180,6 +3901,11 @@ <parameter type-id='37e3bd22' name='missing'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_refresh_stats_from_handle' mangled-name='zpool_refresh_stats_from_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_refresh_stats_from_handle'> + <parameter type-id='4c81de99' name='dzhp'/> + <parameter type-id='4c81de99' name='szhp'/> + <return type-id='48b5725f'/> + </function-decl> <function-decl name='zpool_skip_pool' mangled-name='zpool_skip_pool' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_skip_pool'> <parameter type-id='80f4b756' name='poolname'/> <return type-id='c19b74c3'/> @@ -2196,16 +3922,47 @@ <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'/> + <function-decl name='zfs_strdup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='no_memory' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> <return type-id='95e97e5e'/> - </function-type> - <function-type size-in-bits='64' id='cb9628fa'> - <parameter type-id='9200a744'/> - <parameter type-id='eaa32e2f'/> + </function-decl> + <function-decl name='zcmd_alloc_dst_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4ec4540'/> + <parameter type-id='b59d7dce'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zcmd_expand_dst_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4ec4540'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zcmd_read_dst_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4ec4540'/> + <parameter type-id='857bb57e'/> <return type-id='95e97e5e'/> - </function-type> + </function-decl> + <function-decl name='zcmd_free_nvlists' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e4ec4540'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='make_dataset_handle' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <return type-id='9200a744'/> + </function-decl> + <function-decl name='zpool_open_silent' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter type-id='237193c9'/> + <return type-id='95e97e5e'/> + </function-decl> <function-type size-in-bits='64' id='2bce87e3'> <parameter type-id='4c81de99'/> <parameter type-id='eaa32e2f'/> @@ -2213,9 +3970,680 @@ </function-type> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_crypto.c' language='LANG_C99'> - <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> + <array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='256' id='64177143'> + <subrange length='32' type-id='7359adad' id='ae5bde82'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> + <subrange length='1' type-id='7359adad' id='52f813b4'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> + <subrange length='20' type-id='7359adad' id='fdca39cf'/> + </array-type-def> + <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> + <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> + <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='896' id='47394ee0'> + <subrange length='28' type-id='7359adad' id='3db583d7'/> + </array-type-def> + <type-decl name='signed char' size-in-bits='8' id='28577a57'/> + <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + <enum-decl name='zpool_prop_t' naming-typedef-id='5d0c23fb' id='af1ba157'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPOOL_PROP_INVAL' value='-1'/> + <enumerator name='ZPOOL_PROP_NAME' value='0'/> + <enumerator name='ZPOOL_PROP_SIZE' value='1'/> + <enumerator name='ZPOOL_PROP_CAPACITY' value='2'/> + <enumerator name='ZPOOL_PROP_ALTROOT' value='3'/> + <enumerator name='ZPOOL_PROP_HEALTH' value='4'/> + <enumerator name='ZPOOL_PROP_GUID' value='5'/> + <enumerator name='ZPOOL_PROP_VERSION' value='6'/> + <enumerator name='ZPOOL_PROP_BOOTFS' value='7'/> + <enumerator name='ZPOOL_PROP_DELEGATION' value='8'/> + <enumerator name='ZPOOL_PROP_AUTOREPLACE' value='9'/> + <enumerator name='ZPOOL_PROP_CACHEFILE' value='10'/> + <enumerator name='ZPOOL_PROP_FAILUREMODE' value='11'/> + <enumerator name='ZPOOL_PROP_LISTSNAPS' value='12'/> + <enumerator name='ZPOOL_PROP_AUTOEXPAND' value='13'/> + <enumerator name='ZPOOL_PROP_DEDUPDITTO' value='14'/> + <enumerator name='ZPOOL_PROP_DEDUPRATIO' value='15'/> + <enumerator name='ZPOOL_PROP_FREE' value='16'/> + <enumerator name='ZPOOL_PROP_ALLOCATED' value='17'/> + <enumerator name='ZPOOL_PROP_READONLY' value='18'/> + <enumerator name='ZPOOL_PROP_ASHIFT' value='19'/> + <enumerator name='ZPOOL_PROP_COMMENT' value='20'/> + <enumerator name='ZPOOL_PROP_EXPANDSZ' value='21'/> + <enumerator name='ZPOOL_PROP_FREEING' value='22'/> + <enumerator name='ZPOOL_PROP_FRAGMENTATION' value='23'/> + <enumerator name='ZPOOL_PROP_LEAKED' value='24'/> + <enumerator name='ZPOOL_PROP_MAXBLOCKSIZE' value='25'/> + <enumerator name='ZPOOL_PROP_TNAME' value='26'/> + <enumerator name='ZPOOL_PROP_MAXDNODESIZE' value='27'/> + <enumerator name='ZPOOL_PROP_MULTIHOST' value='28'/> + <enumerator name='ZPOOL_PROP_CHECKPOINT' value='29'/> + <enumerator name='ZPOOL_PROP_LOAD_GUID' value='30'/> + <enumerator name='ZPOOL_PROP_AUTOTRIM' value='31'/> + <enumerator name='ZPOOL_PROP_COMPATIBILITY' value='32'/> + <enumerator name='ZPOOL_PROP_BCLONEUSED' value='33'/> + <enumerator name='ZPOOL_PROP_BCLONESAVED' value='34'/> + <enumerator name='ZPOOL_PROP_BCLONERATIO' value='35'/> + <enumerator name='ZPOOL_PROP_DEDUP_TABLE_SIZE' value='36'/> + <enumerator name='ZPOOL_PROP_DEDUP_TABLE_QUOTA' value='37'/> + <enumerator name='ZPOOL_PROP_DEDUPCACHED' value='38'/> + <enumerator name='ZPOOL_PROP_LAST_SCRUBBED_TXG' value='39'/> + <enumerator name='ZPOOL_NUM_PROPS' value='40'/> + </enum-decl> + <typedef-decl name='zpool_prop_t' type-id='af1ba157' id='5d0c23fb'/> + <typedef-decl name='regoff_t' type-id='95e97e5e' id='54a2a2a8'/> + <class-decl name='regmatch_t' size-in-bits='64' is-struct='yes' naming-typedef-id='1b941664' visibility='default' id='4f932615'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='rm_so' type-id='54a2a2a8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='rm_eo' type-id='54a2a2a8' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='regmatch_t' type-id='4f932615' id='1b941664'/> + <typedef-decl name='__sighandler_t' type-id='03347643' id='8cdd9566'/> + <class-decl name='sigaction' size-in-bits='1216' is-struct='yes' visibility='default' id='fe391c48'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__sigaction_handler' type-id='ac5ab596' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='sa_mask' type-id='b9c97942' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1088'> + <var-decl name='sa_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1152'> + <var-decl name='sa_restorer' type-id='953b12f8' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab596'> + <data-member access='public'> + <var-decl name='sa_handler' type-id='8cdd9566' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='sa_sigaction' type-id='6e756877' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='termios' size-in-bits='480' is-struct='yes' visibility='default' id='ad55d2bc'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='c_iflag' type-id='241ce6f8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='c_oflag' type-id='241ce6f8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='c_cflag' type-id='241ce6f8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='c_lflag' type-id='241ce6f8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='c_line' type-id='fb7c6451' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='136'> + <var-decl name='c_cc' type-id='64177143' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='416'> + <var-decl name='c_ispeed' type-id='6a8e8a14' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='c_ospeed' type-id='6a8e8a14' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='cc_t' type-id='002ac4a6' id='fb7c6451'/> + <typedef-decl name='speed_t' type-id='f0981eeb' id='6a8e8a14'/> + <typedef-decl name='tcflag_t' type-id='f0981eeb' id='241ce6f8'/> + <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/> + <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> + <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> + <typedef-decl name='__pid_t' type-id='95e97e5e' id='3629bad8'/> + <typedef-decl name='__clock_t' type-id='bd54fe1a' id='4d66c6d7'/> + <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/> + <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> + <class-decl name='__sigset_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='b9c97942' visibility='default' id='2616147f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__val' type-id='d2baa450' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__sigset_t' type-id='2616147f' id='b9c97942'/> + <union-decl name='sigval' size-in-bits='64' visibility='default' id='a094b870'> + <data-member access='public'> + <var-decl name='sival_int' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='sival_ptr' type-id='eaa32e2f' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='__sigval_t' type-id='a094b870' id='eabacd01'/> + <class-decl name='siginfo_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='cb681f62' visibility='default' id='d8149419'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_signo' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='si_errno' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='si_code' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='__pad0' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_sifields' type-id='ac5ab597' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__1' size-in-bits='896' is-anonymous='yes' visibility='default' id='ac5ab597'> + <data-member access='public'> + <var-decl name='_pad' type-id='47394ee0' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_kill' type-id='e7f43f74' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_timer' type-id='e7f43f75' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_rt' type-id='e7f43f76' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_sigchld' type-id='e7f43f77' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_sigfault' type-id='e7f43f78' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_sigpoll' type-id='e7f43f79' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_sigsys' type-id='e7f43f7a' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f74'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_pid' type-id='3629bad8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='si_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f75'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_tid' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='si_overrun' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='si_sigval' type-id='eabacd01' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f76'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_pid' type-id='3629bad8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='si_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='si_sigval' type-id='eabacd01' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__anonymous_struct__4' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f77'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_pid' type-id='3629bad8' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='si_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='si_status' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='si_utime' type-id='4d66c6d7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='si_stime' type-id='4d66c6d7' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__anonymous_struct__5' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f78'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_addr' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='si_addr_lsb' type-id='a2185560' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_bounds' type-id='ac5ab598' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' id='ac5ab598'> + <data-member access='public'> + <var-decl name='_addr_bnd' type-id='e7f43f7b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_pkey' type-id='62f1140c' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='__anonymous_struct__6' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7b'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_lower' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_upper' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__anonymous_struct__7' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f79'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='si_band' type-id='bd54fe1a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='si_fd' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7a'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_call_addr' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_syscall' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='_arch' type-id='f0981eeb' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='siginfo_t' type-id='d8149419' id='cb681f62'/> + <typedef-decl name='sigset_t' type-id='b9c97942' id='daf33c64'/> + <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> + <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='768'> + <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='_chain' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='896'> + <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='928'> + <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1024'> + <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1048'> + <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1088'> + <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1152'> + <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1344'> + <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1408'> + <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1568'> + <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/> + <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> + <qualified-type-def type-id='822cd80b' restrict='yes' id='e75a27e9'/> + <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> + <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> + <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> + <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> + <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> + <qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/> + <qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/> + <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/> + <qualified-type-def type-id='aca3bac8' const='yes' id='2498fd78'/> + <pointer-type-def type-id='2498fd78' size-in-bits='64' id='eed6c816'/> + <qualified-type-def type-id='eed6c816' restrict='yes' id='a431a9da'/> + <qualified-type-def type-id='fe391c48' const='yes' id='14a93b33'/> + <pointer-type-def type-id='14a93b33' size-in-bits='64' id='9f68085b'/> + <qualified-type-def type-id='9f68085b' restrict='yes' id='e2a5e6f9'/> + <qualified-type-def type-id='ad55d2bc' const='yes' id='a46bf13f'/> + <pointer-type-def type-id='a46bf13f' size-in-bits='64' id='eaec840f'/> + <qualified-type-def type-id='002ac4a6' const='yes' id='ea86de29'/> + <pointer-type-def type-id='ea86de29' size-in-bits='64' id='354f7eb9'/> + <qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/> + <pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/> + <pointer-type-def type-id='31347b7a' size-in-bits='64' id='c59e1ef0'/> + <pointer-type-def type-id='7a6844eb' size-in-bits='64' id='18c91f9e'/> + <pointer-type-def type-id='1b941664' size-in-bits='64' id='7e2979d5'/> + <qualified-type-def type-id='7e2979d5' restrict='yes' id='fc212857'/> + <pointer-type-def type-id='fe391c48' size-in-bits='64' id='568dd84e'/> + <qualified-type-def type-id='568dd84e' restrict='yes' id='3d8ee6f2'/> + <pointer-type-def type-id='cb681f62' size-in-bits='64' id='185869c1'/> + <pointer-type-def type-id='daf33c64' size-in-bits='64' id='9e80f729'/> + <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/> + <qualified-type-def type-id='78c01427' restrict='yes' id='d19b2c25'/> + <pointer-type-def type-id='ad55d2bc' size-in-bits='64' id='665a4eda'/> + <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/> <pointer-type-def type-id='ae3e8ca6' size-in-bits='64' id='d8774064'/> <pointer-type-def type-id='3502e3ff' size-in-bits='64' id='4dd26a40'/> + <pointer-type-def type-id='ee076206' size-in-bits='64' id='953b12f8'/> + <pointer-type-def type-id='f712e2b7' size-in-bits='64' id='03347643'/> + <pointer-type-def type-id='ef70d893' size-in-bits='64' id='6e756877'/> + <qualified-type-def type-id='eaa32e2f' restrict='yes' id='1b7446cd'/> + <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> + <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> + <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <function-decl name='zpool_get_prop_int' mangled-name='zpool_get_prop_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_prop_int'> + <parameter type-id='4c81de99'/> + <parameter type-id='5d0c23fb'/> + <parameter type-id='debc6aa3'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zfs_handle_dup' mangled-name='zfs_handle_dup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_handle_dup'> + <parameter type-id='9200a744'/> + <return type-id='9200a744'/> + </function-decl> + <function-decl name='zfs_valid_proplist' mangled-name='zfs_valid_proplist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valid_proplist'> + <parameter type-id='b0382bb3'/> + <parameter type-id='2e45de5d'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='9200a744'/> + <parameter type-id='4c81de99'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='80f4b756'/> + <return type-id='5ce45b60'/> + </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'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_parent_name' mangled-name='zfs_parent_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_parent_name'> + <parameter type-id='9200a744'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_load_key' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='ae3e8ca6'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_unload_key' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_change_key' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='ae3e8ca6'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </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'/> + <return type-id='58603c44'/> + </function-decl> + <function-decl name='nvlist_add_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64'> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='__ctype_b_loc' visibility='default' binding='global' size-in-bits='64'> + <return type-id='c59e1ef0'/> + </function-decl> + <function-decl name='dlopen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='dlsym' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='1b7446cd'/> + <parameter type-id='9d26089a'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='dlerror' visibility='default' binding='global' size-in-bits='64'> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='PKCS5_PBKDF2_HMAC_SHA1' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='354f7eb9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='cf536864'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_lock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='regexec' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a431a9da'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='fc212857'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='kill' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3629bad8'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='sigemptyset' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9e80f729'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='sigaction' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='e2a5e6f9'/> + <parameter type-id='3d8ee6f2'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fclose' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fflush' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fdopen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <return type-id='822cd80b'/> + </function-decl> + <function-decl name='fputc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__getdelim' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='d19b2c25'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='e75a27e9'/> + <return type-id='41060289'/> + </function-decl> + <function-decl name='rewind' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='ferror' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fileno' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='malloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='calloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='strdup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strerror' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='tcgetattr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='665a4eda'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='tcsetattr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaec840f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='close' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getpid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='isatty' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='unlink' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__open_too_many_args' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__open_missing_mode' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__printf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__asprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__fread_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='1b7446cd'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='e75a27e9'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__read_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> <function-decl name='zfs_crypto_get_encryption_root' mangled-name='zfs_crypto_get_encryption_root' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_crypto_get_encryption_root'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='37e3bd22' name='is_encroot'/> @@ -2260,8 +4688,32 @@ <parameter type-id='c19b74c3' name='inheritkey'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zfs_is_encrypted' mangled-name='zfs_is_encrypted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_is_encrypted'> + <parameter type-id='9200a744' name='zhp'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zfs_error_aux' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='f712e2b7'> + <parameter type-id='95e97e5e'/> + <return type-id='48b5725f'/> + </function-type> + <function-type size-in-bits='64' id='ef70d893'> + <parameter type-id='95e97e5e'/> + <parameter type-id='185869c1'/> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-type> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_dataset.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32' id='8e0573fd'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <class-decl name='prop_changelist' is-struct='yes' visibility='default' is-declaration-only='yes' id='d86edc51'/> <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'/> @@ -2288,119 +4740,23 @@ <typedef-decl name='zprop_list_t' type-id='bd9b4291' id='bdb8ac4f'/> <class-decl name='renameflags' size-in-bits='32' is-struct='yes' visibility='default' id='7aee5792'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='recursive' type-id='95e97e5e' visibility='default'/> + <var-decl name='recursive' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='1'> - <var-decl name='nounmount' type-id='95e97e5e' visibility='default'/> + <var-decl name='nounmount' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='2'> - <var-decl name='forceunmount' type-id='95e97e5e' visibility='default'/> + <var-decl name='forceunmount' type-id='f0981eeb' visibility='default'/> </data-member> </class-decl> <typedef-decl name='renameflags_t' type-id='7aee5792' id='067170c2'/> - <typedef-decl name='zfs_userspace_cb_t' type-id='ca64ff60' id='16c5f410'/> - <enum-decl name='zfs_prop_t' naming-typedef-id='58603c44' id='4b000d60'> + <typedef-decl name='zfs_userspace_cb_t' type-id='bbaa4f9c' id='16c5f410'/> + <enum-decl name='lzc_dataset_type' id='bc9887f1'> <underlying-type type-id='9cac1fee'/> - <enumerator name='ZPROP_CONT' value='-2'/> - <enumerator name='ZPROP_INVAL' value='-1'/> - <enumerator name='ZFS_PROP_TYPE' value='0'/> - <enumerator name='ZFS_PROP_CREATION' value='1'/> - <enumerator name='ZFS_PROP_USED' value='2'/> - <enumerator name='ZFS_PROP_AVAILABLE' value='3'/> - <enumerator name='ZFS_PROP_REFERENCED' value='4'/> - <enumerator name='ZFS_PROP_COMPRESSRATIO' value='5'/> - <enumerator name='ZFS_PROP_MOUNTED' value='6'/> - <enumerator name='ZFS_PROP_ORIGIN' value='7'/> - <enumerator name='ZFS_PROP_QUOTA' value='8'/> - <enumerator name='ZFS_PROP_RESERVATION' value='9'/> - <enumerator name='ZFS_PROP_VOLSIZE' value='10'/> - <enumerator name='ZFS_PROP_VOLBLOCKSIZE' value='11'/> - <enumerator name='ZFS_PROP_RECORDSIZE' value='12'/> - <enumerator name='ZFS_PROP_MOUNTPOINT' value='13'/> - <enumerator name='ZFS_PROP_SHARENFS' value='14'/> - <enumerator name='ZFS_PROP_CHECKSUM' value='15'/> - <enumerator name='ZFS_PROP_COMPRESSION' value='16'/> - <enumerator name='ZFS_PROP_ATIME' value='17'/> - <enumerator name='ZFS_PROP_DEVICES' value='18'/> - <enumerator name='ZFS_PROP_EXEC' value='19'/> - <enumerator name='ZFS_PROP_SETUID' value='20'/> - <enumerator name='ZFS_PROP_READONLY' value='21'/> - <enumerator name='ZFS_PROP_ZONED' value='22'/> - <enumerator name='ZFS_PROP_SNAPDIR' value='23'/> - <enumerator name='ZFS_PROP_ACLMODE' value='24'/> - <enumerator name='ZFS_PROP_ACLINHERIT' value='25'/> - <enumerator name='ZFS_PROP_CREATETXG' value='26'/> - <enumerator name='ZFS_PROP_NAME' value='27'/> - <enumerator name='ZFS_PROP_CANMOUNT' value='28'/> - <enumerator name='ZFS_PROP_ISCSIOPTIONS' value='29'/> - <enumerator name='ZFS_PROP_XATTR' value='30'/> - <enumerator name='ZFS_PROP_NUMCLONES' value='31'/> - <enumerator name='ZFS_PROP_COPIES' value='32'/> - <enumerator name='ZFS_PROP_VERSION' value='33'/> - <enumerator name='ZFS_PROP_UTF8ONLY' value='34'/> - <enumerator name='ZFS_PROP_NORMALIZE' value='35'/> - <enumerator name='ZFS_PROP_CASE' value='36'/> - <enumerator name='ZFS_PROP_VSCAN' value='37'/> - <enumerator name='ZFS_PROP_NBMAND' value='38'/> - <enumerator name='ZFS_PROP_SHARESMB' value='39'/> - <enumerator name='ZFS_PROP_REFQUOTA' value='40'/> - <enumerator name='ZFS_PROP_REFRESERVATION' value='41'/> - <enumerator name='ZFS_PROP_GUID' value='42'/> - <enumerator name='ZFS_PROP_PRIMARYCACHE' value='43'/> - <enumerator name='ZFS_PROP_SECONDARYCACHE' value='44'/> - <enumerator name='ZFS_PROP_USEDSNAP' value='45'/> - <enumerator name='ZFS_PROP_USEDDS' value='46'/> - <enumerator name='ZFS_PROP_USEDCHILD' value='47'/> - <enumerator name='ZFS_PROP_USEDREFRESERV' value='48'/> - <enumerator name='ZFS_PROP_USERACCOUNTING' value='49'/> - <enumerator name='ZFS_PROP_STMF_SHAREINFO' value='50'/> - <enumerator name='ZFS_PROP_DEFER_DESTROY' value='51'/> - <enumerator name='ZFS_PROP_USERREFS' value='52'/> - <enumerator name='ZFS_PROP_LOGBIAS' value='53'/> - <enumerator name='ZFS_PROP_UNIQUE' value='54'/> - <enumerator name='ZFS_PROP_OBJSETID' value='55'/> - <enumerator name='ZFS_PROP_DEDUP' value='56'/> - <enumerator name='ZFS_PROP_MLSLABEL' value='57'/> - <enumerator name='ZFS_PROP_SYNC' value='58'/> - <enumerator name='ZFS_PROP_DNODESIZE' value='59'/> - <enumerator name='ZFS_PROP_REFRATIO' value='60'/> - <enumerator name='ZFS_PROP_WRITTEN' value='61'/> - <enumerator name='ZFS_PROP_CLONES' value='62'/> - <enumerator name='ZFS_PROP_LOGICALUSED' value='63'/> - <enumerator name='ZFS_PROP_LOGICALREFERENCED' value='64'/> - <enumerator name='ZFS_PROP_INCONSISTENT' value='65'/> - <enumerator name='ZFS_PROP_VOLMODE' value='66'/> - <enumerator name='ZFS_PROP_FILESYSTEM_LIMIT' value='67'/> - <enumerator name='ZFS_PROP_SNAPSHOT_LIMIT' value='68'/> - <enumerator name='ZFS_PROP_FILESYSTEM_COUNT' value='69'/> - <enumerator name='ZFS_PROP_SNAPSHOT_COUNT' value='70'/> - <enumerator name='ZFS_PROP_SNAPDEV' value='71'/> - <enumerator name='ZFS_PROP_ACLTYPE' value='72'/> - <enumerator name='ZFS_PROP_SELINUX_CONTEXT' value='73'/> - <enumerator name='ZFS_PROP_SELINUX_FSCONTEXT' value='74'/> - <enumerator name='ZFS_PROP_SELINUX_DEFCONTEXT' value='75'/> - <enumerator name='ZFS_PROP_SELINUX_ROOTCONTEXT' value='76'/> - <enumerator name='ZFS_PROP_RELATIME' value='77'/> - <enumerator name='ZFS_PROP_REDUNDANT_METADATA' value='78'/> - <enumerator name='ZFS_PROP_OVERLAY' value='79'/> - <enumerator name='ZFS_PROP_PREV_SNAP' value='80'/> - <enumerator name='ZFS_PROP_RECEIVE_RESUME_TOKEN' value='81'/> - <enumerator name='ZFS_PROP_ENCRYPTION' value='82'/> - <enumerator name='ZFS_PROP_KEYLOCATION' value='83'/> - <enumerator name='ZFS_PROP_KEYFORMAT' value='84'/> - <enumerator name='ZFS_PROP_PBKDF2_SALT' value='85'/> - <enumerator name='ZFS_PROP_PBKDF2_ITERS' value='86'/> - <enumerator name='ZFS_PROP_ENCRYPTION_ROOT' value='87'/> - <enumerator name='ZFS_PROP_KEY_GUID' value='88'/> - <enumerator name='ZFS_PROP_KEYSTATUS' value='89'/> - <enumerator name='ZFS_PROP_REMAPTXG' value='90'/> - <enumerator name='ZFS_PROP_SPECIAL_SMALL_BLOCKS' value='91'/> - <enumerator name='ZFS_PROP_IVSET_GUID' value='92'/> - <enumerator name='ZFS_PROP_REDACTED' value='93'/> - <enumerator name='ZFS_PROP_REDACT_SNAPS' value='94'/> - <enumerator name='ZFS_NUM_PROPS' value='95'/> + <enumerator name='LZC_DATSET_TYPE_ZFS' value='2'/> + <enumerator name='LZC_DATSET_TYPE_ZVOL' value='3'/> </enum-decl> - <typedef-decl name='zfs_prop_t' type-id='4b000d60' id='58603c44'/> + <typedef-decl name='avl_index_t' type-id='e475ab95' id='fba6cb51'/> <enum-decl name='zfs_userquota_prop_t' naming-typedef-id='279fde6a' id='5258d2f6'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZFS_PROP_USERUSED' value='0'/> @@ -2418,22 +4774,36 @@ <enumerator name='ZFS_NUM_USERQUOTA_PROPS' value='12'/> </enum-decl> <typedef-decl name='zfs_userquota_prop_t' type-id='5258d2f6' id='279fde6a'/> - <enum-decl name='zprop_source_t' naming-typedef-id='a2256d42' id='5903f80e'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZPROP_SRC_NONE' value='1'/> - <enumerator name='ZPROP_SRC_DEFAULT' value='2'/> - <enumerator name='ZPROP_SRC_TEMPORARY' value='4'/> - <enumerator name='ZPROP_SRC_LOCAL' value='8'/> - <enumerator name='ZPROP_SRC_INHERITED' value='16'/> - <enumerator name='ZPROP_SRC_RECEIVED' value='32'/> - </enum-decl> - <typedef-decl name='zprop_source_t' type-id='5903f80e' id='a2256d42'/> <enum-decl name='zfs_wait_activity_t' naming-typedef-id='3024501a' id='527d5dc6'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZFS_WAIT_DELETEQ' value='0'/> <enumerator name='ZFS_WAIT_NUM_ACTIVITIES' value='1'/> </enum-decl> <typedef-decl name='zfs_wait_activity_t' type-id='527d5dc6' id='3024501a'/> + <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'/> + <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'/> <class-decl name='mnttab' size-in-bits='256' is-struct='yes' visibility='default' id='1b055409'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='mnt_special' type-id='26a90f95' visibility='default'/> @@ -2448,19 +4818,656 @@ <var-decl name='mnt_mntopts' type-id='26a90f95' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/> + <class-decl name='group' size-in-bits='256' is-struct='yes' visibility='default' id='01a1b934'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gr_name' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='gr_passwd' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='gr_gid' type-id='d94ec6d9' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='gr_mem' type-id='9b23c9ad' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='mntent' size-in-bits='320' is-struct='yes' visibility='default' id='56fe4a37'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='mnt_fsname' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='mnt_dir' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='mnt_type' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mnt_opts' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='mnt_freq' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='mnt_passno' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='passwd' size-in-bits='384' is-struct='yes' visibility='default' id='a63d15a3'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='pw_name' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='pw_passwd' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='pw_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='pw_gid' type-id='d94ec6d9' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='pw_gecos' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='pw_dir' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='pw_shell' type-id='26a90f95' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='pthread_mutexattr_t' size-in-bits='32' naming-typedef-id='8afd6070' visibility='default' id='7300eb00'> + <data-member access='public'> + <var-decl name='__size' type-id='8e0573fd' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='95e97e5e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_mutexattr_t' type-id='7300eb00' id='8afd6070'/> + <typedef-decl name='int64_t' type-id='0c9942d2' id='9da381c4'/> + <typedef-decl name='__int64_t' type-id='bd54fe1a' id='0c9942d2'/> + <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/> + <typedef-decl name='__time_t' type-id='bd54fe1a' id='65eda9c0'/> + <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' id='dddf6ca2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tm_sec' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='tm_min' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tm_hour' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='tm_mday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='tm_mon' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='tm_year' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='tm_wday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='tm_yday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tm_isdst' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='tm_gmtoff' type-id='bd54fe1a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='tm_zone' type-id='80f4b756' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='time_t' type-id='65eda9c0' id='c9d12d66'/> <typedef-decl name='uid_t' type-id='cc5fcceb' id='354978ed'/> - <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> - <qualified-type-def type-id='775509eb' const='yes' id='5eadf2db'/> - <pointer-type-def type-id='5eadf2db' size-in-bits='64' id='fcd57163'/> - <pointer-type-def type-id='7e291ce6' size-in-bits='64' id='ca64ff60'/> - <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/> + <typedef-decl name='prop_changelist_t' type-id='d86edc51' id='eae6431d'/> + <pointer-type-def type-id='fba6cb51' size-in-bits='64' id='32adbf30'/> + <pointer-type-def type-id='f20fbd51' size-in-bits='64' id='a3681dea'/> + <qualified-type-def type-id='26a90f95' restrict='yes' id='266fe297'/> + <qualified-type-def type-id='56fe4a37' const='yes' id='a75125ce'/> + <pointer-type-def type-id='a75125ce' size-in-bits='64' id='48bea5ec'/> + <qualified-type-def type-id='8afd6070' const='yes' id='1d853360'/> + <pointer-type-def type-id='1d853360' size-in-bits='64' id='c2afbd7e'/> + <qualified-type-def type-id='c9d12d66' const='yes' id='588b3216'/> + <pointer-type-def type-id='588b3216' size-in-bits='64' id='9f201474'/> + <qualified-type-def type-id='9f201474' restrict='yes' id='d6e2847c'/> + <qualified-type-def type-id='dddf6ca2' const='yes' id='e824a34f'/> + <pointer-type-def type-id='e824a34f' size-in-bits='64' id='d6ad37ff'/> + <qualified-type-def type-id='d6ad37ff' restrict='yes' id='f8c6051d'/> + <qualified-type-def type-id='9c313c2d' const='yes' id='c3b7ba7d'/> + <pointer-type-def type-id='c3b7ba7d' size-in-bits='64' id='713a56f5'/> + <pointer-type-def type-id='01a1b934' size-in-bits='64' id='566b3f52'/> + <qualified-type-def type-id='566b3f52' restrict='yes' id='c878edd6'/> + <pointer-type-def type-id='566b3f52' size-in-bits='64' id='82d4e9e8'/> + <qualified-type-def type-id='82d4e9e8' restrict='yes' id='aa19c230'/> + <pointer-type-def type-id='02362c02' size-in-bits='64' id='bbaa4f9c'/> + <pointer-type-def type-id='9da381c4' size-in-bits='64' id='cb785ebf'/> <pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/> - <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/> + <pointer-type-def type-id='8e0af06e' size-in-bits='64' id='053457bd'/> + <pointer-type-def type-id='857bb57e' size-in-bits='64' id='75be733c'/> + <pointer-type-def type-id='a63d15a3' size-in-bits='64' id='a195f4a3'/> + <qualified-type-def type-id='a195f4a3' restrict='yes' id='33518961'/> + <pointer-type-def type-id='a195f4a3' size-in-bits='64' id='e80ff3ab'/> + <qualified-type-def type-id='e80ff3ab' restrict='yes' id='8f2c7109'/> + <pointer-type-def type-id='eae6431d' size-in-bits='64' id='0d41d328'/> + <pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/> + <qualified-type-def type-id='d915a820' restrict='yes' id='f099ad08'/> + <pointer-type-def type-id='5d6479ae' size-in-bits='64' id='892b4acc'/> <pointer-type-def type-id='bd9b4291' size-in-bits='64' id='9f1a1109'/> <pointer-type-def type-id='bdb8ac4f' size-in-bits='64' id='3a9b2288'/> <pointer-type-def type-id='3a9b2288' size-in-bits='64' id='e4378506'/> - <pointer-type-def type-id='a2256d42' size-in-bits='64' id='debc6aa3'/> + <class-decl name='prop_changelist' is-struct='yes' visibility='default' is-declaration-only='yes' id='d86edc51'/> + <function-decl name='zpool_open' mangled-name='zpool_open' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_open'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <return type-id='4c81de99'/> + </function-decl> + <function-decl name='zpool_open_canfail' mangled-name='zpool_open_canfail' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_open_canfail'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <return type-id='4c81de99'/> + </function-decl> + <function-decl name='zpool_close' mangled-name='zpool_close' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_close'> + <parameter type-id='4c81de99'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zpool_get_name' mangled-name='zpool_get_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_name'> + <parameter type-id='4c81de99'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zpool_get_prop' mangled-name='zpool_get_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_prop'> + <parameter type-id='4c81de99'/> + <parameter type-id='5d0c23fb'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='debc6aa3'/> + <parameter type-id='c19b74c3'/> + <return type-id='95e97e5e'/> + </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'/> + <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'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='zfs_iter_snapshots_v2' mangled-name='zfs_iter_snapshots_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapshots_v2'> + <parameter type-id='9200a744'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='d8e49ab9'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='9c313c2d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_iter_bookmarks_v2' mangled-name='zfs_iter_bookmarks_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_bookmarks_v2'> + <parameter type-id='9200a744'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='d8e49ab9'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_destroy_snaps_nvl_os' mangled-name='zfs_destroy_snaps_nvl_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_destroy_snaps_nvl_os'> + <parameter type-id='b0382bb3'/> + <parameter type-id='5ce45b60'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_nicestrtonum' mangled-name='zfs_nicestrtonum' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicestrtonum'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_ioctl_fd' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='7359adad'/> + <parameter type-id='b65f7fd1'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_snapshot' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='bc9887f1'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='ae3e8ca6'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_clone' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_promote' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='26a90f95'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_destroy_snaps' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_get_bookmarks' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_destroy_bookmarks' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_hold' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_release' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_get_holds' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_exists' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='lzc_rollback_to' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_channel_program_nosync' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_wait_fs' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='3024501a'/> + <parameter type-id='37e3bd22'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_nicebytes' mangled-name='zfs_nicebytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicebytes'> + <parameter type-id='9c313c2d'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_nicenum' mangled-name='zfs_nicenum' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicenum'> + <parameter type-id='9c313c2d'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <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'/> + <parameter type-id='585e1de9'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='48b5725f'/> + </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'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='32adbf30'/> + <return type-id='eaa32e2f'/> + </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'/> + <parameter type-id='eaa32e2f'/> + <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'/> + <parameter type-id='eaa32e2f'/> + <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'/> + <return type-id='ee1f298e'/> + </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'/> + <parameter type-id='63e171df'/> + <return type-id='eaa32e2f'/> + </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'/> + <return type-id='48b5725f'/> + </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'/> + <return type-id='c19b74c3'/> + </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'/> + <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'/> + <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'/> + <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'/> + <parameter type-id='c19b74c3'/> + <return type-id='c19b74c3'/> + </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'/> + <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'/> + <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'/> + <return type-id='c19b74c3'/> + </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'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </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'/> + <parameter type-id='2e45de5d'/> + <parameter type-id='c19b74c3'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nvlist_alloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='857bb57e'/> + <parameter type-id='3502e3ff'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_size' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='78c01427'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_pack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='9b23c9ad'/> + <parameter type-id='78c01427'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_unpack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='857bb57e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='22cce67b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint64_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='713a56f5'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_remove' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='8d0687d2'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_remove_all' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_int64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <parameter type-id='cb785ebf'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint64_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='892b4acc'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvlist_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='75be733c'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_empty' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nvpair_type' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='8d0687d2'/> + </function-decl> + <function-decl name='nvpair_value_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fnvlist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_boolean' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='fnvlist_lookup_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='fnvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvpair_value_int32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='3ff5601b'/> + </function-decl> + <function-decl name='fnvpair_value_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='9c313c2d'/> + </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'/> + <parameter type-id='053457bd'/> + <parameter type-id='26a90f95'/> + <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'/> + <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'/> + <parameter type-id='053457bd'/> + <return type-id='95e97e5e'/> + </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'/> + <return type-id='31429eff'/> + </function-decl> + <function-decl name='sa_validate_shareopts' mangled-name='sa_validate_shareopts' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_validate_shareopts'> + <parameter type-id='80f4b756'/> + <parameter type-id='9155d4b5'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getmntany' mangled-name='getmntany' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getmntany'> + <parameter type-id='822cd80b'/> + <parameter type-id='9d424d31'/> + <parameter type-id='9d424d31'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_sol_getmntent' mangled-name='_sol_getmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_sol_getmntent'> + <parameter type-id='822cd80b'/> + <parameter type-id='9d424d31'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getgrnam_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='c878edd6'/> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='aa19c230'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='hasmntopt' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='48bea5ec'/> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='pthread_mutex_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <parameter type-id='c2afbd7e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getpwnam_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='33518961'/> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='8f2c7109'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strtol' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='strtoul' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='7359adad'/> + </function-decl> + <function-decl name='abort' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strrchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strcspn' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='strstr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strsep' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='9d26089a'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strftime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='9d26089a'/> + <parameter type-id='f8c6051d'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='localtime_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='d6e2847c'/> + <parameter type-id='f099ad08'/> + <return type-id='d915a820'/> + </function-decl> + <function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zfs_type_to_name' mangled-name='zfs_type_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_type_to_name'> <parameter type-id='2e45de5d' name='type'/> <return type-id='80f4b756'/> @@ -2474,28 +5481,10 @@ <parameter type-id='b0382bb3' name='hdl'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zfs_refresh_properties' mangled-name='zfs_refresh_properties' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_refresh_properties'> - <parameter type-id='9200a744' name='zhp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zfs_handle_dup' mangled-name='zfs_handle_dup' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_handle_dup'> - <parameter type-id='9200a744' name='zhp_orig'/> - <return type-id='9200a744'/> - </function-decl> <function-decl name='zfs_bookmark_exists' mangled-name='zfs_bookmark_exists' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_bookmark_exists'> <parameter type-id='80f4b756' name='path'/> <return type-id='c19b74c3'/> </function-decl> - <function-decl name='zfs_open' mangled-name='zfs_open' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_open'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='95e97e5e' name='types'/> - <return type-id='9200a744'/> - </function-decl> - <function-decl name='zfs_close' mangled-name='zfs_close' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_close'> - <parameter type-id='9200a744' name='zhp'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='libzfs_mnttab_init' mangled-name='libzfs_mnttab_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_mnttab_init'> <parameter type-id='b0382bb3' name='hdl'/> <return type-id='48b5725f'/> @@ -2532,17 +5521,6 @@ <parameter type-id='7292109c' name='spa_version'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_valid_proplist' mangled-name='zfs_valid_proplist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valid_proplist'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='2e45de5d' name='type'/> - <parameter type-id='5ce45b60' name='nvl'/> - <parameter type-id='9c313c2d' name='zoned'/> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='4c81de99' name='zpool_hdl'/> - <parameter type-id='c19b74c3' name='key_params_ok'/> - <parameter type-id='80f4b756' name='errbuf'/> - <return type-id='5ce45b60'/> - </function-decl> <function-decl name='zfs_prop_set' mangled-name='zfs_prop_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_set'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='80f4b756' name='propname'/> @@ -2554,6 +5532,12 @@ <parameter type-id='5ce45b60' name='props'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zfs_prop_set_list_flags' mangled-name='zfs_prop_set_list_flags' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_set_list_flags'> + <parameter type-id='9200a744' name='zhp'/> + <parameter type-id='5ce45b60' name='props'/> + <parameter type-id='95e97e5e' name='flags'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zfs_prop_inherit' mangled-name='zfs_prop_inherit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_inherit'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='80f4b756' name='propname'/> @@ -2563,7 +5547,7 @@ <function-decl name='getprop_uint64' mangled-name='getprop_uint64' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getprop_uint64'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='58603c44' name='prop'/> - <parameter type-id='9b23c9ad' name='source'/> + <parameter type-id='7d3cd834' name='source'/> <return type-id='9c313c2d'/> </function-decl> <function-decl name='zfs_prop_get_recvd' mangled-name='zfs_prop_get_recvd' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_recvd'> @@ -2578,22 +5562,6 @@ <parameter type-id='9200a744' name='zhp'/> <return type-id='5ce45b60'/> </function-decl> - <function-decl name='zfs_prop_get' mangled-name='zfs_prop_get' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='58603c44' name='prop'/> - <parameter type-id='26a90f95' name='propbuf'/> - <parameter type-id='b59d7dce' name='proplen'/> - <parameter type-id='debc6aa3' name='src'/> - <parameter type-id='26a90f95' name='statbuf'/> - <parameter type-id='b59d7dce' name='statlen'/> - <parameter type-id='c19b74c3' name='literal'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_prop_get_int' mangled-name='zfs_prop_get_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_int'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='58603c44' name='prop'/> - <return type-id='9c313c2d'/> - </function-decl> <function-decl name='zfs_prop_get_numeric' mangled-name='zfs_prop_get_numeric' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_get_numeric'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='58603c44' name='prop'/> @@ -2631,10 +5599,6 @@ <parameter type-id='c19b74c3' name='literal'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_get_name' mangled-name='zfs_get_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_name'> - <parameter type-id='fcd57163' name='zhp'/> - <return type-id='80f4b756'/> - </function-decl> <function-decl name='zfs_get_pool_name' mangled-name='zfs_get_pool_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_pool_name'> <parameter type-id='fcd57163' name='zhp'/> <return type-id='80f4b756'/> @@ -2647,12 +5611,6 @@ <parameter type-id='fcd57163' name='zhp'/> <return type-id='2e45de5d'/> </function-decl> - <function-decl name='zfs_parent_name' mangled-name='zfs_parent_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_parent_name'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='b59d7dce' name='buflen'/> - <return type-id='95e97e5e'/> - </function-decl> <function-decl name='zfs_dataset_exists' mangled-name='zfs_dataset_exists' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dataset_exists'> <parameter type-id='b0382bb3' name='hdl'/> <parameter type-id='80f4b756' name='path'/> @@ -2832,15 +5790,219 @@ <parameter type-id='37e3bd22' name='waited'/> <return type-id='95e97e5e'/> </function-decl> - <function-type size-in-bits='64' id='7e291ce6'> + <function-decl name='zfs_error_fmt' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_standard_error_fmt' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_setprop_error' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='58603c44'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='26a90f95'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_parse_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='3fa542f0'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='2e45de5d'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='7d3cd834'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zprop_expand_list' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4378506'/> + <parameter type-id='2e45de5d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zcmd_write_src_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4ec4540'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='changelist_prefix' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='changelist_postfix' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='changelist_rename' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='changelist_remove' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='changelist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='changelist_gather' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9200a744'/> + <parameter type-id='58603c44'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <return type-id='0d41d328'/> + </function-decl> + <function-decl name='changelist_haszonedchild' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_name_valid' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-type size-in-bits='64' id='02362c02'> <parameter type-id='eaa32e2f'/> <parameter type-id='80f4b756'/> <parameter type-id='354978ed'/> <parameter type-id='9c313c2d'/> + <parameter type-id='9c313c2d'/> <return type-id='95e97e5e'/> </function-type> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_diff.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'> + <subrange length='56' type-id='7359adad' id='f8137894'/> + </array-type-def> + <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'/> + <class-decl name='differ_info' size-in-bits='9088' is-struct='yes' visibility='default' id='d41965ee'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zhp' type-id='9200a744' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='fromsnap' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='frommnt' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='tosnap' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tomnt' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='ds' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='dsmnt' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='tmpsnap' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='errbuf' type-id='b54ce520' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8704'> + <var-decl name='isclone' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8736'> + <var-decl name='scripted' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8768'> + <var-decl name='classify' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8800'> + <var-decl name='timestamped' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8832'> + <var-decl name='no_mangle' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8896'> + <var-decl name='shares' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8960'> + <var-decl name='zerr' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8992'> + <var-decl name='cleanupfd' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='9024'> + <var-decl name='outputfd' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='9056'> + <var-decl name='datafd' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='differ_info_t' type-id='d41965ee' id='e8525f0e'/> + <qualified-type-def type-id='7d8569fd' const='yes' id='e06dee2d'/> + <pointer-type-def type-id='e06dee2d' size-in-bits='64' id='540db505'/> + <qualified-type-def type-id='540db505' restrict='yes' id='e1815e87'/> + <pointer-type-def type-id='e8525f0e' size-in-bits='64' id='ee78f675'/> + <pointer-type-def type-id='4051f5e7' size-in-bits='64' id='e01b5462'/> + <qualified-type-def type-id='e01b5462' restrict='yes' id='cc338b26'/> + <pointer-type-def type-id='cd5d79f4' size-in-bits='64' id='5ad9edb6'/> + <function-decl name='is_mounted' mangled-name='is_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_mounted'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9b23c9ad'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='color_start' mangled-name='color_start' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='color_start'> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='color_end' mangled-name='color_end' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='color_end'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='cc338b26'/> + <parameter type-id='e1815e87'/> + <parameter type-id='5ad9edb6'/> + <parameter type-id='1b7446cd'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_join' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4051f5e7'/> + <parameter type-id='63e171df'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cancel' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4051f5e7'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fputs' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='e75a27e9'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pipe2' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7292109c'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> <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'/> @@ -2849,8 +6011,32 @@ <parameter type-id='95e97e5e' name='flags'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zfs_asprintf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='zfs_validate_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='c19b74c3'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='find_shares_object' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ee78f675'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-type size-in-bits='64' id='cd5d79f4'> + <parameter type-id='eaa32e2f'/> + <return type-id='eaa32e2f'/> + </function-type> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_import.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> <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'> @@ -2874,11 +6060,112 @@ <enumerator name='POOL_STATE_POTENTIALLY_ACTIVE' value='7'/> </enum-decl> <typedef-decl name='pool_state_t' type-id='4871ac24' id='084a08a3'/> + <class-decl name='stat64' size-in-bits='1152' is-struct='yes' visibility='default' id='0bbec9cd'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='st_dev' type-id='35ed8932' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='st_ino' type-id='71288a47' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='st_nlink' type-id='80f0b9df' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='st_mode' type-id='e1c52942' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='st_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='st_gid' type-id='d94ec6d9' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='__pad0' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='st_rdev' type-id='35ed8932' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='st_size' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='st_blksize' type-id='d3f10a7f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='st_blocks' type-id='4e711bf1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='st_atim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='st_mtim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='st_ctim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='__glibc_reserved' type-id='083f8d58' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__dev_t' type-id='7359adad' id='35ed8932'/> + <typedef-decl name='__ino64_t' type-id='7359adad' id='71288a47'/> + <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/> + <typedef-decl name='__nlink_t' type-id='7359adad' id='80f0b9df'/> + <typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/> + <typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/> + <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/> + <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tv_nsec' type-id='03085adc' visibility='default'/> + </data-member> + </class-decl> <qualified-type-def type-id='8b092c69' const='yes' id='1a21babe'/> <pointer-type-def type-id='de5d1d8f' size-in-bits='64' id='9eadf5e0'/> <pointer-type-def type-id='084a08a3' size-in-bits='64' id='b9ea57b8'/> <pointer-type-def type-id='b7c58eaa' size-in-bits='64' id='e7c00489'/> + <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/> <var-decl name='libzfs_config_ops' type-id='b1e62775' mangled-name='libzfs_config_ops' visibility='default' elf-symbol-id='libzfs_config_ops'/> + <function-decl name='zpool_read_label' mangled-name='zpool_read_label' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_read_label'> + <parameter type-id='95e97e5e'/> + <parameter type-id='857bb57e'/> + <parameter type-id='7292109c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pwrite64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='724e4de6'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='__pread64_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='724e4de6'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='ioctl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='7359adad'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fstat64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='62f7a03d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zcmd_write_conf_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4ec4540'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> <function-decl name='zpool_clear_label' mangled-name='zpool_clear_label' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_clear_label'> <parameter type-id='95e97e5e' name='fd'/> <return type-id='95e97e5e'/> @@ -2905,6 +6192,33 @@ </function-type> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_iter.c' language='LANG_C99'> + <pointer-type-def type-id='b351119f' size-in-bits='64' id='716943c7'/> + <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'/> + <return type-id='eaa32e2f'/> + </function-decl> + <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='716943c7'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='95e97e5e'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='make_dataset_handle_zc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='e4ec4540'/> + <return type-id='9200a744'/> + </function-decl> + <function-decl name='make_dataset_simple_handle_zc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9200a744'/> + <parameter type-id='e4ec4540'/> + <return type-id='9200a744'/> + </function-decl> + <function-decl name='make_bookmark_handle' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9200a744'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <return type-id='9200a744'/> + </function-decl> <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'/> @@ -2934,6 +6248,15 @@ <parameter type-id='9c313c2d' name='max_txg'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zfs_iter_snapshots_sorted_v2' mangled-name='zfs_iter_snapshots_sorted_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapshots_sorted_v2'> + <parameter type-id='9200a744' name='zhp'/> + <parameter type-id='95e97e5e' name='flags'/> + <parameter type-id='d8e49ab9' name='callback'/> + <parameter type-id='eaa32e2f' name='data'/> + <parameter type-id='9c313c2d' name='min_txg'/> + <parameter type-id='9c313c2d' name='max_txg'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zfs_iter_snapspec' mangled-name='zfs_iter_snapspec' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapspec'> <parameter type-id='9200a744' name='fs_zhp'/> <parameter type-id='80f4b756' name='spec_orig'/> @@ -2941,27 +6264,89 @@ <parameter type-id='eaa32e2f' name='arg'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_iter_children' mangled-name='zfs_iter_children' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_children'> - <parameter type-id='9200a744' name='zhp'/> + <function-decl name='zfs_iter_snapspec_v2' mangled-name='zfs_iter_snapspec_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapspec_v2'> + <parameter type-id='9200a744' name='fs_zhp'/> + <parameter type-id='95e97e5e' name='flags'/> + <parameter type-id='80f4b756' name='spec_orig'/> <parameter type-id='d8e49ab9' name='func'/> - <parameter type-id='eaa32e2f' name='data'/> + <parameter type-id='eaa32e2f' name='arg'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_iter_dependents' mangled-name='zfs_iter_dependents' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_dependents'> + <function-decl name='zfs_iter_children' mangled-name='zfs_iter_children' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_children'> <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='c19b74c3' name='allowrecursion'/> <parameter type-id='d8e49ab9' name='func'/> <parameter type-id='eaa32e2f' name='data'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_iter_mounted' mangled-name='zfs_iter_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_mounted'> + <function-decl name='zfs_iter_dependents' mangled-name='zfs_iter_dependents' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_dependents'> <parameter type-id='9200a744' name='zhp'/> + <parameter type-id='c19b74c3' name='allowrecursion'/> <parameter type-id='d8e49ab9' name='func'/> <parameter type-id='eaa32e2f' name='data'/> <return type-id='95e97e5e'/> </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_mount.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='6028cbfe' size-in-bits='256' id='b39b9aa7'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <class-decl name='__dirstream' is-struct='yes' visibility='default' is-declaration-only='yes' id='20cd73f2'/> + <class-decl name='tpool' size-in-bits='2496' is-struct='yes' visibility='default' id='88d1b7f9'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tp_forw' type-id='9cf59a50' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tp_back' type-id='9cf59a50' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='tp_mutex' type-id='7a6844eb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='tp_busycv' type-id='62fab762' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='tp_workcv' type-id='62fab762' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='tp_waitcv' type-id='62fab762' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1600'> + <var-decl name='tp_active' type-id='ad33e5e7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1664'> + <var-decl name='tp_head' type-id='f32b30e4' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1728'> + <var-decl name='tp_tail' type-id='f32b30e4' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1792'> + <var-decl name='tp_attr' type-id='7d8569fd' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2240'> + <var-decl name='tp_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2272'> + <var-decl name='tp_linger' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2304'> + <var-decl name='tp_njobs' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2336'> + <var-decl name='tp_minimum' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2368'> + <var-decl name='tp_maximum' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2400'> + <var-decl name='tp_current' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2432'> + <var-decl name='tp_idle' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> + <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='64' id='e4266c7e'> + <subrange length='2' type-id='7359adad' id='52efc4ef'/> + </array-type-def> <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'/> @@ -2974,31 +6359,251 @@ </data-member> </class-decl> <typedef-decl name='get_all_cb_t' type-id='803dac95' id='9b293607'/> - <enum-decl name='sa_protocol' id='9155d4b5'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='SA_PROTOCOL_NFS' value='0'/> - <enumerator name='SA_PROTOCOL_SMB' value='1'/> - <enumerator name='SA_PROTOCOL_COUNT' value='2'/> - </enum-decl> - <qualified-type-def type-id='9155d4b5' const='yes' id='9f2c1699'/> - <pointer-type-def type-id='9f2c1699' size-in-bits='64' id='4567bbc9'/> + <typedef-decl name='tpool_t' type-id='88d1b7f9' id='b1bbf10d'/> + <typedef-decl name='DIR' type-id='20cd73f2' id='54a5d683'/> + <typedef-decl name='mode_t' type-id='e1c52942' id='d50d396c'/> + <typedef-decl name='__compar_fn_t' type-id='585e1de9' id='aba7edd8'/> + <class-decl name='dirent64' size-in-bits='2240' is-struct='yes' visibility='default' id='5725d813'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='d_ino' type-id='71288a47' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='d_off' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='d_reclen' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='144'> + <var-decl name='d_type' type-id='002ac4a6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='152'> + <var-decl name='d_name' type-id='d1617432' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='statfs64' size-in-bits='960' is-struct='yes' visibility='default' id='a2a6be1a'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='f_type' type-id='6028cbfe' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='f_bsize' type-id='6028cbfe' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='f_blocks' type-id='95fe1a02' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='f_bfree' type-id='95fe1a02' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='f_bavail' type-id='95fe1a02' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='f_files' type-id='0c3a4dde' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='f_ffree' type-id='0c3a4dde' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='f_fsid' type-id='0f35d263' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='f_namelen' type-id='6028cbfe' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='f_frsize' type-id='6028cbfe' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='f_flags' type-id='6028cbfe' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='f_spare' type-id='b39b9aa7' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='stat' size-in-bits='1152' is-struct='yes' visibility='default' id='aafc373f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='st_dev' type-id='35ed8932' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='st_ino' type-id='e43e523d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='st_nlink' type-id='80f0b9df' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='st_mode' type-id='e1c52942' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='st_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='st_gid' type-id='d94ec6d9' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='__pad0' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='st_rdev' type-id='35ed8932' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='st_size' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='st_blksize' type-id='d3f10a7f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='st_blocks' type-id='dbc43803' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='st_atim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='st_mtim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='st_ctim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='__glibc_reserved' type-id='083f8d58' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__ino_t' type-id='7359adad' id='e43e523d'/> + <class-decl name='__fsid_t' size-in-bits='64' is-struct='yes' naming-typedef-id='0f35d263' visibility='default' id='ea35c84a'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__val' type-id='e4266c7e' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__fsid_t' type-id='ea35c84a' id='0f35d263'/> + <typedef-decl name='__blkcnt_t' type-id='bd54fe1a' id='dbc43803'/> + <typedef-decl name='__fsblkcnt64_t' type-id='7359adad' id='95fe1a02'/> + <typedef-decl name='__fsfilcnt64_t' type-id='7359adad' id='0c3a4dde'/> + <typedef-decl name='__fsword_t' type-id='bd54fe1a' id='6028cbfe'/> + <pointer-type-def type-id='54a5d683' size-in-bits='64' id='f09217ba'/> + <pointer-type-def type-id='5725d813' size-in-bits='64' id='07b96073'/> <pointer-type-def type-id='9b293607' size-in-bits='64' id='77bf1784'/> + <pointer-type-def type-id='7d8569fd' size-in-bits='64' id='7347a39e'/> + <pointer-type-def type-id='aafc373f' size-in-bits='64' id='4330df87'/> + <qualified-type-def type-id='4330df87' restrict='yes' id='73665405'/> + <pointer-type-def type-id='a2a6be1a' size-in-bits='64' id='7fd094c8'/> + <pointer-type-def type-id='b1bbf10d' size-in-bits='64' id='9cf59a50'/> + <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/> <pointer-type-def type-id='9200a744' size-in-bits='64' id='4507922a'/> - <function-decl name='is_mounted' mangled-name='is_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_mounted'> - <parameter type-id='b0382bb3' name='zfs_hdl'/> - <parameter type-id='80f4b756' name='special'/> - <parameter type-id='9b23c9ad' name='where'/> - <return type-id='c19b74c3'/> + <class-decl name='__dirstream' is-struct='yes' visibility='default' is-declaration-only='yes' id='20cd73f2'/> + <function-decl name='zpool_disable_datasets_os' mangled-name='zpool_disable_datasets_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_datasets_os'> + <parameter type-id='4c81de99'/> + <parameter type-id='c19b74c3'/> + <return type-id='48b5725f'/> </function-decl> - <function-decl name='zfs_is_mounted' mangled-name='zfs_is_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_is_mounted'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='9b23c9ad' name='where'/> + <function-decl name='zpool_disable_volume_os' mangled-name='zpool_disable_volume_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_volume_os'> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='tpool_create' mangled-name='tpool_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_create'> + <parameter type-id='3502e3ff'/> + <parameter type-id='3502e3ff'/> + <parameter type-id='3502e3ff'/> + <parameter type-id='7347a39e'/> + <return type-id='9cf59a50'/> + </function-decl> + <function-decl name='tpool_dispatch' mangled-name='tpool_dispatch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_dispatch'> + <parameter type-id='9cf59a50'/> + <parameter type-id='b7f9d8e6'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='tpool_destroy' mangled-name='tpool_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_destroy'> + <parameter type-id='9cf59a50'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='tpool_wait' mangled-name='tpool_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tpool_wait'> + <parameter type-id='9cf59a50'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mkdirp' mangled-name='mkdirp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mkdirp'> + <parameter type-id='80f4b756'/> + <parameter type-id='d50d396c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='sa_errorstr' mangled-name='sa_errorstr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_errorstr'> + <parameter type-id='95e97e5e'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='sa_enable_share' mangled-name='sa_enable_share' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_enable_share'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9155d4b5'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='sa_disable_share' mangled-name='sa_disable_share' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_disable_share'> + <parameter type-id='80f4b756'/> + <parameter type-id='9155d4b5'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='sa_is_shared' mangled-name='sa_is_shared' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_is_shared'> + <parameter type-id='80f4b756'/> + <parameter type-id='9155d4b5'/> <return type-id='c19b74c3'/> </function-decl> - <function-decl name='zfs_mount' mangled-name='zfs_mount' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mount'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='80f4b756' name='options'/> - <parameter type-id='95e97e5e' name='flags'/> + <function-decl name='sa_truncate_shares' mangled-name='sa_truncate_shares' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sa_truncate_shares'> + <parameter type-id='9155d4b5'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fdopendir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='f09217ba'/> + </function-decl> + <function-decl name='closedir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f09217ba'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='readdir64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f09217ba'/> + <return type-id='07b96073'/> + </function-decl> + <function-decl name='qsort' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='aba7edd8'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rmdir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__openat_too_many_args' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__openat_missing_mode' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='statfs64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='7fd094c8'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_realloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='changelist_unshare' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0d41d328'/> + <parameter type-id='4567bbc9'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='do_mount' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9200a744'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='do_unmount' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9200a744'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> <return type-id='95e97e5e'/> </function-decl> <function-decl name='zfs_mount_at' mangled-name='zfs_mount_at' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mount_at'> @@ -3008,38 +6613,15 @@ <parameter type-id='80f4b756' name='mountpoint'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_unmount' mangled-name='zfs_unmount' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_unmount'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='80f4b756' name='mountpoint'/> - <parameter type-id='95e97e5e' name='flags'/> - <return type-id='95e97e5e'/> - </function-decl> <function-decl name='zfs_unmountall' mangled-name='zfs_unmountall' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_unmountall'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='95e97e5e' name='flags'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_share' mangled-name='zfs_share' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_share'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='4567bbc9' name='proto'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_is_shared' mangled-name='zfs_is_shared' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_is_shared'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='9b23c9ad' name='where'/> - <parameter type-id='4567bbc9' name='proto'/> - <return type-id='c19b74c3'/> - </function-decl> - <function-decl name='zfs_commit_shares' mangled-name='zfs_commit_shares' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_commit_shares'> + <function-decl name='zfs_truncate_shares' mangled-name='zfs_truncate_shares' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_truncate_shares'> <parameter type-id='4567bbc9' name='proto'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zfs_unshare' mangled-name='zfs_unshare' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_unshare'> - <parameter type-id='9200a744' name='zhp'/> - <parameter type-id='80f4b756' name='mountpoint'/> - <parameter type-id='4567bbc9' name='proto'/> - <return type-id='95e97e5e'/> - </function-decl> <function-decl name='zfs_unshareall' mangled-name='zfs_unshareall' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_unshareall'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='4567bbc9' name='proto'/> @@ -3056,13 +6638,14 @@ <parameter type-id='b59d7dce' name='num_handles'/> <parameter type-id='d8e49ab9' name='func'/> <parameter type-id='eaa32e2f' name='data'/> - <parameter type-id='c19b74c3' name='parallel'/> + <parameter type-id='3502e3ff' name='nthr'/> <return type-id='48b5725f'/> </function-decl> <function-decl name='zpool_enable_datasets' mangled-name='zpool_enable_datasets' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_enable_datasets'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='80f4b756' name='mntopts'/> <parameter type-id='95e97e5e' name='flags'/> + <parameter type-id='3502e3ff' name='nthr'/> <return type-id='95e97e5e'/> </function-decl> <function-decl name='zpool_disable_datasets' mangled-name='zpool_disable_datasets' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_datasets'> @@ -3072,12 +6655,13 @@ </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_pool.c' language='LANG_C99'> + <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/> <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'/> + <var-decl name='dryrun' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='1'> - <var-decl name='import' type-id='95e97e5e' visibility='default'/> + <var-decl name='import' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='32'> <var-decl name='name_flags' type-id='95e97e5e' visibility='default'/> @@ -3099,6 +6683,43 @@ </data-member> </class-decl> <typedef-decl name='trimflags_t' type-id='8ef58008' id='a093cbb8'/> + <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'/> + <enumerator name='ZPOOL_STATUS_MISSING_DEV_R' value='1'/> + <enumerator name='ZPOOL_STATUS_MISSING_DEV_NR' value='2'/> + <enumerator name='ZPOOL_STATUS_CORRUPT_LABEL_R' value='3'/> + <enumerator name='ZPOOL_STATUS_CORRUPT_LABEL_NR' value='4'/> + <enumerator name='ZPOOL_STATUS_BAD_GUID_SUM' value='5'/> + <enumerator name='ZPOOL_STATUS_CORRUPT_POOL' value='6'/> + <enumerator name='ZPOOL_STATUS_CORRUPT_DATA' value='7'/> + <enumerator name='ZPOOL_STATUS_FAILING_DEV' value='8'/> + <enumerator name='ZPOOL_STATUS_VERSION_NEWER' value='9'/> + <enumerator name='ZPOOL_STATUS_HOSTID_MISMATCH' value='10'/> + <enumerator name='ZPOOL_STATUS_HOSTID_ACTIVE' value='11'/> + <enumerator name='ZPOOL_STATUS_HOSTID_REQUIRED' value='12'/> + <enumerator name='ZPOOL_STATUS_IO_FAILURE_WAIT' value='13'/> + <enumerator name='ZPOOL_STATUS_IO_FAILURE_CONTINUE' value='14'/> + <enumerator name='ZPOOL_STATUS_IO_FAILURE_MMP' value='15'/> + <enumerator name='ZPOOL_STATUS_BAD_LOG' value='16'/> + <enumerator name='ZPOOL_STATUS_ERRATA' value='17'/> + <enumerator name='ZPOOL_STATUS_UNSUP_FEAT_READ' value='18'/> + <enumerator name='ZPOOL_STATUS_UNSUP_FEAT_WRITE' value='19'/> + <enumerator name='ZPOOL_STATUS_FAULTED_DEV_R' value='20'/> + <enumerator name='ZPOOL_STATUS_FAULTED_DEV_NR' value='21'/> + <enumerator name='ZPOOL_STATUS_VERSION_OLDER' value='22'/> + <enumerator name='ZPOOL_STATUS_FEAT_DISABLED' value='23'/> + <enumerator name='ZPOOL_STATUS_RESILVERING' value='24'/> + <enumerator name='ZPOOL_STATUS_OFFLINE_DEV' value='25'/> + <enumerator name='ZPOOL_STATUS_REMOVED_DEV' value='26'/> + <enumerator name='ZPOOL_STATUS_REBUILDING' value='27'/> + <enumerator name='ZPOOL_STATUS_REBUILD_SCRUB' value='28'/> + <enumerator name='ZPOOL_STATUS_NON_NATIVE_ASHIFT' value='29'/> + <enumerator name='ZPOOL_STATUS_COMPATIBILITY_ERR' value='30'/> + <enumerator name='ZPOOL_STATUS_INCOMPATIBLE_FEAT' value='31'/> + <enumerator name='ZPOOL_STATUS_OK' value='32'/> + </enum-decl> + <typedef-decl name='zpool_status_t' type-id='5e770b40' id='d3dd6294'/> <enum-decl name='zpool_compat_status_t' naming-typedef-id='901b78d1' id='20676925'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZPOOL_COMPATIBILITY_OK' value='0'/> @@ -3108,48 +6729,10 @@ <enumerator name='ZPOOL_COMPATIBILITY_NOFILES' value='4'/> </enum-decl> <typedef-decl name='zpool_compat_status_t' type-id='20676925' id='901b78d1'/> - <enum-decl name='zpool_prop_t' naming-typedef-id='5d0c23fb' id='af1ba157'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZPOOL_PROP_INVAL' value='-1'/> - <enumerator name='ZPOOL_PROP_NAME' value='0'/> - <enumerator name='ZPOOL_PROP_SIZE' value='1'/> - <enumerator name='ZPOOL_PROP_CAPACITY' value='2'/> - <enumerator name='ZPOOL_PROP_ALTROOT' value='3'/> - <enumerator name='ZPOOL_PROP_HEALTH' value='4'/> - <enumerator name='ZPOOL_PROP_GUID' value='5'/> - <enumerator name='ZPOOL_PROP_VERSION' value='6'/> - <enumerator name='ZPOOL_PROP_BOOTFS' value='7'/> - <enumerator name='ZPOOL_PROP_DELEGATION' value='8'/> - <enumerator name='ZPOOL_PROP_AUTOREPLACE' value='9'/> - <enumerator name='ZPOOL_PROP_CACHEFILE' value='10'/> - <enumerator name='ZPOOL_PROP_FAILUREMODE' value='11'/> - <enumerator name='ZPOOL_PROP_LISTSNAPS' value='12'/> - <enumerator name='ZPOOL_PROP_AUTOEXPAND' value='13'/> - <enumerator name='ZPOOL_PROP_DEDUPDITTO' value='14'/> - <enumerator name='ZPOOL_PROP_DEDUPRATIO' value='15'/> - <enumerator name='ZPOOL_PROP_FREE' value='16'/> - <enumerator name='ZPOOL_PROP_ALLOCATED' value='17'/> - <enumerator name='ZPOOL_PROP_READONLY' value='18'/> - <enumerator name='ZPOOL_PROP_ASHIFT' value='19'/> - <enumerator name='ZPOOL_PROP_COMMENT' value='20'/> - <enumerator name='ZPOOL_PROP_EXPANDSZ' value='21'/> - <enumerator name='ZPOOL_PROP_FREEING' value='22'/> - <enumerator name='ZPOOL_PROP_FRAGMENTATION' value='23'/> - <enumerator name='ZPOOL_PROP_LEAKED' value='24'/> - <enumerator name='ZPOOL_PROP_MAXBLOCKSIZE' value='25'/> - <enumerator name='ZPOOL_PROP_TNAME' value='26'/> - <enumerator name='ZPOOL_PROP_MAXDNODESIZE' value='27'/> - <enumerator name='ZPOOL_PROP_MULTIHOST' value='28'/> - <enumerator name='ZPOOL_PROP_CHECKPOINT' value='29'/> - <enumerator name='ZPOOL_PROP_LOAD_GUID' value='30'/> - <enumerator name='ZPOOL_PROP_AUTOTRIM' value='31'/> - <enumerator name='ZPOOL_PROP_COMPATIBILITY' value='32'/> - <enumerator name='ZPOOL_NUM_PROPS' value='33'/> - </enum-decl> - <typedef-decl name='zpool_prop_t' type-id='af1ba157' id='5d0c23fb'/> <enum-decl name='vdev_prop_t' naming-typedef-id='5aa5c90c' id='1573bec8'> <underlying-type type-id='9cac1fee'/> <enumerator name='VDEV_PROP_INVAL' value='-1'/> + <enumerator name='VDEV_PROP_USERPROP' value='-1'/> <enumerator name='VDEV_PROP_NAME' value='0'/> <enumerator name='VDEV_PROP_CAPACITY' value='1'/> <enumerator name='VDEV_PROP_STATE' value='2'/> @@ -3191,9 +6774,38 @@ <enumerator name='VDEV_PROP_BYTES_TRIM' value='38'/> <enumerator name='VDEV_PROP_REMOVING' value='39'/> <enumerator name='VDEV_PROP_ALLOCATING' value='40'/> - <enumerator name='VDEV_NUM_PROPS' value='41'/> + <enumerator name='VDEV_PROP_FAILFAST' value='41'/> + <enumerator name='VDEV_PROP_CHECKSUM_N' value='42'/> + <enumerator name='VDEV_PROP_CHECKSUM_T' value='43'/> + <enumerator name='VDEV_PROP_IO_N' value='44'/> + <enumerator name='VDEV_PROP_IO_T' value='45'/> + <enumerator name='VDEV_PROP_RAIDZ_EXPANDING' value='46'/> + <enumerator name='VDEV_PROP_SLOW_IO_N' value='47'/> + <enumerator name='VDEV_PROP_SLOW_IO_T' value='48'/> + <enumerator name='VDEV_PROP_TRIM_SUPPORT' value='49'/> + <enumerator name='VDEV_PROP_TRIM_ERRORS' value='50'/> + <enumerator name='VDEV_PROP_SLOW_IOS' value='51'/> + <enumerator name='VDEV_PROP_SIT_OUT' value='52'/> + <enumerator name='VDEV_PROP_AUTOSIT' value='53'/> + <enumerator name='VDEV_PROP_SLOW_IO_EVENTS' value='54'/> + <enumerator name='VDEV_NUM_PROPS' value='55'/> </enum-decl> <typedef-decl name='vdev_prop_t' type-id='1573bec8' id='5aa5c90c'/> + <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'/> <enum-decl name='vdev_state' id='21566197'> <underlying-type type-id='9cac1fee'/> <enumerator name='VDEV_STATE_UNKNOWN' value='0'/> @@ -3236,22 +6848,34 @@ <enumerator name='POOL_SCAN_NONE' value='0'/> <enumerator name='POOL_SCAN_SCRUB' value='1'/> <enumerator name='POOL_SCAN_RESILVER' value='2'/> - <enumerator name='POOL_SCAN_FUNCS' value='3'/> + <enumerator name='POOL_SCAN_ERRORSCRUB' value='3'/> + <enumerator name='POOL_SCAN_FUNCS' value='4'/> </enum-decl> <typedef-decl name='pool_scan_func_t' type-id='1b092565' id='7313fbe2'/> <enum-decl name='pool_scrub_cmd' id='a1474cbd'> <underlying-type type-id='9cac1fee'/> <enumerator name='POOL_SCRUB_NORMAL' value='0'/> <enumerator name='POOL_SCRUB_PAUSE' value='1'/> - <enumerator name='POOL_SCRUB_FLAGS_END' value='2'/> + <enumerator name='POOL_SCRUB_FROM_LAST_TXG' value='2'/> + <enumerator name='POOL_SCRUB_FLAGS_END' value='3'/> </enum-decl> <typedef-decl name='pool_scrub_cmd_t' type-id='a1474cbd' id='b51cf3c2'/> + <enum-decl name='zpool_errata' id='d9abbf54'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPOOL_ERRATA_NONE' value='0'/> + <enumerator name='ZPOOL_ERRATA_ZOL_2094_SCRUB' value='1'/> + <enumerator name='ZPOOL_ERRATA_ZOL_2094_ASYNC_DESTROY' value='2'/> + <enumerator name='ZPOOL_ERRATA_ZOL_6845_ENCRYPTION' value='3'/> + <enumerator name='ZPOOL_ERRATA_ZOL_8308_ENCRYPTION' value='4'/> + </enum-decl> + <typedef-decl name='zpool_errata_t' type-id='d9abbf54' id='688c495b'/> <enum-decl name='pool_initialize_func' id='5c246ad4'> <underlying-type type-id='9cac1fee'/> <enumerator name='POOL_INITIALIZE_START' value='0'/> <enumerator name='POOL_INITIALIZE_CANCEL' value='1'/> <enumerator name='POOL_INITIALIZE_SUSPEND' value='2'/> - <enumerator name='POOL_INITIALIZE_FUNCS' value='3'/> + <enumerator name='POOL_INITIALIZE_UNINIT' value='3'/> + <enumerator name='POOL_INITIALIZE_FUNCS' value='4'/> </enum-decl> <typedef-decl name='pool_initialize_func_t' type-id='5c246ad4' id='7063e1ab'/> <enum-decl name='pool_trim_func' id='54ed608a'> @@ -3262,6 +6886,114 @@ <enumerator name='POOL_TRIM_FUNCS' value='3'/> </enum-decl> <typedef-decl name='pool_trim_func_t' type-id='54ed608a' id='b1146b8d'/> + <enum-decl name='zfs_ioc' id='12033f13'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZFS_IOC_FIRST' value='23040'/> + <enumerator name='ZFS_IOC' value='23040'/> + <enumerator name='ZFS_IOC_POOL_CREATE' value='23040'/> + <enumerator name='ZFS_IOC_POOL_DESTROY' value='23041'/> + <enumerator name='ZFS_IOC_POOL_IMPORT' value='23042'/> + <enumerator name='ZFS_IOC_POOL_EXPORT' value='23043'/> + <enumerator name='ZFS_IOC_POOL_CONFIGS' value='23044'/> + <enumerator name='ZFS_IOC_POOL_STATS' value='23045'/> + <enumerator name='ZFS_IOC_POOL_TRYIMPORT' value='23046'/> + <enumerator name='ZFS_IOC_POOL_SCAN' value='23047'/> + <enumerator name='ZFS_IOC_POOL_FREEZE' value='23048'/> + <enumerator name='ZFS_IOC_POOL_UPGRADE' value='23049'/> + <enumerator name='ZFS_IOC_POOL_GET_HISTORY' value='23050'/> + <enumerator name='ZFS_IOC_VDEV_ADD' value='23051'/> + <enumerator name='ZFS_IOC_VDEV_REMOVE' value='23052'/> + <enumerator name='ZFS_IOC_VDEV_SET_STATE' value='23053'/> + <enumerator name='ZFS_IOC_VDEV_ATTACH' value='23054'/> + <enumerator name='ZFS_IOC_VDEV_DETACH' value='23055'/> + <enumerator name='ZFS_IOC_VDEV_SETPATH' value='23056'/> + <enumerator name='ZFS_IOC_VDEV_SETFRU' value='23057'/> + <enumerator name='ZFS_IOC_OBJSET_STATS' value='23058'/> + <enumerator name='ZFS_IOC_OBJSET_ZPLPROPS' value='23059'/> + <enumerator name='ZFS_IOC_DATASET_LIST_NEXT' value='23060'/> + <enumerator name='ZFS_IOC_SNAPSHOT_LIST_NEXT' value='23061'/> + <enumerator name='ZFS_IOC_SET_PROP' value='23062'/> + <enumerator name='ZFS_IOC_CREATE' value='23063'/> + <enumerator name='ZFS_IOC_DESTROY' value='23064'/> + <enumerator name='ZFS_IOC_ROLLBACK' value='23065'/> + <enumerator name='ZFS_IOC_RENAME' value='23066'/> + <enumerator name='ZFS_IOC_RECV' value='23067'/> + <enumerator name='ZFS_IOC_SEND' value='23068'/> + <enumerator name='ZFS_IOC_INJECT_FAULT' value='23069'/> + <enumerator name='ZFS_IOC_CLEAR_FAULT' value='23070'/> + <enumerator name='ZFS_IOC_INJECT_LIST_NEXT' value='23071'/> + <enumerator name='ZFS_IOC_ERROR_LOG' value='23072'/> + <enumerator name='ZFS_IOC_CLEAR' value='23073'/> + <enumerator name='ZFS_IOC_PROMOTE' value='23074'/> + <enumerator name='ZFS_IOC_SNAPSHOT' value='23075'/> + <enumerator name='ZFS_IOC_DSOBJ_TO_DSNAME' value='23076'/> + <enumerator name='ZFS_IOC_OBJ_TO_PATH' value='23077'/> + <enumerator name='ZFS_IOC_POOL_SET_PROPS' value='23078'/> + <enumerator name='ZFS_IOC_POOL_GET_PROPS' value='23079'/> + <enumerator name='ZFS_IOC_SET_FSACL' value='23080'/> + <enumerator name='ZFS_IOC_GET_FSACL' value='23081'/> + <enumerator name='ZFS_IOC_SHARE' value='23082'/> + <enumerator name='ZFS_IOC_INHERIT_PROP' value='23083'/> + <enumerator name='ZFS_IOC_SMB_ACL' value='23084'/> + <enumerator name='ZFS_IOC_USERSPACE_ONE' value='23085'/> + <enumerator name='ZFS_IOC_USERSPACE_MANY' value='23086'/> + <enumerator name='ZFS_IOC_USERSPACE_UPGRADE' value='23087'/> + <enumerator name='ZFS_IOC_HOLD' value='23088'/> + <enumerator name='ZFS_IOC_RELEASE' value='23089'/> + <enumerator name='ZFS_IOC_GET_HOLDS' value='23090'/> + <enumerator name='ZFS_IOC_OBJSET_RECVD_PROPS' value='23091'/> + <enumerator name='ZFS_IOC_VDEV_SPLIT' value='23092'/> + <enumerator name='ZFS_IOC_NEXT_OBJ' value='23093'/> + <enumerator name='ZFS_IOC_DIFF' value='23094'/> + <enumerator name='ZFS_IOC_TMP_SNAPSHOT' value='23095'/> + <enumerator name='ZFS_IOC_OBJ_TO_STATS' value='23096'/> + <enumerator name='ZFS_IOC_SPACE_WRITTEN' value='23097'/> + <enumerator name='ZFS_IOC_SPACE_SNAPS' value='23098'/> + <enumerator name='ZFS_IOC_DESTROY_SNAPS' value='23099'/> + <enumerator name='ZFS_IOC_POOL_REGUID' value='23100'/> + <enumerator name='ZFS_IOC_POOL_REOPEN' value='23101'/> + <enumerator name='ZFS_IOC_SEND_PROGRESS' value='23102'/> + <enumerator name='ZFS_IOC_LOG_HISTORY' value='23103'/> + <enumerator name='ZFS_IOC_SEND_NEW' value='23104'/> + <enumerator name='ZFS_IOC_SEND_SPACE' value='23105'/> + <enumerator name='ZFS_IOC_CLONE' value='23106'/> + <enumerator name='ZFS_IOC_BOOKMARK' value='23107'/> + <enumerator name='ZFS_IOC_GET_BOOKMARKS' value='23108'/> + <enumerator name='ZFS_IOC_DESTROY_BOOKMARKS' value='23109'/> + <enumerator name='ZFS_IOC_RECV_NEW' value='23110'/> + <enumerator name='ZFS_IOC_POOL_SYNC' value='23111'/> + <enumerator name='ZFS_IOC_CHANNEL_PROGRAM' value='23112'/> + <enumerator name='ZFS_IOC_LOAD_KEY' value='23113'/> + <enumerator name='ZFS_IOC_UNLOAD_KEY' value='23114'/> + <enumerator name='ZFS_IOC_CHANGE_KEY' value='23115'/> + <enumerator name='ZFS_IOC_REMAP' value='23116'/> + <enumerator name='ZFS_IOC_POOL_CHECKPOINT' value='23117'/> + <enumerator name='ZFS_IOC_POOL_DISCARD_CHECKPOINT' value='23118'/> + <enumerator name='ZFS_IOC_POOL_INITIALIZE' value='23119'/> + <enumerator name='ZFS_IOC_POOL_TRIM' value='23120'/> + <enumerator name='ZFS_IOC_REDACT' value='23121'/> + <enumerator name='ZFS_IOC_GET_BOOKMARK_PROPS' value='23122'/> + <enumerator name='ZFS_IOC_WAIT' value='23123'/> + <enumerator name='ZFS_IOC_WAIT_FS' value='23124'/> + <enumerator name='ZFS_IOC_VDEV_GET_PROPS' value='23125'/> + <enumerator name='ZFS_IOC_VDEV_SET_PROPS' value='23126'/> + <enumerator name='ZFS_IOC_POOL_SCRUB' value='23127'/> + <enumerator name='ZFS_IOC_POOL_PREFETCH' value='23128'/> + <enumerator name='ZFS_IOC_DDT_PRUNE' value='23129'/> + <enumerator name='ZFS_IOC_PLATFORM' value='23168'/> + <enumerator name='ZFS_IOC_EVENTS_NEXT' value='23169'/> + <enumerator name='ZFS_IOC_EVENTS_CLEAR' value='23170'/> + <enumerator name='ZFS_IOC_EVENTS_SEEK' value='23171'/> + <enumerator name='ZFS_IOC_NEXTBOOT' value='23172'/> + <enumerator name='ZFS_IOC_JAIL' value='23173'/> + <enumerator name='ZFS_IOC_USERNS_ATTACH' value='23173'/> + <enumerator name='ZFS_IOC_UNJAIL' value='23174'/> + <enumerator name='ZFS_IOC_USERNS_DETACH' value='23174'/> + <enumerator name='ZFS_IOC_SET_BOOTENV' value='23175'/> + <enumerator name='ZFS_IOC_GET_BOOTENV' value='23176'/> + <enumerator name='ZFS_IOC_LAST' value='23177'/> + </enum-decl> + <typedef-decl name='zfs_ioc_t' type-id='12033f13' id='5b35941c'/> <enum-decl name='zpool_wait_activity_t' naming-typedef-id='73446457' id='849338e3'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZPOOL_WAIT_CKPT_DISCARD' value='0'/> @@ -3272,23 +7004,453 @@ <enumerator name='ZPOOL_WAIT_RESILVER' value='5'/> <enumerator name='ZPOOL_WAIT_SCRUB' value='6'/> <enumerator name='ZPOOL_WAIT_TRIM' value='7'/> - <enumerator name='ZPOOL_WAIT_NUM_ACTIVITIES' value='8'/> + <enumerator name='ZPOOL_WAIT_RAIDZ_EXPAND' value='8'/> + <enumerator name='ZPOOL_WAIT_NUM_ACTIVITIES' value='9'/> </enum-decl> <typedef-decl name='zpool_wait_activity_t' type-id='849338e3' id='73446457'/> - <qualified-type-def type-id='8e8d4be3' const='yes' id='693c3853'/> - <pointer-type-def type-id='693c3853' size-in-bits='64' id='22cce67b'/> + <enum-decl name='zpool_prefetch_type_t' naming-typedef-id='e55ff6bc' id='0299ab50'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPOOL_PREFETCH_NONE' value='0'/> + <enumerator name='ZPOOL_PREFETCH_DDT' value='1'/> + <enumerator name='ZPOOL_PREFETCH_BRT' value='2'/> + </enum-decl> + <typedef-decl name='zpool_prefetch_type_t' type-id='0299ab50' id='e55ff6bc'/> + <enum-decl name='zpool_ddt_prune_unit_t' naming-typedef-id='02e25ab0' id='509ae11c'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPOOL_DDT_PRUNE_NONE' value='0'/> + <enumerator name='ZPOOL_DDT_PRUNE_AGE' value='1'/> + <enumerator name='ZPOOL_DDT_PRUNE_PERCENTAGE' value='2'/> + </enum-decl> + <typedef-decl name='zpool_ddt_prune_unit_t' type-id='509ae11c' id='02e25ab0'/> + <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_FEATURE_BLAKE3' value='36'/> + <enumerator name='SPA_FEATURE_BLOCK_CLONING' value='37'/> + <enumerator name='SPA_FEATURE_AVZ_V2' value='38'/> + <enumerator name='SPA_FEATURE_REDACTION_LIST_SPILL' value='39'/> + <enumerator name='SPA_FEATURE_RAIDZ_EXPANSION' value='40'/> + <enumerator name='SPA_FEATURE_FAST_DEDUP' value='41'/> + <enumerator name='SPA_FEATURE_LONGNAME' value='42'/> + <enumerator name='SPA_FEATURE_LARGE_MICROZAP' value='43'/> + <enumerator name='SPA_FEATURE_DYNAMIC_GANG_HEADER' value='44'/> + <enumerator name='SPA_FEATURE_BLOCK_CLONING_ENDIAN' value='45'/> + <enumerator name='SPA_FEATURE_PHYSICAL_REWRITE' value='46'/> + <enumerator name='SPA_FEATURES' value='47'/> + </enum-decl> + <typedef-decl name='spa_feature_t' type-id='33ecb627' id='d6618c78'/> + <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/> + <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/> + <qualified-type-def type-id='22cce67b' const='yes' id='d2816df0'/> + <pointer-type-def type-id='d2816df0' size-in-bits='64' id='3bbfee2e'/> + <qualified-type-def type-id='b96825af' const='yes' id='2b61797f'/> + <pointer-type-def type-id='2b61797f' size-in-bits='64' id='9f7200cf'/> + <pointer-type-def type-id='d6618c78' size-in-bits='64' id='a8425263'/> + <qualified-type-def type-id='62f7a03d' restrict='yes' id='f1cadedf'/> <pointer-type-def type-id='a093cbb8' size-in-bits='64' id='b13f38c3'/> <pointer-type-def type-id='35acf840' size-in-bits='64' id='17f3480d'/> - <function-decl name='zpool_props_refresh' mangled-name='zpool_props_refresh' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_props_refresh'> - <parameter type-id='4c81de99' name='zhp'/> + <pointer-type-def type-id='688c495b' size-in-bits='64' id='cec6f2e4'/> + <pointer-type-def type-id='d11b7617' size-in-bits='64' id='23432aaa'/> + <function-decl name='zpool_get_handle' mangled-name='zpool_get_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_handle'> + <parameter type-id='4c81de99'/> + <return type-id='b0382bb3'/> + </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'/> + <return type-id='80f4b756'/> + </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'/> + <return type-id='80f4b756'/> + </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'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='zpool_get_status' mangled-name='zpool_get_status' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_status'> + <parameter type-id='4c81de99'/> + <parameter type-id='7d3cd834'/> + <parameter type-id='cec6f2e4'/> + <return type-id='d3dd6294'/> + </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'/> + <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'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='libzfs_envvar_is_set' mangled-name='libzfs_envvar_is_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_envvar_is_set'> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='lzc_initialize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='7063e1ab'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zpool_get_prop_int' mangled-name='zpool_get_prop_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_prop_int'> - <parameter type-id='4c81de99' name='zhp'/> - <parameter type-id='5d0c23fb' name='prop'/> - <parameter type-id='debc6aa3' name='src'/> + <function-decl name='lzc_trim' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='b1146b8d'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_sync' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_reopen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_pool_checkpoint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_pool_checkpoint_discard' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_wait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='73446457'/> + <parameter type-id='37e3bd22'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_wait_tag' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='73446457'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='37e3bd22'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_pool_prefetch' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='e55ff6bc'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_set_bootenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='22cce67b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_get_bootenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_get_vdev_prop' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_set_vdev_prop' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_scrub' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5b35941c'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_ddt_prune' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='02e25ab0'/> + <parameter type-id='9c313c2d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_resolve_shortname' mangled-name='zfs_resolve_shortname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_resolve_shortname'> + <parameter type-id='80f4b756'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_strip_partition' mangled-name='zfs_strip_partition' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_strip_partition'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='zfs_strip_path' mangled-name='zfs_strip_path' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_strip_path'> + <parameter type-id='80f4b756'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zfs_strcmp_pathname' mangled-name='zfs_strcmp_pathname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_strcmp_pathname'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_history_unpack' mangled-name='zpool_history_unpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_history_unpack'> + <parameter type-id='26a90f95'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='75be733c'/> + <parameter type-id='4dd26a40'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_basename' mangled-name='zfs_basename' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_basename'> + <parameter type-id='80f4b756'/> + <return type-id='80f4b756'/> + </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'/> + <return type-id='5d0c23fb'/> + </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'/> + <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'/> + <return type-id='c19b74c3'/> + </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'/> + <return type-id='c19b74c3'/> + </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'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </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'/> + <return type-id='5aa5c90c'/> + </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'/> + <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'/> <return type-id='9c313c2d'/> </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'/> + <return type-id='c19b74c3'/> + </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'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='7d3cd834'/> + <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'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='nvlist_add_nvpair' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='3fa542f0'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9f7200cf'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='3bbfee2e'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3fa542f0'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fnvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9da381c4'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_string_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='13956559'/> + <parameter type-id='3502e3ff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='3bbfee2e'/> + <parameter type-id='3502e3ff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint64_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='4dd26a40'/> + <return type-id='5d6479ae'/> + </function-decl> + <function-decl name='fnvpair_value_int64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='9da381c4'/> + </function-decl> + <function-decl name='fnvpair_value_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='80f4b756'/> + </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'/> + <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'/> + <parameter type-id='a8425263'/> + <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'/> + <parameter type-id='a8425263'/> + <return type-id='95e97e5e'/> + </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'/> + <parameter type-id='23432aaa'/> + <return type-id='48b5725f'/> + </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'/> + <parameter type-id='053457bd'/> + <parameter type-id='26a90f95'/> + <return type-id='95e97e5e'/> + </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'/> + <return type-id='31429eff'/> + </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'/> + <return type-id='31429eff'/> + </function-decl> + <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> + <function-decl name='strtoull' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='3a47d82b'/> + </function-decl> + <function-decl name='memcmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strtok_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='ctime_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='d6e2847c'/> + <parameter type-id='266fe297'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='__realpath_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='munmap' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='stat64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='f1cadedf'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_standard_error' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_standard_error_fmt' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_relabel_disk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_props_refresh' mangled-name='zpool_props_refresh' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_props_refresh'> + <parameter type-id='4c81de99' name='zhp'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_state_to_name' mangled-name='zpool_state_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_state_to_name'> <parameter type-id='35acf840' name='state'/> <parameter type-id='9d774e0b' name='aux'/> @@ -3302,13 +7464,12 @@ <parameter type-id='4c81de99' name='zhp'/> <return type-id='80f4b756'/> </function-decl> - <function-decl name='zpool_get_prop' mangled-name='zpool_get_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_prop'> + <function-decl name='zpool_get_userprop' mangled-name='zpool_get_userprop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_userprop'> <parameter type-id='4c81de99' name='zhp'/> - <parameter type-id='5d0c23fb' name='prop'/> + <parameter type-id='80f4b756' name='propname'/> <parameter type-id='26a90f95' name='buf'/> <parameter type-id='b59d7dce' name='len'/> <parameter type-id='debc6aa3' name='srctype'/> - <parameter type-id='c19b74c3' name='literal'/> <return type-id='95e97e5e'/> </function-decl> <function-decl name='zpool_set_prop' mangled-name='zpool_set_prop' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_set_prop'> @@ -3337,24 +7498,6 @@ <parameter type-id='b59d7dce' name='len'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zpool_open_canfail' mangled-name='zpool_open_canfail' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_open_canfail'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='80f4b756' name='pool'/> - <return type-id='4c81de99'/> - </function-decl> - <function-decl name='zpool_open' mangled-name='zpool_open' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_open'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='80f4b756' name='pool'/> - <return type-id='4c81de99'/> - </function-decl> - <function-decl name='zpool_close' mangled-name='zpool_close' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_close'> - <parameter type-id='4c81de99' name='zhp'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zpool_get_name' mangled-name='zpool_get_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_name'> - <parameter type-id='4c81de99' name='zhp'/> - <return type-id='80f4b756'/> - </function-decl> <function-decl name='zpool_get_state' mangled-name='zpool_get_state' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_state'> <parameter type-id='4c81de99' name='zhp'/> <return type-id='95e97e5e'/> @@ -3384,9 +7527,15 @@ <parameter type-id='4c81de99' name='zhp'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_prefetch' mangled-name='zpool_prefetch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prefetch'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='e55ff6bc' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_add' mangled-name='zpool_add' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_add'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='5ce45b60' name='nvroot'/> + <parameter type-id='c19b74c3' name='check_ashift'/> <return type-id='95e97e5e'/> </function-decl> <function-decl name='zpool_export' mangled-name='zpool_export' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_export'> @@ -3405,6 +7554,8 @@ <parameter type-id='80f4b756' name='name'/> <parameter type-id='95e97e5e' name='reason'/> <parameter type-id='5ce45b60' name='config'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='b59d7dce' name='size'/> <return type-id='48b5725f'/> </function-decl> <function-decl name='zpool_import' mangled-name='zpool_import' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_import'> @@ -3414,8 +7565,10 @@ <parameter type-id='26a90f95' name='altroot'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zpool_print_unsup_feat' mangled-name='zpool_print_unsup_feat' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_print_unsup_feat'> + <function-decl name='zpool_collect_unsup_feat' mangled-name='zpool_collect_unsup_feat' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_collect_unsup_feat'> <parameter type-id='5ce45b60' name='config'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='b59d7dce' name='size'/> <return type-id='48b5725f'/> </function-decl> <function-decl name='zpool_import_props' mangled-name='zpool_import_props' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_import_props'> @@ -3426,6 +7579,11 @@ <parameter type-id='95e97e5e' name='flags'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_initialize_one' mangled-name='zpool_initialize_one' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_initialize_one'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_initialize' mangled-name='zpool_initialize' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_initialize'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='7063e1ab' name='cmd_type'/> @@ -3438,6 +7596,17 @@ <parameter type-id='5ce45b60' name='vds'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_collect_leaves' mangled-name='zpool_collect_leaves' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_collect_leaves'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='5ce45b60' name='nvroot'/> + <parameter type-id='5ce45b60' name='res'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zpool_trim_one' mangled-name='zpool_trim_one' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_trim_one'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='eaa32e2f' name='data'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_trim' mangled-name='zpool_trim' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_trim'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='b1146b8d' name='cmd_type'/> @@ -3451,6 +7620,14 @@ <parameter type-id='b51cf3c2' name='cmd'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_scan_range' mangled-name='zpool_scan_range' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_scan_range'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='7313fbe2' name='func'/> + <parameter type-id='b51cf3c2' name='cmd'/> + <parameter type-id='c9d12d66' name='date_start'/> + <parameter type-id='c9d12d66' name='date_end'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_find_vdev_by_physpath' mangled-name='zpool_find_vdev_by_physpath' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_find_vdev_by_physpath'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='80f4b756' name='ppath'/> @@ -3467,11 +7644,13 @@ <parameter type-id='37e3bd22' name='log'/> <return type-id='5ce45b60'/> </function-decl> - <function-decl name='zpool_get_physpath' mangled-name='zpool_get_physpath' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_physpath'> + <function-decl name='zpool_find_parent_vdev' mangled-name='zpool_find_parent_vdev' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_find_parent_vdev'> <parameter type-id='4c81de99' name='zhp'/> - <parameter type-id='26a90f95' name='physpath'/> - <parameter type-id='b59d7dce' name='phypath_size'/> - <return type-id='95e97e5e'/> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='37e3bd22' name='avail_spare'/> + <parameter type-id='37e3bd22' name='l2cache'/> + <parameter type-id='37e3bd22' name='log'/> + <return type-id='5ce45b60'/> </function-decl> <function-decl name='zpool_vdev_path_to_guid' mangled-name='zpool_vdev_path_to_guid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_path_to_guid'> <parameter type-id='4c81de99' name='zhp'/> @@ -3491,6 +7670,11 @@ <parameter type-id='c19b74c3' name='istmp'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_vdev_remove_wanted' mangled-name='zpool_vdev_remove_wanted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_remove_wanted'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='80f4b756' name='path'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_vdev_fault' mangled-name='zpool_vdev_fault' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_fault'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='9c313c2d' name='guid'/> @@ -3503,6 +7687,12 @@ <parameter type-id='9d774e0b' name='aux'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_vdev_set_removed_state' mangled-name='zpool_vdev_set_removed_state' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_set_removed_state'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='9c313c2d' name='guid'/> + <parameter type-id='9d774e0b' name='aux'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_vdev_attach' mangled-name='zpool_vdev_attach' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_attach'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='80f4b756' name='old_disk'/> @@ -3551,6 +7741,11 @@ <parameter type-id='9c313c2d' name='guid'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_set_guid' mangled-name='zpool_set_guid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_set_guid'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='713a56f5' name='guid'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_reguid' mangled-name='zpool_reguid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_reguid'> <parameter type-id='4c81de99' name='zhp'/> <return type-id='95e97e5e'/> @@ -3572,6 +7767,11 @@ <parameter type-id='95e97e5e' name='name_flags'/> <return type-id='26a90f95'/> </function-decl> + <function-decl name='zpool_add_propname' mangled-name='zpool_add_propname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_add_propname'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='80f4b756' name='propname'/> + <return type-id='48b5725f'/> + </function-decl> <function-decl name='zpool_get_errlog' mangled-name='zpool_get_errlog' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_errlog'> <parameter type-id='4c81de99' name='zhp'/> <parameter type-id='857bb57e' name='nverrlistp'/> @@ -3699,9 +7899,48 @@ <parameter type-id='80f4b756' name='propval'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_ddt_prune' mangled-name='zpool_ddt_prune' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_ddt_prune'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='02e25ab0' name='unit'/> + <parameter type-id='9c313c2d' name='amount'/> + <return type-id='95e97e5e'/> + </function-decl> </abi-instr> <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'> + <array-type-def dimensions='1' type-id='8901473c' size-in-bits='576' id='f5da478b'> + <subrange length='1' type-id='7359adad' id='52f813b4'/> + </array-type-def> + <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='384' id='73b82f0f'> + <subrange length='12' type-id='7359adad' id='84827bdc'/> + </array-type-def> + <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='512' id='5d4efd44'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='2176' id='8c2bcad1'> + <subrange length='34' type-id='7359adad' id='6a6a7e00'/> + </array-type-def> + <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='b96825af' size-in-bits='96' id='fa8ef949'> + <subrange length='12' type-id='7359adad' id='84827bdc'/> + </array-type-def> + <array-type-def dimensions='1' type-id='b96825af' size-in-bits='128' id='fa9986a5'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='b96825af' size-in-bits='40' id='0f4ddd0b'> + <subrange length='5' type-id='7359adad' id='53010e10'/> + </array-type-def> + <array-type-def dimensions='1' type-id='b96825af' size-in-bits='48' id='0f562bd0'> + <subrange length='6' type-id='7359adad' id='52fa524b'/> + </array-type-def> + <array-type-def dimensions='1' type-id='b96825af' size-in-bits='64' id='13339fda'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='256' id='209ef23f'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <class-decl name='sendflags' size-in-bits='576' 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'/> </data-member> @@ -3733,30 +7972,33 @@ <var-decl name='progress' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='largeblock' type-id='c19b74c3' visibility='default'/> + <var-decl name='progressastitle' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='352'> - <var-decl name='embed_data' type-id='c19b74c3' visibility='default'/> + <var-decl name='largeblock' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='compress' type-id='c19b74c3' visibility='default'/> + <var-decl name='embed_data' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='416'> - <var-decl name='raw' type-id='c19b74c3' visibility='default'/> + <var-decl name='compress' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='backup' type-id='c19b74c3' visibility='default'/> + <var-decl name='raw' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='480'> - <var-decl name='holds' type-id='c19b74c3' visibility='default'/> + <var-decl name='backup' type-id='c19b74c3' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='holds' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='544'> <var-decl name='saved' type-id='c19b74c3' visibility='default'/> </data-member> </class-decl> <typedef-decl name='sendflags_t' type-id='f6aa15be' id='945467e6'/> <typedef-decl name='snapfilter_cb_t' type-id='d2a5e211' id='3d3ffb69'/> - <class-decl name='recvflags' size-in-bits='416' is-struct='yes' visibility='default' id='34a384dc'> + <class-decl name='recvflags' size-in-bits='448' is-struct='yes' visibility='default' id='34a384dc'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='verbose' type-id='c19b74c3' visibility='default'/> </data-member> @@ -3796,12 +8038,795 @@ <data-member access='public' layout-offset-in-bits='384'> <var-decl name='forceunmount' type-id='c19b74c3' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='416'> + <var-decl name='heal' type-id='c19b74c3' visibility='default'/> + </data-member> </class-decl> <typedef-decl name='recvflags_t' type-id='34a384dc' id='9e59d1d4'/> - <pointer-type-def type-id='f20fbd51' size-in-bits='64' id='a3681dea'/> + <enum-decl name='lzc_send_flags' id='bfbd3c8e'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='LZC_SEND_FLAG_EMBED_DATA' value='1'/> + <enumerator name='LZC_SEND_FLAG_LARGE_BLOCK' value='2'/> + <enumerator name='LZC_SEND_FLAG_COMPRESS' value='4'/> + <enumerator name='LZC_SEND_FLAG_RAW' value='8'/> + <enumerator name='LZC_SEND_FLAG_SAVED' value='16'/> + </enum-decl> + <class-decl name='ddt_key_t' size-in-bits='320' is-struct='yes' naming-typedef-id='67f6d2cf' visibility='default' id='5fae1718'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ddk_cksum' type-id='39730d0b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='ddk_prop' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ddt_key_t' type-id='5fae1718' id='67f6d2cf'/> + <enum-decl name='dmu_object_type' id='04b3b0b9'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='DMU_OT_NONE' value='0'/> + <enumerator name='DMU_OT_OBJECT_DIRECTORY' value='1'/> + <enumerator name='DMU_OT_OBJECT_ARRAY' value='2'/> + <enumerator name='DMU_OT_PACKED_NVLIST' value='3'/> + <enumerator name='DMU_OT_PACKED_NVLIST_SIZE' value='4'/> + <enumerator name='DMU_OT_BPOBJ' value='5'/> + <enumerator name='DMU_OT_BPOBJ_HDR' value='6'/> + <enumerator name='DMU_OT_SPACE_MAP_HEADER' value='7'/> + <enumerator name='DMU_OT_SPACE_MAP' value='8'/> + <enumerator name='DMU_OT_INTENT_LOG' value='9'/> + <enumerator name='DMU_OT_DNODE' value='10'/> + <enumerator name='DMU_OT_OBJSET' value='11'/> + <enumerator name='DMU_OT_DSL_DIR' value='12'/> + <enumerator name='DMU_OT_DSL_DIR_CHILD_MAP' value='13'/> + <enumerator name='DMU_OT_DSL_DS_SNAP_MAP' value='14'/> + <enumerator name='DMU_OT_DSL_PROPS' value='15'/> + <enumerator name='DMU_OT_DSL_DATASET' value='16'/> + <enumerator name='DMU_OT_ZNODE' value='17'/> + <enumerator name='DMU_OT_OLDACL' value='18'/> + <enumerator name='DMU_OT_PLAIN_FILE_CONTENTS' value='19'/> + <enumerator name='DMU_OT_DIRECTORY_CONTENTS' value='20'/> + <enumerator name='DMU_OT_MASTER_NODE' value='21'/> + <enumerator name='DMU_OT_UNLINKED_SET' value='22'/> + <enumerator name='DMU_OT_ZVOL' value='23'/> + <enumerator name='DMU_OT_ZVOL_PROP' value='24'/> + <enumerator name='DMU_OT_PLAIN_OTHER' value='25'/> + <enumerator name='DMU_OT_UINT64_OTHER' value='26'/> + <enumerator name='DMU_OT_ZAP_OTHER' value='27'/> + <enumerator name='DMU_OT_ERROR_LOG' value='28'/> + <enumerator name='DMU_OT_SPA_HISTORY' value='29'/> + <enumerator name='DMU_OT_SPA_HISTORY_OFFSETS' value='30'/> + <enumerator name='DMU_OT_POOL_PROPS' value='31'/> + <enumerator name='DMU_OT_DSL_PERMS' value='32'/> + <enumerator name='DMU_OT_ACL' value='33'/> + <enumerator name='DMU_OT_SYSACL' value='34'/> + <enumerator name='DMU_OT_FUID' value='35'/> + <enumerator name='DMU_OT_FUID_SIZE' value='36'/> + <enumerator name='DMU_OT_NEXT_CLONES' value='37'/> + <enumerator name='DMU_OT_SCAN_QUEUE' value='38'/> + <enumerator name='DMU_OT_USERGROUP_USED' value='39'/> + <enumerator name='DMU_OT_USERGROUP_QUOTA' value='40'/> + <enumerator name='DMU_OT_USERREFS' value='41'/> + <enumerator name='DMU_OT_DDT_ZAP' value='42'/> + <enumerator name='DMU_OT_DDT_STATS' value='43'/> + <enumerator name='DMU_OT_SA' value='44'/> + <enumerator name='DMU_OT_SA_MASTER_NODE' value='45'/> + <enumerator name='DMU_OT_SA_ATTR_REGISTRATION' value='46'/> + <enumerator name='DMU_OT_SA_ATTR_LAYOUTS' value='47'/> + <enumerator name='DMU_OT_SCAN_XLATE' value='48'/> + <enumerator name='DMU_OT_DEDUP' value='49'/> + <enumerator name='DMU_OT_DEADLIST' value='50'/> + <enumerator name='DMU_OT_DEADLIST_HDR' value='51'/> + <enumerator name='DMU_OT_DSL_CLONES' value='52'/> + <enumerator name='DMU_OT_BPOBJ_SUBOBJ' value='53'/> + <enumerator name='DMU_OT_NUMTYPES' value='54'/> + <enumerator name='DMU_OTN_UINT8_DATA' value='128'/> + <enumerator name='DMU_OTN_UINT8_METADATA' value='192'/> + <enumerator name='DMU_OTN_UINT16_DATA' value='129'/> + <enumerator name='DMU_OTN_UINT16_METADATA' value='193'/> + <enumerator name='DMU_OTN_UINT32_DATA' value='130'/> + <enumerator name='DMU_OTN_UINT32_METADATA' value='194'/> + <enumerator name='DMU_OTN_UINT64_DATA' value='131'/> + <enumerator name='DMU_OTN_UINT64_METADATA' value='195'/> + <enumerator name='DMU_OTN_ZAP_DATA' value='132'/> + <enumerator name='DMU_OTN_ZAP_METADATA' value='196'/> + <enumerator name='DMU_OTN_UINT8_ENC_DATA' value='160'/> + <enumerator name='DMU_OTN_UINT8_ENC_METADATA' value='224'/> + <enumerator name='DMU_OTN_UINT16_ENC_DATA' value='161'/> + <enumerator name='DMU_OTN_UINT16_ENC_METADATA' value='225'/> + <enumerator name='DMU_OTN_UINT32_ENC_DATA' value='162'/> + <enumerator name='DMU_OTN_UINT32_ENC_METADATA' value='226'/> + <enumerator name='DMU_OTN_UINT64_ENC_DATA' value='163'/> + <enumerator name='DMU_OTN_UINT64_ENC_METADATA' value='227'/> + <enumerator name='DMU_OTN_ZAP_ENC_DATA' value='164'/> + <enumerator name='DMU_OTN_ZAP_ENC_METADATA' value='228'/> + </enum-decl> + <typedef-decl name='dmu_object_type_t' type-id='04b3b0b9' id='5c9d8906'/> + <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'/> + <class-decl name='dmu_replay_record' size-in-bits='2496' is-struct='yes' visibility='default' id='781a52d7'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_type' type-id='08f5ca17' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='drr_payloadlen' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_u' type-id='ac5ab599' visibility='default'/> + </data-member> + </class-decl> + <enum-decl name='__anonymous_enum__' is-anonymous='yes' id='08f5ca17'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='DRR_BEGIN' value='0'/> + <enumerator name='DRR_OBJECT' value='1'/> + <enumerator name='DRR_FREEOBJECTS' value='2'/> + <enumerator name='DRR_WRITE' value='3'/> + <enumerator name='DRR_FREE' value='4'/> + <enumerator name='DRR_END' value='5'/> + <enumerator name='DRR_WRITE_BYREF' value='6'/> + <enumerator name='DRR_SPILL' value='7'/> + <enumerator name='DRR_WRITE_EMBEDDED' value='8'/> + <enumerator name='DRR_OBJECT_RANGE' value='9'/> + <enumerator name='DRR_REDACT' value='10'/> + <enumerator name='DRR_NUMTYPES' value='11'/> + </enum-decl> + <union-decl name='__anonymous_union__' size-in-bits='2432' is-anonymous='yes' visibility='default' id='ac5ab599'> + <data-member access='public'> + <var-decl name='drr_begin' type-id='09fcdc01' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_end' type-id='6ee25631' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_object' type-id='f9ad530b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_freeobjects' type-id='a27d958e' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_write' type-id='4cc69e4b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_free' type-id='c836cfd2' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_write_byref' type-id='e511cdce' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_spill' type-id='1e69a80a' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_write_embedded' type-id='98b1345e' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_object_range' type-id='aba1f9e1' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_redact' type-id='50389039' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='drr_checksum' type-id='a5fe3647' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='drr_end' size-in-bits='320' is-struct='yes' visibility='default' id='6ee25631'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_checksum' type-id='39730d0b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_object' size-in-bits='448' is-struct='yes' visibility='default' id='f9ad530b'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_type' type-id='5c9d8906' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='drr_bonustype' type-id='5c9d8906' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_blksz' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='drr_bonuslen' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_checksumtype' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='200'> + <var-decl name='drr_compress' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='208'> + <var-decl name='drr_dn_slots' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='216'> + <var-decl name='drr_flags' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='drr_raw_bonuslen' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='drr_indblkshift' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='328'> + <var-decl name='drr_nlevels' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='336'> + <var-decl name='drr_nblkptr' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='344'> + <var-decl name='drr_pad' type-id='0f4ddd0b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='drr_maxblkid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_freeobjects' size-in-bits='192' is-struct='yes' visibility='default' id='a27d958e'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_firstobj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_numobjs' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_write' size-in-bits='1088' is-struct='yes' visibility='default' id='4cc69e4b'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_type' type-id='5c9d8906' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='drr_pad' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_logical_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='drr_checksumtype' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='328'> + <var-decl name='drr_flags' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='336'> + <var-decl name='drr_compressiontype' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='344'> + <var-decl name='drr_pad2' type-id='0f4ddd0b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='drr_key' type-id='67f6d2cf' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='drr_compressed_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='768'> + <var-decl name='drr_salt' type-id='13339fda' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='drr_iv' type-id='fa8ef949' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='928'> + <var-decl name='drr_mac' type-id='fa9986a5' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_free' size-in-bits='256' is-struct='yes' visibility='default' id='c836cfd2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_length' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_write_byref' size-in-bits='832' is-struct='yes' visibility='default' id='e511cdce'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_length' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_refguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='drr_refobject' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='drr_refoffset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='drr_checksumtype' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='456'> + <var-decl name='drr_flags' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='464'> + <var-decl name='drr_pad2' type-id='0f562bd0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='drr_key' type-id='67f6d2cf' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_spill' size-in-bits='640' is-struct='yes' visibility='default' id='1e69a80a'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_length' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_flags' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='200'> + <var-decl name='drr_compressiontype' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='208'> + <var-decl name='drr_pad' type-id='0f562bd0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_compressed_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='drr_salt' type-id='13339fda' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='drr_iv' type-id='fa8ef949' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='480'> + <var-decl name='drr_mac' type-id='fa9986a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='608'> + <var-decl name='drr_type' type-id='5c9d8906' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_write_embedded' size-in-bits='384' is-struct='yes' visibility='default' id='98b1345e'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_length' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_compression' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='264'> + <var-decl name='drr_etype' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='272'> + <var-decl name='drr_pad' type-id='0f562bd0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='drr_lsize' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='352'> + <var-decl name='drr_psize' type-id='8f92235e' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_object_range' size-in-bits='512' is-struct='yes' visibility='default' id='aba1f9e1'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_firstobj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_numslots' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_salt' type-id='13339fda' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='drr_iv' type-id='fa8ef949' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='352'> + <var-decl name='drr_mac' type-id='fa9986a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='480'> + <var-decl name='drr_flags' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='488'> + <var-decl name='drr_pad' type-id='d3490169' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_redact' size-in-bits='256' is-struct='yes' visibility='default' id='50389039'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='drr_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='drr_length' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='drr_checksum' size-in-bits='2432' is-struct='yes' visibility='default' id='a5fe3647'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='drr_pad' type-id='8c2bcad1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2176'> + <var-decl name='drr_checksum' type-id='39730d0b' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__cancel_jmp_buf_tag' size-in-bits='576' is-struct='yes' visibility='default' id='8901473c'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__cancel_jmp_buf' type-id='379a1ab7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='__mask_was_saved' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='__pthread_unwind_buf_t' size-in-bits='832' is-struct='yes' naming-typedef-id='4423cf7f' visibility='default' id='a0abc656'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__cancel_jmp_buf' type-id='f5da478b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='__pad' type-id='209ef23f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__pthread_unwind_buf_t' type-id='a0abc656' id='4423cf7f'/> + <typedef-decl name='__jmp_buf' type-id='5d4efd44' id='379a1ab7'/> + <typedef-decl name='__clockid_t' type-id='95e97e5e' id='08f9a87a'/> + <typedef-decl name='__timer_t' type-id='eaa32e2f' id='df209b60'/> + <typedef-decl name='clockid_t' type-id='08f9a87a' id='a1c3b834'/> + <class-decl name='sigevent' size-in-bits='512' is-struct='yes' visibility='default' id='519bc206'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='sigev_value' type-id='eabacd01' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='sigev_signo' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='sigev_notify' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_sigev_un' type-id='ac5ab59a' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__1' size-in-bits='384' is-anonymous='yes' visibility='default' id='ac5ab59a'> + <data-member access='public'> + <var-decl name='_pad' type-id='73b82f0f' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_tid' type-id='3629bad8' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='_sigev_thread' type-id='e7f43f7c' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7c'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_function' type-id='5f147c28' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_attribute' type-id='7347a39e' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='itimerspec' size-in-bits='256' is-struct='yes' visibility='default' id='acbdbcc6'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='it_interval' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='it_value' type-id='a9c79a1f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='timer_t' type-id='df209b60' id='b07ae406'/> + <typedef-decl name='Byte' type-id='002ac4a6' id='efb9ba06'/> + <typedef-decl name='uLong' type-id='7359adad' id='5bbcce85'/> + <typedef-decl name='Bytef' type-id='efb9ba06' id='c1606520'/> + <typedef-decl name='uLongf' type-id='5bbcce85' id='4d39af59'/> + <pointer-type-def type-id='c1606520' size-in-bits='64' id='4c667223'/> + <pointer-type-def type-id='8901473c' size-in-bits='64' id='eb91b7ea'/> + <pointer-type-def type-id='4423cf7f' size-in-bits='64' id='ba7c727c'/> + <pointer-type-def type-id='b9c97942' size-in-bits='64' id='bbf06c47'/> + <qualified-type-def type-id='bbf06c47' restrict='yes' id='65e6ec45'/> + <qualified-type-def type-id='c1606520' const='yes' id='a6124a50'/> + <pointer-type-def type-id='a6124a50' size-in-bits='64' id='e8cb3e0e'/> + <qualified-type-def type-id='b9c97942' const='yes' id='191f6b72'/> + <pointer-type-def type-id='191f6b72' size-in-bits='64' id='e475fb88'/> + <qualified-type-def type-id='e475fb88' restrict='yes' id='5a8729d0'/> + <qualified-type-def type-id='781a52d7' const='yes' id='413ab2b8'/> + <pointer-type-def type-id='413ab2b8' size-in-bits='64' id='41671bd6'/> + <qualified-type-def type-id='acbdbcc6' const='yes' id='4ba62af7'/> + <pointer-type-def type-id='4ba62af7' size-in-bits='64' id='f39579e7'/> + <qualified-type-def type-id='f39579e7' restrict='yes' id='9b23e165'/> + <pointer-type-def type-id='c70fa2e8' size-in-bits='64' id='2e711a2a'/> + <pointer-type-def type-id='3ff5601b' size-in-bits='64' id='4aafb922'/> + <pointer-type-def type-id='acbdbcc6' size-in-bits='64' id='116842ac'/> + <qualified-type-def type-id='116842ac' restrict='yes' id='3d3c4cf4'/> <pointer-type-def type-id='9e59d1d4' size-in-bits='64' id='4ea84b4f'/> <pointer-type-def type-id='945467e6' size-in-bits='64' id='8def7735'/> + <pointer-type-def type-id='519bc206' size-in-bits='64' id='ef2f159c'/> + <qualified-type-def type-id='ef2f159c' restrict='yes' id='de0eb5a4'/> <pointer-type-def type-id='3d3ffb69' size-in-bits='64' id='72a26210'/> + <pointer-type-def type-id='c9d12d66' size-in-bits='64' id='b2eb2c3f'/> + <pointer-type-def type-id='b07ae406' size-in-bits='64' id='36e89359'/> + <qualified-type-def type-id='36e89359' restrict='yes' id='de98c2bb'/> + <pointer-type-def type-id='a9c79a1f' size-in-bits='64' id='3d83ba87'/> + <pointer-type-def type-id='4d39af59' size-in-bits='64' id='60db3356'/> + <pointer-type-def type-id='f1abb096' size-in-bits='64' id='5f147c28'/> + <pointer-type-def type-id='39730d0b' size-in-bits='64' id='c24fc2ee'/> + <function-decl name='nvlist_print' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_get_pool_handle' mangled-name='zfs_get_pool_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_pool_handle'> + <parameter type-id='fcd57163'/> + <return type-id='4c81de99'/> + </function-decl> + <function-decl name='lzc_send_wrapper' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2e711a2a'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_send_redacted' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='bfbd3c8e'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_send_resume_redacted' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='bfbd3c8e'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_receive_with_cmdprops' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='ae3e8ca6'/> + <parameter type-id='3502e3ff'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='41671bd6'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_receive_with_heal' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='ae3e8ca6'/> + <parameter type-id='3502e3ff'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='41671bd6'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_send_space' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='bfbd3c8e'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_send_space_resume_redacted' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='bfbd3c8e'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_rename' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_setproctitle' mangled-name='zfs_setproctitle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_setproctitle'> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </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'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='fba6cb51'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_add_boolean' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_boolean' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvpair_value_int32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <parameter type-id='4aafb922'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fnvlist_size' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='fnvlist_merge' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_remove' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_lookup_boolean_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </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'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='c24fc2ee'/> + <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'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='eaa32e2f'/> + <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'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_exit' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__pthread_register_cancel' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ba7c727c'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__pthread_unregister_cancel' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ba7c727c'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__pthread_unwind_next' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ba7c727c'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='sigaddset' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9e80f729'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='perror' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strndup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='time' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b2eb2c3f'/> + <return type-id='c9d12d66'/> + </function-decl> + <function-decl name='clock_gettime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a1c3b834'/> + <parameter type-id='3d83ba87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='timer_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a1c3b834'/> + <parameter type-id='de0eb5a4'/> + <parameter type-id='de98c2bb'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='timer_delete' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b07ae406'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='timer_settime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b07ae406'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9b23e165'/> + <parameter type-id='3d3c4cf4'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='write' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='pause' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_sigmask' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='5a8729d0'/> + <parameter type-id='65e6ec45'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='uncompress' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4c667223'/> + <parameter type-id='60db3356'/> + <parameter type-id='e8cb3e0e'/> + <parameter type-id='5bbcce85'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='create_parents' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='26a90f95'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zfs_send_progress' mangled-name='zfs_send_progress' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_send_progress'> <parameter type-id='9200a744' name='zhp'/> <parameter type-id='95e97e5e' name='fd'/> @@ -3856,78 +8881,48 @@ <parameter type-id='a3681dea' name='stream_avl'/> <return type-id='95e97e5e'/> </function-decl> + <function-type size-in-bits='64' id='c70fa2e8'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> <function-type size-in-bits='64' id='d2a5e211'> <parameter type-id='9200a744'/> <parameter type-id='eaa32e2f'/> <return type-id='c19b74c3'/> </function-type> + <function-type size-in-bits='64' id='f1abb096'> + <parameter type-id='eabacd01'/> + <return type-id='48b5725f'/> + </function-type> </abi-instr> <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'/> - <enumerator name='ZPOOL_STATUS_MISSING_DEV_R' value='1'/> - <enumerator name='ZPOOL_STATUS_MISSING_DEV_NR' value='2'/> - <enumerator name='ZPOOL_STATUS_CORRUPT_LABEL_R' value='3'/> - <enumerator name='ZPOOL_STATUS_CORRUPT_LABEL_NR' value='4'/> - <enumerator name='ZPOOL_STATUS_BAD_GUID_SUM' value='5'/> - <enumerator name='ZPOOL_STATUS_CORRUPT_POOL' value='6'/> - <enumerator name='ZPOOL_STATUS_CORRUPT_DATA' value='7'/> - <enumerator name='ZPOOL_STATUS_FAILING_DEV' value='8'/> - <enumerator name='ZPOOL_STATUS_VERSION_NEWER' value='9'/> - <enumerator name='ZPOOL_STATUS_HOSTID_MISMATCH' value='10'/> - <enumerator name='ZPOOL_STATUS_HOSTID_ACTIVE' value='11'/> - <enumerator name='ZPOOL_STATUS_HOSTID_REQUIRED' value='12'/> - <enumerator name='ZPOOL_STATUS_IO_FAILURE_WAIT' value='13'/> - <enumerator name='ZPOOL_STATUS_IO_FAILURE_CONTINUE' value='14'/> - <enumerator name='ZPOOL_STATUS_IO_FAILURE_MMP' value='15'/> - <enumerator name='ZPOOL_STATUS_BAD_LOG' value='16'/> - <enumerator name='ZPOOL_STATUS_ERRATA' value='17'/> - <enumerator name='ZPOOL_STATUS_UNSUP_FEAT_READ' value='18'/> - <enumerator name='ZPOOL_STATUS_UNSUP_FEAT_WRITE' value='19'/> - <enumerator name='ZPOOL_STATUS_FAULTED_DEV_R' value='20'/> - <enumerator name='ZPOOL_STATUS_FAULTED_DEV_NR' value='21'/> - <enumerator name='ZPOOL_STATUS_VERSION_OLDER' value='22'/> - <enumerator name='ZPOOL_STATUS_FEAT_DISABLED' value='23'/> - <enumerator name='ZPOOL_STATUS_RESILVERING' value='24'/> - <enumerator name='ZPOOL_STATUS_OFFLINE_DEV' value='25'/> - <enumerator name='ZPOOL_STATUS_REMOVED_DEV' value='26'/> - <enumerator name='ZPOOL_STATUS_REBUILDING' value='27'/> - <enumerator name='ZPOOL_STATUS_REBUILD_SCRUB' value='28'/> - <enumerator name='ZPOOL_STATUS_NON_NATIVE_ASHIFT' value='29'/> - <enumerator name='ZPOOL_STATUS_COMPATIBILITY_ERR' value='30'/> - <enumerator name='ZPOOL_STATUS_INCOMPATIBLE_FEAT' value='31'/> - <enumerator name='ZPOOL_STATUS_OK' value='32'/> - </enum-decl> - <typedef-decl name='zpool_status_t' type-id='5e770b40' id='d3dd6294'/> - <enum-decl name='zpool_errata' id='d9abbf54'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='ZPOOL_ERRATA_NONE' value='0'/> - <enumerator name='ZPOOL_ERRATA_ZOL_2094_SCRUB' value='1'/> - <enumerator name='ZPOOL_ERRATA_ZOL_2094_ASYNC_DESTROY' value='2'/> - <enumerator name='ZPOOL_ERRATA_ZOL_6845_ENCRYPTION' value='3'/> - <enumerator name='ZPOOL_ERRATA_ZOL_8308_ENCRYPTION' value='4'/> - </enum-decl> - <typedef-decl name='zpool_errata_t' type-id='d9abbf54' id='688c495b'/> - <pointer-type-def type-id='688c495b' size-in-bits='64' id='cec6f2e4'/> - <function-decl name='zpool_get_status' mangled-name='zpool_get_status' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_status'> - <parameter type-id='4c81de99' name='zhp'/> - <parameter type-id='9b23c9ad' name='msgid'/> - <parameter type-id='cec6f2e4' name='errata'/> - <return type-id='d3dd6294'/> - </function-decl> <function-decl name='zpool_import_status' mangled-name='zpool_import_status' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_import_status'> <parameter type-id='5ce45b60' name='config'/> - <parameter type-id='9b23c9ad' name='msgid'/> + <parameter type-id='7d3cd834' name='msgid'/> <parameter type-id='cec6f2e4' name='errata'/> <return type-id='d3dd6294'/> </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libzfs/libzfs_util.c' language='LANG_C99'> + <class-decl name='__va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='d5027220'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gp_offset' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='fp_offset' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='overflow_arg_area' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='reg_save_area' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <type-decl name='double' size-in-bits='64' id='a0eb0f08'/> <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> - <type-decl name='variadic parameter type' id='2c1145c5'/> <array-type-def dimensions='1' type-id='19cefcee' size-in-bits='160' alignment-in-bits='32' id='3fcf57d2'> <subrange length='5' type-id='7359adad' id='53010e10'/> </array-type-def> @@ -3953,7 +8948,7 @@ </data-member> </class-decl> <typedef-decl name='vdev_cbdata_t' type-id='b8006be8' id='a9679c94'/> - <class-decl name='zprop_get_cbdata' size-in-bits='832' is-struct='yes' visibility='default' id='f3d3c319'> + <class-decl name='zprop_get_cbdata' size-in-bits='960' is-struct='yes' visibility='default' id='f3d3c319'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='cb_sources' type-id='95e97e5e' visibility='default'/> </data-member> @@ -3972,6 +8967,9 @@ <data-member access='public' layout-offset-in-bits='448'> <var-decl name='cb_first' type-id='c19b74c3' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='480'> + <var-decl name='cb_json' type-id='c19b74c3' visibility='default'/> + </data-member> <data-member access='public' layout-offset-in-bits='512'> <var-decl name='cb_proplist' type-id='3a9b2288' visibility='default'/> </data-member> @@ -3981,12 +8979,345 @@ <data-member access='public' layout-offset-in-bits='640'> <var-decl name='cb_vdevs' type-id='a9679c94' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='cb_jsobj' type-id='5ce45b60' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='896'> + <var-decl name='cb_json_as_int' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='928'> + <var-decl name='cb_json_pool_key_guid' type-id='c19b74c3' visibility='default'/> + </data-member> </class-decl> <typedef-decl name='zprop_get_cbdata_t' type-id='f3d3c319' id='f3d87113'/> <typedef-decl name='zprop_func' type-id='2e711a2a' id='1ec3747a'/> + <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'/> + <class-decl name='extmnttab' size-in-bits='320' is-struct='yes' visibility='default' id='0c544dc0'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='mnt_special' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='mnt_mountp' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='mnt_fstype' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mnt_mntopts' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='mnt_major' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='mnt_minor' type-id='3502e3ff' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='d5027220' size-in-bits='64' id='b7f2d5e6'/> + <qualified-type-def type-id='26a90f95' const='yes' id='57de658a'/> + <pointer-type-def type-id='57de658a' size-in-bits='64' id='f319fae0'/> <pointer-type-def type-id='9b23c9ad' size-in-bits='64' id='c0563f85'/> - <pointer-type-def type-id='c70fa2e8' size-in-bits='64' id='2e711a2a'/> + <qualified-type-def type-id='33f57a65' const='yes' id='21fd6035'/> + <pointer-type-def type-id='21fd6035' size-in-bits='64' id='a0de50cd'/> + <pointer-type-def type-id='a0de50cd' size-in-bits='64' id='24f95ba5'/> + <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='0c544dc0' size-in-bits='64' id='394fc496'/> + <pointer-type-def type-id='aca3bac8' size-in-bits='64' id='d33f11cb'/> + <qualified-type-def type-id='d33f11cb' restrict='yes' id='5c53ba29'/> + <pointer-type-def type-id='ffa52b96' size-in-bits='64' id='76c8174b'/> <pointer-type-def type-id='f3d87113' size-in-bits='64' id='0d2a0670'/> + <function-decl name='nvlist_print_json' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <parameter type-id='5ce45b60'/> + <return type-id='95e97e5e'/> + </function-decl> + <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'/> + <parameter type-id='4c81de99'/> + <parameter type-id='80f4b756'/> + <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'> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='libzfs_core_init' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='libzfs_core_fini' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zfs_get_underlying_path' mangled-name='zfs_get_underlying_path' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_underlying_path'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </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'/> + <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> + <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-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_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='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_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='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='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'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='2e45de5d'/> + <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'/> + <parameter type-id='2e45de5d'/> + <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'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5d6479ae'/> + <parameter type-id='2e45de5d'/> + <return type-id='95e97e5e'/> + </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'/> + <parameter type-id='2e45de5d'/> + <return type-id='80f4b756'/> + </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'/> + <parameter type-id='37e3bd22'/> + <parameter type-id='2e45de5d'/> + <return type-id='b59d7dce'/> + </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'/> + <parameter type-id='2e45de5d'/> + <parameter type-id='c19b74c3'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='getextmntent' mangled-name='getextmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getextmntent'> + <parameter type-id='80f4b756'/> + <parameter type-id='394fc496'/> + <parameter type-id='62f7a03d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__ctype_toupper_loc' visibility='default' binding='global' size-in-bits='64'> + <return type-id='24f95ba5'/> + </function-decl> + <function-decl name='dlclose' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='regcomp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5c53ba29'/> + <parameter type-id='9d26089a'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='regfree' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='d33f11cb'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='putc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='puts' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strtod' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <return type-id='a0eb0f08'/> + </function-decl> + <function-decl name='realloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='exit' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strspn' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='strnlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='strncasecmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='access' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='dup2' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='execve' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='f319fae0'/> + <parameter type-id='f319fae0'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='execv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='f319fae0'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='execvp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='f319fae0'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='execvpe' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='f319fae0'/> + <parameter type-id='f319fae0'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_exit' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='setpgid' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3629bad8'/> + <parameter type-id='3629bad8'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fork' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='pow' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a0eb0f08'/> + <parameter type-id='a0eb0f08'/> + <return type-id='a0eb0f08'/> + </function-decl> + <function-decl name='__vfprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__vasprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='waitpid' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3629bad8'/> + <parameter type-id='7292109c'/> + <parameter type-id='95e97e5e'/> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='namespace_clear' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='libzfs_load_module' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='libzfs_errno' mangled-name='libzfs_errno' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_errno'> <parameter type-id='b0382bb3' name='hdl'/> <return type-id='95e97e5e'/> @@ -3999,12 +9330,6 @@ <parameter type-id='b0382bb3' name='hdl'/> <return type-id='80f4b756'/> </function-decl> - <function-decl name='zfs_standard_error' mangled-name='zfs_standard_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_standard_error'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='95e97e5e' name='error'/> - <parameter type-id='80f4b756' name='msg'/> - <return type-id='95e97e5e'/> - </function-decl> <function-decl name='libzfs_print_on_error' mangled-name='libzfs_print_on_error' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_print_on_error'> <parameter type-id='b0382bb3' name='hdl'/> <parameter type-id='c19b74c3' name='printerr'/> @@ -4037,10 +9362,6 @@ <parameter type-id='95e97e5e' name='count'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='libzfs_envvar_is_set' mangled-name='libzfs_envvar_is_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_envvar_is_set'> - <parameter type-id='26a90f95' name='envvar'/> - <return type-id='95e97e5e'/> - </function-decl> <function-decl name='libzfs_init' mangled-name='libzfs_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_init'> <return type-id='b0382bb3'/> </function-decl> @@ -4048,24 +9369,26 @@ <parameter type-id='b0382bb3' name='hdl'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zpool_get_handle' mangled-name='zpool_get_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_handle'> - <parameter type-id='4c81de99' name='zhp'/> - <return type-id='b0382bb3'/> - </function-decl> - <function-decl name='zfs_get_handle' mangled-name='zfs_get_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_handle'> - <parameter type-id='9200a744' name='zhp'/> - <return type-id='b0382bb3'/> - </function-decl> - <function-decl name='zfs_get_pool_handle' mangled-name='zfs_get_pool_handle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_pool_handle'> - <parameter type-id='fcd57163' name='zhp'/> - <return type-id='4c81de99'/> - </function-decl> <function-decl name='zfs_path_to_zhandle' mangled-name='zfs_path_to_zhandle' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_path_to_zhandle'> <parameter type-id='b0382bb3' name='hdl'/> <parameter type-id='80f4b756' name='path'/> <parameter type-id='2e45de5d' name='argtype'/> <return type-id='9200a744'/> </function-decl> + <function-decl name='zcmd_print_json' mangled-name='zcmd_print_json' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zcmd_print_json'> + <parameter type-id='5ce45b60' name='nvl'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zprop_nvlist_one_property' mangled-name='zprop_nvlist_one_property' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_nvlist_one_property'> + <parameter type-id='80f4b756' name='propname'/> + <parameter type-id='80f4b756' name='value'/> + <parameter type-id='a2256d42' name='sourcetype'/> + <parameter type-id='80f4b756' name='source'/> + <parameter type-id='80f4b756' name='recvd_value'/> + <parameter type-id='5ce45b60' name='nvl'/> + <parameter type-id='c19b74c3' name='as_int'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zprop_print_one_property' mangled-name='zprop_print_one_property' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_print_one_property'> <parameter type-id='80f4b756' name='name'/> <parameter type-id='0d2a0670' name='cbp'/> @@ -4076,10 +9399,15 @@ <parameter type-id='80f4b756' name='recvd_value'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zfs_nicestrtonum' mangled-name='zfs_nicestrtonum' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicestrtonum'> - <parameter type-id='b0382bb3' name='hdl'/> + <function-decl name='zprop_collect_property' mangled-name='zprop_collect_property' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_collect_property'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='0d2a0670' name='cbp'/> + <parameter type-id='80f4b756' name='propname'/> <parameter type-id='80f4b756' name='value'/> - <parameter type-id='5d6479ae' name='num'/> + <parameter type-id='a2256d42' name='sourcetype'/> + <parameter type-id='80f4b756' name='source'/> + <parameter type-id='80f4b756' name='recvd_value'/> + <parameter type-id='5ce45b60' name='nvl'/> <return type-id='95e97e5e'/> </function-decl> <function-decl name='zprop_get_list' mangled-name='zprop_get_list' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zprop_get_list'> @@ -4107,29 +9435,70 @@ <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'/> </function-decl> - <function-decl name='color_start' mangled-name='color_start' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='color_start'> - <parameter type-id='26a90f95' name='color'/> - <return type-id='48b5725f'/> + <function-decl name='zfs_version_nvlist' mangled-name='zfs_version_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_version_nvlist'> + <return type-id='5ce45b60'/> </function-decl> - <function-decl name='color_end' mangled-name='color_end' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='color_end'> - <return type-id='48b5725f'/> + <function-decl name='use_color' mangled-name='use_color' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='use_color'> + <return type-id='95e97e5e'/> </function-decl> <function-decl name='printf_color' mangled-name='printf_color' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='printf_color'> - <parameter type-id='26a90f95' name='color'/> - <parameter type-id='26a90f95' name='format'/> + <parameter type-id='80f4b756' name='color'/> + <parameter type-id='80f4b756' name='format'/> <parameter is-variadic='yes'/> <return type-id='95e97e5e'/> </function-decl> - <function-type size-in-bits='64' id='c70fa2e8'> - <parameter type-id='95e97e5e'/> - <parameter type-id='eaa32e2f'/> + <function-decl name='zpool_vdev_script_alloc_env' mangled-name='zpool_vdev_script_alloc_env' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_script_alloc_env'> + <parameter type-id='80f4b756' name='pool_name'/> + <parameter type-id='80f4b756' name='vdev_path'/> + <parameter type-id='80f4b756' name='vdev_upath'/> + <parameter type-id='80f4b756' name='vdev_enc_sysfs_path'/> + <parameter type-id='80f4b756' name='opt_key'/> + <parameter type-id='80f4b756' name='opt_val'/> + <return type-id='9b23c9ad'/> + </function-decl> + <function-decl name='zpool_vdev_script_free_env' mangled-name='zpool_vdev_script_free_env' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_vdev_script_free_env'> + <parameter type-id='9b23c9ad' name='env'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zpool_prepare_disk' mangled-name='zpool_prepare_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prepare_disk'> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='5ce45b60' name='vdev_nv'/> + <parameter type-id='80f4b756' name='prepare_str'/> + <parameter type-id='c0563f85' name='lines'/> + <parameter type-id='7292109c' name='lines_cnt'/> <return type-id='95e97e5e'/> - </function-type> + </function-decl> + <function-decl name='zpool_prepare_and_label_disk' mangled-name='zpool_prepare_and_label_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_prepare_and_label_disk'> + <parameter type-id='b0382bb3' name='hdl'/> + <parameter type-id='4c81de99' name='zhp'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='5ce45b60' name='vdev_nv'/> + <parameter type-id='80f4b756' name='prepare_str'/> + <parameter type-id='c0563f85' name='lines'/> + <parameter type-id='7292109c' name='lines_cnt'/> + <return type-id='95e97e5e'/> + </function-decl> </abi-instr> <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='geteuid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='cc5fcceb'/> + </function-decl> + <function-decl name='mount' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='7359adad'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='umount2' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> <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'/> + <parameter type-id='80f4b756' name='mntopts'/> <parameter type-id='1d2c2b85' name='mntflags'/> <parameter type-id='1d2c2b85' name='zfsflags'/> <parameter type-id='95e97e5e' name='sloppy'/> @@ -4147,273 +9516,204 @@ <function-decl name='zfs_mount_delegation_check' mangled-name='zfs_mount_delegation_check' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mount_delegation_check'> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zpool_disable_datasets_os' mangled-name='zpool_disable_datasets_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_datasets_os'> - <parameter type-id='4c81de99' name='zhp'/> - <parameter type-id='c19b74c3' name='force'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='zpool_disable_volume_os' mangled-name='zpool_disable_volume_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_volume_os'> - <parameter type-id='80f4b756' name='name'/> - <return type-id='48b5725f'/> - </function-decl> </abi-instr> <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'/> - <parameter type-id='80f4b756' name='name'/> - <return type-id='95e97e5e'/> - </function-decl> - </abi-instr> - <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 dimensions='1' type-id='a84c031d' size-in-bits='288' id='16e6f2c6'> + <subrange length='36' type-id='7359adad' id='ae666bde'/> </array-type-def> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='65536' id='163f6aa5'> - <subrange length='8192' type-id='7359adad' id='c88f397d'/> + <array-type-def dimensions='1' type-id='a65ae39c' size-in-bits='960' id='fa198beb'> + <subrange length='1' type-id='7359adad' id='52f813b4'/> </array-type-def> - <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='128' id='c1c22e6c'> - <subrange length='2' type-id='7359adad' id='52efc4ef'/> + <array-type-def dimensions='1' type-id='3502e3ff' size-in-bits='384' id='dba89ba3'> + <subrange length='12' type-id='7359adad' id='84827bdc'/> </array-type-def> - <array-type-def dimensions='1' type-id='b96825af' size-in-bits='24' id='d3490169'> - <subrange length='3' type-id='7359adad' id='56f209d2'/> + <array-type-def dimensions='1' type-id='3502e3ff' size-in-bits='256' id='01d84ed4'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> </array-type-def> - <class-decl name='drr_begin' size-in-bits='2432' is-struct='yes' visibility='default' id='09fcdc01'> + <class-decl name='dk_part' size-in-bits='960' is-struct='yes' visibility='default' id='a65ae39c'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='drr_magic' type-id='9c313c2d' visibility='default'/> + <var-decl name='p_start' type-id='804dc465' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='drr_versioninfo' type-id='9c313c2d' visibility='default'/> + <var-decl name='p_size' type-id='804dc465' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='drr_creation_time' type-id='9c313c2d' visibility='default'/> + <var-decl name='p_guid' type-id='214f32ea' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='drr_type' type-id='230f1e16' visibility='default'/> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='p_tag' type-id='d908a348' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='224'> - <var-decl name='drr_flags' type-id='8f92235e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='272'> + <var-decl name='p_flag' type-id='d908a348' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='drr_toguid' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='p_name' type-id='16e6f2c6' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='drr_fromguid' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='p_uguid' type-id='214f32ea' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='drr_toname' type-id='d1617432' visibility='default'/> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='p_resv' type-id='01d84ed4' visibility='default'/> </data-member> </class-decl> - <class-decl name='zinject_record' size-in-bits='2816' is-struct='yes' visibility='default' id='3216f820'> + <class-decl name='dk_gpt' size-in-bits='1920' is-struct='yes' visibility='default' id='dd4a2e5a'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zi_objset' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_version' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='efi_nparts' type-id='3502e3ff' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='zi_object' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_part_size' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='efi_lbasize' type-id='3502e3ff' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='zi_start' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_last_lba' type-id='804dc465' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='zi_end' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_first_u_lba' type-id='804dc465' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='zi_guid' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_last_u_lba' type-id='804dc465' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='zi_level' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='352'> - <var-decl name='zi_error' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='zi_type' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_disk_uguid' type-id='214f32ea' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='zi_freq' type-id='8f92235e' visibility='default'/> + <var-decl name='efi_flags' type-id='3502e3ff' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='480'> - <var-decl name='zi_failfast' type-id='8f92235e' visibility='default'/> + <var-decl name='efi_reserved1' type-id='3502e3ff' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='zi_func' type-id='d1617432' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2560'> - <var-decl name='zi_iotype' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2592'> - <var-decl name='zi_duration' type-id='3ff5601b' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2624'> - <var-decl name='zi_timer' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2688'> - <var-decl name='zi_nlanes' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2752'> - <var-decl name='zi_cmd' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2784'> - <var-decl name='zi_dvas' type-id='8f92235e' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zinject_record_t' type-id='3216f820' id='a4301ca6'/> - <class-decl name='zfs_share' size-in-bits='256' is-struct='yes' visibility='default' id='feb6f2da'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='z_exportdata' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='z_sharedata' type-id='9c313c2d' visibility='default'/> + <var-decl name='efi_altern_lba' type-id='804dc465' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='z_sharetype' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='efi_reserved' type-id='dba89ba3' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='z_sharemax' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='efi_parts' type-id='fa198beb' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='zfs_share_t' type-id='feb6f2da' id='ee5cec36'/> - <class-decl name='zfs_cmd' size-in-bits='109952' is-struct='yes' visibility='default' id='3522cd69'> + <class-decl name='uuid' size-in-bits='128' is-struct='yes' visibility='default' id='214f32ea'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zc_name' type-id='d16c6df4' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32768'> - <var-decl name='zc_nvlist_src' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32832'> - <var-decl name='zc_nvlist_src_size' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32896'> - <var-decl name='zc_nvlist_dst' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32960'> - <var-decl name='zc_nvlist_dst_size' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33024'> - <var-decl name='zc_nvlist_dst_filled' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33056'> - <var-decl name='zc_pad2' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33088'> - <var-decl name='zc_history' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33152'> - <var-decl name='zc_value' type-id='163f6aa5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='98688'> - <var-decl name='zc_string' type-id='d1617432' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100736'> - <var-decl name='zc_guid' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100800'> - <var-decl name='zc_nvlist_conf' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100864'> - <var-decl name='zc_nvlist_conf_size' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100928'> - <var-decl name='zc_cookie' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100992'> - <var-decl name='zc_objset_type' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101056'> - <var-decl name='zc_perm_action' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101120'> - <var-decl name='zc_history_len' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101184'> - <var-decl name='zc_history_offset' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101248'> - <var-decl name='zc_obj' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101312'> - <var-decl name='zc_iflags' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101376'> - <var-decl name='zc_share' type-id='ee5cec36' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101632'> - <var-decl name='zc_objset_stats' type-id='b2c14f17' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='103936'> - <var-decl name='zc_begin_record' type-id='09fcdc01' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='106368'> - <var-decl name='zc_inject_record' type-id='a4301ca6' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109184'> - <var-decl name='zc_defer_destroy' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109216'> - <var-decl name='zc_flags' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109248'> - <var-decl name='zc_action_handle' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109312'> - <var-decl name='zc_cleanup_fd' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109344'> - <var-decl name='zc_simple' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109352'> - <var-decl name='zc_pad' type-id='d3490169' visibility='default'/> + <var-decl name='time_low' type-id='8f92235e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='109376'> - <var-decl name='zc_sendobj' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='time_mid' type-id='149c6638' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='109440'> - <var-decl name='zc_fromobj' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='time_hi_and_version' type-id='149c6638' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='109504'> - <var-decl name='zc_createtxg' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='clock_seq_hi_and_reserved' type-id='b96825af' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='109568'> - <var-decl name='zc_stat' type-id='0371a9c7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='72'> + <var-decl name='clock_seq_low' type-id='b96825af' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='109888'> - <var-decl name='zc_zoneid' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='80'> + <var-decl name='node_addr' type-id='0f562bd0' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='zfs_cmd_t' type-id='3522cd69' id='a5559cdd'/> - <class-decl name='zfs_stat' size-in-bits='320' is-struct='yes' visibility='default' id='6417f0b9'> + <typedef-decl name='ushort_t' type-id='8efea9e5' id='d908a348'/> + <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> + <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/> + <pointer-type-def type-id='dd4a2e5a' size-in-bits='64' id='0d8119a8'/> + <pointer-type-def type-id='0d8119a8' size-in-bits='64' id='c43b27a6'/> + <function-decl name='zpool_label_disk_wait' mangled-name='zpool_label_disk_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_label_disk_wait'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <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'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='efi_alloc_and_init' mangled-name='efi_alloc_and_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_alloc_and_init'> + <parameter type-id='95e97e5e'/> + <parameter type-id='8f92235e'/> + <parameter type-id='c43b27a6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='efi_alloc_and_read' mangled-name='efi_alloc_and_read' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_alloc_and_read'> + <parameter type-id='95e97e5e'/> + <parameter type-id='c43b27a6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='efi_write' mangled-name='efi_write' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_write'> + <parameter type-id='95e97e5e'/> + <parameter type-id='0d8119a8'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='efi_rescan' mangled-name='efi_rescan' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_rescan'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='efi_free' mangled-name='efi_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_free'> + <parameter type-id='0d8119a8'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='efi_use_whole_disk' mangled-name='efi_use_whole_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_use_whole_disk'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rand' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fsync' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libzfs/os/linux/libzfs_util_os.c' language='LANG_C99'> + <typedef-decl name='nfds_t' type-id='7359adad' id='555eef66'/> + <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' id='b440e872'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zs_gen' type-id='9c313c2d' visibility='default'/> + <var-decl name='fd' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='zs_mode' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='zs_links' type-id='9c313c2d' visibility='default'/> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='events' type-id='a2185560' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='zs_ctime' type-id='c1c22e6c' visibility='default'/> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='revents' type-id='a2185560' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='zfs_stat_t' type-id='6417f0b9' id='0371a9c7'/> - <pointer-type-def type-id='a5559cdd' size-in-bits='64' id='e4ec4540'/> - <function-decl name='zfs_ioctl' mangled-name='zfs_ioctl' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_ioctl'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='95e97e5e' name='request'/> - <parameter type-id='e4ec4540' name='zc'/> + <pointer-type-def type-id='b440e872' size-in-bits='64' id='3ac36db0'/> + <function-decl name='__poll_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3ac36db0'/> + <parameter type-id='555eef66'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='7359adad'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='libzfs_error_init' mangled-name='libzfs_error_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_error_init'> - <parameter type-id='95e97e5e' name='error'/> - <return type-id='80f4b756'/> + <function-decl name='inotify_init1' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zfs_destroy_snaps_nvl_os' mangled-name='zfs_destroy_snaps_nvl_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_destroy_snaps_nvl_os'> - <parameter type-id='b0382bb3' name='hdl'/> - <parameter type-id='5ce45b60' name='snaps'/> + <function-decl name='inotify_add_watch' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter type-id='8f92235e'/> <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'> - <return type-id='26a90f95'/> + <function-decl name='timerfd_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='08f9a87a'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='timerfd_settime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='f39579e7'/> + <parameter type-id='116842ac'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='libzfs_error_init' mangled-name='libzfs_error_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_error_init'> + <parameter type-id='95e97e5e' name='error'/> + <return type-id='80f4b756'/> </function-decl> <function-decl name='zfs_userns' mangled-name='zfs_userns' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_userns'> <parameter type-id='9200a744' name='zhp'/> @@ -4423,19 +9723,37 @@ </function-decl> </abi-instr> <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'/> - <return type-id='95e97e5e'/> + <class-decl name='udev' is-struct='yes' visibility='default' is-declaration-only='yes' id='e4a7fb7f'/> + <class-decl name='udev_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='640b33ca'/> + <pointer-type-def type-id='e4a7fb7f' size-in-bits='64' id='025eefe7'/> + <pointer-type-def type-id='640b33ca' size-in-bits='64' id='b32bae08'/> + <class-decl name='udev' is-struct='yes' visibility='default' is-declaration-only='yes' id='e4a7fb7f'/> + <class-decl name='udev_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='640b33ca'/> + <function-decl name='udev_new' visibility='default' binding='global' size-in-bits='64'> + <return type-id='025eefe7'/> </function-decl> - <function-decl name='zfs_strip_partition' mangled-name='zfs_strip_partition' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_strip_partition'> - <parameter type-id='80f4b756' name='path'/> - <return type-id='26a90f95'/> + <function-decl name='udev_device_unref' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b32bae08'/> + <return type-id='b32bae08'/> </function-decl> - <function-decl name='zfs_strip_path' mangled-name='zfs_strip_path' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_strip_path'> - <parameter type-id='80f4b756' name='path'/> + <function-decl name='udev_device_new_from_subsystem_sysname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='025eefe7'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b32bae08'/> + </function-decl> + <function-decl name='udev_device_get_property_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b32bae08'/> + <parameter type-id='80f4b756'/> <return type-id='80f4b756'/> </function-decl> + <function-decl name='__readlink_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> <function-decl name='zfs_get_enclosure_sysfs_path' mangled-name='zfs_get_enclosure_sysfs_path' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_enclosure_sysfs_path'> <parameter type-id='80f4b756' name='dev_name'/> <return type-id='26a90f95'/> @@ -4448,29 +9766,129 @@ <parameter type-id='80f4b756' name='dev_name'/> <return type-id='c19b74c3'/> </function-decl> - <function-decl name='zfs_get_underlying_path' mangled-name='zfs_get_underlying_path' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_get_underlying_path'> - <parameter type-id='80f4b756' name='dev_name'/> - <return type-id='26a90f95'/> - </function-decl> <function-decl name='is_mpath_whole_disk' mangled-name='is_mpath_whole_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_mpath_whole_disk'> <parameter type-id='80f4b756' name='path'/> <return type-id='c19b74c3'/> </function-decl> </abi-instr> <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'/> - <pointer-type-def type-id='640b33ca' size-in-bits='64' id='b32bae08'/> - <class-decl name='udev_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='640b33ca'/> + <class-decl name='blkid_struct_cache' is-struct='yes' visibility='default' is-declaration-only='yes' id='09286066'/> + <class-decl name='blkid_struct_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='86223623'/> + <class-decl name='blkid_struct_dev_iterate' is-struct='yes' visibility='default' is-declaration-only='yes' id='d88420d6'/> + <class-decl name='udev_list_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='e7dbdca3'/> + <typedef-decl name='pool_vdev_iter_f' type-id='6c16a6c8' id='dff793e0'/> + <typedef-decl name='blkid_dev' type-id='8433f053' id='f47b023a'/> + <typedef-decl name='blkid_cache' type-id='940e3afc' id='0882dfdf'/> + <typedef-decl name='blkid_dev_iterate' type-id='b8fa2efc' id='f4760fa7'/> + <typedef-decl name='__useconds_t' type-id='f0981eeb' id='4e80d4b1'/> + <pointer-type-def type-id='0882dfdf' size-in-bits='64' id='2e3e7caa'/> + <pointer-type-def type-id='f47b023a' size-in-bits='64' id='d87f9b75'/> + <pointer-type-def type-id='09286066' size-in-bits='64' id='940e3afc'/> + <pointer-type-def type-id='86223623' size-in-bits='64' id='8433f053'/> + <pointer-type-def type-id='d88420d6' size-in-bits='64' id='b8fa2efc'/> + <pointer-type-def type-id='2ec2411e' size-in-bits='64' id='6c16a6c8'/> + <pointer-type-def type-id='e7dbdca3' size-in-bits='64' id='deabd0d3'/> + <class-decl name='blkid_struct_cache' is-struct='yes' visibility='default' is-declaration-only='yes' id='09286066'/> + <class-decl name='blkid_struct_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='86223623'/> + <class-decl name='blkid_struct_dev_iterate' is-struct='yes' visibility='default' is-declaration-only='yes' id='d88420d6'/> + <class-decl name='udev_list_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='e7dbdca3'/> + <function-decl name='for_each_vdev_in_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='dff793e0'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='label_paths' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5507783b'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='7d3cd834'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zutil_alloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5507783b'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='zutil_strdup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5507783b'/> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='slice_cache_compare' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='blkid_put_cache' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0882dfdf'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='blkid_get_cache' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2e3e7caa'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='blkid_dev_devname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f47b023a'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='blkid_dev_iterate_begin' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0882dfdf'/> + <return type-id='f4760fa7'/> + </function-decl> + <function-decl name='blkid_dev_set_search' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f4760fa7'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='blkid_dev_next' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f4760fa7'/> + <parameter type-id='d87f9b75'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='blkid_dev_iterate_end' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f4760fa7'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='blkid_probe_all_new' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0882dfdf'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='udev_unref' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='025eefe7'/> + <return type-id='025eefe7'/> + </function-decl> + <function-decl name='udev_list_entry_get_next' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='deabd0d3'/> + <return type-id='deabd0d3'/> + </function-decl> + <function-decl name='udev_list_entry_get_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='deabd0d3'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='udev_device_get_parent_with_subsystem_devtype' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b32bae08'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b32bae08'/> + </function-decl> + <function-decl name='udev_device_get_devlinks_list_entry' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b32bae08'/> + <return type-id='deabd0d3'/> + </function-decl> + <function-decl name='sched_yield' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='usleep' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4e80d4b1'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zfs_dev_flush' mangled-name='zfs_dev_flush' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dev_flush'> <parameter type-id='95e97e5e' name='fd'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zpool_default_search_paths' mangled-name='zpool_default_search_paths' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_default_search_paths'> - <parameter type-id='78c01427' name='count'/> - <return type-id='13956559'/> - </function-decl> <function-decl name='zfs_device_get_devid' mangled-name='zfs_device_get_devid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_device_get_devid'> <parameter type-id='b32bae08' name='dev'/> <parameter type-id='26a90f95' name='bufptr'/> @@ -4483,42 +9901,60 @@ <parameter type-id='b59d7dce' name='buflen'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='zpool_label_disk_wait' mangled-name='zpool_label_disk_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_label_disk_wait'> + <function-decl name='zpool_disk_wait' mangled-name='zpool_disk_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disk_wait'> <parameter type-id='80f4b756' name='path'/> - <parameter type-id='95e97e5e' name='timeout_ms'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='update_vdev_config_dev_strs' mangled-name='update_vdev_config_dev_strs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='update_vdev_config_dev_strs'> + <function-decl name='update_vdev_config_dev_sysfs_path' mangled-name='update_vdev_config_dev_sysfs_path' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='update_vdev_config_dev_sysfs_path'> <parameter type-id='5ce45b60' name='nv'/> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='80f4b756' name='key'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='2ec2411e'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='5ce45b60'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libzutil/os/linux/zutil_setproctitle.c' language='LANG_C99'> + <function-decl name='warnx' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='setenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='clearenv' visibility='default' binding='global' size-in-bits='64'> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zfs_setproctitle_init' mangled-name='zfs_setproctitle_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_setproctitle_init'> + <parameter type-id='95e97e5e' name='argc'/> + <parameter type-id='9b23c9ad' name='argv'/> + <parameter type-id='9b23c9ad' name='envp'/> <return type-id='48b5725f'/> </function-decl> </abi-instr> <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'> - <parameter type-id='80f4b756' name='path'/> - <return type-id='80f4b756'/> + <function-decl name='zpool_default_search_paths' mangled-name='zpool_default_search_paths' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_default_search_paths'> + <parameter type-id='78c01427'/> + <return type-id='13956559'/> </function-decl> <function-decl name='zfs_dirnamelen' mangled-name='zfs_dirnamelen' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dirnamelen'> <parameter type-id='80f4b756' name='path'/> <return type-id='79a0948f'/> </function-decl> - <function-decl name='zfs_resolve_shortname' mangled-name='zfs_resolve_shortname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_resolve_shortname'> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='26a90f95' name='path'/> - <parameter type-id='b59d7dce' name='len'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='zfs_strcmp_pathname' mangled-name='zfs_strcmp_pathname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_strcmp_pathname'> - <parameter type-id='80f4b756' name='name'/> - <parameter type-id='80f4b756' name='cmp'/> - <parameter type-id='95e97e5e' name='wholedisk'/> - <return type-id='95e97e5e'/> - </function-decl> </abi-instr> <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'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'> + <subrange length='32' type-id='7359adad' id='ae5bde82'/> + </array-type-def> + <class-decl name='importargs' size-in-bits='512' 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'/> </data-member> @@ -4543,32 +9979,141 @@ <data-member access='public' layout-offset-in-bits='384'> <var-decl name='policy' type-id='5ce45b60' visibility='default'/> </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='do_destroyed' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='480'> + <var-decl name='do_all' type-id='c19b74c3' visibility='default'/> + </data-member> </class-decl> <typedef-decl name='importargs_t' type-id='7ac83801' id='7a842a6b'/> + <class-decl name='libpc_handle' size-in-bits='8448' is-struct='yes' visibility='default' id='7c8737f0'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='lpc_error' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='lpc_printerr' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='lpc_open_access_error' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='lpc_desc_active' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='lpc_desc' type-id='b54ce520' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8320'> + <var-decl name='lpc_ops' type-id='f095e320' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='8384'> + <var-decl name='lpc_lib_handle' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='libpc_handle_t' type-id='7c8737f0' id='8a70a786'/> + <class-decl name='aiocb' size-in-bits='1344' is-struct='yes' visibility='default' id='e4957c49'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='aio_fildes' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='aio_lio_opcode' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='aio_reqprio' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='aio_buf' type-id='fe09dd29' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='aio_nbytes' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='aio_sigevent' type-id='519bc206' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='768'> + <var-decl name='__next_prio' type-id='924bbc81' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='__abs_prio' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='864'> + <var-decl name='__policy' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='896'> + <var-decl name='__error_code' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='__return_value' type-id='41060289' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1024'> + <var-decl name='aio_offset' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1088'> + <var-decl name='__glibc_reserved' type-id='16dc656a' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='e4957c49' size-in-bits='64' id='924bbc81'/> + <qualified-type-def type-id='924bbc81' const='yes' id='5499dcde'/> + <pointer-type-def type-id='5499dcde' size-in-bits='64' id='2236d41c'/> + <qualified-type-def type-id='2236d41c' restrict='yes' id='31488924'/> + <pointer-type-def type-id='a3681dea' size-in-bits='64' id='fce6d540'/> + <qualified-type-def type-id='e4957c49' const='yes' id='fced9da2'/> + <pointer-type-def type-id='fced9da2' size-in-bits='64' id='b20efd18'/> <pointer-type-def type-id='7a842a6b' size-in-bits='64' id='07ee4a58'/> + <pointer-type-def type-id='8a70a786' size-in-bits='64' id='5507783b'/> <pointer-type-def type-id='b1e62775' size-in-bits='64' id='f095e320'/> - <function-decl name='zpool_read_label' mangled-name='zpool_read_label' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_read_label'> - <parameter type-id='95e97e5e' name='fd'/> - <parameter type-id='857bb57e' name='config'/> - <parameter type-id='7292109c' name='num_labels'/> + <qualified-type-def type-id='48b5725f' volatile='yes' id='b0b3cbf9'/> + <pointer-type-def type-id='b0b3cbf9' size-in-bits='64' id='fe09dd29'/> + <function-decl name='update_vdev_config_dev_strs' mangled-name='update_vdev_config_dev_strs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='update_vdev_config_dev_strs'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='update_vdevs_config_dev_sysfs_path' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <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> + <function-decl name='posix_memalign' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='63e171df'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='sysconf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='libpc_error_description' mangled-name='libpc_error_description' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libpc_error_description'> + <parameter type-id='5507783b' name='hdl'/> + <return type-id='80f4b756'/> + </function-decl> <function-decl name='zpool_search_import' mangled-name='zpool_search_import' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_search_import'> - <parameter type-id='eaa32e2f' name='hdl'/> + <parameter type-id='5507783b' name='hdl'/> <parameter type-id='07ee4a58' name='import'/> - <parameter type-id='f095e320' name='pco'/> <return type-id='5ce45b60'/> </function-decl> <function-decl name='zpool_find_config' mangled-name='zpool_find_config' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_find_config'> - <parameter type-id='eaa32e2f' name='hdl'/> + <parameter type-id='5507783b' name='hdl'/> <parameter type-id='80f4b756' name='target'/> <parameter type-id='857bb57e' name='configp'/> <parameter type-id='07ee4a58' name='args'/> - <parameter type-id='f095e320' name='pco'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='zpool_find_import_blkid' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5507783b'/> + <parameter type-id='18c91f9e'/> + <parameter type-id='fce6d540'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_open_func' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> </abi-instr> <abi-instr address-size='64' path='lib/libzutil/zutil_nicenum.c' language='LANG_C99'> + <type-decl name='long double' size-in-bits='128' id='e095c704'/> <enum-decl name='zfs_nicenum_format' id='29cf1969'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZFS_NICENUM_1024' value='0'/> @@ -4577,6 +10122,15 @@ <enumerator name='ZFS_NICENUM_RAW' value='3'/> <enumerator name='ZFS_NICENUM_RAWTIME' value='4'/> </enum-decl> + <function-decl name='powl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e095c704'/> + <parameter type-id='e095c704'/> + <return type-id='e095c704'/> + </function-decl> + <function-decl name='floor' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a0eb0f08'/> + <return type-id='a0eb0f08'/> + </function-decl> <function-decl name='zfs_isnumber' mangled-name='zfs_isnumber' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_isnumber'> <parameter type-id='80f4b756' name='str'/> <return type-id='c19b74c3'/> @@ -4588,12 +10142,6 @@ <parameter type-id='29cf1969' name='format'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zfs_nicenum' mangled-name='zfs_nicenum' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicenum'> - <parameter type-id='9c313c2d' name='num'/> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='b59d7dce' name='buflen'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='zfs_nicetime' mangled-name='zfs_nicetime' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicetime'> <parameter type-id='9c313c2d' name='num'/> <parameter type-id='26a90f95' name='buf'/> @@ -4606,17 +10154,12 @@ <parameter type-id='b59d7dce' name='buflen'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zfs_nicebytes' mangled-name='zfs_nicebytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicebytes'> - <parameter type-id='9c313c2d' name='num'/> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='b59d7dce' name='buflen'/> - <return type-id='48b5725f'/> - </function-decl> </abi-instr> <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> + <type-decl name='float' size-in-bits='32' id='a6c45d85'/> <class-decl name='ddt_stat' size-in-bits='512' is-struct='yes' visibility='default' id='65242dfe'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='dds_blocks' type-id='9c313c2d' visibility='default'/> @@ -4654,35 +10197,29 @@ <pointer-type-def type-id='ec92d602' size-in-bits='64' id='932720f8'/> <qualified-type-def type-id='853fd5dc' const='yes' id='764c298c'/> <pointer-type-def type-id='764c298c' size-in-bits='64' id='dfe59052'/> - <pointer-type-def type-id='857bb57e' size-in-bits='64' id='75be733c'/> + <qualified-type-def type-id='a9c79a1f' const='yes' id='cd087e36'/> + <pointer-type-def type-id='cd087e36' size-in-bits='64' id='e05e8614'/> + <function-decl name='nanosleep' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e05e8614'/> + <parameter type-id='3d83ba87'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='zpool_dump_ddt' mangled-name='zpool_dump_ddt' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_dump_ddt'> <parameter type-id='dfe59052' name='dds_total'/> <parameter type-id='932720f8' name='ddh'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='zpool_history_unpack' mangled-name='zpool_history_unpack' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_history_unpack'> - <parameter type-id='26a90f95' name='buf'/> - <parameter type-id='9c313c2d' name='bytes_read'/> - <parameter type-id='5d6479ae' name='leftover'/> - <parameter type-id='75be733c' name='records'/> - <parameter type-id='4dd26a40' name='numrecords'/> + <function-decl name='fsleep' mangled-name='fsleep' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsleep'> + <parameter type-id='a6c45d85' name='sec'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zpool_getenv_int' mangled-name='zpool_getenv_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_getenv_int'> + <parameter type-id='80f4b756' name='env'/> + <parameter type-id='95e97e5e' name='default_val'/> <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'/> @@ -4693,18 +10230,6 @@ <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'/> @@ -4712,16 +10237,6 @@ <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'/> @@ -4742,32 +10257,27 @@ <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='cityhash1' mangled-name='cityhash1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cityhash1'> + <parameter type-id='9c313c2d' name='w'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='cityhash2' mangled-name='cityhash2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cityhash2'> + <parameter type-id='9c313c2d' name='w1'/> + <parameter type-id='9c313c2d' name='w2'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='cityhash3' mangled-name='cityhash3' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cityhash3'> + <parameter type-id='9c313c2d' name='w1'/> + <parameter type-id='9c313c2d' name='w2'/> + <parameter type-id='9c313c2d' name='w3'/> + <return type-id='9c313c2d'/> + </function-decl> <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'/> @@ -4777,58 +10287,16 @@ </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='16576' id='9d5e9e2e'> - <subrange length='37' type-id='7359adad' id='ae666bde'/> + <array-type-def dimensions='1' type-id='83f29ca2' size-in-bits='21056' id='fd43354e'> + <subrange length='47' type-id='7359adad' id='8f8900fe'/> </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_FEATURE_BLAKE3' value='36'/> - <enumerator name='SPA_FEATURES' value='37'/> - </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'/> + <enumerator name='ZFEATURE_FLAG_NO_UPGRADE' value='16'/> </enum-decl> <typedef-decl name='zfeature_flags_t' type-id='6db816a4' id='fc329033'/> <enum-decl name='zfeature_type' id='c4fa2355'> @@ -4865,6 +10333,24 @@ </data-member> </class-decl> <typedef-decl name='zfeature_info_t' type-id='1178d146' id='83f29ca2'/> + <typedef-decl name='__free_fn_t' type-id='b7f9d8e6' id='3ff5e51e'/> + <class-decl name='dirent' size-in-bits='2240' is-struct='yes' visibility='default' id='611586a1'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='d_ino' type-id='71288a47' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='d_off' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='d_reclen' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='144'> + <var-decl name='d_type' type-id='002ac4a6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='152'> + <var-decl name='d_name' type-id='d1617432' visibility='default'/> + </data-member> + </class-decl> <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'/> @@ -4877,26 +10363,35 @@ <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'/> + <pointer-type-def type-id='611586a1' size-in-bits='64' id='2e243169'/> + <qualified-type-def type-id='eaa32e2f' const='yes' id='83be723c'/> + <pointer-type-def type-id='83be723c' size-in-bits='64' id='7acd98a2'/> + <var-decl name='spa_feature_table' type-id='fd43354e' 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 name='opendir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='f09217ba'/> </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 name='tsearch' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='63e171df'/> + <parameter type-id='aba7edd8'/> + <return type-id='eaa32e2f'/> </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 name='tfind' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='7acd98a2'/> + <parameter type-id='aba7edd8'/> + <return type-id='eaa32e2f'/> </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'> + <function-decl name='tdestroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <parameter type-id='3ff5e51e'/> + <return type-id='48b5725f'/> + </function-decl> + <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'/> - <parameter type-id='a8425263' name='res'/> - <return type-id='95e97e5e'/> + <return type-id='c19b74c3'/> </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'/> @@ -4909,46 +10404,32 @@ <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'/> + <pointer-type-def type-id='8f92235e' size-in-bits='64' id='90421557'/> + <function-decl name='nvpair_value_uint32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <parameter type-id='90421557'/> + <return type-id='95e97e5e'/> + </function-decl> <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='strpbrk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> <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'/> + <parameter type-id='80f4b756' 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'/> @@ -4963,6 +10444,9 @@ </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='4352' id='55f84f08'> + <subrange length='34' type-id='7359adad' id='6a6a7e00'/> + </array-type-def> <array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='infinite' id='7c00e69d'> <subrange length='infinite' id='031f2035'/> </array-type-def> @@ -4991,35 +10475,36 @@ <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'/> + <enumerator name='ZFS_DELEG_NOTE_SEND_RAW' value='8'/> + <enumerator name='ZFS_DELEG_NOTE_RECEIVE' value='9'/> + <enumerator name='ZFS_DELEG_NOTE_ALLOW' value='10'/> + <enumerator name='ZFS_DELEG_NOTE_USERPROP' value='11'/> + <enumerator name='ZFS_DELEG_NOTE_MOUNT' value='12'/> + <enumerator name='ZFS_DELEG_NOTE_SHARE' value='13'/> + <enumerator name='ZFS_DELEG_NOTE_USERQUOTA' value='14'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPQUOTA' value='15'/> + <enumerator name='ZFS_DELEG_NOTE_USERUSED' value='16'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPUSED' value='17'/> + <enumerator name='ZFS_DELEG_NOTE_USEROBJQUOTA' value='18'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPOBJQUOTA' value='19'/> + <enumerator name='ZFS_DELEG_NOTE_USEROBJUSED' value='20'/> + <enumerator name='ZFS_DELEG_NOTE_GROUPOBJUSED' value='21'/> + <enumerator name='ZFS_DELEG_NOTE_HOLD' value='22'/> + <enumerator name='ZFS_DELEG_NOTE_RELEASE' value='23'/> + <enumerator name='ZFS_DELEG_NOTE_DIFF' value='24'/> + <enumerator name='ZFS_DELEG_NOTE_BOOKMARK' value='25'/> + <enumerator name='ZFS_DELEG_NOTE_LOAD_KEY' value='26'/> + <enumerator name='ZFS_DELEG_NOTE_CHANGE_KEY' value='27'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTUSED' value='28'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTQUOTA' value='29'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTOBJUSED' value='30'/> + <enumerator name='ZFS_DELEG_NOTE_PROJECTOBJQUOTA' value='31'/> + <enumerator name='ZFS_DELEG_NOTE_NONE' value='32'/> </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'/> + <var-decl name='z_perm' type-id='80f4b756' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> <var-decl name='z_note' type-id='4613c173' visibility='default'/> @@ -5028,6 +10513,16 @@ <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='permset_namecheck' mangled-name='permset_namecheck' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='permset_namecheck'> + <parameter type-id='80f4b756'/> + <parameter type-id='053457bd'/> + <parameter type-id='26a90f95'/> + <return type-id='95e97e5e'/> + </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'/> + <return type-id='c19b74c3'/> + </function-decl> <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'/> @@ -5045,9 +10540,6 @@ </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> @@ -5063,12 +10555,6 @@ <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'/> @@ -5149,12 +10635,21 @@ <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'/> + <qualified-type-def type-id='8f92235e' volatile='yes' id='430e0681'/> + <pointer-type-def type-id='430e0681' size-in-bits='64' id='3a147f31'/> <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='atomic_swap_32' mangled-name='atomic_swap_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_swap_32'> + <parameter type-id='3a147f31'/> + <parameter type-id='8f92235e'/> + <return type-id='8f92235e'/> + </function-decl> + <function-decl name='membar_producer' mangled-name='membar_producer' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='membar_producer'> + <return type-id='48b5725f'/> + </function-decl> <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'/> @@ -5196,12 +10691,6 @@ <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'/> @@ -5209,24 +10698,6 @@ <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'/> @@ -5242,7 +10713,7 @@ <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'> + <class-decl name='fletcher_4_func' size-in-bits='1024' 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> @@ -5265,6 +10736,9 @@ <var-decl name='valid' type-id='297d38bc' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='uses_fpu' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> <var-decl name='name' type-id='80f4b756' visibility='default'/> </data-member> </class-decl> @@ -5309,24 +10783,6 @@ <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'/> @@ -5338,22 +10794,6 @@ <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'/> @@ -5372,125 +10812,100 @@ <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'/> + <pointer-type-def type-id='3eee3342' size-in-bits='64' id='73f8e240'/> <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 name='zfs_mod_list_supported' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='73f8e240'/> </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'> + <function-decl name='zfs_mod_list_supported_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='73f8e240'/> <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 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'/> + <parameter type-id='80f4b756'/> + <parameter type-id='31429eff'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='80f4b756'/> + <parameter type-id='999701cc'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='c8bc397b'/> + <parameter type-id='a3372543'/> + <return type-id='48b5725f'/> </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 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'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='999701cc'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='a3372543'/> + <return type-id='48b5725f'/> </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 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'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='999701cc'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='a3372543'/> + <return type-id='48b5725f'/> </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 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'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='999701cc'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c8bc397b'/> + <parameter type-id='a3372543'/> + <return type-id='48b5725f'/> </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 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'/> + <parameter type-id='80f4b756'/> + <parameter type-id='31429eff'/> + <parameter type-id='999701cc'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <parameter type-id='a3372543'/> + <return type-id='48b5725f'/> + </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'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='7d3cd834'/> + <parameter type-id='2e45de5d'/> + <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'/> + <parameter type-id='9c313c2d'/> + <parameter type-id='2e45de5d'/> + <return type-id='9c313c2d'/> + </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'/> + <return type-id='95e97e5e'/> </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'/> @@ -5498,64 +10913,15 @@ <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'/> @@ -5573,61 +10939,63 @@ <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'/> + <abi-instr address-size='64' path='module/zcommon/zfs_valstr.c' language='LANG_C99'> + <function-decl name='zfs_valstr_zio_flag' mangled-name='zfs_valstr_zio_flag' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_flag'> + <parameter type-id='9c313c2d' name='bits'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_flag_bits' mangled-name='zfs_valstr_zio_flag_bits' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_flag_bits'> + <parameter type-id='9c313c2d' name='bits'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_flag_pairs' mangled-name='zfs_valstr_zio_flag_pairs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_flag_pairs'> + <parameter type-id='9c313c2d' name='bits'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_stage' mangled-name='zfs_valstr_zio_stage' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_stage'> + <parameter type-id='9c313c2d' name='bits'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_stage_bits' mangled-name='zfs_valstr_zio_stage_bits' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_stage_bits'> + <parameter type-id='9c313c2d' name='bits'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_stage_pairs' mangled-name='zfs_valstr_zio_stage_pairs' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_stage_pairs'> + <parameter type-id='9c313c2d' name='bits'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_type' mangled-name='zfs_valstr_zio_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_type'> + <parameter type-id='95e97e5e' name='v'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </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 name='zfs_valstr_zio_priority' mangled-name='zfs_valstr_zio_priority' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_priority'> + <parameter type-id='95e97e5e' name='v'/> + <parameter type-id='26a90f95' name='out'/> + <parameter type-id='b59d7dce' name='outlen'/> + <return type-id='b59d7dce'/> </function-decl> + </abi-instr> + <abi-instr address-size='64' path='module/zcommon/zpool_prop.c' language='LANG_C99'> <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'/> @@ -5648,53 +11016,12 @@ <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'/> @@ -5714,122 +11041,8 @@ </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 name='__ctype_tolower_loc' visibility='default' binding='global' size-in-bits='64'> + <return type-id='24f95ba5'/> </function-decl> </abi-instr> </abi-corpus> diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_changelist.c b/sys/contrib/openzfs/lib/libzfs/libzfs_changelist.c index d31bbc4a3b42..d290d949f4b2 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_changelist.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_changelist.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -105,6 +106,15 @@ changelist_prefix(prop_changelist_t *clp) clp->cl_prop != ZFS_PROP_SHARESMB) return (0); + /* + * If CL_GATHER_DONT_UNMOUNT is set, don't want to unmount/unshare and + * later (re)mount/(re)share the filesystem in postfix phase, so we + * return from here. If filesystem is mounted or unmounted, leave it + * as it is. + */ + if (clp->cl_gflags & CL_GATHER_DONT_UNMOUNT) + return (0); + if ((walk = uu_avl_walk_start(clp->cl_tree, UU_WALK_ROBUST)) == NULL) return (-1); @@ -129,8 +139,6 @@ changelist_prefix(prop_changelist_t *clp) */ switch (clp->cl_prop) { case ZFS_PROP_MOUNTPOINT: - if (clp->cl_gflags & CL_GATHER_DONT_UNMOUNT) - break; if (zfs_unmount(cn->cn_handle, NULL, clp->cl_mflags) != 0) { ret = -1; @@ -164,9 +172,8 @@ changelist_prefix(prop_changelist_t *clp) * reshare the filesystems as necessary. In changelist_gather() we recorded * whether the filesystem was previously shared or mounted. The action we take * depends on the previous state, and whether the value was previously 'legacy'. - * For non-legacy properties, we only remount/reshare the filesystem if it was - * previously mounted/shared. Otherwise, we always remount/reshare the - * filesystem. + * For non-legacy properties, we always remount/reshare the filesystem, + * if CL_GATHER_DONT_UNMOUNT is not set. */ int changelist_postfix(prop_changelist_t *clp) @@ -174,11 +181,18 @@ changelist_postfix(prop_changelist_t *clp) prop_changenode_t *cn; uu_avl_walk_t *walk; char shareopts[ZFS_MAXPROPLEN]; - int errors = 0; boolean_t commit_smb_shares = B_FALSE; boolean_t commit_nfs_shares = B_FALSE; /* + * If CL_GATHER_DONT_UNMOUNT is set, it means we don't want to (un)mount + * or (re/un)share the filesystem, so we return from here. If filesystem + * is mounted or unmounted, leave it as it is. + */ + if (clp->cl_gflags & CL_GATHER_DONT_UNMOUNT) + return (0); + + /* * If we're changing the mountpoint, attempt to destroy the underlying * mountpoint. All other datasets will have inherited from this dataset * (in which case their mountpoints exist in the filesystem in the new @@ -240,17 +254,16 @@ changelist_postfix(prop_changelist_t *clp) needs_key = (zfs_prop_get_int(cn->cn_handle, ZFS_PROP_KEYSTATUS) == ZFS_KEYSTATUS_UNAVAILABLE); - mounted = (clp->cl_gflags & CL_GATHER_DONT_UNMOUNT) || - zfs_is_mounted(cn->cn_handle, NULL); + mounted = zfs_is_mounted(cn->cn_handle, NULL); if (!mounted && !needs_key && (cn->cn_mounted || - ((sharenfs || sharesmb || clp->cl_waslegacy) && + (((clp->cl_prop == ZFS_PROP_MOUNTPOINT && + clp->cl_prop == clp->cl_realprop) || + sharenfs || sharesmb || clp->cl_waslegacy) && (zfs_prop_get_int(cn->cn_handle, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_ON)))) { - if (zfs_mount(cn->cn_handle, NULL, 0) != 0) - errors++; - else + if (zfs_mount(cn->cn_handle, NULL, 0) == 0) mounted = TRUE; } @@ -262,19 +275,19 @@ changelist_postfix(prop_changelist_t *clp) const enum sa_protocol nfs[] = {SA_PROTOCOL_NFS, SA_NO_PROTOCOL}; if (sharenfs && mounted) { - errors += zfs_share(cn->cn_handle, nfs); + zfs_share(cn->cn_handle, nfs); commit_nfs_shares = B_TRUE; } else if (cn->cn_shared || clp->cl_waslegacy) { - errors += zfs_unshare(cn->cn_handle, NULL, nfs); + zfs_unshare(cn->cn_handle, NULL, nfs); commit_nfs_shares = B_TRUE; } const enum sa_protocol smb[] = {SA_PROTOCOL_SMB, SA_NO_PROTOCOL}; if (sharesmb && mounted) { - errors += zfs_share(cn->cn_handle, smb); + zfs_share(cn->cn_handle, smb); commit_smb_shares = B_TRUE; } else if (cn->cn_shared || clp->cl_waslegacy) { - errors += zfs_unshare(cn->cn_handle, NULL, smb); + zfs_unshare(cn->cn_handle, NULL, smb); commit_smb_shares = B_TRUE; } } @@ -288,7 +301,7 @@ changelist_postfix(prop_changelist_t *clp) zfs_commit_shares(proto); uu_avl_walk_end(walk); - return (errors ? -1 : 0); + return (0); } /* @@ -551,8 +564,15 @@ change_one(zfs_handle_t *zhp, void *data) cn = NULL; } - if (!clp->cl_alldependents) - ret = zfs_iter_children(zhp, change_one, data); + if (!clp->cl_alldependents) { + if (clp->cl_prop != ZFS_PROP_MOUNTPOINT) { + ret = zfs_iter_filesystems_v2(zhp, 0, + change_one, data); + } else { + ret = zfs_iter_children_v2(zhp, 0, change_one, + data); + } + } /* * If we added the handle to the changelist, we will re-use it @@ -721,11 +741,17 @@ changelist_gather(zfs_handle_t *zhp, zfs_prop_t prop, int gather_flags, return (NULL); } } else if (clp->cl_alldependents) { - if (zfs_iter_dependents(zhp, B_TRUE, change_one, clp) != 0) { + if (zfs_iter_dependents_v2(zhp, 0, B_TRUE, change_one, + clp) != 0) { + changelist_free(clp); + return (NULL); + } + } else if (clp->cl_prop != ZFS_PROP_MOUNTPOINT) { + if (zfs_iter_filesystems_v2(zhp, 0, change_one, clp) != 0) { changelist_free(clp); return (NULL); } - } else if (zfs_iter_children(zhp, change_one, clp) != 0) { + } else if (zfs_iter_children_v2(zhp, 0, change_one, clp) != 0) { changelist_free(clp); return (NULL); } diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_config.c b/sys/contrib/openzfs/lib/libzfs/libzfs_config.c index e3c815cf58b2..9d704e4303ff 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_config.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_config.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -307,6 +308,23 @@ zpool_refresh_stats(zpool_handle_t *zhp, boolean_t *missing) } /* + * Copies the pool config and state from szhp to dzhp. szhp and dzhp must + * represent the same pool. Used by pool_list_refresh() to avoid another + * round-trip into the kernel to get stats already collected earlier in the + * function. + */ +void +zpool_refresh_stats_from_handle(zpool_handle_t *dzhp, zpool_handle_t *szhp) +{ + VERIFY0(strcmp(dzhp->zpool_name, szhp->zpool_name)); + nvlist_free(dzhp->zpool_old_config); + dzhp->zpool_old_config = dzhp->zpool_config; + dzhp->zpool_config = fnvlist_dup(szhp->zpool_config); + dzhp->zpool_config_size = szhp->zpool_config_size; + dzhp->zpool_state = szhp->zpool_state; +} + +/* * The following environment variables are undocumented * and should be used for testing purposes only: * diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_crypto.c b/sys/contrib/openzfs/lib/libzfs/libzfs_crypto.c index c241aeaa4da0..f461ad41405b 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_crypto.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_crypto.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -18,7 +19,6 @@ * Copyright 2020 Joyent, Inc. */ -#include <sys/zfs_context.h> #include <sys/fs/zfs.h> #include <sys/dsl_crypt.h> #include <libintl.h> @@ -37,6 +37,7 @@ #include <curl/curl.h> #endif #include <libzfs.h> +#include <libzutil.h> #include "libzfs_impl.h" #include "zfeature_common.h" @@ -493,7 +494,7 @@ get_key_material_file(libzfs_handle_t *hdl, const char *uri, ret = errno; errno = 0; zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "Failed to open key material file: %s"), strerror(ret)); + "Failed to open key material file: %s"), zfs_strerror(ret)); return (ret); } @@ -582,7 +583,7 @@ get_key_material_https(libzfs_handle_t *hdl, const char *uri, goto end; } - int kfd = -1; + int kfd; #ifdef O_TMPFILE kfd = open(getenv("TMPDIR") ?: "/tmp", O_RDWR | O_TMPFILE | O_EXCL | O_CLOEXEC, 0600); @@ -595,7 +596,7 @@ get_key_material_https(libzfs_handle_t *hdl, const char *uri, "%s/libzfs-XXXXXXXX.https", getenv("TMPDIR") ?: "/tmp") == -1) { ret = ENOMEM; zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "%s"), - strerror(ret)); + zfs_strerror(ret)); goto end; } @@ -604,19 +605,21 @@ get_key_material_https(libzfs_handle_t *hdl, const char *uri, ret = errno; zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "Couldn't create temporary file %s: %s"), - path, strerror(ret)); + path, zfs_strerror(ret)); free(path); goto end; } (void) unlink(path); free(path); +#ifdef O_TMPFILE kfdok: +#endif if ((key = fdopen(kfd, "r+")) == NULL) { ret = errno; (void) close(kfd); zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "Couldn't reopen temporary file: %s"), strerror(ret)); + "Couldn't reopen temporary file: %s"), zfs_strerror(ret)); goto end; } @@ -942,7 +945,7 @@ proplist_has_encryption_props(nvlist_t *props) { int ret; uint64_t intval; - char *strval; + const char *strval; ret = nvlist_lookup_uint64(props, zfs_prop_to_name(ZFS_PROP_ENCRYPTION), &intval); @@ -1007,7 +1010,7 @@ zfs_crypto_create(libzfs_handle_t *hdl, char *parent_name, nvlist_t *props, char errbuf[ERRBUFLEN]; uint64_t crypt = ZIO_CRYPT_INHERIT, pcrypt = ZIO_CRYPT_INHERIT; uint64_t keyformat = ZFS_KEYFORMAT_NONE; - char *keylocation = NULL; + const char *keylocation = NULL; zfs_handle_t *pzhp = NULL; uint8_t *wkeydata = NULL; uint_t wkeylen = 0; @@ -1226,7 +1229,7 @@ load_keys_cb(zfs_handle_t *zhp, void *arg) cb->cb_numfailed++; out: - (void) zfs_iter_filesystems(zhp, load_keys_cb, cb); + (void) zfs_iter_filesystems_v2(zhp, 0, load_keys_cb, cb); zfs_close(zhp); /* always return 0, since this function is best effort */ @@ -1407,6 +1410,11 @@ try_again: "Incorrect key provided for '%s'."), zfs_get_name(zhp)); break; + case ZFS_ERR_CRYPTO_NOTSUP: + zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN, + "'%s' uses an unsupported encryption suite."), + zfs_get_name(zhp)); + break; } goto error; } @@ -1590,7 +1598,7 @@ zfs_crypto_rewrap(zfs_handle_t *zhp, nvlist_t *raw_props, boolean_t inheritkey) uint64_t crypt, pcrypt, keystatus, pkeystatus; uint64_t keyformat = ZFS_KEYFORMAT_NONE; zfs_handle_t *pzhp = NULL; - char *keylocation = NULL; + const char *keylocation = NULL; char origin_name[MAXNAMELEN]; char prop_keylocation[MAXNAMELEN]; char parent_name[ZFS_MAX_DATASET_NAME_LEN]; @@ -1700,7 +1708,7 @@ zfs_crypto_rewrap(zfs_handle_t *zhp, nvlist_t *raw_props, boolean_t inheritkey) /* default to prompt if no keylocation is specified */ if (keylocation == NULL) { - keylocation = (char *)"prompt"; + keylocation = "prompt"; ret = nvlist_add_string(props, zfs_prop_to_name(ZFS_PROP_KEYLOCATION), keylocation); @@ -1811,3 +1819,14 @@ error: zfs_error(zhp->zfs_hdl, EZFS_CRYPTOFAILED, errbuf); return (ret); } + +boolean_t +zfs_is_encrypted(zfs_handle_t *zhp) +{ + uint8_t flags = zhp->zfs_dmustats.dds_flags; + + if (flags & DDS_FLAG_HAS_ENCRYPTED) + return ((flags & DDS_FLAG_ENCRYPTED) != 0); + + return (zfs_prop_get_int(zhp, ZFS_PROP_ENCRYPTION) != ZIO_CRYPT_OFF); +} diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c b/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c index 4e25985a4ae8..e1b91fc47291 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -67,6 +68,10 @@ #include "libzfs_impl.h" #include "zfs_deleg.h" +static __thread struct passwd gpwd; +static __thread struct group ggrp; +static __thread char rpbuf[2048]; + static int userquota_propname_decode(const char *propname, boolean_t zoned, zfs_userquota_prop_t *typep, char *domain, int domainlen, uint64_t *ridp); @@ -528,6 +533,30 @@ make_dataset_simple_handle_zc(zfs_handle_t *pzhp, zfs_cmd_t *zc) zhp->zfs_type = ZFS_TYPE_SNAPSHOT; zhp->zpool_hdl = zpool_handle(zhp); + if (zc->zc_objset_stats.dds_creation_txg != 0) { + /* structure assignment */ + zhp->zfs_dmustats = zc->zc_objset_stats; + } else { + if (get_stats_ioctl(zhp, zc) == -1) { + zcmd_free_nvlists(zc); + free(zhp); + return (NULL); + } + if (make_dataset_handle_common(zhp, zc) == -1) { + zcmd_free_nvlists(zc); + free(zhp); + return (NULL); + } + } + + if (zhp->zfs_dmustats.dds_is_snapshot || + strchr(zc->zc_name, '@') != NULL) + zhp->zfs_type = ZFS_TYPE_SNAPSHOT; + else if (zhp->zfs_dmustats.dds_type == DMU_OST_ZVOL) + zhp->zfs_type = ZFS_TYPE_VOLUME; + else if (zhp->zfs_dmustats.dds_type == DMU_OST_ZFS) + zhp->zfs_type = ZFS_TYPE_FILESYSTEM; + return (zhp); } @@ -689,6 +718,7 @@ zfs_open(libzfs_handle_t *hdl, const char *path, int types) */ if (!zfs_validate_name(hdl, path, types, B_FALSE)) { (void) zfs_error(hdl, EZFS_INVALIDNAME, errbuf); + errno = EINVAL; return (NULL); } @@ -716,8 +746,8 @@ zfs_open(libzfs_handle_t *hdl, const char *path, int types) * to get the parent dataset name only. */ assert(bookp - path < sizeof (dsname)); - (void) strncpy(dsname, path, bookp - path); - dsname[bookp - path] = '\0'; + (void) strlcpy(dsname, path, + MIN(sizeof (dsname), bookp - path + 1)); /* * Create handle for the parent dataset. @@ -732,10 +762,11 @@ zfs_open(libzfs_handle_t *hdl, const char *path, int types) * Iterate bookmarks to find the right one. */ errno = 0; - if ((zfs_iter_bookmarks(pzhp, zfs_open_bookmarks_cb, + if ((zfs_iter_bookmarks_v2(pzhp, 0, zfs_open_bookmarks_cb, &cb_data) == 0) && (cb_data.zhp == NULL)) { (void) zfs_error(hdl, EZFS_NOENT, errbuf); zfs_close(pzhp); + errno = ENOENT; return (NULL); } if (cb_data.zhp == NULL) { @@ -754,6 +785,7 @@ zfs_open(libzfs_handle_t *hdl, const char *path, int types) if (!(types & zhp->zfs_type)) { (void) zfs_error(hdl, EZFS_BADTYPE, errbuf); zfs_close(zhp); + errno = EINVAL; return (NULL); } @@ -1002,7 +1034,7 @@ zfs_valid_proplist(libzfs_handle_t *hdl, zfs_type_t type, nvlist_t *nvl, { nvpair_t *elem; uint64_t intval; - char *strval; + const char *strval; zfs_prop_t prop; nvlist_t *ret; int chosen_normal = -1; @@ -1230,36 +1262,15 @@ zfs_valid_proplist(libzfs_handle_t *hdl, zfs_type_t type, nvlist_t *nvl, case ZFS_PROP_SPECIAL_SMALL_BLOCKS: { - int maxbs = SPA_OLD_MAXBLOCKSIZE; + int maxbs = SPA_MAXBLOCKSIZE; char buf[64]; - if (zpool_hdl != NULL) { - char state[64] = ""; - - maxbs = zpool_get_prop_int(zpool_hdl, - ZPOOL_PROP_MAXBLOCKSIZE, NULL); - - /* - * Issue a warning but do not fail so that - * tests for settable properties succeed. - */ - if (zpool_prop_get_feature(zpool_hdl, - "feature@allocation_classes", state, - sizeof (state)) != 0 || - strcmp(state, ZFS_FEATURE_ACTIVE) != 0) { - (void) fprintf(stderr, gettext( - "%s: property requires a special " - "device in the pool\n"), propname); - } - } - if (intval != 0 && - (intval < SPA_MINBLOCKSIZE || - intval > maxbs || !ISP2(intval))) { + if (intval > SPA_MAXBLOCKSIZE) { zfs_nicebytes(maxbs, buf, sizeof (buf)); zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "invalid '%s=%llu' property: must be zero " - "or a power of 2 from 512B to %s"), - propname, (unsigned long long)intval, buf); + "invalid '%s' property: must be between " + "zero and %s"), + propname, buf); (void) zfs_error(hdl, EZFS_BADPROP, errbuf); goto error; } @@ -1738,8 +1749,6 @@ error: return (ret); } - - /* * Given an nvlist of property names and values, set the properties for the * given dataset. @@ -1747,6 +1756,18 @@ error: int zfs_prop_set_list(zfs_handle_t *zhp, nvlist_t *props) { + return (zfs_prop_set_list_flags(zhp, props, 0)); +} + +/* + * Given an nvlist of property names, values and flags, set the properties + * for the given dataset. If ZFS_SET_NOMOUNT is set, it allows to update + * mountpoint, sharenfs and sharesmb properties without (un/re)mounting + * and (un/re)sharing the dataset. + */ +int +zfs_prop_set_list_flags(zfs_handle_t *zhp, nvlist_t *props, int flags) +{ zfs_cmd_t zc = {"\0"}; int ret = -1; prop_changelist_t **cls = NULL; @@ -1756,7 +1777,8 @@ zfs_prop_set_list(zfs_handle_t *zhp, nvlist_t *props) nvlist_t *nvl; int nvl_len = 0; int added_resv = 0; - zfs_prop_t prop = 0; + zfs_prop_t prop; + boolean_t nsprop = B_FALSE; nvpair_t *elem; (void) snprintf(errbuf, sizeof (errbuf), @@ -1803,6 +1825,7 @@ zfs_prop_set_list(zfs_handle_t *zhp, nvlist_t *props) elem = nvlist_next_nvpair(nvl, elem)) { prop = zfs_name_to_prop(nvpair_name(elem)); + nsprop |= zfs_is_namespace_prop(prop); assert(cl_idx < nvl_len); /* @@ -1813,7 +1836,9 @@ zfs_prop_set_list(zfs_handle_t *zhp, nvlist_t *props) if (prop != ZFS_PROP_CANMOUNT || (fnvpair_value_uint64(elem) == ZFS_CANMOUNT_OFF && zfs_is_mounted(zhp, NULL))) { - cls[cl_idx] = changelist_gather(zhp, prop, 0, 0); + cls[cl_idx] = changelist_gather(zhp, prop, + ((flags & ZFS_SET_NOMOUNT) ? + CL_GATHER_DONT_UNMOUNT : 0), 0); if (cls[cl_idx] == NULL) goto error; } @@ -1901,8 +1926,7 @@ zfs_prop_set_list(zfs_handle_t *zhp, nvlist_t *props) * if one of the options handled by the generic * Linux namespace layer has been modified. */ - if (zfs_is_namespace_prop(prop) && - zfs_is_mounted(zhp, NULL)) + if (nsprop && zfs_is_mounted(zhp, NULL)) ret = zfs_mount(zhp, MNTOPT_REMOUNT, 0); } } @@ -2005,7 +2029,8 @@ zfs_prop_inherit(zfs_handle_t *zhp, const char *propname, boolean_t received) if ((ret = changelist_prefix(cl)) != 0) goto error; - if ((ret = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_INHERIT_PROP, &zc)) != 0) { + if (zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_INHERIT_PROP, &zc) != 0) { + changelist_free(cl); return (zfs_standard_error(hdl, errno, errbuf)); } else { @@ -2037,7 +2062,7 @@ error: * extract them appropriately. */ uint64_t -getprop_uint64(zfs_handle_t *zhp, zfs_prop_t prop, char **source) +getprop_uint64(zfs_handle_t *zhp, zfs_prop_t prop, const char **source) { nvlist_t *nv; uint64_t value; @@ -2051,14 +2076,14 @@ getprop_uint64(zfs_handle_t *zhp, zfs_prop_t prop, char **source) verify(!zhp->zfs_props_table || zhp->zfs_props_table[prop] == B_TRUE); value = zfs_prop_default_numeric(prop); - *source = (char *)""; + *source = ""; } return (value); } static const char * -getprop_string(zfs_handle_t *zhp, zfs_prop_t prop, char **source) +getprop_string(zfs_handle_t *zhp, zfs_prop_t prop, const char **source) { nvlist_t *nv; const char *value; @@ -2072,7 +2097,7 @@ getprop_string(zfs_handle_t *zhp, zfs_prop_t prop, char **source) verify(!zhp->zfs_props_table || zhp->zfs_props_table[prop] == B_TRUE); value = zfs_prop_default_string(prop); - *source = (char *)""; + *source = ""; } return (value); @@ -2081,20 +2106,21 @@ getprop_string(zfs_handle_t *zhp, zfs_prop_t prop, char **source) static boolean_t zfs_is_recvd_props_mode(zfs_handle_t *zhp) { - return (zhp->zfs_props == zhp->zfs_recvd_props); + return (zhp->zfs_props != NULL && + zhp->zfs_props == zhp->zfs_recvd_props); } static void -zfs_set_recvd_props_mode(zfs_handle_t *zhp, uint64_t *cookie) +zfs_set_recvd_props_mode(zfs_handle_t *zhp, uintptr_t *cookie) { - *cookie = (uint64_t)(uintptr_t)zhp->zfs_props; + *cookie = (uintptr_t)zhp->zfs_props; zhp->zfs_props = zhp->zfs_recvd_props; } static void -zfs_unset_recvd_props_mode(zfs_handle_t *zhp, uint64_t *cookie) +zfs_unset_recvd_props_mode(zfs_handle_t *zhp, uintptr_t *cookie) { - zhp->zfs_props = (nvlist_t *)(uintptr_t)*cookie; + zhp->zfs_props = (nvlist_t *)*cookie; *cookie = 0; } @@ -2109,7 +2135,7 @@ zfs_unset_recvd_props_mode(zfs_handle_t *zhp, uint64_t *cookie) */ static int get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src, - char **source, uint64_t *val) + const char **source, uint64_t *val) { zfs_cmd_t zc = {"\0"}; nvlist_t *zplprops = NULL; @@ -2255,6 +2281,12 @@ get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src, case ZFS_PROP_NORMALIZE: case ZFS_PROP_UTF8ONLY: case ZFS_PROP_CASE: + case ZFS_PROP_DEFAULTUSERQUOTA: + case ZFS_PROP_DEFAULTGROUPQUOTA: + case ZFS_PROP_DEFAULTPROJECTQUOTA: + case ZFS_PROP_DEFAULTUSEROBJQUOTA: + case ZFS_PROP_DEFAULTGROUPOBJQUOTA: + case ZFS_PROP_DEFAULTPROJECTOBJQUOTA: zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0); (void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name)); @@ -2283,6 +2315,28 @@ get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src, *val = zhp->zfs_dmustats.dds_redacted; break; + case ZFS_PROP_GUID: + if (zhp->zfs_dmustats.dds_guid != 0) + *val = zhp->zfs_dmustats.dds_guid; + else + *val = getprop_uint64(zhp, prop, source); + break; + + case ZFS_PROP_CREATETXG: + /* + * We can directly read createtxg property from zfs + * handle for Filesystem, Snapshot and ZVOL types. + */ + if (((zhp->zfs_type == ZFS_TYPE_FILESYSTEM) || + (zhp->zfs_type == ZFS_TYPE_SNAPSHOT) || + (zhp->zfs_type == ZFS_TYPE_VOLUME)) && + (zhp->zfs_dmustats.dds_creation_txg != 0)) { + *val = zhp->zfs_dmustats.dds_creation_txg; + break; + } else { + *val = getprop_uint64(zhp, prop, source); + } + zfs_fallthrough; default: switch (zfs_prop_get_type(prop)) { case PROP_TYPE_NUMBER: @@ -2319,7 +2373,7 @@ get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src, * Calculate the source type, given the raw source string. */ static void -get_source(zfs_handle_t *zhp, zprop_source_t *srctype, char *source, +get_source(zfs_handle_t *zhp, zprop_source_t *srctype, const char *source, char *statbuf, size_t statlen) { if (statbuf == NULL || @@ -2358,7 +2412,7 @@ zfs_prop_get_recvd(zfs_handle_t *zhp, const char *propname, char *propbuf, prop = zfs_name_to_prop(propname); if (prop != ZPROP_USERPROP) { - uint64_t cookie; + uintptr_t cookie; if (!nvlist_exists(zhp->zfs_recvd_props, propname)) return (-1); zfs_set_recvd_props_mode(zhp, &cookie); @@ -2367,7 +2421,7 @@ zfs_prop_get_recvd(zfs_handle_t *zhp, const char *propname, char *propbuf, zfs_unset_recvd_props_mode(zhp, &cookie); } else { nvlist_t *propval; - char *recvdval; + const char *recvdval; if (nvlist_lookup_nvlist(zhp->zfs_recvd_props, propname, &propval) != 0) return (-1); @@ -2425,7 +2479,7 @@ get_clones_cb(zfs_handle_t *zhp, void *arg) } out: - (void) zfs_iter_children(zhp, get_clones_cb, gca); + (void) zfs_iter_children_v2(zhp, 0, get_clones_cb, gca); zfs_close(zhp); return (0); } @@ -2569,7 +2623,7 @@ zcp_check(zfs_handle_t *zhp, zfs_prop_t prop, uint64_t intval, (u_longlong_t)intval, (u_longlong_t)ans); } } else { - char *str_ans; + const char *str_ans; error = nvlist_lookup_string(retnvl, "value", &str_ans); if (error != 0) { (void) fprintf(stderr, "%s: zcp check error: " @@ -2601,7 +2655,7 @@ int zfs_prop_get(zfs_handle_t *zhp, zfs_prop_t prop, char *propbuf, size_t proplen, zprop_source_t *src, char *statbuf, size_t statlen, boolean_t literal) { - char *source = NULL; + const char *source = NULL; uint64_t val; const char *str; const char *strval; @@ -2710,7 +2764,13 @@ zfs_prop_get(zfs_handle_t *zhp, zfs_prop_t prop, char *propbuf, size_t proplen, break; case ZFS_PROP_ORIGIN: - str = getprop_string(zhp, prop, &source); + if (*zhp->zfs_dmustats.dds_origin != '\0') { + str = (char *)&zhp->zfs_dmustats.dds_origin; + } else { + str = getprop_string(zhp, prop, &source); + } + if (str == NULL || *str == '\0') + str = zfs_prop_default_string(prop); if (str == NULL) return (-1); (void) strlcpy(propbuf, str, proplen); @@ -2921,6 +2981,26 @@ zfs_prop_get(zfs_handle_t *zhp, zfs_prop_t prop, char *propbuf, size_t proplen, zcp_check(zhp, prop, val, NULL); break; + case ZFS_PROP_SNAPSHOTS_CHANGED: + { + if ((get_numeric_property(zhp, prop, src, &source, + &val) != 0) || val == 0) { + return (-1); + } + + time_t time = (time_t)val; + struct tm t; + + if (literal || + localtime_r(&time, &t) == NULL || + strftime(propbuf, proplen, "%a %b %e %k:%M:%S %Y", + &t) == 0) + (void) snprintf(propbuf, proplen, "%llu", + (u_longlong_t)val); + } + zcp_check(zhp, prop, val, NULL); + break; + default: switch (zfs_prop_get_type(prop)) { case PROP_TYPE_NUMBER: @@ -2976,7 +3056,7 @@ zfs_prop_get(zfs_handle_t *zhp, zfs_prop_t prop, char *propbuf, size_t proplen, uint64_t zfs_prop_get_int(zfs_handle_t *zhp, zfs_prop_t prop) { - char *source; + const char *source; uint64_t val = 0; (void) get_numeric_property(zhp, prop, NULL, &source, &val); @@ -3000,7 +3080,7 @@ int zfs_prop_get_numeric(zfs_handle_t *zhp, zfs_prop_t prop, uint64_t *value, zprop_source_t *src, char *statbuf, size_t statlen) { - char *source; + const char *source; /* * Check to see if this property applies to our object @@ -3099,11 +3179,15 @@ userquota_propname_decode(const char *propname, boolean_t zoned, cp = strchr(propname, '@') + 1; - if (isuser && (pw = getpwnam(cp)) != NULL) { + if (isuser && + getpwnam_r(cp, &gpwd, rpbuf, sizeof (rpbuf), &pw) == 0 && + pw != NULL) { if (zoned && getzoneid() == GLOBAL_ZONEID) return (ENOENT); *ridp = pw->pw_uid; - } else if (isgroup && (gr = getgrnam(cp)) != NULL) { + } else if (isgroup && + getgrnam_r(cp, &ggrp, rpbuf, sizeof (rpbuf), &gr) == 0 && + gr != NULL) { if (zoned && getzoneid() == GLOBAL_ZONEID) return (ENOENT); *ridp = gr->gr_gid; @@ -3419,8 +3503,8 @@ check_parents(libzfs_handle_t *hdl, const char *path, uint64_t *zoned, /* check to see if the pool exists */ if ((slash = strchr(parent, '/')) == NULL) slash = parent + strlen(parent); - (void) strncpy(zc.zc_name, parent, slash - parent); - zc.zc_name[slash - parent] = '\0'; + (void) strlcpy(zc.zc_name, parent, + MIN(sizeof (zc.zc_name), slash - parent + 1)); if (zfs_ioctl(hdl, ZFS_IOC_OBJSET_STATS, &zc) != 0 && errno == ENOENT) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, @@ -3848,7 +3932,7 @@ zfs_check_snap_cb(zfs_handle_t *zhp, void *arg) if (lzc_exists(name)) fnvlist_add_boolean(dd->nvl, name); - rv = zfs_iter_filesystems(zhp, zfs_check_snap_cb, dd); + rv = zfs_iter_filesystems_v2(zhp, 0, zfs_check_snap_cb, dd); zfs_close(zhp); return (rv); } @@ -3917,6 +4001,26 @@ zfs_destroy_snaps_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, boolean_t defer) dgettext(TEXT_DOMAIN, "snapshot is cloned")); ret = zfs_error(hdl, EZFS_EXISTS, errbuf); break; + case EBUSY: { + nvlist_t *existing_holds; + int err = lzc_get_holds(nvpair_name(pair), + &existing_holds); + + /* check the presence of holders */ + if (err == 0 && !nvlist_empty(existing_holds)) { + zfs_error_aux(hdl, + dgettext(TEXT_DOMAIN, "it's being held. " + "Run 'zfs holds -r %s' to see holders."), + nvpair_name(pair)); + ret = zfs_error(hdl, EBUSY, errbuf); + } else { + ret = zfs_standard_error(hdl, errno, errbuf); + } + + if (err == 0) + nvlist_free(existing_holds); + break; + } default: ret = zfs_standard_error(hdl, errno, errbuf); break; @@ -4086,7 +4190,7 @@ zfs_snapshot_cb(zfs_handle_t *zhp, void *arg) fnvlist_add_boolean(sd->sd_nvl, name); - rv = zfs_iter_filesystems(zhp, zfs_snapshot_cb, sd); + rv = zfs_iter_filesystems_v2(zhp, 0, zfs_snapshot_cb, sd); } zfs_close(zhp); @@ -4129,6 +4233,8 @@ zfs_snapshot_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, nvlist_t *props) * same pool, as does lzc_snapshot (below). */ elem = nvlist_next_nvpair(snaps, NULL); + if (elem == NULL) + return (-1); (void) strlcpy(pool, nvpair_name(elem), sizeof (pool)); pool[strcspn(pool, "/@")] = '\0'; zpool_hdl = zpool_open(hdl, pool); @@ -4261,7 +4367,7 @@ rollback_destroy(zfs_handle_t *zhp, void *data) rollback_data_t *cbp = data; if (zfs_prop_get_int(zhp, ZFS_PROP_CREATETXG) > cbp->cb_create) { - cbp->cb_error |= zfs_iter_dependents(zhp, B_FALSE, + cbp->cb_error |= zfs_iter_dependents_v2(zhp, 0, B_FALSE, rollback_destroy_dependent, cbp); cbp->cb_error |= zfs_destroy(zhp, B_FALSE); @@ -4301,10 +4407,10 @@ zfs_rollback(zfs_handle_t *zhp, zfs_handle_t *snap, boolean_t force) if (cb.cb_create > 0) min_txg = cb.cb_create; - (void) zfs_iter_snapshots(zhp, B_FALSE, rollback_destroy, &cb, + (void) zfs_iter_snapshots_v2(zhp, 0, rollback_destroy, &cb, min_txg, 0); - (void) zfs_iter_bookmarks(zhp, rollback_destroy, &cb); + (void) zfs_iter_bookmarks_v2(zhp, 0, rollback_destroy, &cb); if (cb.cb_error) return (-1); @@ -4567,6 +4673,7 @@ zfs_rename(zfs_handle_t *zhp, const char *target, renameflags_t flags) changelist_rename(cl, zfs_get_name(zhp), target); ret = changelist_postfix(cl); } + (void) strlcpy(zhp->zfs_name, target, sizeof (zhp->zfs_name)); } error: @@ -4619,7 +4726,7 @@ zfs_expand_proplist(zfs_handle_t *zhp, zprop_list_t **plp, boolean_t received, zprop_list_t **last, **start; nvlist_t *userprops, *propval; nvpair_t *elem; - char *strval; + const char *strval; char buf[ZFS_MAXPROPLEN]; if (zprop_expand_list(hdl, plp, ZFS_TYPE_DATASET) != 0) @@ -4777,7 +4884,7 @@ zfs_smb_acl_mgmt(libzfs_handle_t *hdl, char *dataset, char *path, default: return (-1); } - error = ioctl(hdl->libzfs_fd, ZFS_IOC_SMB_ACL, &zc); + error = lzc_ioctl_fd(hdl->libzfs_fd, ZFS_IOC_SMB_ACL, &zc); nvlist_free(nvlist); return (error); } @@ -4852,7 +4959,7 @@ zfs_userspace(zfs_handle_t *zhp, zfs_userquota_prop_t type, while (zc.zc_nvlist_dst_size > 0) { if ((ret = func(arg, zua->zu_domain, zua->zu_rid, - zua->zu_space)) != 0) + zua->zu_space, zc.zc_guid)) != 0) return (ret); zua++; zc.zc_nvlist_dst_size -= sizeof (zfs_useracct_t); @@ -4885,7 +4992,7 @@ zfs_hold_one(zfs_handle_t *zhp, void *arg) fnvlist_add_string(ha->nvl, name, ha->tag); if (ha->recursive) - rv = zfs_iter_filesystems(zhp, zfs_hold_one, ha); + rv = zfs_iter_filesystems_v2(zhp, 0, zfs_hold_one, ha); zfs_close(zhp); return (rv); } @@ -5016,7 +5123,7 @@ zfs_release_one(zfs_handle_t *zhp, void *arg) } if (ha->recursive) - rv = zfs_iter_filesystems(zhp, zfs_release_one, ha); + rv = zfs_iter_filesystems_v2(zhp, 0, zfs_release_one, ha); zfs_close(zhp); return (rv); } @@ -5119,7 +5226,7 @@ tryagain: nvbuf = malloc(nvsz); if (nvbuf == NULL) { - err = (zfs_error(hdl, EZFS_NOMEM, strerror(errno))); + err = (zfs_error(hdl, EZFS_NOMEM, zfs_strerror(errno))); goto out; } @@ -5302,12 +5409,12 @@ zfs_get_holds(zfs_handle_t *zhp, nvlist_t **nvl) * +-------+-------+-------+-------+-------+ * * Above, notice that the 4k block required one sector for parity and another - * for data. vdev_raidz_asize() will return 8k and as such the pool's allocated - * and free properties will be adjusted by 8k. The dataset will not be charged - * 8k. Rather, it will be charged a value that is scaled according to the - * overhead of the 128k block on the same vdev. This 8k allocation will be - * charged 8k * 128k / 160k. 128k is from SPA_OLD_MAXBLOCKSIZE and 160k is as - * calculated in the 128k block example above. + * for data. vdev_raidz_psize_to_asize() will return 8k and as such the pool's + * allocated and free properties will be adjusted by 8k. The dataset will not + * be charged 8k. Rather, it will be charged a value that is scaled according + * to the overhead of the 128k block on the same vdev. This 8k allocation will + * be charged 8k * 128k / 160k. 128k is from SPA_OLD_MAXBLOCKSIZE and 160k is + * as calculated in the 128k block example above. * * Every raidz allocation is sized to be a multiple of nparity+1 sectors. That * is, every raidz1 allocation will be a multiple of 2 sectors, raidz2 @@ -5354,7 +5461,7 @@ zfs_get_holds(zfs_handle_t *zhp, nvlist_t **nvl) * not necessarily equal to "blksize", due to RAIDZ deflation. */ static uint64_t -vdev_raidz_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift, +vdev_raidz_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift, uint64_t blksize) { uint64_t asize, ndata; @@ -5374,7 +5481,7 @@ vdev_raidz_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift, * size. */ static uint64_t -vdev_draid_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift, +vdev_draid_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift, uint64_t blksize) { ASSERT3U(ndisks, >, nparity); @@ -5405,7 +5512,7 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize) } for (int v = 0; v < nvdevs; v++) { - char *type; + const char *type; uint64_t nparity, ashift, asize, tsize; uint64_t volsize; @@ -5434,12 +5541,12 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize) continue; /* allocation size for the "typical" 128k block */ - tsize = vdev_raidz_asize(ndisks, nparity, ashift, - SPA_OLD_MAXBLOCKSIZE); + tsize = vdev_raidz_psize_to_asize(ndisks, nparity, + ashift, SPA_OLD_MAXBLOCKSIZE); /* allocation size for the blksize block */ - asize = vdev_raidz_asize(ndisks, nparity, ashift, - blksize); + asize = vdev_raidz_psize_to_asize(ndisks, nparity, + ashift, blksize); } else { uint64_t ndata; @@ -5448,19 +5555,32 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize) continue; /* allocation size for the "typical" 128k block */ - tsize = vdev_draid_asize(ndata + nparity, nparity, - ashift, SPA_OLD_MAXBLOCKSIZE); + tsize = vdev_draid_psize_to_asize(ndata + nparity, + nparity, ashift, SPA_OLD_MAXBLOCKSIZE); /* allocation size for the blksize block */ - asize = vdev_draid_asize(ndata + nparity, nparity, - ashift, blksize); + asize = vdev_draid_psize_to_asize(ndata + nparity, + nparity, ashift, blksize); } /* * Scale this size down as a ratio of 128k / tsize. * See theory statement above. + * + * Bitshift is to avoid the case of nblocks * asize < tsize + * producing a size of 0. */ - volsize = nblocks * asize * SPA_OLD_MAXBLOCKSIZE / tsize; + volsize = (nblocks * asize) / (tsize >> SPA_MINBLOCKSHIFT); + /* + * If we would blow UINT64_MAX with this next multiplication, + * don't. + */ + if (volsize > + (UINT64_MAX / (SPA_OLD_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT))) + volsize = UINT64_MAX; + else + volsize *= (SPA_OLD_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); + if (volsize > ret) { ret = volsize; } @@ -5487,7 +5607,7 @@ zvol_volsize_to_reservation(zpool_handle_t *zph, uint64_t volsize, uint64_t numdb; uint64_t nblocks, volblocksize; int ncopies; - char *strval; + const char *strval; if (nvlist_lookup_string(props, zfs_prop_to_name(ZFS_PROP_COPIES), &strval) == 0) diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c b/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c index f0e9a262e6bf..5f50bce531f7 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_diff.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -44,6 +45,7 @@ #include <pthread.h> #include <sys/zfs_ioctl.h> #include <libzfs.h> +#include <libzutil.h> #include "libzfs_impl.h" #define ZDIFF_SNAPDIR "/.zfs/snapshot/" @@ -54,6 +56,10 @@ #define ZDIFF_REMOVED '-' #define ZDIFF_RENAMED "R" +#define ZDIFF_ADDED_COLOR ANSI_GREEN +#define ZDIFF_MODIFIED_COLOR ANSI_YELLOW +#define ZDIFF_REMOVED_COLOR ANSI_RED +#define ZDIFF_RENAMED_COLOR ANSI_BOLD_BLUE /* * Given a {dsname, object id}, get the object path @@ -75,7 +81,7 @@ get_stats_for_obj(differ_info_t *di, const char *dsname, uint64_t obj, /* we can get stats even if we failed to get a path */ (void) memcpy(sb, &zc.zc_stat, sizeof (zfs_stat_t)); if (error == 0) { - ASSERT(di->zerr == 0); + ASSERT0(di->zerr); (void) strlcpy(pn, zc.zc_value, maxlen); return (0); } @@ -128,6 +134,25 @@ stream_bytes(FILE *fp, const char *string) } } +/* + * Takes the type of change (like `print_file`), outputs the appropriate color + */ +static const char * +type_to_color(char type) +{ + if (type == '+') + return (ZDIFF_ADDED_COLOR); + else if (type == '-') + return (ZDIFF_REMOVED_COLOR); + else if (type == 'M') + return (ZDIFF_MODIFIED_COLOR); + else if (type == 'R') + return (ZDIFF_RENAMED_COLOR); + else + return (NULL); +} + + static char get_what(mode_t what) { @@ -175,6 +200,8 @@ static void print_rename(FILE *fp, differ_info_t *di, const char *old, const char *new, zfs_stat_t *isb) { + if (isatty(fileno(fp))) + color_start(ZDIFF_RENAMED_COLOR); if (di->timestamped) (void) fprintf(fp, "%10lld.%09lld\t", (longlong_t)isb->zs_ctime[0], @@ -186,12 +213,18 @@ print_rename(FILE *fp, differ_info_t *di, const char *old, const char *new, (void) fputs(di->scripted ? "\t" : " -> ", fp); print_cmn(fp, di, new); (void) fputc('\n', fp); + + if (isatty(fileno(fp))) + color_end(); } static void print_link_change(FILE *fp, differ_info_t *di, int delta, const char *file, zfs_stat_t *isb) { + if (isatty(fileno(fp))) + color_start(ZDIFF_MODIFIED_COLOR); + if (di->timestamped) (void) fprintf(fp, "%10lld.%09lld\t", (longlong_t)isb->zs_ctime[0], @@ -201,12 +234,17 @@ print_link_change(FILE *fp, differ_info_t *di, int delta, const char *file, (void) fprintf(fp, "%c\t", get_what(isb->zs_mode)); print_cmn(fp, di, file); (void) fprintf(fp, "\t(%+d)\n", delta); + if (isatty(fileno(fp))) + color_end(); } static void print_file(FILE *fp, differ_info_t *di, char type, const char *file, zfs_stat_t *isb) { + if (isatty(fileno(fp))) + color_start(type_to_color(type)); + if (di->timestamped) (void) fprintf(fp, "%10lld.%09lld\t", (longlong_t)isb->zs_ctime[0], @@ -216,6 +254,9 @@ print_file(FILE *fp, differ_info_t *di, char type, const char *file, (void) fprintf(fp, "%c\t", get_what(isb->zs_mode)); print_cmn(fp, di, file); (void) fputc('\n', fp); + + if (isatty(fileno(fp))) + color_end(); } static int @@ -243,7 +284,7 @@ write_inuse_diffs_one(FILE *fp, differ_info_t *di, uint64_t dobj) fobjerr = get_stats_for_obj(di, di->fromsnap, dobj, fobjname, MAXPATHLEN, &fsb); if (fobjerr && di->zerr != ENOTSUP && di->zerr != ENOENT) { - zfs_error_aux(di->zhp->zfs_hdl, "%s", strerror(di->zerr)); + zfs_error_aux(di->zhp->zfs_hdl, "%s", zfs_strerror(di->zerr)); zfs_error(di->zhp->zfs_hdl, di->zerr, di->errbuf); /* * Let's not print an error for the same object more than @@ -258,7 +299,7 @@ write_inuse_diffs_one(FILE *fp, differ_info_t *di, uint64_t dobj) if (tobjerr && di->zerr != ENOTSUP && di->zerr != ENOENT) { if (!already_logged) { zfs_error_aux(di->zhp->zfs_hdl, - "%s", strerror(di->zerr)); + "%s", zfs_strerror(di->zerr)); zfs_error(di->zhp->zfs_hdl, di->zerr, di->errbuf); } } @@ -363,7 +404,7 @@ write_free_diffs(FILE *fp, differ_info_t *di, dmu_diff_record_t *dr) (void) strlcpy(zc.zc_name, di->fromsnap, sizeof (zc.zc_name)); zc.zc_obj = dr->ddr_first - 1; - ASSERT(di->zerr == 0); + ASSERT0(di->zerr); while (zc.zc_obj < dr->ddr_last) { int err; @@ -377,7 +418,7 @@ write_free_diffs(FILE *fp, differ_info_t *di, dmu_diff_record_t *dr) if (zc.zc_obj > dr->ddr_last) { break; } - err = describe_free(fp, di, zc.zc_obj, fobjname, + (void) describe_free(fp, di, zc.zc_obj, fobjname, MAXPATHLEN); } else if (errno == ESRCH) { break; @@ -405,7 +446,7 @@ differ(void *arg) if ((ofp = fdopen(di->outputfd, "w")) == NULL) { di->zerr = errno; - strlcpy(di->errbuf, strerror(errno), sizeof (di->errbuf)); + strlcpy(di->errbuf, zfs_strerror(errno), sizeof (di->errbuf)); (void) close(di->datafd); return ((void *)-1); } @@ -572,8 +613,7 @@ get_snapshot_names(differ_info_t *di, const char *fromsnap, zfs_handle_t *zhp; di->ds = zfs_alloc(di->zhp->zfs_hdl, tdslen + 1); - (void) strncpy(di->ds, tosnap, tdslen); - di->ds[tdslen] = '\0'; + (void) strlcpy(di->ds, tosnap, tdslen + 1); zhp = zfs_open(hdl, di->ds, ZFS_TYPE_FILESYSTEM); while (zhp != NULL) { @@ -609,8 +649,7 @@ get_snapshot_names(differ_info_t *di, const char *fromsnap, int dslen = fdslen ? fdslen : tdslen; di->ds = zfs_alloc(hdl, dslen + 1); - (void) strncpy(di->ds, fdslen ? fromsnap : tosnap, dslen); - di->ds[dslen] = '\0'; + (void) strlcpy(di->ds, fdslen ? fromsnap : tosnap, dslen + 1); di->fromsnap = zfs_asprintf(hdl, "%s%s", di->ds, atptrf); if (tsnlen) { @@ -724,7 +763,7 @@ zfs_show_diffs(zfs_handle_t *zhp, int outfd, const char *fromsnap, } if (pipe2(pipefd, O_CLOEXEC)) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(errno)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(errno)); teardown_differ_info(&di); return (zfs_error(zhp->zfs_hdl, EZFS_PIPEFAILED, errbuf)); } @@ -738,7 +777,7 @@ zfs_show_diffs(zfs_handle_t *zhp, int outfd, const char *fromsnap, di.datafd = pipefd[0]; if (pthread_create(&tid, NULL, differ, &di)) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(errno)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(errno)); (void) close(pipefd[0]); (void) close(pipefd[1]); teardown_differ_info(&di); @@ -764,14 +803,15 @@ zfs_show_diffs(zfs_handle_t *zhp, int outfd, const char *fromsnap, zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN, "\n Not an earlier snapshot from the same fs")); } else if (errno != EPIPE || di.zerr == 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(errno)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(errno)); } (void) close(pipefd[1]); (void) pthread_cancel(tid); (void) pthread_join(tid, NULL); teardown_differ_info(&di); if (di.zerr != 0 && di.zerr != EPIPE) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(di.zerr)); + zfs_error_aux(zhp->zfs_hdl, "%s", + zfs_strerror(di.zerr)); return (zfs_error(zhp->zfs_hdl, EZFS_DIFF, di.errbuf)); } else { return (zfs_error(zhp->zfs_hdl, EZFS_DIFFDATA, errbuf)); @@ -782,7 +822,7 @@ zfs_show_diffs(zfs_handle_t *zhp, int outfd, const char *fromsnap, (void) pthread_join(tid, NULL); if (di.zerr != 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(di.zerr)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(di.zerr)); return (zfs_error(zhp->zfs_hdl, EZFS_DIFF, di.errbuf)); } teardown_differ_info(&di); diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_impl.h b/sys/contrib/openzfs/lib/libzfs/libzfs_impl.h index 878daab3fe20..9053740ec2f0 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_impl.h +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_impl.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -94,12 +95,15 @@ struct zfs_handle { * snapshots of volumes. */ #define ZFS_IS_VOLUME(zhp) ((zhp)->zfs_head_type == ZFS_TYPE_VOLUME) +#define ZHP_MAX_PROPNAMES 4 struct zpool_handle { libzfs_handle_t *zpool_hdl; zpool_handle_t *zpool_next; char zpool_name[ZFS_MAX_DATASET_NAME_LEN]; int zpool_state; + unsigned int zpool_n_propnames; + const char *zpool_propnames[ZHP_MAX_PROPNAMES]; size_t zpool_config_size; nvlist_t *zpool_config; nvlist_t *zpool_old_config; @@ -140,7 +144,7 @@ extern zfs_handle_t *make_dataset_handle_zc(libzfs_handle_t *, zfs_cmd_t *); extern zfs_handle_t *make_dataset_simple_handle_zc(zfs_handle_t *, zfs_cmd_t *); extern int zprop_parse_value(libzfs_handle_t *, nvpair_t *, int, zfs_type_t, - nvlist_t *, char **, uint64_t *, const char *); + nvlist_t *, const char **, uint64_t *, const char *); extern int zprop_expand_list(libzfs_handle_t *hdl, zprop_list_t **plp, zfs_type_t type); diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_import.c b/sys/contrib/openzfs/lib/libzfs/libzfs_import.c index ed3cfea56fa0..7f276e9592c9 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_import.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_import.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -121,7 +122,7 @@ const pool_config_ops_t libzfs_config_ops = { static uint64_t label_offset(uint64_t size, int l) { - ASSERT(P2PHASE_TYPED(size, sizeof (vdev_label_t), uint64_t) == 0); + ASSERT0(P2PHASE_TYPED(size, sizeof (vdev_label_t), uint64_t)); return (l * sizeof (vdev_label_t) + (l < VDEV_LABELS / 2 ? 0 : size - VDEV_LABELS * sizeof (vdev_label_t))); } @@ -280,7 +281,7 @@ zpool_in_use(libzfs_handle_t *hdl, int fd, pool_state_t *state, char **namestr, boolean_t *inuse) { nvlist_t *config; - char *name = NULL; + const char *name = NULL; boolean_t ret; uint64_t guid = 0, vdev_guid; zpool_handle_t *zhp; @@ -291,10 +292,8 @@ zpool_in_use(libzfs_handle_t *hdl, int fd, pool_state_t *state, char **namestr, *inuse = B_FALSE; - if (zpool_read_label(fd, &config, NULL) != 0) { - (void) no_memory(hdl); + if (zpool_read_label(fd, &config, NULL) != 0) return (-1); - } if (config == NULL) return (0); diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c b/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c index db199c44ed30..1844ce1624b3 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -39,7 +40,8 @@ #include "libzfs_impl.h" static int -zfs_iter_clones(zfs_handle_t *zhp, zfs_iter_f func, void *data) +zfs_iter_clones(zfs_handle_t *zhp, int flags __maybe_unused, zfs_iter_f func, + void *data) { nvlist_t *nvl = zfs_get_clones_nvl(zhp); nvpair_t *pair; @@ -69,6 +71,7 @@ zfs_do_list_ioctl(zfs_handle_t *zhp, int arg, zfs_cmd_t *zc) orig_cookie = zc->zc_cookie; top: (void) strlcpy(zc->zc_name, zhp->zfs_name, sizeof (zc->zc_name)); + zc->zc_objset_stats.dds_creation_txg = 0; rc = zfs_ioctl(zhp->zfs_hdl, arg, zc); if (rc == -1) { @@ -103,6 +106,13 @@ top: int zfs_iter_filesystems(zfs_handle_t *zhp, zfs_iter_f func, void *data) { + return (zfs_iter_filesystems_v2(zhp, 0, func, data)); +} + +int +zfs_iter_filesystems_v2(zfs_handle_t *zhp, int flags, zfs_iter_f func, + void *data) +{ zfs_cmd_t zc = {"\0"}; zfs_handle_t *nzhp; int ret; @@ -112,16 +122,21 @@ zfs_iter_filesystems(zfs_handle_t *zhp, zfs_iter_f func, void *data) zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0); + if ((flags & ZFS_ITER_SIMPLE) == ZFS_ITER_SIMPLE) + zc.zc_simple = B_TRUE; + while ((ret = zfs_do_list_ioctl(zhp, ZFS_IOC_DATASET_LIST_NEXT, &zc)) == 0) { + if (zc.zc_simple) + nzhp = make_dataset_simple_handle_zc(zhp, &zc); + else + nzhp = make_dataset_handle_zc(zhp->zfs_hdl, &zc); /* * Silently ignore errors, as the only plausible explanation is * that the pool has since been removed. */ - if ((nzhp = make_dataset_handle_zc(zhp->zfs_hdl, - &zc)) == NULL) { + if (nzhp == NULL) continue; - } if ((ret = func(nzhp, data)) != 0) { zcmd_free_nvlists(&zc); @@ -139,6 +154,14 @@ int zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func, void *data, uint64_t min_txg, uint64_t max_txg) { + return (zfs_iter_snapshots_v2(zhp, simple ? ZFS_ITER_SIMPLE : 0, func, + data, min_txg, max_txg)); +} + +int +zfs_iter_snapshots_v2(zfs_handle_t *zhp, int flags, zfs_iter_f func, + void *data, uint64_t min_txg, uint64_t max_txg) +{ zfs_cmd_t zc = {"\0"}; zfs_handle_t *nzhp; int ret; @@ -148,7 +171,7 @@ zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func, zhp->zfs_type == ZFS_TYPE_BOOKMARK) return (0); - zc.zc_simple = simple; + zc.zc_simple = (flags & ZFS_ITER_SIMPLE) != 0; zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0); @@ -168,7 +191,7 @@ zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func, while ((ret = zfs_do_list_ioctl(zhp, ZFS_IOC_SNAPSHOT_LIST_NEXT, &zc)) == 0) { - if (simple) + if (zc.zc_simple) nzhp = make_dataset_simple_handle_zc(zhp, &zc); else nzhp = make_dataset_handle_zc(zhp->zfs_hdl, &zc); @@ -192,6 +215,13 @@ zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func, int zfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data) { + return (zfs_iter_bookmarks_v2(zhp, 0, func, data)); +} + +int +zfs_iter_bookmarks_v2(zfs_handle_t *zhp, int flags __maybe_unused, + zfs_iter_f func, void *data) +{ zfs_handle_t *nzhp; nvlist_t *props = NULL; nvlist_t *bmarks = NULL; @@ -216,7 +246,7 @@ zfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data) for (pair = nvlist_next_nvpair(bmarks, NULL); pair != NULL; pair = nvlist_next_nvpair(bmarks, pair)) { char name[ZFS_MAX_DATASET_NAME_LEN]; - char *bmark_name; + const char *bmark_name; nvlist_t *bmark_props; bmark_name = nvpair_name(pair); @@ -297,8 +327,16 @@ zfs_snapshot_compare(const void *larg, const void *rarg) } int -zfs_iter_snapshots_sorted(zfs_handle_t *zhp, zfs_iter_f callback, void *data, - uint64_t min_txg, uint64_t max_txg) +zfs_iter_snapshots_sorted(zfs_handle_t *zhp, zfs_iter_f callback, + void *data, uint64_t min_txg, uint64_t max_txg) +{ + return (zfs_iter_snapshots_sorted_v2(zhp, 0, callback, data, + min_txg, max_txg)); +} + +int +zfs_iter_snapshots_sorted_v2(zfs_handle_t *zhp, int flags, zfs_iter_f callback, + void *data, uint64_t min_txg, uint64_t max_txg) { int ret = 0; zfs_node_t *node; @@ -308,7 +346,7 @@ zfs_iter_snapshots_sorted(zfs_handle_t *zhp, zfs_iter_f callback, void *data, avl_create(&avl, zfs_snapshot_compare, sizeof (zfs_node_t), offsetof(zfs_node_t, zn_avlnode)); - ret = zfs_iter_snapshots(zhp, B_FALSE, zfs_sort_snaps, &avl, min_txg, + ret = zfs_iter_snapshots_v2(zhp, flags, zfs_sort_snaps, &avl, min_txg, max_txg); for (node = avl_first(&avl); node != NULL; node = AVL_NEXT(&avl, node)) @@ -374,6 +412,13 @@ int zfs_iter_snapspec(zfs_handle_t *fs_zhp, const char *spec_orig, zfs_iter_f func, void *arg) { + return (zfs_iter_snapspec_v2(fs_zhp, 0, spec_orig, func, arg)); +} + +int +zfs_iter_snapspec_v2(zfs_handle_t *fs_zhp, int flags, const char *spec_orig, + zfs_iter_f func, void *arg) +{ char *buf, *comma_separated, *cp; int err = 0; int ret = 0; @@ -411,7 +456,7 @@ zfs_iter_snapspec(zfs_handle_t *fs_zhp, const char *spec_orig, } } - err = zfs_iter_snapshots_sorted(fs_zhp, + err = zfs_iter_snapshots_sorted_v2(fs_zhp, flags, snapspec_cb, &ssa, 0, 0); if (ret == 0) ret = err; @@ -450,12 +495,18 @@ zfs_iter_snapspec(zfs_handle_t *fs_zhp, const char *spec_orig, int zfs_iter_children(zfs_handle_t *zhp, zfs_iter_f func, void *data) { + return (zfs_iter_children_v2(zhp, 0, func, data)); +} + +int +zfs_iter_children_v2(zfs_handle_t *zhp, int flags, zfs_iter_f func, void *data) +{ int ret; - if ((ret = zfs_iter_snapshots(zhp, B_FALSE, func, data, 0, 0)) != 0) + if ((ret = zfs_iter_snapshots_v2(zhp, flags, func, data, 0, 0)) != 0) return (ret); - return (zfs_iter_filesystems(zhp, func, data)); + return (zfs_iter_filesystems_v2(zhp, flags, func, data)); } @@ -466,6 +517,7 @@ typedef struct iter_stack_frame { typedef struct iter_dependents_arg { boolean_t first; + int flags; boolean_t allowrecursion; iter_stack_frame_t *stack; zfs_iter_f func; @@ -481,7 +533,7 @@ iter_dependents_cb(zfs_handle_t *zhp, void *arg) ida->first = B_FALSE; if (zhp->zfs_type == ZFS_TYPE_SNAPSHOT) { - err = zfs_iter_clones(zhp, iter_dependents_cb, ida); + err = zfs_iter_clones(zhp, ida->flags, iter_dependents_cb, ida); } else if (zhp->zfs_type != ZFS_TYPE_BOOKMARK) { iter_stack_frame_t isf; iter_stack_frame_t *f; @@ -515,9 +567,10 @@ iter_dependents_cb(zfs_handle_t *zhp, void *arg) isf.zhp = zhp; isf.next = ida->stack; ida->stack = &isf; - err = zfs_iter_filesystems(zhp, iter_dependents_cb, ida); + err = zfs_iter_filesystems_v2(zhp, ida->flags, + iter_dependents_cb, ida); if (err == 0) - err = zfs_iter_snapshots(zhp, B_FALSE, + err = zfs_iter_snapshots_sorted_v2(zhp, ida->flags, iter_dependents_cb, ida, 0, 0); ida->stack = isf.next; } @@ -534,7 +587,15 @@ int zfs_iter_dependents(zfs_handle_t *zhp, boolean_t allowrecursion, zfs_iter_f func, void *data) { + return (zfs_iter_dependents_v2(zhp, 0, allowrecursion, func, data)); +} + +int +zfs_iter_dependents_v2(zfs_handle_t *zhp, int flags, boolean_t allowrecursion, + zfs_iter_f func, void *data) +{ iter_dependents_arg_t ida; + ida.flags = flags; ida.allowrecursion = allowrecursion; ida.stack = NULL; ida.func = func; diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_mount.c b/sys/contrib/openzfs/lib/libzfs/libzfs_mount.c index 511552884947..5c9e2199eed4 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_mount.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_mount.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,7 +23,7 @@ /* * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2014, 2021 by Delphix. All rights reserved. + * Copyright (c) 2014, 2022 by Delphix. All rights reserved. * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com> * Copyright 2017 RackTop Systems. * Copyright (c) 2018 Datto Inc. @@ -74,6 +75,7 @@ #include <sys/dsl_crypt.h> #include <libzfs.h> +#include <libzutil.h> #include "libzfs_impl.h" #include <thread_pool.h> @@ -82,8 +84,6 @@ #include <sys/systeminfo.h> #define MAXISALEN 257 /* based on sysinfo(2) man page */ -static int mount_tp_nthr = 512; /* tpool threads for multi-threaded mounting */ - static void zfs_mount_task(void *); static const proto_table_t proto_table[SA_PROTOCOL_COUNT] = { @@ -291,7 +291,7 @@ static int zfs_add_option(zfs_handle_t *zhp, char *options, int len, zfs_prop_t prop, const char *on, const char *off) { - char *source; + const char *source; uint64_t value; /* Skip adding duplicate default options */ @@ -466,7 +466,7 @@ zfs_mount_at(zfs_handle_t *zhp, const char *options, int flags, if (mkdirp(mountpoint, 0755) != 0) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "failed to create mountpoint: %s"), - strerror(errno)); + zfs_strerror(errno)); return (zfs_error_fmt(hdl, EZFS_MOUNTFAILED, dgettext(TEXT_DOMAIN, "cannot mount '%s'"), mountpoint)); @@ -516,7 +516,7 @@ zfs_mount_at(zfs_handle_t *zhp, const char *options, int flags, } else if (rc == ENOTSUP) { int spa_version; - VERIFY(zfs_spa_version(zhp, &spa_version) == 0); + VERIFY0(zfs_spa_version(zhp, &spa_version)); zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "Can't mount a version %llu " "file system on a version %d pool. Pool must be" @@ -524,7 +524,7 @@ zfs_mount_at(zfs_handle_t *zhp, const char *options, int flags, (u_longlong_t)zfs_prop_get_int(zhp, ZFS_PROP_VERSION), spa_version); } else { - zfs_error_aux(hdl, "%s", strerror(rc)); + zfs_error_aux(hdl, "%s", zfs_strerror(rc)); } return (zfs_error_fmt(hdl, EZFS_MOUNTFAILED, dgettext(TEXT_DOMAIN, "cannot mount '%s'"), @@ -788,6 +788,16 @@ zfs_commit_shares(const enum sa_protocol *proto) sa_commit_shares(*p); } +void +zfs_truncate_shares(const enum sa_protocol *proto) +{ + if (proto == NULL) + proto = share_all_proto; + + for (const enum sa_protocol *p = proto; *p != SA_NO_PROTOCOL; ++p) + sa_truncate_shares(*p); +} + /* * Unshare the given filesystem. */ @@ -930,7 +940,7 @@ zfs_iter_cb(zfs_handle_t *zhp, void *data) } libzfs_add_handle(cbp, zhp); - if (zfs_iter_filesystems(zhp, zfs_iter_cb, cbp) != 0) { + if (zfs_iter_filesystems_v2(zhp, 0, zfs_iter_cb, cbp) != 0) { zfs_close(zhp); return (-1); } @@ -1087,7 +1097,10 @@ zfs_dispatch_mount(libzfs_handle_t *hdl, zfs_handle_t **handles, mnt_param->mnt_func = func; mnt_param->mnt_data = data; - (void) tpool_dispatch(tp, zfs_mount_task, (void*)mnt_param); + if (tpool_dispatch(tp, zfs_mount_task, (void*)mnt_param)) { + /* Could not dispatch to thread pool; execute directly */ + zfs_mount_task((void*)mnt_param); + } } /* @@ -1191,19 +1204,20 @@ out: * * Callbacks are issued in one of two ways: * - * 1. Sequentially: If the parallel argument is B_FALSE or the ZFS_SERIAL_MOUNT + * 1. Sequentially: If the nthr argument is <= 1 or the ZFS_SERIAL_MOUNT * environment variable is set, then we issue callbacks sequentially. * - * 2. In parallel: If the parallel argument is B_TRUE and the ZFS_SERIAL_MOUNT + * 2. In parallel: If the nthr argument is > 1 and the ZFS_SERIAL_MOUNT * environment variable is not set, then we use a tpool to dispatch threads * to mount filesystems in parallel. This function dispatches tasks to mount * the filesystems at the top-level mountpoints, and these tasks in turn * are responsible for recursively mounting filesystems in their children - * mountpoints. + * mountpoints. The value of the nthr argument will be the number of worker + * threads for the thread pool. */ void zfs_foreach_mountpoint(libzfs_handle_t *hdl, zfs_handle_t **handles, - size_t num_handles, zfs_iter_f func, void *data, boolean_t parallel) + size_t num_handles, zfs_iter_f func, void *data, uint_t nthr) { zoneid_t zoneid = getzoneid(); @@ -1212,7 +1226,7 @@ zfs_foreach_mountpoint(libzfs_handle_t *hdl, zfs_handle_t **handles, * variable that can be used as a convenience to do a/b comparison * of serial vs. parallel mounting. */ - boolean_t serial_mount = !parallel || + boolean_t serial_mount = nthr <= 1 || (getenv("ZFS_SERIAL_MOUNT") != NULL); /* @@ -1232,7 +1246,7 @@ zfs_foreach_mountpoint(libzfs_handle_t *hdl, zfs_handle_t **handles, * Issue the callback function for each dataset using a parallel * algorithm that uses a thread pool to manage threads. */ - tpool_t *tp = tpool_create(1, mount_tp_nthr, 0, NULL); + tpool_t *tp = tpool_create(1, nthr, 0, NULL); /* * There may be multiple "top level" mountpoints outside of the pool's @@ -1259,10 +1273,12 @@ zfs_foreach_mountpoint(libzfs_handle_t *hdl, zfs_handle_t **handles, /* * Mount and share all datasets within the given pool. This assumes that no - * datasets within the pool are currently mounted. + * datasets within the pool are currently mounted. nthr will be number of + * worker threads to use while mounting datasets. */ int -zpool_enable_datasets(zpool_handle_t *zhp, const char *mntopts, int flags) +zpool_enable_datasets(zpool_handle_t *zhp, const char *mntopts, int flags, + uint_t nthr) { get_all_cb_t cb = { 0 }; mount_state_t ms = { 0 }; @@ -1279,7 +1295,7 @@ zpool_enable_datasets(zpool_handle_t *zhp, const char *mntopts, int flags) * over all child filesystems. */ libzfs_add_handle(&cb, zfsp); - if (zfs_iter_filesystems(zfsp, zfs_iter_cb, &cb) != 0) + if (zfs_iter_filesystems_v2(zfsp, 0, zfs_iter_cb, &cb) != 0) goto out; /* @@ -1288,9 +1304,9 @@ zpool_enable_datasets(zpool_handle_t *zhp, const char *mntopts, int flags) ms.ms_mntopts = mntopts; ms.ms_mntflags = flags; zfs_foreach_mountpoint(zhp->zpool_hdl, cb.cb_handles, cb.cb_used, - zfs_mount_one, &ms, B_TRUE); + zfs_mount_one, &ms, nthr); if (ms.ms_mntstatus != 0) - ret = ms.ms_mntstatus; + ret = EZFS_MOUNTFAILED; /* * Share all filesystems that need to be shared. This needs to be @@ -1299,9 +1315,9 @@ zpool_enable_datasets(zpool_handle_t *zhp, const char *mntopts, int flags) */ ms.ms_mntstatus = 0; zfs_foreach_mountpoint(zhp->zpool_hdl, cb.cb_handles, cb.cb_used, - zfs_share_one, &ms, B_FALSE); + zfs_share_one, &ms, 1); if (ms.ms_mntstatus != 0) - ret = ms.ms_mntstatus; + ret = EZFS_SHAREFAILED; else zfs_commit_shares(NULL); @@ -1412,10 +1428,10 @@ zpool_disable_datasets(zpool_handle_t *zhp, boolean_t force) * Walk through and first unshare everything. */ for (i = 0; i < used; i++) { - for (enum sa_protocol i = 0; i < SA_PROTOCOL_COUNT; ++i) { - if (sa_is_shared(sets[i].mountpoint, i) && + for (enum sa_protocol p = 0; p < SA_PROTOCOL_COUNT; ++p) { + if (sa_is_shared(sets[i].mountpoint, p) && unshare_one(hdl, sets[i].mountpoint, - sets[i].mountpoint, i) != 0) + sets[i].mountpoint, p) != 0) goto out; } } diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_pool.c b/sys/contrib/openzfs/lib/libzfs/libzfs_pool.c index 375abb944e24..756d701e2d97 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_pool.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_pool.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,14 +23,15 @@ /* * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2011, 2020 by Delphix. All rights reserved. + * Copyright (c) 2011, 2024 by Delphix. All rights reserved. * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com> * Copyright (c) 2018 Datto Inc. * Copyright (c) 2017 Open-E, Inc. All Rights Reserved. * Copyright (c) 2017, Intel Corporation. * Copyright (c) 2018, loli10K <ezomori.nozomu@gmail.com> * Copyright (c) 2021, Colm Buckley <colm@tuatha.org> - * Copyright (c) 2021, Klara Inc. + * Copyright (c) 2021, 2023, Klara Inc. + * Copyright (c) 2025 Hewlett Packard Enterprise Development LP. */ #include <errno.h> @@ -60,9 +62,9 @@ static boolean_t zpool_vdev_is_interior(const char *name); typedef struct prop_flags { - int create:1; /* Validate property on creation */ - int import:1; /* Validate property on import */ - int vdevprop:1; /* Validate property as a VDEV property */ + unsigned int create:1; /* Validate property on creation */ + unsigned int import:1; /* Validate property on import */ + unsigned int vdevprop:1; /* Validate property as a VDEV property */ } prop_flags_t; /* @@ -79,6 +81,14 @@ zpool_get_all_props(zpool_handle_t *zhp) (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); + if (zhp->zpool_n_propnames > 0) { + nvlist_t *innvl = fnvlist_alloc(); + fnvlist_add_string_array(innvl, ZPOOL_GET_PROPS_NAMES, + zhp->zpool_propnames, zhp->zpool_n_propnames); + zcmd_write_src_nvlist(hdl, &zc, innvl); + fnvlist_free(innvl); + } + zcmd_alloc_dst_nvlist(hdl, &zc, 0); while (zfs_ioctl(hdl, ZFS_IOC_POOL_GET_PROPS, &zc) != 0) { @@ -255,6 +265,7 @@ zpool_get_state_str(zpool_handle_t *zhp) if (zpool_get_state(zhp) == POOL_STATE_UNAVAIL) { str = gettext("FAULTED"); } else if (status == ZPOOL_STATUS_IO_FAILURE_WAIT || + status == ZPOOL_STATUS_IO_FAILURE_CONTINUE || status == ZPOOL_STATUS_IO_FAILURE_MMP) { str = gettext("SUSPENDED"); } else { @@ -317,6 +328,15 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, return (0); } + /* + * ZPOOL_PROP_DEDUPCACHED can be fetched by name only using + * the ZPOOL_GET_PROPS_NAMES mechanism + */ + if (prop == ZPOOL_PROP_DEDUPCACHED) { + zpool_add_propname(zhp, ZPOOL_DEDUPCACHED_PROP_NAME); + (void) zpool_props_refresh(zhp); + } + if (zhp->zpool_props == NULL && zpool_get_all_props(zhp) && prop != ZPOOL_PROP_NAME) return (-1); @@ -331,6 +351,24 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, intval = zpool_get_prop_int(zhp, prop, &src); switch (prop) { + case ZPOOL_PROP_DEDUP_TABLE_QUOTA: + /* + * If dedup quota is 0, we translate this into 'none' + * (unless literal is set). And if it is UINT64_MAX + * we translate that as 'automatic' (limit to size of + * the dedicated dedup VDEV. Otherwise, fall throught + * into the regular number formating. + */ + if (intval == 0) { + (void) strlcpy(buf, literal ? "0" : "none", + len); + break; + } else if (intval == UINT64_MAX) { + (void) strlcpy(buf, "auto", len); + break; + } + zfs_fallthrough; + case ZPOOL_PROP_SIZE: case ZPOOL_PROP_ALLOCATED: case ZPOOL_PROP_FREE: @@ -339,6 +377,10 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, case ZPOOL_PROP_ASHIFT: case ZPOOL_PROP_MAXBLOCKSIZE: case ZPOOL_PROP_MAXDNODESIZE: + case ZPOOL_PROP_BCLONESAVED: + case ZPOOL_PROP_BCLONEUSED: + case ZPOOL_PROP_DEDUP_TABLE_SIZE: + case ZPOOL_PROP_DEDUPCACHED: if (literal) (void) snprintf(buf, len, "%llu", (u_longlong_t)intval); @@ -380,6 +422,7 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, } break; + case ZPOOL_PROP_BCLONERATIO: case ZPOOL_PROP_DEDUPRATIO: if (literal) (void) snprintf(buf, len, "%llu.%02llu", @@ -424,6 +467,39 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, } /* + * Get a zpool property value for 'propname' and return the value in + * a pre-allocated buffer. + */ +int +zpool_get_userprop(zpool_handle_t *zhp, const char *propname, char *buf, + size_t len, zprop_source_t *srctype) +{ + nvlist_t *nv; + uint64_t ival; + const char *value; + zprop_source_t source = ZPROP_SRC_LOCAL; + + if (zhp->zpool_props == NULL) + zpool_get_all_props(zhp); + + if (nvlist_lookup_nvlist(zhp->zpool_props, propname, &nv) == 0) { + if (nvlist_lookup_uint64(nv, ZPROP_SOURCE, &ival) == 0) + source = ival; + verify(nvlist_lookup_string(nv, ZPROP_VALUE, &value) == 0); + } else { + source = ZPROP_SRC_DEFAULT; + value = "-"; + } + + if (srctype) + *srctype = source; + + (void) strlcpy(buf, value, len); + + return (0); +} + +/* * Check if the bootfs name has the same pool name as it is set to. * Assuming bootfs is a valid dataset name. */ @@ -456,11 +532,12 @@ zpool_valid_proplist(libzfs_handle_t *hdl, const char *poolname, nvpair_t *elem; nvlist_t *retprops; zpool_prop_t prop; - char *strval; + const char *strval; uint64_t intval; - char *slash, *check; + const char *check; struct stat64 statbuf; zpool_handle_t *zhp; + char *parent, *slash; char report[1024]; if (nvlist_alloc(&retprops, NV_UNIQUE_NAME, 0) != 0) { @@ -547,6 +624,44 @@ zpool_valid_proplist(libzfs_handle_t *hdl, const char *poolname, goto error; } continue; + } else if (prop == ZPOOL_PROP_INVAL && + zfs_prop_user(propname)) { + /* + * This is a user property: make sure it's a + * string, and that it's less than ZAP_MAXNAMELEN. + */ + if (nvpair_type(elem) != DATA_TYPE_STRING) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "'%s' must be a string"), propname); + (void) zfs_error(hdl, EZFS_BADPROP, errbuf); + goto error; + } + + if (strlen(nvpair_name(elem)) >= ZAP_MAXNAMELEN) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "property name '%s' is too long"), + propname); + (void) zfs_error(hdl, EZFS_BADPROP, errbuf); + goto error; + } + + (void) nvpair_value_string(elem, &strval); + + if (strlen(strval) >= ZFS_MAXPROPLEN) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "property value '%s' is too long"), + strval); + (void) zfs_error(hdl, EZFS_BADPROP, errbuf); + goto error; + } + + if (nvlist_add_string(retprops, propname, + strval) != 0) { + (void) no_memory(hdl); + goto error; + } + + continue; } /* @@ -676,29 +791,36 @@ zpool_valid_proplist(libzfs_handle_t *hdl, const char *poolname, goto error; } - slash = strrchr(strval, '/'); + parent = strdup(strval); + if (parent == NULL) { + (void) zfs_error(hdl, EZFS_NOMEM, errbuf); + goto error; + } + slash = strrchr(parent, '/'); if (slash[1] == '\0' || strcmp(slash, "/.") == 0 || strcmp(slash, "/..") == 0) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "'%s' is not a valid file"), strval); + "'%s' is not a valid file"), parent); (void) zfs_error(hdl, EZFS_BADPATH, errbuf); + free(parent); goto error; } *slash = '\0'; - if (strval[0] != '\0' && - (stat64(strval, &statbuf) != 0 || + if (parent[0] != '\0' && + (stat64(parent, &statbuf) != 0 || !S_ISDIR(statbuf.st_mode))) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "'%s' is not a valid directory"), - strval); + parent); (void) zfs_error(hdl, EZFS_BADPATH, errbuf); + free(parent); goto error; } + free(parent); - *slash = '/'; break; case ZPOOL_PROP_COMPATIBILITY: @@ -775,7 +897,7 @@ int zpool_set_prop(zpool_handle_t *zhp, const char *propname, const char *propval) { zfs_cmd_t zc = {"\0"}; - int ret = -1; + int ret; char errbuf[ERRBUFLEN]; nvlist_t *nvl = NULL; nvlist_t *realprops; @@ -851,9 +973,30 @@ zpool_expand_proplist(zpool_handle_t *zhp, zprop_list_t **plp, features = zpool_get_features(zhp); if ((*plp)->pl_all && firstexpand) { + /* Handle userprops in the all properties case */ + if (zhp->zpool_props == NULL && zpool_props_refresh(zhp)) + return (-1); + + nvp = NULL; + while ((nvp = nvlist_next_nvpair(zhp->zpool_props, nvp)) != + NULL) { + const char *propname = nvpair_name(nvp); + + if (!zfs_prop_user(propname)) + continue; + + entry = zfs_alloc(hdl, sizeof (zprop_list_t)); + entry->pl_prop = ZPROP_USERPROP; + entry->pl_user_prop = zfs_strdup(hdl, propname); + entry->pl_width = strlen(entry->pl_user_prop); + entry->pl_all = B_TRUE; + + *last = entry; + last = &entry->pl_next; + } + for (i = 0; i < SPA_FEATURES; i++) { - zprop_list_t *entry = zfs_alloc(hdl, - sizeof (zprop_list_t)); + entry = zfs_alloc(hdl, sizeof (zprop_list_t)); entry->pl_prop = ZPROP_USERPROP; entry->pl_user_prop = zfs_asprintf(hdl, "feature@%s", spa_feature_table[i].fi_uname); @@ -870,7 +1013,6 @@ zpool_expand_proplist(zpool_handle_t *zhp, zprop_list_t **plp, nvp != NULL; nvp = nvlist_next_nvpair(features, nvp)) { char *propname; boolean_t found; - zprop_list_t *entry; if (zfeature_is_supported(nvpair_name(nvp))) continue; @@ -916,6 +1058,12 @@ zpool_expand_proplist(zpool_handle_t *zhp, zprop_list_t **plp, NULL, literal) == 0) { if (strlen(buf) > entry->pl_width) entry->pl_width = strlen(buf); + } else if (entry->pl_prop == ZPROP_INVAL && + zfs_prop_user(entry->pl_user_prop) && + zpool_get_userprop(zhp, entry->pl_user_prop, buf, + sizeof (buf), NULL) == 0) { + if (strlen(buf) > entry->pl_width) + entry->pl_width = strlen(buf); } } @@ -928,7 +1076,7 @@ vdev_expand_proplist(zpool_handle_t *zhp, const char *vdevname, { zprop_list_t *entry; char buf[ZFS_MAXPROPLEN]; - char *strval = NULL; + const char *strval = NULL; int err = 0; nvpair_t *elem = NULL; nvlist_t *vprops = NULL; @@ -1275,30 +1423,6 @@ zpool_get_state(zpool_handle_t *zhp) } /* - * Check if vdev list contains a special vdev - */ -static boolean_t -zpool_has_special_vdev(nvlist_t *nvroot) -{ - nvlist_t **child; - uint_t children; - - if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_CHILDREN, &child, - &children) == 0) { - for (uint_t c = 0; c < children; c++) { - char *bias; - - if (nvlist_lookup_string(child[c], - ZPOOL_CONFIG_ALLOCATION_BIAS, &bias) == 0 && - strcmp(bias, VDEV_ALLOC_BIAS_SPECIAL) == 0) { - return (B_TRUE); - } - } - } - return (B_FALSE); -} - -/* * Check if vdev list contains a dRAID vdev */ static boolean_t @@ -1310,7 +1434,7 @@ zpool_has_draid_vdev(nvlist_t *nvroot) if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_CHILDREN, &child, &children) == 0) { for (uint_t c = 0; c < children; c++) { - char *type; + const char *type; if (nvlist_lookup_string(child[c], ZPOOL_CONFIG_TYPE, &type) == 0 && @@ -1390,7 +1514,7 @@ zpool_create(libzfs_handle_t *hdl, const char *pool, nvlist_t *nvroot, if (fsprops) { uint64_t zoned; - char *zonestr; + const char *zonestr; zoned = ((nvlist_lookup_string(fsprops, zfs_prop_to_name(ZFS_PROP_ZONED), &zonestr) == 0) && @@ -1401,16 +1525,6 @@ zpool_create(libzfs_handle_t *hdl, const char *pool, nvlist_t *nvroot, goto create_failed; } - if (nvlist_exists(zc_fsprops, - zfs_prop_to_name(ZFS_PROP_SPECIAL_SMALL_BLOCKS)) && - !zpool_has_special_vdev(nvroot)) { - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "%s property requires a special vdev"), - zfs_prop_to_name(ZFS_PROP_SPECIAL_SMALL_BLOCKS)); - (void) zfs_error(hdl, EZFS_BADPROP, errbuf); - goto create_failed; - } - if (!zc_props && (nvlist_alloc(&zc_props, NV_UNIQUE_NAME, 0) != 0)) { goto create_failed; @@ -1620,11 +1734,37 @@ zpool_discard_checkpoint(zpool_handle_t *zhp) } /* + * Load data type for the given pool. + */ +int +zpool_prefetch(zpool_handle_t *zhp, zpool_prefetch_type_t type) +{ + libzfs_handle_t *hdl = zhp->zpool_hdl; + char msg[1024]; + int error; + + error = lzc_pool_prefetch(zhp->zpool_name, type); + if (error != 0) { + const char *typename = "unknown"; + if (type == ZPOOL_PREFETCH_DDT) + typename = "ddt"; + else if (type == ZPOOL_PREFETCH_BRT) + typename = "brt"; + (void) snprintf(msg, sizeof (msg), dgettext(TEXT_DOMAIN, + "cannot prefetch %s in '%s'"), typename, zhp->zpool_name); + (void) zpool_standard_error(hdl, error, msg); + return (-1); + } + + return (0); +} + +/* * Add the given vdevs to the pool. The caller must have already performed the * necessary verification to ensure that the vdev specification is well-formed. */ int -zpool_add(zpool_handle_t *zhp, nvlist_t *nvroot) +zpool_add(zpool_handle_t *zhp, nvlist_t *nvroot, boolean_t check_ashift) { zfs_cmd_t zc = {"\0"}; int ret; @@ -1656,6 +1796,7 @@ zpool_add(zpool_handle_t *zhp, nvlist_t *nvroot) zcmd_write_conf_nvlist(hdl, &zc, nvroot); (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); + zc.zc_flags = check_ashift; if (zfs_ioctl(hdl, ZFS_IOC_VDEV_ADD, &zc) != 0) { switch (errno) { @@ -1799,7 +1940,8 @@ zpool_rewind_exclaim(libzfs_handle_t *hdl, const char *name, boolean_t dryrun, (void) nvlist_lookup_int64(nv, ZPOOL_CONFIG_REWIND_TIME, &loss); if (localtime_r((time_t *)&rewindto, &t) != NULL && - strftime(timestr, 128, "%c", &t) != 0) { + ctime_r((time_t *)&rewindto, timestr) != NULL) { + timestr[24] = 0; if (dryrun) { (void) printf(dgettext(TEXT_DOMAIN, "Would be able to return %s " @@ -1830,23 +1972,18 @@ zpool_rewind_exclaim(libzfs_handle_t *hdl, const char *name, boolean_t dryrun, void zpool_explain_recover(libzfs_handle_t *hdl, const char *name, int reason, - nvlist_t *config) + nvlist_t *config, char *buf, size_t size) { nvlist_t *nv = NULL; int64_t loss = -1; uint64_t edata = UINT64_MAX; uint64_t rewindto; struct tm t; - char timestr[128]; + char timestr[128], temp[1024]; if (!hdl->libzfs_printerr) return; - if (reason >= 0) - (void) printf(dgettext(TEXT_DOMAIN, "action: ")); - else - (void) printf(dgettext(TEXT_DOMAIN, "\t")); - /* All attempted rewinds failed if ZPOOL_CONFIG_LOAD_TIME missing */ if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_LOAD_INFO, &nv) != 0 || nvlist_lookup_nvlist(nv, ZPOOL_CONFIG_REWIND_INFO, &nv) != 0 || @@ -1857,55 +1994,61 @@ zpool_explain_recover(libzfs_handle_t *hdl, const char *name, int reason, (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_LOAD_DATA_ERRORS, &edata); - (void) printf(dgettext(TEXT_DOMAIN, + (void) snprintf(buf, size, dgettext(TEXT_DOMAIN, "Recovery is possible, but will result in some data loss.\n")); if (localtime_r((time_t *)&rewindto, &t) != NULL && - strftime(timestr, 128, "%c", &t) != 0) { - (void) printf(dgettext(TEXT_DOMAIN, + ctime_r((time_t *)&rewindto, timestr) != NULL) { + timestr[24] = 0; + (void) snprintf(temp, 1024, dgettext(TEXT_DOMAIN, "\tReturning the pool to its state as of %s\n" - "\tshould correct the problem. "), - timestr); + "\tshould correct the problem. "), timestr); + (void) strlcat(buf, temp, size); } else { - (void) printf(dgettext(TEXT_DOMAIN, + (void) strlcat(buf, dgettext(TEXT_DOMAIN, "\tReverting the pool to an earlier state " - "should correct the problem.\n\t")); + "should correct the problem.\n\t"), size); } if (loss > 120) { - (void) printf(dgettext(TEXT_DOMAIN, + (void) snprintf(temp, 1024, dgettext(TEXT_DOMAIN, "Approximately %lld minutes of data\n" "\tmust be discarded, irreversibly. "), ((longlong_t)loss + 30) / 60); + (void) strlcat(buf, temp, size); } else if (loss > 0) { - (void) printf(dgettext(TEXT_DOMAIN, + (void) snprintf(temp, 1024, dgettext(TEXT_DOMAIN, "Approximately %lld seconds of data\n" "\tmust be discarded, irreversibly. "), (longlong_t)loss); + (void) strlcat(buf, temp, size); } if (edata != 0 && edata != UINT64_MAX) { if (edata == 1) { - (void) printf(dgettext(TEXT_DOMAIN, + (void) strlcat(buf, dgettext(TEXT_DOMAIN, "After rewind, at least\n" - "\tone persistent user-data error will remain. ")); + "\tone persistent user-data error will remain. "), + size); } else { - (void) printf(dgettext(TEXT_DOMAIN, + (void) strlcat(buf, dgettext(TEXT_DOMAIN, "After rewind, several\n" - "\tpersistent user-data errors will remain. ")); + "\tpersistent user-data errors will remain. "), + size); } } - (void) printf(dgettext(TEXT_DOMAIN, + (void) snprintf(temp, 1024, dgettext(TEXT_DOMAIN, "Recovery can be attempted\n\tby executing 'zpool %s -F %s'. "), reason >= 0 ? "clear" : "import", name); + (void) strlcat(buf, temp, size); - (void) printf(dgettext(TEXT_DOMAIN, + (void) strlcat(buf, dgettext(TEXT_DOMAIN, "A scrub of the pool\n" - "\tis strongly recommended after recovery.\n")); + "\tis strongly recommended after recovery.\n"), size); return; no_info: - (void) printf(dgettext(TEXT_DOMAIN, - "Destroy and re-create the pool from\n\ta backup source.\n")); + (void) strlcat(buf, dgettext(TEXT_DOMAIN, + "Destroy and re-create the pool from\n\ta backup source.\n"), size); } /* @@ -1974,20 +2117,25 @@ print_vdev_tree(libzfs_handle_t *hdl, const char *name, nvlist_t *nv, } void -zpool_print_unsup_feat(nvlist_t *config) +zpool_collect_unsup_feat(nvlist_t *config, char *buf, size_t size) { nvlist_t *nvinfo, *unsup_feat; + char temp[512]; nvinfo = fnvlist_lookup_nvlist(config, ZPOOL_CONFIG_LOAD_INFO); unsup_feat = fnvlist_lookup_nvlist(nvinfo, ZPOOL_CONFIG_UNSUP_FEAT); for (nvpair_t *nvp = nvlist_next_nvpair(unsup_feat, NULL); nvp != NULL; nvp = nvlist_next_nvpair(unsup_feat, nvp)) { - char *desc = fnvpair_value_string(nvp); - if (strlen(desc) > 0) - (void) printf("\t%s (%s)\n", nvpair_name(nvp), desc); - else - (void) printf("\t%s\n", nvpair_name(nvp)); + const char *desc = fnvpair_value_string(nvp); + if (strlen(desc) > 0) { + (void) snprintf(temp, 512, "\t%s (%s)\n", + nvpair_name(nvp), desc); + (void) strlcat(buf, temp, size); + } else { + (void) snprintf(temp, 512, "\t%s\n", nvpair_name(nvp)); + (void) strlcat(buf, temp, size); + } } } @@ -2007,9 +2155,10 @@ zpool_import_props(libzfs_handle_t *hdl, nvlist_t *config, const char *newname, nvlist_t *nvinfo = NULL; nvlist_t *missing = NULL; const char *thename; - char *origname; + const char *origname; int ret; int error = 0; + char buf[2048]; char errbuf[ERRBUFLEN]; origname = fnvlist_lookup_string(config, ZPOOL_CONFIG_POOL_NAME); @@ -2092,7 +2241,9 @@ zpool_import_props(libzfs_handle_t *hdl, nvlist_t *config, const char *newname, (void) printf(dgettext(TEXT_DOMAIN, "This " "pool uses the following feature(s) not " "supported by this system:\n")); - zpool_print_unsup_feat(nv); + memset(buf, 0, 2048); + zpool_collect_unsup_feat(nv, buf, 2048); + (void) printf("%s", buf); if (nvlist_exists(nvinfo, ZPOOL_CONFIG_CAN_RDONLY)) { (void) printf(dgettext(TEXT_DOMAIN, @@ -2191,8 +2342,11 @@ zpool_import_props(libzfs_handle_t *hdl, nvlist_t *config, const char *newname, break; default: (void) zpool_standard_error(hdl, error, desc); + memset(buf, 0, 2048); zpool_explain_recover(hdl, - newname ? origname : thename, -error, nv); + newname ? origname : thename, -error, nv, + buf, 2048); + (void) printf("\t%s", buf); break; } @@ -2214,7 +2368,6 @@ zpool_import_props(libzfs_handle_t *hdl, nvlist_t *config, const char *newname, ((policy.zlp_rewind & ZPOOL_TRY_REWIND) != 0), nv); } nvlist_free(nv); - return (0); } return (ret); @@ -2236,7 +2389,7 @@ zpool_translate_vdev_guids(zpool_handle_t *zhp, nvlist_t *vds, elem = nvlist_next_nvpair(vds, elem)) { boolean_t spare, cache; - char *vd_path = nvpair_name(elem); + const char *vd_path = nvpair_name(elem); nvlist_t *tgt = zpool_find_vdev(zhp, vd_path, &spare, &cache, NULL); @@ -2288,9 +2441,33 @@ xlate_init_err(int err) return (err); } +int +zpool_initialize_one(zpool_handle_t *zhp, void *data) +{ + int error; + libzfs_handle_t *hdl = zpool_get_handle(zhp); + const char *pool_name = zpool_get_name(zhp); + if (zpool_open_silent(hdl, pool_name, &zhp) != 0) + return (-1); + initialize_cbdata_t *cb = data; + nvlist_t *vdevs = fnvlist_alloc(); + + nvlist_t *config = zpool_get_config(zhp, NULL); + nvlist_t *nvroot = fnvlist_lookup_nvlist(config, + ZPOOL_CONFIG_VDEV_TREE); + zpool_collect_leaves(zhp, nvroot, vdevs); + if (cb->wait) + error = zpool_initialize_wait(zhp, cb->cmd_type, vdevs); + else + error = zpool_initialize(zhp, cb->cmd_type, vdevs); + fnvlist_free(vdevs); + + return (error); +} + /* - * Begin, suspend, or cancel the initialization (initializing of all free - * blocks) for the given vdevs in the given pool. + * Begin, suspend, cancel, or uninit (clear) the initialization (initializing + * of all free blocks) for the given vdevs in the given pool. */ static int zpool_initialize_impl(zpool_handle_t *zhp, pool_initialize_func_t cmd_type, @@ -2316,11 +2493,16 @@ zpool_initialize_impl(zpool_handle_t *zhp, pool_initialize_func_t cmd_type, vdev_guids, &errlist); if (err != 0) { - if (errlist != NULL) { - vd_errlist = fnvlist_lookup_nvlist(errlist, - ZPOOL_INITIALIZE_VDEVS); + if (errlist != NULL && nvlist_lookup_nvlist(errlist, + ZPOOL_INITIALIZE_VDEVS, &vd_errlist) == 0) { goto list_errors; } + + if (err == EINVAL && cmd_type == POOL_INITIALIZE_UNINIT) { + zfs_error_aux(zhp->zpool_hdl, dgettext(TEXT_DOMAIN, + "uninitialize is not supported by kernel")); + } + (void) zpool_standard_error(zhp->zpool_hdl, err, dgettext(TEXT_DOMAIN, "operation failed")); goto out; @@ -2350,7 +2532,7 @@ list_errors: for (elem = nvlist_next_nvpair(vd_errlist, NULL); elem != NULL; elem = nvlist_next_nvpair(vd_errlist, elem)) { int64_t vd_error = xlate_init_err(fnvpair_value_int64(elem)); - char *path; + const char *path; if (nvlist_lookup_string(guids_to_paths, nvpair_name(elem), &path) != 0) @@ -2403,6 +2585,58 @@ xlate_trim_err(int err) return (err); } +void +zpool_collect_leaves(zpool_handle_t *zhp, nvlist_t *nvroot, nvlist_t *res) +{ + libzfs_handle_t *hdl = zhp->zpool_hdl; + uint_t children = 0; + nvlist_t **child; + uint_t i; + + (void) nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_CHILDREN, + &child, &children); + + if (children == 0) { + char *path = zpool_vdev_name(hdl, zhp, nvroot, + VDEV_NAME_PATH); + + if (strcmp(path, VDEV_TYPE_INDIRECT) != 0 && + strcmp(path, VDEV_TYPE_HOLE) != 0) + fnvlist_add_boolean(res, path); + + free(path); + return; + } + + for (i = 0; i < children; i++) { + zpool_collect_leaves(zhp, child[i], res); + } +} + +int +zpool_trim_one(zpool_handle_t *zhp, void *data) +{ + int error; + libzfs_handle_t *hdl = zpool_get_handle(zhp); + const char *pool_name = zpool_get_name(zhp); + if (zpool_open_silent(hdl, pool_name, &zhp) != 0) + return (-1); + + trim_cbdata_t *cb = data; + nvlist_t *vdevs = fnvlist_alloc(); + + /* no individual leaf vdevs specified, so add them all */ + nvlist_t *config = zpool_get_config(zhp, NULL); + nvlist_t *nvroot = fnvlist_lookup_nvlist(config, + ZPOOL_CONFIG_VDEV_TREE); + + zpool_collect_leaves(zhp, nvroot, vdevs); + error = zpool_trim(zhp, cb->cmd_type, vdevs, &cb->trim_flags); + fnvlist_free(vdevs); + + return (error); +} + static int zpool_trim_wait(zpool_handle_t *zhp, nvlist_t *vdev_guids) { @@ -2448,7 +2682,7 @@ check_trim_errs(zpool_handle_t *zhp, trimflags_t *trim_flags, for (elem = nvlist_next_nvpair(errlist, NULL); elem != NULL; elem = nvlist_next_nvpair(errlist, elem)) { int64_t vd_error = xlate_trim_err(fnvpair_value_int64(elem)); - char *path; + const char *path; /* * If only the pool was specified, and it was not a secure @@ -2543,52 +2777,99 @@ out: * Scan the pool. */ int -zpool_scan(zpool_handle_t *zhp, pool_scan_func_t func, pool_scrub_cmd_t cmd) +zpool_scan(zpool_handle_t *zhp, pool_scan_func_t func, pool_scrub_cmd_t cmd) { + return (zpool_scan_range(zhp, func, cmd, 0, 0)); +} + +int +zpool_scan_range(zpool_handle_t *zhp, pool_scan_func_t func, + pool_scrub_cmd_t cmd, time_t date_start, time_t date_end) { - zfs_cmd_t zc = {"\0"}; char errbuf[ERRBUFLEN]; int err; libzfs_handle_t *hdl = zhp->zpool_hdl; - (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); - zc.zc_cookie = func; - zc.zc_flags = cmd; + nvlist_t *args = fnvlist_alloc(); + fnvlist_add_uint64(args, "scan_type", (uint64_t)func); + fnvlist_add_uint64(args, "scan_command", (uint64_t)cmd); + fnvlist_add_uint64(args, "scan_date_start", (uint64_t)date_start); + fnvlist_add_uint64(args, "scan_date_end", (uint64_t)date_end); - if (zfs_ioctl(hdl, ZFS_IOC_POOL_SCAN, &zc) == 0) + err = lzc_scrub(ZFS_IOC_POOL_SCRUB, zhp->zpool_name, args, NULL); + fnvlist_free(args); + + if (err == 0) { return (0); + } else if (err == ZFS_ERR_IOC_CMD_UNAVAIL) { + zfs_cmd_t zc = {"\0"}; + (void) strlcpy(zc.zc_name, zhp->zpool_name, + sizeof (zc.zc_name)); + zc.zc_cookie = func; + zc.zc_flags = cmd; - err = errno; + if (zfs_ioctl(hdl, ZFS_IOC_POOL_SCAN, &zc) == 0) + return (0); + } - /* ECANCELED on a scrub means we resumed a paused scrub */ - if (err == ECANCELED && func == POOL_SCAN_SCRUB && - cmd == POOL_SCRUB_NORMAL) + /* + * An ECANCELED on a scrub means one of the following: + * 1. we resumed a paused scrub. + * 2. we resumed a paused error scrub. + * 3. Error scrub is not run because of no error log. + * + * Note that we no longer return ECANCELED in case 1 or 2. However, in + * order to prevent problems where we have a newer userland than + * kernel, we keep this check in place. That prevents erroneous + * failures when an older kernel returns ECANCELED in those cases. + */ + if (err == ECANCELED && (func == POOL_SCAN_SCRUB || + func == POOL_SCAN_ERRORSCRUB) && cmd == POOL_SCRUB_NORMAL) return (0); - - if (err == ENOENT && func != POOL_SCAN_NONE && cmd == POOL_SCRUB_NORMAL) + /* + * The following cases have been handled here: + * 1. Paused a scrub/error scrub if there is none in progress. + */ + if (err == ENOENT && func != POOL_SCAN_NONE && cmd == + POOL_SCRUB_PAUSE) { return (0); + } + + ASSERT3U(func, >=, POOL_SCAN_NONE); + ASSERT3U(func, <, POOL_SCAN_FUNCS); - if (func == POOL_SCAN_SCRUB) { + if (func == POOL_SCAN_SCRUB || func == POOL_SCAN_ERRORSCRUB) { if (cmd == POOL_SCRUB_PAUSE) { (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot pause scrubbing %s"), - zc.zc_name); + zhp->zpool_name); } else { assert(cmd == POOL_SCRUB_NORMAL); (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot scrub %s"), - zc.zc_name); + zhp->zpool_name); } } else if (func == POOL_SCAN_RESILVER) { assert(cmd == POOL_SCRUB_NORMAL); (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, - "cannot restart resilver on %s"), zc.zc_name); + "cannot restart resilver on %s"), zhp->zpool_name); } else if (func == POOL_SCAN_NONE) { (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, - "cannot cancel scrubbing %s"), zc.zc_name); + "cannot cancel scrubbing %s"), zhp->zpool_name); } else { assert(!"unexpected result"); } + /* + * With EBUSY, six cases are possible: + * + * Current state Requested + * 1. Normal Scrub Running Normal Scrub or Error Scrub + * 2. Normal Scrub Paused Error Scrub + * 3. Normal Scrub Paused Pause Normal Scrub + * 4. Error Scrub Running Normal Scrub or Error Scrub + * 5. Error Scrub Paused Pause Error Scrub + * 6. Resilvering Anything else + */ if (err == EBUSY) { nvlist_t *nvroot; pool_scan_stat_t *ps = NULL; @@ -2600,12 +2881,43 @@ zpool_scan(zpool_handle_t *zhp, pool_scan_func_t func, pool_scrub_cmd_t cmd) ZPOOL_CONFIG_SCAN_STATS, (uint64_t **)&ps, &psc); if (ps && ps->pss_func == POOL_SCAN_SCRUB && ps->pss_state == DSS_SCANNING) { - if (cmd == POOL_SCRUB_PAUSE) - return (zfs_error(hdl, EZFS_SCRUB_PAUSED, + if (ps->pss_pass_scrub_pause == 0) { + /* handles case 1 */ + assert(cmd == POOL_SCRUB_NORMAL); + return (zfs_error(hdl, EZFS_SCRUBBING, errbuf)); - else - return (zfs_error(hdl, EZFS_SCRUBBING, errbuf)); + } else { + if (func == POOL_SCAN_ERRORSCRUB) { + /* handles case 2 */ + ASSERT3U(cmd, ==, POOL_SCRUB_NORMAL); + return (zfs_error(hdl, + EZFS_SCRUB_PAUSED_TO_CANCEL, + errbuf)); + } else { + /* handles case 3 */ + ASSERT3U(func, ==, POOL_SCAN_SCRUB); + ASSERT3U(cmd, ==, POOL_SCRUB_PAUSE); + return (zfs_error(hdl, + EZFS_SCRUB_PAUSED, errbuf)); + } + } + } else if (ps && + ps->pss_error_scrub_func == POOL_SCAN_ERRORSCRUB && + ps->pss_error_scrub_state == DSS_ERRORSCRUBBING) { + if (ps->pss_pass_error_scrub_pause == 0) { + /* handles case 4 */ + ASSERT3U(cmd, ==, POOL_SCRUB_NORMAL); + return (zfs_error(hdl, EZFS_ERRORSCRUBBING, + errbuf)); + } else { + /* handles case 5 */ + ASSERT3U(func, ==, POOL_SCAN_ERRORSCRUB); + ASSERT3U(cmd, ==, POOL_SCRUB_PAUSE); + return (zfs_error(hdl, EZFS_ERRORSCRUB_PAUSED, + errbuf)); + } } else { + /* handles case 6 */ return (zfs_error(hdl, EZFS_RESILVERING, errbuf)); } } else if (err == ENOENT) { @@ -2622,17 +2934,22 @@ zpool_scan(zpool_handle_t *zhp, pool_scan_func_t func, pool_scrub_cmd_t cmd) * the nvpair name to determine how we should look for the device. * 'avail_spare' is set to TRUE if the provided guid refers to an AVAIL * spare; but FALSE if its an INUSE spare. + * + * If 'return_parent' is set, then return the *parent* of the vdev you're + * searching for rather than the vdev itself. */ static nvlist_t * vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, - boolean_t *l2cache, boolean_t *log) + boolean_t *l2cache, boolean_t *log, boolean_t return_parent) { uint_t c, children; nvlist_t **child; nvlist_t *ret; uint64_t is_log; - char *srchkey; + const char *srchkey; nvpair_t *pair = nvlist_next_nvpair(search, NULL); + const char *tmp = NULL; + boolean_t is_root; /* Nothing to look for */ if (search == NULL || pair == NULL) @@ -2641,6 +2958,12 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, /* Obtain the key we will use to search */ srchkey = nvpair_name(pair); + nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &tmp); + if (strcmp(tmp, "root") == 0) + is_root = B_TRUE; + else + is_root = B_FALSE; + switch (nvpair_type(pair)) { case DATA_TYPE_UINT64: if (strcmp(srchkey, ZPOOL_CONFIG_GUID) == 0) { @@ -2653,7 +2976,7 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, break; case DATA_TYPE_STRING: { - char *srchval, *val; + const char *srchval, *val; srchval = fnvpair_value_string(pair); if (nvlist_lookup_string(nv, srchkey, &val) != 0) @@ -2679,7 +3002,7 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, if (zfs_strcmp_pathname(srchval, val, wholedisk) == 0) return (nv); - } else if (strcmp(srchkey, ZPOOL_CONFIG_TYPE) == 0 && val) { + } else if (strcmp(srchkey, ZPOOL_CONFIG_TYPE) == 0) { char *type, *idx, *end, *p; uint64_t id, vdev_id; @@ -2699,6 +3022,18 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, *p = '\0'; /* + * draid names are presented like: draid2:4d:6c:0s + * We match them up to the first ':' so we can still + * do the parity check below, but the other params + * are ignored. + */ + if ((p = strchr(type, ':')) != NULL) { + if (strncmp(type, VDEV_TYPE_DRAID, + strlen(VDEV_TYPE_DRAID)) == 0) + *p = '\0'; + } + + /* * If the types don't match then keep looking. */ if (strncmp(val, type, strlen(val)) != 0) { @@ -2771,7 +3106,7 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, for (c = 0; c < children; c++) { if ((ret = vdev_to_nvlist_iter(child[c], search, - avail_spare, l2cache, NULL)) != NULL) { + avail_spare, l2cache, NULL, return_parent)) != NULL) { /* * The 'is_log' value is only set for the toplevel * vdev, not the leaf vdevs. So we always lookup the @@ -2784,7 +3119,7 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, is_log) { *log = B_TRUE; } - return (ret); + return (ret && return_parent && !is_root ? nv : ret); } } @@ -2792,9 +3127,11 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, &child, &children) == 0) { for (c = 0; c < children; c++) { if ((ret = vdev_to_nvlist_iter(child[c], search, - avail_spare, l2cache, NULL)) != NULL) { + avail_spare, l2cache, NULL, return_parent)) + != NULL) { *avail_spare = B_TRUE; - return (ret); + return (ret && return_parent && + !is_root ? nv : ret); } } } @@ -2803,9 +3140,11 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare, &child, &children) == 0) { for (c = 0; c < children; c++) { if ((ret = vdev_to_nvlist_iter(child[c], search, - avail_spare, l2cache, NULL)) != NULL) { + avail_spare, l2cache, NULL, return_parent)) + != NULL) { *l2cache = B_TRUE; - return (ret); + return (ret && return_parent && + !is_root ? nv : ret); } } } @@ -2840,7 +3179,8 @@ zpool_find_vdev_by_physpath(zpool_handle_t *zhp, const char *ppath, *l2cache = B_FALSE; if (log != NULL) *log = B_FALSE; - ret = vdev_to_nvlist_iter(nvroot, search, avail_spare, l2cache, log); + ret = vdev_to_nvlist_iter(nvroot, search, avail_spare, l2cache, log, + B_FALSE); fnvlist_free(search); return (ret); @@ -2856,6 +3196,7 @@ zpool_vdev_is_interior(const char *name) strncmp(name, VDEV_TYPE_SPARE, strlen(VDEV_TYPE_SPARE)) == 0 || strncmp(name, VDEV_TYPE_REPLACING, strlen(VDEV_TYPE_REPLACING)) == 0 || + strncmp(name, VDEV_TYPE_ROOT, strlen(VDEV_TYPE_ROOT)) == 0 || strncmp(name, VDEV_TYPE_MIRROR, strlen(VDEV_TYPE_MIRROR)) == 0) return (B_TRUE); @@ -2866,13 +3207,18 @@ zpool_vdev_is_interior(const char *name) return (B_FALSE); } -nvlist_t * -zpool_find_vdev(zpool_handle_t *zhp, const char *path, boolean_t *avail_spare, - boolean_t *l2cache, boolean_t *log) +/* + * Lookup the nvlist for a given vdev or vdev's parent (depending on + * if 'return_parent' is set). + */ +static nvlist_t * +__zpool_find_vdev(zpool_handle_t *zhp, const char *path, boolean_t *avail_spare, + boolean_t *l2cache, boolean_t *log, boolean_t return_parent) { char *end; nvlist_t *nvroot, *search, *ret; uint64_t guid; + boolean_t __avail_spare, __l2cache, __log; search = fnvlist_alloc(); @@ -2888,162 +3234,44 @@ zpool_find_vdev(zpool_handle_t *zhp, const char *path, boolean_t *avail_spare, nvroot = fnvlist_lookup_nvlist(zhp->zpool_config, ZPOOL_CONFIG_VDEV_TREE); + /* + * User can pass NULL for avail_spare, l2cache, and log, but + * we still need to provide variables to vdev_to_nvlist_iter(), so + * just point them to junk variables here. + */ + if (!avail_spare) + avail_spare = &__avail_spare; + if (!l2cache) + l2cache = &__l2cache; + if (!log) + log = &__log; + *avail_spare = B_FALSE; *l2cache = B_FALSE; if (log != NULL) *log = B_FALSE; - ret = vdev_to_nvlist_iter(nvroot, search, avail_spare, l2cache, log); + ret = vdev_to_nvlist_iter(nvroot, search, avail_spare, l2cache, log, + return_parent); fnvlist_free(search); return (ret); } -static int -vdev_is_online(nvlist_t *nv) -{ - uint64_t ival; - - if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_OFFLINE, &ival) == 0 || - nvlist_lookup_uint64(nv, ZPOOL_CONFIG_FAULTED, &ival) == 0 || - nvlist_lookup_uint64(nv, ZPOOL_CONFIG_REMOVED, &ival) == 0) - return (0); - - return (1); -} - -/* - * Helper function for zpool_get_physpaths(). - */ -static int -vdev_get_one_physpath(nvlist_t *config, char *physpath, size_t physpath_size, - size_t *bytes_written) -{ - size_t bytes_left, pos, rsz; - char *tmppath; - const char *format; - - if (nvlist_lookup_string(config, ZPOOL_CONFIG_PHYS_PATH, - &tmppath) != 0) - return (EZFS_NODEVICE); - - pos = *bytes_written; - bytes_left = physpath_size - pos; - format = (pos == 0) ? "%s" : " %s"; - - rsz = snprintf(physpath + pos, bytes_left, format, tmppath); - *bytes_written += rsz; - - if (rsz >= bytes_left) { - /* if physpath was not copied properly, clear it */ - if (bytes_left != 0) { - physpath[pos] = 0; - } - return (EZFS_NOSPC); - } - return (0); -} - -static int -vdev_get_physpaths(nvlist_t *nv, char *physpath, size_t phypath_size, - size_t *rsz, boolean_t is_spare) -{ - char *type; - int ret; - - if (nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) != 0) - return (EZFS_INVALCONFIG); - - if (strcmp(type, VDEV_TYPE_DISK) == 0) { - /* - * An active spare device has ZPOOL_CONFIG_IS_SPARE set. - * For a spare vdev, we only want to boot from the active - * spare device. - */ - if (is_spare) { - uint64_t spare = 0; - (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_IS_SPARE, - &spare); - if (!spare) - return (EZFS_INVALCONFIG); - } - - if (vdev_is_online(nv)) { - if ((ret = vdev_get_one_physpath(nv, physpath, - phypath_size, rsz)) != 0) - return (ret); - } - } else if (strcmp(type, VDEV_TYPE_MIRROR) == 0 || - strcmp(type, VDEV_TYPE_RAIDZ) == 0 || - strcmp(type, VDEV_TYPE_REPLACING) == 0 || - (is_spare = (strcmp(type, VDEV_TYPE_SPARE) == 0))) { - nvlist_t **child; - uint_t count; - int i, ret; - - if (nvlist_lookup_nvlist_array(nv, - ZPOOL_CONFIG_CHILDREN, &child, &count) != 0) - return (EZFS_INVALCONFIG); - - for (i = 0; i < count; i++) { - ret = vdev_get_physpaths(child[i], physpath, - phypath_size, rsz, is_spare); - if (ret == EZFS_NOSPC) - return (ret); - } - } - - return (EZFS_POOL_INVALARG); -} - -/* - * Get phys_path for a root pool config. - * Return 0 on success; non-zero on failure. - */ -static int -zpool_get_config_physpath(nvlist_t *config, char *physpath, size_t phypath_size) +nvlist_t * +zpool_find_vdev(zpool_handle_t *zhp, const char *path, boolean_t *avail_spare, + boolean_t *l2cache, boolean_t *log) { - size_t rsz; - nvlist_t *vdev_root; - nvlist_t **child; - uint_t count; - char *type; - - rsz = 0; - - if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, - &vdev_root) != 0) - return (EZFS_INVALCONFIG); - - if (nvlist_lookup_string(vdev_root, ZPOOL_CONFIG_TYPE, &type) != 0 || - nvlist_lookup_nvlist_array(vdev_root, ZPOOL_CONFIG_CHILDREN, - &child, &count) != 0) - return (EZFS_INVALCONFIG); - - /* - * root pool can only have a single top-level vdev. - */ - if (strcmp(type, VDEV_TYPE_ROOT) != 0 || count != 1) - return (EZFS_POOL_INVALARG); - - (void) vdev_get_physpaths(child[0], physpath, phypath_size, &rsz, - B_FALSE); - - /* No online devices */ - if (rsz == 0) - return (EZFS_NODEVICE); - - return (0); + return (__zpool_find_vdev(zhp, path, avail_spare, l2cache, log, + B_FALSE)); } -/* - * Get phys_path for a root pool - * Return 0 on success; non-zero on failure. - */ -int -zpool_get_physpath(zpool_handle_t *zhp, char *physpath, size_t phypath_size) +/* Given a vdev path, return its parent's nvlist */ +nvlist_t * +zpool_find_parent_vdev(zpool_handle_t *zhp, const char *path, + boolean_t *avail_spare, boolean_t *l2cache, boolean_t *log) { - return (zpool_get_config_physpath(zhp->zpool_config, physpath, - phypath_size)); + return (__zpool_find_vdev(zhp, path, avail_spare, l2cache, log, + B_TRUE)); } /* @@ -3110,11 +3338,11 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags, zc.zc_guid = fnvlist_lookup_uint64(tgt, ZPOOL_CONFIG_GUID); - if (avail_spare) + if (!(flags & ZFS_ONLINE_SPARE) && avail_spare) return (zfs_error(hdl, EZFS_ISSPARE, errbuf)); #ifndef __FreeBSD__ - char *pathname; + const char *pathname; if ((flags & ZFS_ONLINE_EXPAND || zpool_get_prop_int(zhp, ZPOOL_PROP_AUTOEXPAND, NULL)) && nvlist_lookup_string(tgt, ZPOOL_CONFIG_PATH, &pathname) == 0) { @@ -3222,6 +3450,40 @@ zpool_vdev_offline(zpool_handle_t *zhp, const char *path, boolean_t istmp) } /* + * Remove the specified vdev asynchronously from the configuration, so + * that it may come ONLINE if reinserted. This is called from zed on + * Udev remove event. + * Note: We also have a similar function zpool_vdev_remove() that + * removes the vdev from the pool. + */ +int +zpool_vdev_remove_wanted(zpool_handle_t *zhp, const char *path) +{ + zfs_cmd_t zc = {"\0"}; + char errbuf[ERRBUFLEN]; + nvlist_t *tgt; + boolean_t avail_spare, l2cache; + libzfs_handle_t *hdl = zhp->zpool_hdl; + + (void) snprintf(errbuf, sizeof (errbuf), + dgettext(TEXT_DOMAIN, "cannot remove %s"), path); + + (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); + if ((tgt = zpool_find_vdev(zhp, path, &avail_spare, &l2cache, + NULL)) == NULL) + return (zfs_error(hdl, EZFS_NODEVICE, errbuf)); + + zc.zc_guid = fnvlist_lookup_uint64(tgt, ZPOOL_CONFIG_GUID); + + zc.zc_cookie = VDEV_STATE_REMOVED; + + if (zfs_ioctl(hdl, ZFS_IOC_VDEV_SET_STATE, &zc) == 0) + return (0); + + return (zpool_standard_error(hdl, errno, errbuf)); +} + +/* * Mark the given vdev faulted. */ int @@ -3257,21 +3519,23 @@ zpool_vdev_fault(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux) } /* - * Mark the given vdev degraded. + * Generic set vdev state function */ -int -zpool_vdev_degrade(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux) +static int +zpool_vdev_set_state(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux, + vdev_state_t state) { zfs_cmd_t zc = {"\0"}; char errbuf[ERRBUFLEN]; libzfs_handle_t *hdl = zhp->zpool_hdl; (void) snprintf(errbuf, sizeof (errbuf), - dgettext(TEXT_DOMAIN, "cannot degrade %llu"), (u_longlong_t)guid); + dgettext(TEXT_DOMAIN, "cannot set %s %llu"), + zpool_state_to_name(state, aux), (u_longlong_t)guid); (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); zc.zc_guid = guid; - zc.zc_cookie = VDEV_STATE_DEGRADED; + zc.zc_cookie = state; zc.zc_obj = aux; if (zfs_ioctl(hdl, ZFS_IOC_VDEV_SET_STATE, &zc) == 0) @@ -3281,6 +3545,27 @@ zpool_vdev_degrade(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux) } /* + * Mark the given vdev degraded. + */ +int +zpool_vdev_degrade(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux) +{ + return (zpool_vdev_set_state(zhp, guid, aux, VDEV_STATE_DEGRADED)); +} + +/* + * Mark the given vdev as in a removed state (as if the device does not exist). + * + * This is different than zpool_vdev_remove() which does a removal of a device + * from the pool (but the device does exist). + */ +int +zpool_vdev_set_removed_state(zpool_handle_t *zhp, uint64_t guid, vdev_aux_t aux) +{ + return (zpool_vdev_set_state(zhp, guid, aux, VDEV_STATE_REMOVED)); +} + +/* * Returns TRUE if the given nvlist is a vdev that was originally swapped in as * a hot spare. */ @@ -3292,7 +3577,8 @@ is_replacing_spare(nvlist_t *search, nvlist_t *tgt, int which) if (nvlist_lookup_nvlist_array(search, ZPOOL_CONFIG_CHILDREN, &child, &children) == 0) { - char *type = fnvlist_lookup_string(search, ZPOOL_CONFIG_TYPE); + const char *type = fnvlist_lookup_string(search, + ZPOOL_CONFIG_TYPE); if ((strcmp(type, VDEV_TYPE_SPARE) == 0 || strcmp(type, VDEV_TYPE_DRAID_SPARE) == 0) && children == 2 && child[which] == tgt) @@ -3321,6 +3607,7 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk, boolean_t avail_spare, l2cache, islog; uint64_t val; char *newname; + const char *type; nvlist_t **child; uint_t children; nvlist_t *config_root; @@ -3355,6 +3642,14 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk, return (zfs_error(hdl, EZFS_POOL_NOTSUP, errbuf)); } + type = fnvlist_lookup_string(tgt, ZPOOL_CONFIG_TYPE); + if (strcmp(type, VDEV_TYPE_RAIDZ) == 0 && + zfeature_lookup_guid("org.openzfs:raidz_expansion", NULL) != 0) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "the loaded zfs module doesn't support raidz expansion")); + return (zfs_error(hdl, EZFS_POOL_NOTSUP, errbuf)); + } + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_CHILDREN, &child, &children) != 0 || children != 1) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, @@ -3422,6 +3717,10 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk, zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot replace a replacing device")); } + } else if (strcmp(type, VDEV_TYPE_RAIDZ) == 0) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "raidz_expansion feature must be enabled " + "in order to attach a device to raidz")); } else { char status[64] = {0}; zpool_prop_get_feature(zhp, @@ -3451,8 +3750,7 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk, break; case EBUSY: - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "%s is busy, " - "or device removal is in progress"), + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "%s is busy"), new_disk); (void) zfs_error(hdl, EZFS_BADDEV, errbuf); break; @@ -3483,6 +3781,41 @@ zpool_vdev_attach(zpool_handle_t *zhp, const char *old_disk, (void) zfs_error(hdl, EZFS_DEVOVERFLOW, errbuf); break; + case ENXIO: + /* + * The existing raidz vdev has offline children + */ + if (strcmp(type, VDEV_TYPE_RAIDZ) == 0) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "raidz vdev has devices that are are offline or " + "being replaced")); + (void) zfs_error(hdl, EZFS_BADDEV, errbuf); + break; + } else { + (void) zpool_standard_error(hdl, errno, errbuf); + } + break; + + case EADDRINUSE: + /* + * The boot reserved area is already being used (FreeBSD) + */ + if (strcmp(type, VDEV_TYPE_RAIDZ) == 0) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "the reserved boot area needed for the expansion " + "is already being used by a boot loader")); + (void) zfs_error(hdl, EZFS_BADDEV, errbuf); + } else { + (void) zpool_standard_error(hdl, errno, errbuf); + } + break; + + case ZFS_ERR_ASHIFT_MISMATCH: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "The new device cannot have a higher alignment requirement " + "than the top-level vdev.")); + (void) zfs_error(hdl, EZFS_BADTARGET, errbuf); + break; default: (void) zpool_standard_error(hdl, errno, errbuf); } @@ -3595,7 +3928,8 @@ zpool_vdev_split(zpool_handle_t *zhp, char *newname, nvlist_t **newroot, nvlist_t *props, splitflags_t flags) { zfs_cmd_t zc = {"\0"}; - char errbuf[ERRBUFLEN], *bias; + char errbuf[ERRBUFLEN]; + const char *bias; nvlist_t *tree, *config, **child, **newchild, *newconfig = NULL; nvlist_t **varray = NULL, *zc_props = NULL; uint_t c, children, newchildren, lastlog = 0, vcount, found = 0; @@ -3653,7 +3987,7 @@ zpool_vdev_split(zpool_handle_t *zhp, char *newname, nvlist_t **newroot, for (c = 0; c < children; c++) { uint64_t is_log = B_FALSE, is_hole = B_FALSE; boolean_t is_special = B_FALSE, is_dedup = B_FALSE; - char *type; + const char *type; nvlist_t **mchild, *vdev; uint_t mchildren; int entry; @@ -3869,6 +4203,12 @@ zpool_vdev_remove(zpool_handle_t *zhp, const char *path) switch (errno) { + case EALREADY: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "removal for this vdev is already in progress.")); + (void) zfs_error(hdl, EZFS_BUSY, errbuf); + break; + case EINVAL: zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "invalid config; all top-level vdevs must " @@ -4046,22 +4386,55 @@ zpool_vdev_clear(zpool_handle_t *zhp, uint64_t guid) /* * Change the GUID for a pool. + * + * Similar to zpool_reguid(), but may take a GUID. + * + * If the guid argument is NULL, then no GUID is passed in the nvlist to the + * ioctl(). */ int -zpool_reguid(zpool_handle_t *zhp) +zpool_set_guid(zpool_handle_t *zhp, const uint64_t *guid) { char errbuf[ERRBUFLEN]; libzfs_handle_t *hdl = zhp->zpool_hdl; + nvlist_t *nvl = NULL; zfs_cmd_t zc = {"\0"}; + int error; + + if (guid != NULL) { + if (nvlist_alloc(&nvl, NV_UNIQUE_NAME, 0) != 0) + return (no_memory(hdl)); + + if (nvlist_add_uint64(nvl, ZPOOL_REGUID_GUID, *guid) != 0) { + nvlist_free(nvl); + return (no_memory(hdl)); + } + + zcmd_write_src_nvlist(hdl, &zc, nvl); + } (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot reguid '%s'"), zhp->zpool_name); (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name)); - if (zfs_ioctl(hdl, ZFS_IOC_POOL_REGUID, &zc) == 0) - return (0); + error = zfs_ioctl(hdl, ZFS_IOC_POOL_REGUID, &zc); + if (error) { + return (zpool_standard_error(hdl, errno, errbuf)); + } + if (guid != NULL) { + zcmd_free_nvlists(&zc); + nvlist_free(nvl); + } + return (0); +} - return (zpool_standard_error(hdl, errno, errbuf)); +/* + * Change the GUID for a pool. + */ +int +zpool_reguid(zpool_handle_t *zhp) +{ + return (zpool_set_guid(zhp, NULL)); } /* @@ -4126,7 +4499,7 @@ char * zpool_vdev_name(libzfs_handle_t *hdl, zpool_handle_t *zhp, nvlist_t *nv, int name_flags) { - char *type, *tpath; + const char *type, *tpath; const char *path; uint64_t value; char buf[PATH_BUF_LEN]; @@ -4236,6 +4609,14 @@ zbookmark_mem_compare(const void *a, const void *b) return (memcmp(a, b, sizeof (zbookmark_phys_t))); } +void +zpool_add_propname(zpool_handle_t *zhp, const char *propname) +{ + assert(zhp->zpool_n_propnames < ZHP_MAX_PROPNAMES); + zhp->zpool_propnames[zhp->zpool_n_propnames] = propname; + zhp->zpool_n_propnames++; +} + /* * Retrieve the persistent error log, uniquify the members, and return to the * caller. @@ -4245,33 +4626,28 @@ zpool_get_errlog(zpool_handle_t *zhp, nvlist_t **nverrlistp) { zfs_cmd_t zc = {"\0"}; libzfs_handle_t *hdl = zhp->zpool_hdl; - uint64_t count; - zbookmark_phys_t *zb = NULL; - int i; + zbookmark_phys_t *buf; + uint64_t buflen = 10000; /* approx. 1MB of RAM */ + + if (fnvlist_lookup_uint64(zhp->zpool_config, + ZPOOL_CONFIG_ERRCOUNT) == 0) + return (0); /* - * Retrieve the raw error list from the kernel. If the number of errors - * has increased, allocate more space and continue until we get the - * entire list. + * Retrieve the raw error list from the kernel. If it doesn't fit, + * allocate a larger buffer and retry. */ - count = fnvlist_lookup_uint64(zhp->zpool_config, ZPOOL_CONFIG_ERRCOUNT); - if (count == 0) - return (0); - zc.zc_nvlist_dst = (uintptr_t)zfs_alloc(zhp->zpool_hdl, - count * sizeof (zbookmark_phys_t)); - zc.zc_nvlist_dst_size = count; (void) strcpy(zc.zc_name, zhp->zpool_name); for (;;) { + buf = zfs_alloc(zhp->zpool_hdl, + buflen * sizeof (zbookmark_phys_t)); + zc.zc_nvlist_dst = (uintptr_t)buf; + zc.zc_nvlist_dst_size = buflen; if (zfs_ioctl(zhp->zpool_hdl, ZFS_IOC_ERROR_LOG, &zc) != 0) { - free((void *)(uintptr_t)zc.zc_nvlist_dst); + free(buf); if (errno == ENOMEM) { - void *dst; - - count = zc.zc_nvlist_dst_size; - dst = zfs_alloc(zhp->zpool_hdl, count * - sizeof (zbookmark_phys_t)); - zc.zc_nvlist_dst = (uintptr_t)dst; + buflen *= 2; } else { return (zpool_standard_error_fmt(hdl, errno, dgettext(TEXT_DOMAIN, "errors: List of " @@ -4289,18 +4665,17 @@ zpool_get_errlog(zpool_handle_t *zhp, nvlist_t **nverrlistp) * _not_ copied as part of the process. So we point the start of our * array appropriate and decrement the total number of elements. */ - zb = ((zbookmark_phys_t *)(uintptr_t)zc.zc_nvlist_dst) + - zc.zc_nvlist_dst_size; - count -= zc.zc_nvlist_dst_size; + zbookmark_phys_t *zb = buf + zc.zc_nvlist_dst_size; + uint64_t zblen = buflen - zc.zc_nvlist_dst_size; - qsort(zb, count, sizeof (zbookmark_phys_t), zbookmark_mem_compare); + qsort(zb, zblen, sizeof (zbookmark_phys_t), zbookmark_mem_compare); verify(nvlist_alloc(nverrlistp, 0, KM_SLEEP) == 0); /* * Fill in the nverrlistp with nvlist's of dataset and object numbers. */ - for (i = 0; i < count; i++) { + for (uint64_t i = 0; i < zblen; i++) { nvlist_t *nv; /* ignoring zb_blkid and zb_level for now */ @@ -4327,11 +4702,11 @@ zpool_get_errlog(zpool_handle_t *zhp, nvlist_t **nverrlistp) nvlist_free(nv); } - free((void *)(uintptr_t)zc.zc_nvlist_dst); + free(buf); return (0); nomem: - free((void *)(uintptr_t)zc.zc_nvlist_dst); + free(buf); return (no_memory(zhp->zpool_hdl)); } @@ -4807,9 +5182,10 @@ zpool_load_compat(const char *compat, boolean_t *features, char *report, /* special cases (unset), "" and "off" => enable all features */ if (compat == NULL || compat[0] == '\0' || strcmp(compat, ZPOOL_COMPAT_OFF) == 0) { - if (features != NULL) + if (features != NULL) { for (uint_t i = 0; i < SPA_FEATURES; i++) features[i] = B_TRUE; + } if (report != NULL) strlcpy(report, gettext("all features enabled"), rlen); return (ZPOOL_COMPATIBILITY_OK); @@ -4832,8 +5208,8 @@ zpool_load_compat(const char *compat, boolean_t *features, char *report, for (uint_t i = 0; i < SPA_FEATURES; i++) features[i] = B_TRUE; - char err_badfile[1024] = ""; - char err_badtoken[1024] = ""; + char err_badfile[ZFS_MAXPROPLEN] = ""; + char err_badtoken[ZFS_MAXPROPLEN] = ""; /* * We ignore errors from the directory open() @@ -5041,7 +5417,8 @@ zpool_get_vdev_prop_value(nvlist_t *nvprop, vdev_prop_t prop, char *prop_name, strval = fnvlist_lookup_string(nv, ZPROP_VALUE); } else { /* user prop not found */ - return (-1); + src = ZPROP_SRC_DEFAULT; + strval = "-"; } (void) strlcpy(buf, strval, len); if (srctype) @@ -5085,6 +5462,8 @@ zpool_get_vdev_prop_value(nvlist_t *nvprop, vdev_prop_t prop, char *prop_name, case VDEV_PROP_WRITE_ERRORS: case VDEV_PROP_CHECKSUM_ERRORS: case VDEV_PROP_INITIALIZE_ERRORS: + case VDEV_PROP_TRIM_ERRORS: + case VDEV_PROP_SLOW_IOS: case VDEV_PROP_OPS_NULL: case VDEV_PROP_OPS_READ: case VDEV_PROP_OPS_WRITE: @@ -5123,6 +5502,19 @@ zpool_get_vdev_prop_value(nvlist_t *nvprop, vdev_prop_t prop, char *prop_name, (u_longlong_t)intval); } break; + case VDEV_PROP_CHECKSUM_N: + case VDEV_PROP_CHECKSUM_T: + case VDEV_PROP_IO_N: + case VDEV_PROP_IO_T: + case VDEV_PROP_SLOW_IO_N: + case VDEV_PROP_SLOW_IO_T: + if (intval == UINT64_MAX) { + (void) strlcpy(buf, "-", len); + } else { + (void) snprintf(buf, len, "%llu", + (u_longlong_t)intval); + } + break; case VDEV_PROP_FRAGMENTATION: if (intval == UINT64_MAX) { (void) strlcpy(buf, "-", len); @@ -5151,8 +5543,18 @@ zpool_get_vdev_prop_value(nvlist_t *nvprop, vdev_prop_t prop, char *prop_name, src = fnvlist_lookup_uint64(nv, ZPROP_SOURCE); intval = fnvlist_lookup_uint64(nv, ZPROP_VALUE); } else { + /* 'trim_support' only valid for leaf vdevs */ + if (prop == VDEV_PROP_TRIM_SUPPORT) { + (void) strlcpy(buf, "-", len); + break; + } src = ZPROP_SRC_DEFAULT; intval = vdev_prop_default_numeric(prop); + /* Only use if provided by the RAIDZ VDEV above */ + if (prop == VDEV_PROP_RAIDZ_EXPANDING) + return (ENOENT); + if (prop == VDEV_PROP_SIT_OUT) + return (ENOENT); } if (vdev_prop_index_to_string(prop, intval, (const char **)&strval) != 0) @@ -5322,8 +5724,44 @@ zpool_set_vdev_prop(zpool_handle_t *zhp, const char *vdevname, nvlist_free(nvl); nvlist_free(outnvl); - if (ret) - (void) zpool_standard_error(zhp->zpool_hdl, errno, errbuf); + if (ret) { + if (errno == ENOTSUP) { + zfs_error_aux(zhp->zpool_hdl, dgettext(TEXT_DOMAIN, + "property not supported for this vdev")); + (void) zfs_error(zhp->zpool_hdl, EZFS_PROPTYPE, errbuf); + } else { + (void) zpool_standard_error(zhp->zpool_hdl, errno, + errbuf); + } + } return (ret); } + +/* + * Prune older entries from the DDT to reclaim space under the quota + */ +int +zpool_ddt_prune(zpool_handle_t *zhp, zpool_ddt_prune_unit_t unit, + uint64_t amount) +{ + int error = lzc_ddt_prune(zhp->zpool_name, unit, amount); + if (error != 0) { + libzfs_handle_t *hdl = zhp->zpool_hdl; + char errbuf[ERRBUFLEN]; + + (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, + "cannot prune dedup table on '%s'"), zhp->zpool_name); + + if (error == EALREADY) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "a prune operation is already in progress")); + (void) zfs_error(hdl, EZFS_BUSY, errbuf); + } else { + (void) zpool_standard_error(hdl, errno, errbuf); + } + return (-1); + } + + return (0); +} diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c b/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c index 794aff5feef8..0e5cecc6cca9 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -30,6 +31,7 @@ * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com> * Copyright (c) 2018, loli10K <ezomori.nozomu@gmail.com>. All rights reserved. * Copyright (c) 2019 Datto Inc. + * Copyright (c) 2024, Klara, Inc. */ #include <assert.h> @@ -83,6 +85,9 @@ typedef struct progress_arg { boolean_t pa_parsable; boolean_t pa_estimate; int pa_verbosity; + boolean_t pa_astitle; + boolean_t pa_progress; + uint64_t pa_size; } progress_arg_t; static int @@ -116,7 +121,7 @@ dump_record(dmu_replay_record_t *drr, void *payload, size_t payload_len, typedef struct fsavl_node { avl_node_t fn_node; nvlist_t *fn_nvfs; - char *fn_snapname; + const char *fn_snapname; uint64_t fn_guid; } fsavl_node_t; @@ -134,7 +139,7 @@ fsavl_compare(const void *arg1, const void *arg2) * (optionally) name. */ static nvlist_t * -fsavl_find(avl_tree_t *avl, uint64_t snapguid, char **snapname) +fsavl_find(avl_tree_t *avl, uint64_t snapguid, const char **snapname) { fsavl_node_t fn_find; fsavl_node_t *fn; @@ -285,7 +290,7 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv); /* * Collect guid, valid props, optionally holds, etc. of a snapshot. - * This interface is intended for use as a zfs_iter_snapshots_sorted visitor. + * This interface is intended for use as a zfs_iter_snapshots_v2_sorted visitor. */ static int send_iterate_snap(zfs_handle_t *zhp, void *arg) @@ -381,7 +386,7 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv) nvpair_t *elem = NULL; while ((elem = nvlist_next_nvpair(props, elem)) != NULL) { - char *propname = nvpair_name(elem); + const char *propname = nvpair_name(elem); zfs_prop_t prop = zfs_name_to_prop(propname); if (!zfs_prop_user(propname)) { @@ -409,7 +414,7 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv) if (isspacelimit && zhp->zfs_type == ZFS_TYPE_SNAPSHOT) continue; - char *source; + const char *source; if (nvlist_lookup_string(propnv, ZPROP_SOURCE, &source) == 0) { if (strcmp(source, zhp->zfs_name) != 0 && strcmp(source, ZPROP_SOURCE_VAL_RECVD) != 0) @@ -425,7 +430,7 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv) if (zfs_prop_user(propname) || zfs_prop_get_type(prop) == PROP_TYPE_STRING) { - char *value; + const char *value; value = fnvlist_lookup_string(propnv, ZPROP_VALUE); fnvlist_add_string(nv, propname, value); } else { @@ -437,6 +442,29 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv) } /* + * returns snapshot guid + * and returns 0 if the snapshot does not exist + */ +static uint64_t +get_snap_guid(libzfs_handle_t *hdl, const char *fs, const char *snap) +{ + char name[MAXPATHLEN + 1]; + uint64_t guid = 0; + + if (fs == NULL || fs[0] == '\0' || snap == NULL || snap[0] == '\0') + return (guid); + + (void) snprintf(name, sizeof (name), "%s@%s", fs, snap); + zfs_handle_t *zhp = zfs_open(hdl, name, ZFS_TYPE_SNAPSHOT); + if (zhp != NULL) { + guid = zfs_prop_get_int(zhp, ZFS_PROP_GUID); + zfs_close(zhp); + } + + return (guid); +} + +/* * returns snapshot creation txg * and returns 0 if the snapshot does not exist */ @@ -593,10 +621,10 @@ send_iterate_fs(zfs_handle_t *zhp, void *arg) min_txg = fromsnap_txg; if (!sd->replicate && tosnap_txg != 0) max_txg = tosnap_txg; - (void) zfs_iter_snapshots_sorted(zhp, send_iterate_snap, sd, - min_txg, max_txg); + (void) zfs_iter_snapshots_sorted_v2(zhp, 0, send_iterate_snap, + sd, min_txg, max_txg); } else { - char snapname[MAXPATHLEN]; + char snapname[MAXPATHLEN] = { 0 }; zfs_handle_t *snap; (void) snprintf(snapname, sizeof (snapname), "%s@%s", @@ -636,7 +664,7 @@ send_iterate_fs(zfs_handle_t *zhp, void *arg) /* Iterate over children. */ if (sd->recursive) - rv = zfs_iter_filesystems(zhp, send_iterate_fs, sd); + rv = zfs_iter_filesystems_v2(zhp, 0, send_iterate_fs, sd); out: /* Restore saved fields. */ @@ -710,6 +738,7 @@ typedef struct send_dump_data { boolean_t seenfrom, seento, replicate, doall, fromorigin; boolean_t dryrun, parsable, progress, embed_data, std_out; boolean_t large_block, compress, raw, holds; + boolean_t progressastitle; int outfd; boolean_t err; nvlist_t *fss; @@ -766,7 +795,7 @@ zfs_send_space(zfs_handle_t *zhp, const char *snapname, const char *from, case EFAULT: case EROFS: case EINVAL: - zfs_error_aux(hdl, "%s", strerror(error)); + zfs_error_aux(hdl, "%s", zfs_strerror(error)); return (zfs_error(hdl, EZFS_BADBACKUP, errbuf)); default: @@ -849,13 +878,8 @@ dump_ioctl(zfs_handle_t *zhp, const char *fromsnap, uint64_t fromsnap_obj, case EFAULT: case EROFS: case EINVAL: - zfs_error_aux(hdl, "%s", strerror(errno)); + zfs_error_aux(hdl, "%s", zfs_strerror(errno)); return (zfs_error(hdl, EZFS_BADBACKUP, errbuf)); - case ENOTSUP: - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "large blocks detected but large_blocks feature " - "is inactive; raw send unsupported")); - return (zfs_error(hdl, EZFS_NOTSUP, errbuf)); default: return (zfs_standard_error(hdl, errno, errbuf)); @@ -906,6 +930,39 @@ zfs_send_progress(zfs_handle_t *zhp, int fd, uint64_t *bytes_written, return (0); } +static volatile boolean_t send_progress_thread_signal_duetotimer; +static void +send_progress_thread_act(int sig, siginfo_t *info, void *ucontext) +{ + (void) sig, (void) ucontext; + send_progress_thread_signal_duetotimer = info->si_code == SI_TIMER; +} + +struct timer_desirability { + timer_t timer; + boolean_t desired; +}; +static void +timer_delete_cleanup(void *timer) +{ + struct timer_desirability *td = timer; + if (td->desired) + timer_delete(td->timer); +} + +#ifdef SIGINFO +#define SEND_PROGRESS_THREAD_PARENT_BLOCK_SIGINFO sigaddset(&new, SIGINFO) +#else +#define SEND_PROGRESS_THREAD_PARENT_BLOCK_SIGINFO +#endif +#define SEND_PROGRESS_THREAD_PARENT_BLOCK(old) { \ + sigset_t new; \ + sigemptyset(&new); \ + sigaddset(&new, SIGUSR1); \ + SEND_PROGRESS_THREAD_PARENT_BLOCK_SIGINFO; \ + pthread_sigmask(SIG_BLOCK, &new, old); \ +} + static void * send_progress_thread(void *arg) { @@ -913,12 +970,33 @@ send_progress_thread(void *arg) zfs_handle_t *zhp = pa->pa_zhp; uint64_t bytes; uint64_t blocks; + uint64_t total = pa->pa_size / 100; char buf[16]; time_t t; struct tm tm; int err; - if (!pa->pa_parsable) { + const struct sigaction signal_action = + {.sa_sigaction = send_progress_thread_act, .sa_flags = SA_SIGINFO}; + struct sigevent timer_cfg = + {.sigev_notify = SIGEV_SIGNAL, .sigev_signo = SIGUSR1}; + const struct itimerspec timer_time = + {.it_value = {.tv_sec = 1}, .it_interval = {.tv_sec = 1}}; + struct timer_desirability timer = {}; + + sigaction(SIGUSR1, &signal_action, NULL); +#ifdef SIGINFO + sigaction(SIGINFO, &signal_action, NULL); +#endif + + if ((timer.desired = pa->pa_progress || pa->pa_astitle)) { + if (timer_create(CLOCK_MONOTONIC, &timer_cfg, &timer.timer)) + return ((void *)(uintptr_t)errno); + (void) timer_settime(timer.timer, 0, &timer_time, NULL); + } + pthread_cleanup_push(timer_delete_cleanup, &timer); + + if (!pa->pa_parsable && pa->pa_progress) { (void) fprintf(stderr, "TIME %s %sSNAPSHOT %s\n", pa->pa_estimate ? "BYTES" : " SENT", @@ -930,17 +1008,29 @@ send_progress_thread(void *arg) * Print the progress from ZFS_IOC_SEND_PROGRESS every second. */ for (;;) { - (void) sleep(1); + pause(); if ((err = zfs_send_progress(zhp, pa->pa_fd, &bytes, &blocks)) != 0) { if (err == EINTR || err == ENOENT) - return ((void *)0); - return ((void *)(uintptr_t)err); + err = 0; + /* Use break to reach pthread_cleanup_pop() below. */ + break; } (void) time(&t); localtime_r(&t, &tm); + if (pa->pa_astitle) { + char buf_bytes[16]; + char buf_size[16]; + int pct; + zfs_nicenum(bytes, buf_bytes, sizeof (buf_bytes)); + zfs_nicenum(pa->pa_size, buf_size, sizeof (buf_size)); + pct = (total > 0) ? bytes / total : 100; + zfs_setproctitle("sending %s (%d%%: %s/%s)", + zhp->zfs_name, MIN(pct, 100), buf_bytes, buf_size); + } + if (pa->pa_verbosity >= 2 && pa->pa_parsable) { (void) fprintf(stderr, "%02d:%02d:%02d\t%llu\t%llu\t%s\n", @@ -957,21 +1047,26 @@ send_progress_thread(void *arg) (void) fprintf(stderr, "%02d:%02d:%02d\t%llu\t%s\n", tm.tm_hour, tm.tm_min, tm.tm_sec, (u_longlong_t)bytes, zhp->zfs_name); - } else { + } else if (pa->pa_progress || + !send_progress_thread_signal_duetotimer) { zfs_nicebytes(bytes, buf, sizeof (buf)); (void) fprintf(stderr, "%02d:%02d:%02d %5s %s\n", tm.tm_hour, tm.tm_min, tm.tm_sec, buf, zhp->zfs_name); } } + pthread_cleanup_pop(B_TRUE); + pthread_exit(((void *)(uintptr_t)err)); } static boolean_t -send_progress_thread_exit(libzfs_handle_t *hdl, pthread_t ptid) +send_progress_thread_exit( + libzfs_handle_t *hdl, pthread_t ptid, sigset_t *oldmask) { void *status = NULL; (void) pthread_cancel(ptid); (void) pthread_join(ptid, &status); + pthread_sigmask(SIG_SETMASK, oldmask, NULL); int error = (int)(uintptr_t)status; if (error != 0 && status != PTHREAD_CANCELED) return (zfs_standard_error(hdl, error, @@ -989,8 +1084,23 @@ send_print_verbose(FILE *fout, const char *tosnap, const char *fromsnap, (void) fprintf(fout, dgettext(TEXT_DOMAIN, "incremental\t%s\t%s"), fromsnap, tosnap); } else { +/* + * Workaround for GCC 12+ with UBSan enabled deficencies. + * + * GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code + * below as violating -Wformat-overflow. + */ +#if defined(__GNUC__) && !defined(__clang__) && \ + defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-overflow" +#endif (void) fprintf(fout, dgettext(TEXT_DOMAIN, "full\t%s"), tosnap); +#if defined(__GNUC__) && !defined(__clang__) && \ + defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW) +#pragma GCC diagnostic pop +#endif } (void) fprintf(fout, "\t%llu", (longlong_t)size); } else { @@ -1010,8 +1120,23 @@ send_print_verbose(FILE *fout, const char *tosnap, const char *fromsnap, if (size != 0) { char buf[16]; zfs_nicebytes(size, buf, sizeof (buf)); +/* + * Workaround for GCC 12+ with UBSan enabled deficencies. + * + * GCC 12+ invoked with -fsanitize=undefined incorrectly reports the code + * below as violating -Wformat-overflow. + */ +#if defined(__GNUC__) && !defined(__clang__) && \ + defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-overflow" +#endif (void) fprintf(fout, dgettext(TEXT_DOMAIN, " estimated size is %s"), buf); +#if defined(__GNUC__) && !defined(__clang__) && \ + defined(ZFS_UBSAN_ENABLED) && defined(HAVE_FORMAT_OVERFLOW) +#pragma GCC diagnostic pop +#endif } } (void) fprintf(fout, "\n"); @@ -1019,7 +1144,7 @@ send_print_verbose(FILE *fout, const char *tosnap, const char *fromsnap, /* * Send a single filesystem snapshot, updating the send dump data. - * This interface is intended for use as a zfs_iter_snapshots_sorted visitor. + * This interface is intended for use as a zfs_iter_snapshots_v2_sorted visitor. */ static int dump_snapshot(zfs_handle_t *zhp, void *arg) @@ -1068,7 +1193,7 @@ dump_snapshot(zfs_handle_t *zhp, void *arg) if (!sdd->doall && !isfromsnap && !istosnap) { if (sdd->replicate) { - char *snapname; + const char *snapname; nvlist_t *snapprops; /* * Filter out all intermediate snapshots except origin @@ -1135,29 +1260,33 @@ dump_snapshot(zfs_handle_t *zhp, void *arg) * If progress reporting is requested, spawn a new thread to * poll ZFS_IOC_SEND_PROGRESS at a regular interval. */ - if (sdd->progress) { + sigset_t oldmask; + { pa.pa_zhp = zhp; pa.pa_fd = sdd->outfd; pa.pa_parsable = sdd->parsable; pa.pa_estimate = B_FALSE; pa.pa_verbosity = sdd->verbosity; + pa.pa_size = sdd->size; + pa.pa_astitle = sdd->progressastitle; + pa.pa_progress = sdd->progress; if ((err = pthread_create(&tid, NULL, send_progress_thread, &pa)) != 0) { zfs_close(zhp); return (err); } + SEND_PROGRESS_THREAD_PARENT_BLOCK(&oldmask); } err = dump_ioctl(zhp, sdd->prevsnap, sdd->prevsnap_obj, fromorigin, sdd->outfd, flags, sdd->debugnv); - if (sdd->progress && - send_progress_thread_exit(zhp->zfs_hdl, tid)) + if (send_progress_thread_exit(zhp->zfs_hdl, tid, &oldmask)) return (-1); } - (void) strcpy(sdd->prevsnap, thissnap); + (void) strlcpy(sdd->prevsnap, thissnap, sizeof (sdd->prevsnap)); sdd->prevsnap_obj = zfs_prop_get_int(zhp, ZFS_PROP_OBJSETID); zfs_close(zhp); return (err); @@ -1226,7 +1355,7 @@ dump_filesystem(zfs_handle_t *zhp, send_dump_data_t *sdd) zhp->zfs_name, sdd->tosnap); } } - rv = zfs_iter_snapshots_sorted(zhp, dump_snapshot, sdd, + rv = zfs_iter_snapshots_sorted_v2(zhp, 0, dump_snapshot, sdd, min_txg, max_txg); } else { char snapname[MAXPATHLEN] = { 0 }; @@ -1241,7 +1370,7 @@ dump_filesystem(zfs_handle_t *zhp, send_dump_data_t *sdd) if (snap != NULL) rv = dump_snapshot(snap, sdd); else - rv = -1; + rv = errno; } /* Dump tosnap. */ @@ -1253,7 +1382,7 @@ dump_filesystem(zfs_handle_t *zhp, send_dump_data_t *sdd) if (snap != NULL) rv = dump_snapshot(snap, sdd); else - rv = -1; + rv = errno; } } @@ -1305,7 +1434,7 @@ dump_filesystems(zfs_handle_t *rzhp, send_dump_data_t *sdd) nvfs = fnvpair_value_nvlist(fspair); (void) nvlist_lookup_uint64(nvfs, "origin", &origin_guid); if (origin_guid != 0) { - char *snapname; + const char *snapname; nvlist_t *origin_nv = fsavl_find(sdd->fsavl, origin_guid, &snapname); if (origin_nv != NULL) { @@ -1324,7 +1453,7 @@ again: for (fspair = nvlist_next_nvpair(sdd->fss, NULL); fspair; fspair = nvlist_next_nvpair(sdd->fss, fspair)) { nvlist_t *fslist, *parent_nv; - char *fsname; + const char *fsname; zfs_handle_t *zhp; int err; uint64_t origin_guid = 0; @@ -1488,15 +1617,16 @@ lzc_flags_from_sendflags(const sendflags_t *flags) static int estimate_size(zfs_handle_t *zhp, const char *from, int fd, sendflags_t *flags, uint64_t resumeobj, uint64_t resumeoff, uint64_t bytes, - const char *redactbook, char *errbuf) + const char *redactbook, char *errbuf, uint64_t *sizep) { uint64_t size; FILE *fout = flags->dryrun ? stdout : stderr; progress_arg_t pa = { 0 }; int err = 0; pthread_t ptid; + sigset_t oldmask; - if (flags->progress) { + { pa.pa_zhp = zhp; pa.pa_fd = fd; pa.pa_parsable = flags->parsable; @@ -1506,21 +1636,26 @@ estimate_size(zfs_handle_t *zhp, const char *from, int fd, sendflags_t *flags, err = pthread_create(&ptid, NULL, send_progress_thread, &pa); if (err != 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(errno)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(errno)); return (zfs_error(zhp->zfs_hdl, EZFS_THREADCREATEFAILED, errbuf)); } + SEND_PROGRESS_THREAD_PARENT_BLOCK(&oldmask); } err = lzc_send_space_resume_redacted(zhp->zfs_name, from, lzc_flags_from_sendflags(flags), resumeobj, resumeoff, bytes, redactbook, fd, &size); + *sizep = size; - if (flags->progress && send_progress_thread_exit(zhp->zfs_hdl, ptid)) + if (send_progress_thread_exit(zhp->zfs_hdl, ptid, &oldmask)) return (-1); + if (!flags->progress && !flags->parsable) + return (err); + if (err != 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(err)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(err)); return (zfs_error(zhp->zfs_hdl, EZFS_BADBACKUP, errbuf)); } @@ -1636,7 +1771,7 @@ find_redact_book(libzfs_handle_t *hdl, const char *path, "dataset to be sent no longer exists")); } else { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "unknown error: %s"), strerror(error)); + "unknown error: %s"), zfs_strerror(error)); } return (zfs_error(hdl, EZFS_BADPROP, errbuf)); } @@ -1685,8 +1820,8 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, int outfd, nvlist_t *resume_nvl) { char errbuf[ERRBUFLEN]; - char *toname; - char *fromname = NULL; + const char *toname; + const char *fromname = NULL; uint64_t resumeobj, resumeoff, toguid, fromguid, bytes; zfs_handle_t *zhp; int error = 0; @@ -1695,6 +1830,7 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, uint64_t *redact_snap_guids = NULL; int num_redact_snaps = 0; char *redact_book = NULL; + uint64_t size = 0; (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot resume send")); @@ -1718,7 +1854,7 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, (void) nvlist_lookup_uint64(resume_nvl, "fromguid", &fromguid); if (flags->saved) { - (void) strcpy(name, toname); + (void) strlcpy(name, toname, sizeof (name)); } else { error = guid_to_name(hdl, toname, toguid, B_FALSE, name); if (error != 0) { @@ -1780,7 +1916,7 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, enum lzc_send_flags lzc_flags = lzc_flags_from_sendflags(flags) | lzc_flags_from_resume_nvl(resume_nvl); - if (flags->verbosity != 0) { + if (flags->verbosity != 0 || flags->progressastitle) { /* * Some of these may have come from the resume token, set them * here for size estimate purposes. @@ -1797,22 +1933,26 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, if (lzc_flags & LZC_SEND_FLAG_SAVED) tmpflags.saved = B_TRUE; error = estimate_size(zhp, fromname, outfd, &tmpflags, - resumeobj, resumeoff, bytes, redact_book, errbuf); + resumeobj, resumeoff, bytes, redact_book, errbuf, &size); } if (!flags->dryrun) { progress_arg_t pa = { 0 }; pthread_t tid; + sigset_t oldmask; /* * If progress reporting is requested, spawn a new thread to * poll ZFS_IOC_SEND_PROGRESS at a regular interval. */ - if (flags->progress) { + { pa.pa_zhp = zhp; pa.pa_fd = outfd; pa.pa_parsable = flags->parsable; pa.pa_estimate = B_FALSE; pa.pa_verbosity = flags->verbosity; + pa.pa_size = size; + pa.pa_astitle = flags->progressastitle; + pa.pa_progress = flags->progress; error = pthread_create(&tid, NULL, send_progress_thread, &pa); @@ -1822,6 +1962,7 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, zfs_close(zhp); return (error); } + SEND_PROGRESS_THREAD_PARENT_BLOCK(&oldmask); } error = lzc_send_resume_redacted(zhp->zfs_name, fromname, outfd, @@ -1829,8 +1970,10 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, if (redact_book != NULL) free(redact_book); - if (flags->progress && send_progress_thread_exit(hdl, tid)) + if (send_progress_thread_exit(hdl, tid, &oldmask)) { + zfs_close(zhp); return (-1); + } char errbuf[ERRBUFLEN]; (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, @@ -1865,7 +2008,7 @@ zfs_send_resume_impl_cb_impl(libzfs_handle_t *hdl, sendflags_t *flags, case ERANGE: case EFAULT: case EROFS: - zfs_error_aux(hdl, "%s", strerror(errno)); + zfs_error_aux(hdl, "%s", zfs_strerror(errno)); return (zfs_error(hdl, EZFS_BADBACKUP, errbuf)); default: @@ -2030,7 +2173,8 @@ out: static int send_conclusion_record(int fd, zio_cksum_t *zc) { - dmu_replay_record_t drr = { 0 }; + dmu_replay_record_t drr; + memset(&drr, 0, sizeof (dmu_replay_record_t)); drr.drr_type = DRR_END; if (zc != NULL) drr.drr_u.drr_end.drr_checksum = *zc; @@ -2099,9 +2243,9 @@ send_prelim_records(zfs_handle_t *zhp, const char *from, int fd, fnvlist_add_boolean(hdrnv, "raw"); } - if ((err = gather_nvlist(zhp->zfs_hdl, tofs, + if (gather_nvlist(zhp->zfs_hdl, tofs, from, tosnap, recursive, raw, doall, replicate, skipmissing, - verbose, backup, holds, props, &fss, fsavlp)) != 0) { + verbose, backup, holds, props, &fss, fsavlp) != 0) { return (zfs_error(zhp->zfs_hdl, EZFS_BADBACKUP, errbuf)); } @@ -2132,7 +2276,8 @@ send_prelim_records(zfs_handle_t *zhp, const char *from, int fd, } if (!dryrun) { - dmu_replay_record_t drr = { 0 }; + dmu_replay_record_t drr; + memset(&drr, 0, sizeof (dmu_replay_record_t)); /* write first begin record */ drr.drr_type = DRR_BEGIN; drr.drr_u.drr_begin.drr_magic = DMU_BACKUP_MAGIC; @@ -2151,13 +2296,13 @@ send_prelim_records(zfs_handle_t *zhp, const char *from, int fd, err = dump_record(&drr, packbuf, buflen, &zc, fd); free(packbuf); if (err != 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(err)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(err)); return (zfs_error(zhp->zfs_hdl, EZFS_BADBACKUP, errbuf)); } err = send_conclusion_record(fd, &zc); if (err != 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(err)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(err)); return (zfs_error(zhp->zfs_hdl, EZFS_BADBACKUP, errbuf)); } @@ -2265,6 +2410,7 @@ zfs_send_cb_impl(zfs_handle_t *zhp, const char *fromsnap, const char *tosnap, sdd.verbosity = flags->verbosity; sdd.parsable = flags->parsable; sdd.progress = flags->progress; + sdd.progressastitle = flags->progressastitle; sdd.dryrun = flags->dryrun; sdd.large_block = flags->largeblock; sdd.embed_data = flags->embed_data; @@ -2360,7 +2506,7 @@ zfs_send_cb_impl(zfs_handle_t *zhp, const char *fromsnap, const char *tosnap, err = ENOENT; if (sdd.cleanup_fd != -1) { - VERIFY(0 == close(sdd.cleanup_fd)); + VERIFY0(close(sdd.cleanup_fd)); sdd.cleanup_fd = -1; } @@ -2386,7 +2532,7 @@ err_out: fnvlist_free(sdd.snapholds); if (sdd.cleanup_fd != -1) - VERIFY(0 == close(sdd.cleanup_fd)); + VERIFY0(close(sdd.cleanup_fd)); return (err); } @@ -2514,6 +2660,7 @@ zfs_send_one_cb_impl(zfs_handle_t *zhp, const char *from, int fd, char *name = zhp->zfs_name; pthread_t ptid; progress_arg_t pa = { 0 }; + uint64_t size = 0; char errbuf[ERRBUFLEN]; (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, @@ -2596,9 +2743,9 @@ zfs_send_one_cb_impl(zfs_handle_t *zhp, const char *from, int fd, /* * Perform size estimate if verbose was specified. */ - if (flags->verbosity != 0) { + if (flags->verbosity != 0 || flags->progressastitle) { err = estimate_size(zhp, from, fd, flags, 0, 0, 0, redactbook, - errbuf); + errbuf, &size); if (err != 0) return (err); } @@ -2610,26 +2757,31 @@ zfs_send_one_cb_impl(zfs_handle_t *zhp, const char *from, int fd, * If progress reporting is requested, spawn a new thread to poll * ZFS_IOC_SEND_PROGRESS at a regular interval. */ - if (flags->progress) { + sigset_t oldmask; + { pa.pa_zhp = zhp; pa.pa_fd = fd; pa.pa_parsable = flags->parsable; pa.pa_estimate = B_FALSE; pa.pa_verbosity = flags->verbosity; + pa.pa_size = size; + pa.pa_astitle = flags->progressastitle; + pa.pa_progress = flags->progress; err = pthread_create(&ptid, NULL, send_progress_thread, &pa); if (err != 0) { - zfs_error_aux(zhp->zfs_hdl, "%s", strerror(errno)); + zfs_error_aux(zhp->zfs_hdl, "%s", zfs_strerror(errno)); return (zfs_error(zhp->zfs_hdl, EZFS_THREADCREATEFAILED, errbuf)); } + SEND_PROGRESS_THREAD_PARENT_BLOCK(&oldmask); } err = lzc_send_redacted(name, from, fd, lzc_flags_from_sendflags(flags), redactbook); - if (flags->progress && send_progress_thread_exit(hdl, ptid)) + if (send_progress_thread_exit(hdl, ptid, &oldmask)) return (-1); if (err == 0 && (flags->props || flags->holds || flags->backup)) { @@ -2677,14 +2829,14 @@ zfs_send_one_cb_impl(zfs_handle_t *zhp, const char *from, int fd, case EPIPE: case ERANGE: case EROFS: - zfs_error_aux(hdl, "%s", strerror(errno)); + zfs_error_aux(hdl, "%s", zfs_strerror(errno)); return (zfs_error(hdl, EZFS_BADBACKUP, errbuf)); - case ENOTSUP: + case ZFS_ERR_STREAM_LARGE_MICROZAP: zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "large blocks detected but large_blocks feature " - "is inactive; raw send unsupported")); - return (zfs_error(hdl, EZFS_NOTSUP, errbuf)); - + "source snapshot contains large microzaps, " + "need -L (--large-block) or -w (--raw) to " + "generate stream")); + return (zfs_error(hdl, EZFS_BADBACKUP, errbuf)); default: return (zfs_standard_error(hdl, errno, errbuf)); } @@ -2867,7 +3019,7 @@ recv_rename(libzfs_handle_t *hdl, const char *name, const char *tryname, goto out; if (tryname) { - (void) strcpy(newname, tryname); + (void) strlcpy(newname, tryname, ZFS_MAX_DATASET_NAME_LEN); if (flags->verbose) { (void) printf("attempting rename %s to %s\n", name, newname); @@ -3082,9 +3234,9 @@ guid_to_name_cb(zfs_handle_t *zhp, void *arg) return (EEXIST); } - err = zfs_iter_children(zhp, guid_to_name_cb, gtnd); + err = zfs_iter_children_v2(zhp, 0, guid_to_name_cb, gtnd); if (err != EEXIST && gtnd->bookmark_ok) - err = zfs_iter_bookmarks(zhp, guid_to_name_cb, gtnd); + err = zfs_iter_bookmarks_v2(zhp, 0, guid_to_name_cb, gtnd); zfs_close(zhp); return (err); } @@ -3138,9 +3290,11 @@ guid_to_name_redact_snaps(libzfs_handle_t *hdl, const char *parent, continue; int err = guid_to_name_cb(zfs_handle_dup(zhp), >nd); if (err != EEXIST) - err = zfs_iter_children(zhp, guid_to_name_cb, >nd); + err = zfs_iter_children_v2(zhp, 0, guid_to_name_cb, + >nd); if (err != EEXIST && bookmark_ok) - err = zfs_iter_bookmarks(zhp, guid_to_name_cb, >nd); + err = zfs_iter_bookmarks_v2(zhp, 0, guid_to_name_cb, + >nd); zfs_close(zhp); if (err == EEXIST) return (0); @@ -3173,7 +3327,7 @@ created_before(libzfs_handle_t *hdl, avl_tree_t *avl, uint64_t guid1, uint64_t guid2) { nvlist_t *nvfs; - char *fsname = NULL, *snapname = NULL; + const char *fsname = NULL, *snapname = NULL; char buf[ZFS_MAX_DATASET_NAME_LEN]; int rv; zfs_handle_t *guid1hdl, *guid2hdl; @@ -3224,66 +3378,78 @@ created_before(libzfs_handle_t *hdl, avl_tree_t *avl, */ static int recv_fix_encryption_hierarchy(libzfs_handle_t *hdl, const char *top_zfs, - nvlist_t *stream_nv) + nvlist_t *stream_nv, avl_tree_t *stream_avl) { int err; nvpair_t *fselem = NULL; - nvlist_t *stream_fss; + nvlist_t *local_nv; + avl_tree_t *local_avl; + boolean_t recursive; - stream_fss = fnvlist_lookup_nvlist(stream_nv, "fss"); + recursive = (nvlist_lookup_boolean(stream_nv, "not_recursive") == + ENOENT); - while ((fselem = nvlist_next_nvpair(stream_fss, fselem)) != NULL) { + /* Using top_zfs, gather the nvlists for all local filesystems. */ + if ((err = gather_nvlist(hdl, top_zfs, NULL, NULL, + recursive, B_TRUE, B_FALSE, recursive, B_FALSE, B_FALSE, B_FALSE, + B_FALSE, B_TRUE, &local_nv, &local_avl)) != 0) + return (err); + + /* + * Go through the nvlists of the local filesystems and check for + * encryption roots. + */ + while ((fselem = nvlist_next_nvpair(local_nv, fselem)) != NULL) { zfs_handle_t *zhp = NULL; uint64_t crypt; - nvlist_t *snaps, *props, *stream_nvfs = NULL; - nvpair_t *snapel = NULL; + nvlist_t *stream_props, *snaps, *stream_nvfs = NULL, + *nvfs = NULL; boolean_t is_encroot, is_clone, stream_encroot; - char *cp; - char *stream_keylocation = NULL; + const char *stream_keylocation = NULL, *fsname; char keylocation[MAXNAMELEN]; - char fsname[ZFS_MAX_DATASET_NAME_LEN]; - - keylocation[0] = '\0'; - stream_nvfs = fnvpair_value_nvlist(fselem); - snaps = fnvlist_lookup_nvlist(stream_nvfs, "snaps"); - props = fnvlist_lookup_nvlist(stream_nvfs, "props"); - stream_encroot = nvlist_exists(stream_nvfs, "is_encroot"); - - /* find a snapshot from the stream that exists locally */ - err = ENOENT; - while ((snapel = nvlist_next_nvpair(snaps, snapel)) != NULL) { - uint64_t guid; - - guid = fnvpair_value_uint64(snapel); - err = guid_to_name(hdl, top_zfs, guid, B_FALSE, - fsname); - if (err == 0) - break; - } - - if (err != 0) - continue; - - cp = strchr(fsname, '@'); - if (cp != NULL) - *cp = '\0'; + nvpair_t *snapelem; + nvfs = fnvpair_value_nvlist(fselem); + snaps = fnvlist_lookup_nvlist(nvfs, "snaps"); + fsname = fnvlist_lookup_string(nvfs, "name"); zhp = zfs_open(hdl, fsname, ZFS_TYPE_DATASET); if (zhp == NULL) { err = ENOENT; goto error; } - crypt = zfs_prop_get_int(zhp, ZFS_PROP_ENCRYPTION); - is_clone = zhp->zfs_dmustats.dds_origin[0] != '\0'; - (void) zfs_crypto_get_encryption_root(zhp, &is_encroot, NULL); - /* we don't need to do anything for unencrypted datasets */ + crypt = zfs_prop_get_int(zhp, ZFS_PROP_ENCRYPTION); if (crypt == ZIO_CRYPT_OFF) { zfs_close(zhp); continue; } + is_clone = zhp->zfs_dmustats.dds_origin[0] != '\0'; + (void) zfs_crypto_get_encryption_root(zhp, &is_encroot, NULL); + keylocation[0] = '\0'; + + /* + * Go through the snapshots of the local filesystem and find + * the stream's filesystem. + */ + for (snapelem = nvlist_next_nvpair(snaps, NULL); + snapelem; snapelem = nvlist_next_nvpair(snaps, snapelem)) { + uint64_t thisguid; + + thisguid = fnvpair_value_uint64(snapelem); + stream_nvfs = fsavl_find(stream_avl, thisguid, NULL); + + if (stream_nvfs != NULL) + break; + } + + if (stream_nvfs == NULL) + continue; + + stream_props = fnvlist_lookup_nvlist(stream_nvfs, "props"); + stream_encroot = nvlist_exists(stream_nvfs, "is_encroot"); + /* * If the dataset is flagged as an encryption root, was not * received as a clone and is not currently an encryption root, @@ -3299,7 +3465,7 @@ recv_fix_encryption_hierarchy(libzfs_handle_t *hdl, const char *top_zfs, } } - stream_keylocation = fnvlist_lookup_string(props, + stream_keylocation = fnvlist_lookup_string(stream_props, zfs_prop_to_name(ZFS_PROP_KEYLOCATION)); /* @@ -3359,21 +3525,21 @@ recv_incremental_replication(libzfs_handle_t *hdl, const char *tofs, nvlist_t *local_nv, *deleted = NULL; avl_tree_t *local_avl; nvpair_t *fselem, *nextfselem; - char *fromsnap; + const char *fromsnap; char newname[ZFS_MAX_DATASET_NAME_LEN]; char guidname[32]; int error; boolean_t needagain, progress, recursive; - char *s1, *s2; + const char *s1, *s2; + + if (flags->dryrun) + return (0); fromsnap = fnvlist_lookup_string(stream_nv, "fromsnap"); recursive = (nvlist_lookup_boolean(stream_nv, "not_recursive") == ENOENT); - if (flags->dryrun) - return (0); - again: needagain = progress = B_FALSE; @@ -3396,7 +3562,7 @@ again: uint64_t originguid = 0; uint64_t stream_originguid = 0; uint64_t parent_fromsnap_guid, stream_parent_fromsnap_guid; - char *fsname, *stream_fsname; + const char *fsname, *stream_fsname; nextfselem = nvlist_next_nvpair(local_nv, fselem); @@ -3431,7 +3597,7 @@ again: case 1: { /* promote it! */ nvlist_t *origin_nvfs; - char *origin_fsname; + const char *origin_fsname; origin_nvfs = fsavl_find(local_avl, originguid, NULL); @@ -3462,7 +3628,7 @@ again: for (snapelem = nvlist_next_nvpair(snaps, NULL); snapelem; snapelem = nextsnapelem) { uint64_t thisguid; - char *stream_snapname; + const char *stream_snapname; nvlist_t *found, *props; nextsnapelem = nvlist_next_nvpair(snaps, snapelem); @@ -3608,7 +3774,7 @@ again: * new fs. */ if (parent != NULL) { - char *pname; + const char *pname; pname = fnvlist_lookup_string(parent, "name"); (void) snprintf(tryname, sizeof (tryname), @@ -3659,8 +3825,8 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname, { nvlist_t *stream_nv = NULL; avl_tree_t *stream_avl = NULL; - char *fromsnap = NULL; - char *sendsnap = NULL; + const char *fromsnap = NULL; + const char *sendsnap = NULL; char *cp; char tofs[ZFS_MAX_DATASET_NAME_LEN]; char sendfs[ZFS_MAX_DATASET_NAME_LEN]; @@ -3847,9 +4013,9 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname, stream_nv, stream_avl, NULL); } - if (raw && softerr == 0 && *top_zfs != NULL) { + if (raw && *top_zfs != NULL && !flags->dryrun) { softerr = recv_fix_encryption_hierarchy(hdl, *top_zfs, - stream_nv); + stream_nv, stream_avl); } out: @@ -4106,6 +4272,15 @@ zfs_setup_cmdline_props(libzfs_handle_t *hdl, zfs_type_t type, goto error; } + /* + * For plain replicated send, we can ignore encryption + * properties other than first stream + */ + if ((zfs_prop_encryption_key_param(prop) || prop == + ZFS_PROP_ENCRYPTION) && !newfs && recursive && !raw) { + continue; + } + /* incremental streams can only exclude encryption properties */ if ((zfs_prop_encryption_key_param(prop) || prop == ZFS_PROP_ENCRYPTION) && !newfs && @@ -4140,7 +4315,7 @@ zfs_setup_cmdline_props(libzfs_handle_t *hdl, zfs_type_t type, */ if (nvlist_exists(origprops, newname)) { nvlist_t *attrs; - char *source = NULL; + const char *source = NULL; attrs = fnvlist_lookup_nvlist(origprops, newname); @@ -4207,7 +4382,8 @@ zfs_setup_cmdline_props(libzfs_handle_t *hdl, zfs_type_t type, if (cp != NULL) *cp = '\0'; - if (!raw && zfs_crypto_create(hdl, namebuf, voprops, NULL, + if (!raw && !(!newfs && recursive) && + zfs_crypto_create(hdl, namebuf, voprops, NULL, B_FALSE, wkeydata_out, wkeylen_out) != 0) { fnvlist_free(voprops); ret = zfs_error(hdl, EZFS_CRYPTOFAILED, errbuf); @@ -4263,7 +4439,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, zprop_errflags_t prop_errflags; nvlist_t *prop_errors = NULL; boolean_t recursive; - char *snapname = NULL; + const char *snapname = NULL; char destsnap[MAXPATHLEN * 2]; char origin[MAXNAMELEN] = {0}; char name[MAXPATHLEN]; @@ -4294,7 +4470,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, boolean_t holds = flags->holds && !flags->skipholds; if (stream_avl != NULL) { - char *keylocation = NULL; + const char *keylocation = NULL; nvlist_t *lookup = NULL; nvlist_t *fs = fsavl_find(stream_avl, drrb->drr_toguid, &snapname); @@ -4318,7 +4494,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, err = nvlist_lookup_string(rcvprops, zfs_prop_to_name(ZFS_PROP_KEYLOCATION), &keylocation); if (err == 0) { - strcpy(tmp_keylocation, keylocation); + strlcpy(tmp_keylocation, keylocation, MAXNAMELEN); (void) nvlist_remove_all(rcvprops, zfs_prop_to_name(ZFS_PROP_KEYLOCATION)); } @@ -4374,7 +4550,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, * prepend a path separator. */ int len = strlen(drrb->drr_toname); - cp = malloc(len + 2); + cp = umem_alloc(len + 2, UMEM_NOFAIL); cp[0] = '/'; (void) strcpy(&cp[1], drrb->drr_toname); chopprefix = cp; @@ -4427,7 +4603,8 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, */ (void) strlcpy(destsnap, tosnap, sizeof (destsnap)); (void) strlcat(destsnap, chopprefix, sizeof (destsnap)); - free(cp); + if (cp != NULL) + umem_free(cp, strlen(cp) + 1); if (!zfs_name_valid(destsnap, ZFS_TYPE_SNAPSHOT)) { err = zfs_error(hdl, EZFS_INVALIDNAME, errbuf); goto out; @@ -4485,18 +4662,20 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot receive new filesystem stream")); - (void) strcpy(name, destsnap); + (void) strlcpy(name, destsnap, sizeof (name)); cp = strrchr(name, '/'); if (cp) *cp = '\0'; if (cp && !zfs_dataset_exists(hdl, name, ZFS_TYPE_DATASET)) { char suffix[ZFS_MAX_DATASET_NAME_LEN]; - (void) strcpy(suffix, strrchr(destsnap, '/')); + (void) strlcpy(suffix, strrchr(destsnap, '/'), + sizeof (suffix)); if (guid_to_name(hdl, name, parent_snapguid, B_FALSE, destsnap) == 0) { *strchr(destsnap, '@') = '\0'; - (void) strcat(destsnap, suffix); + (void) strlcat(destsnap, suffix, + sizeof (destsnap)); } } } else { @@ -4514,7 +4693,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, "cannot receive incremental stream")); } - (void) strcpy(name, destsnap); + (void) strlcpy(name, destsnap, sizeof (name)); *strchr(name, '@') = '\0'; /* @@ -4526,24 +4705,51 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, strlen(sendfs)) != '\0' && *chopprefix != '@')) && !zfs_dataset_exists(hdl, name, ZFS_TYPE_DATASET)) { char snap[ZFS_MAX_DATASET_NAME_LEN]; - (void) strcpy(snap, strchr(destsnap, '@')); + (void) strlcpy(snap, strchr(destsnap, '@'), + sizeof (snap)); if (guid_to_name(hdl, name, drrb->drr_fromguid, B_FALSE, destsnap) == 0) { *strchr(destsnap, '@') = '\0'; - (void) strcat(destsnap, snap); + (void) strlcat(destsnap, snap, + sizeof (destsnap)); } } } - (void) strcpy(name, destsnap); + (void) strlcpy(name, destsnap, sizeof (name)); *strchr(name, '@') = '\0'; redacted = DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo) & DMU_BACKUP_FEATURE_REDACTED; - if (zfs_dataset_exists(hdl, name, ZFS_TYPE_DATASET)) { + if (flags->heal) { + if (flags->isprefix || flags->istail || flags->force || + flags->canmountoff || flags->resumable || flags->nomount || + flags->skipholds) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "corrective recv can not be used when combined with" + " this flag")); + err = zfs_error(hdl, EZFS_INVALIDNAME, errbuf); + goto out; + } + uint64_t guid = + get_snap_guid(hdl, name, strchr(destsnap, '@') + 1); + if (guid == 0) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "corrective recv must specify an existing snapshot" + " to heal")); + err = zfs_error(hdl, EZFS_INVALIDNAME, errbuf); + goto out; + } else if (guid != drrb->drr_toguid) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "local snapshot doesn't match the snapshot" + " in the provided stream")); + err = zfs_error(hdl, EZFS_WRONG_PARENT, errbuf); + goto out; + } + } else if (zfs_dataset_exists(hdl, name, ZFS_TYPE_DATASET)) { zfs_cmd_t zc = {"\0"}; - zfs_handle_t *zhp; + zfs_handle_t *zhp = NULL; boolean_t encrypted; (void) strcpy(zc.zc_name, name); @@ -4600,6 +4806,33 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, goto out; } + /* + * When receiving full/newfs on existing dataset, then it + * should be done with "-F" flag. Its enforced for initial + * receive in previous checks in this function. + * Similarly, on resuming full/newfs recv on existing dataset, + * it should be done with "-F" flag. + * + * When dataset doesn't exist, then full/newfs recv is done on + * newly created dataset and it's marked INCONSISTENT. But + * When receiving on existing dataset, recv is first done on + * %recv and its marked INCONSISTENT. Existing dataset is not + * marked INCONSISTENT. + * Resume of full/newfs receive with dataset not INCONSISTENT + * indicates that its resuming newfs on existing dataset. So, + * enforce "-F" flag in this case. + */ + if (stream_resumingnewfs && + !zfs_prop_get_int(zhp, ZFS_PROP_INCONSISTENT) && + !flags->force) { + zfs_close(zhp); + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "Resuming recv on existing destination '%s'\n" + "must specify -F to overwrite it"), name); + err = zfs_error(hdl, EZFS_RESUME_EXISTS, errbuf); + goto out; + } + if (stream_wantsnewfs && zhp->zfs_dmustats.dds_origin[0]) { zfs_close(zhp); @@ -4737,8 +4970,9 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, } if (flags->verbose) { - (void) printf("%s %s stream of %s into %s\n", + (void) printf("%s %s%s stream of %s into %s\n", flags->dryrun ? "would receive" : "receiving", + flags->heal ? "corrective " : "", drrb->drr_fromguid ? "incremental" : "full", drrb->drr_toname, destsnap); (void) fflush(stdout); @@ -4808,10 +5042,17 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, goto out; } - err = ioctl_err = lzc_receive_with_cmdprops(destsnap, rcvprops, - oxprops, wkeydata, wkeylen, origin, flags->force, flags->resumable, - raw, infd, drr_noswap, -1, &read_bytes, &errflags, - NULL, &prop_errors); + if (flags->heal) { + err = ioctl_err = lzc_receive_with_heal(destsnap, rcvprops, + oxprops, wkeydata, wkeylen, origin, flags->force, + flags->heal, flags->resumable, raw, infd, drr_noswap, -1, + &read_bytes, &errflags, NULL, &prop_errors); + } else { + err = ioctl_err = lzc_receive_with_cmdprops(destsnap, rcvprops, + oxprops, wkeydata, wkeylen, origin, flags->force, + flags->resumable, raw, infd, drr_noswap, -1, &read_bytes, + &errflags, NULL, &prop_errors); + } ioctl_errno = ioctl_err; prop_errflags = errflags; @@ -4857,7 +5098,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, if (err == 0 && snapprops_nvlist) { zfs_cmd_t zc = {"\0"}; - (void) strcpy(zc.zc_name, destsnap); + (void) strlcpy(zc.zc_name, destsnap, sizeof (zc.zc_name)); zc.zc_cookie = B_TRUE; /* received */ zcmd_write_src_nvlist(hdl, &zc, snapprops_nvlist); (void) zfs_ioctl(hdl, ZFS_IOC_SET_PROP, &zc); @@ -4868,7 +5109,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, nvlist_t *holds, *errors = NULL; int cleanup_fd = -1; - VERIFY(0 == nvlist_alloc(&holds, 0, KM_SLEEP)); + VERIFY0(nvlist_alloc(&holds, 0, KM_SLEEP)); for (pair = nvlist_next_nvpair(snapholds_nvlist, NULL); pair != NULL; pair = nvlist_next_nvpair(snapholds_nvlist, pair)) { @@ -4933,7 +5174,12 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, (void) zfs_error(hdl, EZFS_BADRESTORE, errbuf); break; case EACCES: - if (raw && stream_wantsnewfs) { + if (flags->heal) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "key must be loaded to do a non-raw " + "corrective recv on an encrypted " + "dataset.")); + } else if (raw && stream_wantsnewfs) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "failed to create encryption key")); } else if (raw && !stream_wantsnewfs) { @@ -4960,21 +5206,27 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, *cp = '@'; break; case EINVAL: - if (flags->resumable) { - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "kernel modules must be upgraded to " - "receive this stream.")); - } else if (embedded && !raw) { + if (embedded && !raw) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "incompatible embedded data stream " "feature with encrypted receive.")); + } else if (flags->resumable) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "kernel modules must be upgraded to " + "receive this stream.")); } (void) zfs_error(hdl, EZFS_BADSTREAM, errbuf); break; case ECKSUM: case ZFS_ERR_STREAM_TRUNCATED: - recv_ecksum_set_aux(hdl, destsnap, flags->resumable, - ioctl_err == ECKSUM); + if (flags->heal) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "corrective receive was not able to " + "reconstruct the data needed for " + "healing.")); + else + recv_ecksum_set_aux(hdl, destsnap, + flags->resumable, ioctl_err == ECKSUM); (void) zfs_error(hdl, EZFS_BADSTREAM, errbuf); break; case ZFS_ERR_STREAM_LARGE_BLOCK_MISMATCH: @@ -4984,10 +5236,22 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, (void) zfs_error(hdl, EZFS_BADSTREAM, errbuf); break; case ENOTSUP: - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "pool must be upgraded to receive this stream.")); + if (flags->heal) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "stream is not compatible with the " + "data in the pool.")); + else + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "pool must be upgraded to receive this " + "stream.")); (void) zfs_error(hdl, EZFS_BADVERSION, errbuf); break; + case ZFS_ERR_CRYPTO_NOTSUP: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "stream uses crypto parameters not compatible with " + "this pool")); + (void) zfs_error(hdl, EZFS_BADSTREAM, errbuf); + break; case EDQUOT: zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "destination %s space quota exceeded."), name); @@ -5015,6 +5279,27 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, "be updated.")); (void) zfs_error(hdl, EZFS_BADSTREAM, errbuf); break; + case ZFS_ERR_RESUME_EXISTS: + cp = strchr(destsnap, '@'); + if (newfs) { + /* it's the containing fs that exists */ + *cp = '\0'; + } + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "Resuming recv on existing dataset without force")); + (void) zfs_error_fmt(hdl, EZFS_RESUME_EXISTS, + dgettext(TEXT_DOMAIN, "cannot resume recv %s"), + destsnap); + *cp = '@'; + break; + case E2BIG: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "zfs receive required kernel memory allocation " + "larger than the system can support. Please file " + "an issue at the OpenZFS issue tracker:\n" + "https://github.com/openzfs/zfs/issues/new")); + (void) zfs_error(hdl, EZFS_BADSTREAM, errbuf); + break; case EBUSY: if (hastoken) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, @@ -5276,7 +5561,7 @@ zfs_receive_impl(libzfs_handle_t *hdl, const char *tosnap, if ((cp = strchr(nonpackage_sendfs, '@')) != NULL) *cp = '\0'; sendfs = nonpackage_sendfs; - VERIFY(finalsnap == NULL); + VERIFY0P(finalsnap); } return (zfs_receive_one(hdl, infd, tosnap, originsnap, flags, &drr, &drr_noswap, sendfs, stream_nv, stream_avl, top_zfs, @@ -5303,7 +5588,7 @@ zfs_receive(libzfs_handle_t *hdl, const char *tosnap, nvlist_t *props, char *top_zfs = NULL; int err; struct stat sb; - char *originsnap = NULL; + const char *originsnap = NULL; /* * The only way fstat can fail is if we do not have a valid file diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_status.c b/sys/contrib/openzfs/lib/libzfs/libzfs_status.c index 9f450806d78c..a589ca6896f0 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_status.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_status.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -97,57 +98,57 @@ static const char *const zfs_msgid_table[] = { #define NMSGID (sizeof (zfs_msgid_table) / sizeof (zfs_msgid_table[0])) static int -vdev_missing(vdev_stat_t *vs, uint_t vsc) +vdev_missing(vdev_stat_t *vs, uint_t vsc, void *arg) { - (void) vsc; + (void) vsc, (void) arg; return (vs->vs_state == VDEV_STATE_CANT_OPEN && vs->vs_aux == VDEV_AUX_OPEN_FAILED); } static int -vdev_faulted(vdev_stat_t *vs, uint_t vsc) +vdev_faulted(vdev_stat_t *vs, uint_t vsc, void *arg) { - (void) vsc; + (void) vsc, (void) arg; return (vs->vs_state == VDEV_STATE_FAULTED); } static int -vdev_errors(vdev_stat_t *vs, uint_t vsc) +vdev_errors(vdev_stat_t *vs, uint_t vsc, void *arg) { - (void) vsc; + (void) vsc, (void) arg; return (vs->vs_state == VDEV_STATE_DEGRADED || vs->vs_read_errors != 0 || vs->vs_write_errors != 0 || vs->vs_checksum_errors != 0); } static int -vdev_broken(vdev_stat_t *vs, uint_t vsc) +vdev_broken(vdev_stat_t *vs, uint_t vsc, void *arg) { - (void) vsc; + (void) vsc, (void) arg; return (vs->vs_state == VDEV_STATE_CANT_OPEN); } static int -vdev_offlined(vdev_stat_t *vs, uint_t vsc) +vdev_offlined(vdev_stat_t *vs, uint_t vsc, void *arg) { - (void) vsc; + (void) vsc, (void) arg; return (vs->vs_state == VDEV_STATE_OFFLINE); } static int -vdev_removed(vdev_stat_t *vs, uint_t vsc) +vdev_removed(vdev_stat_t *vs, uint_t vsc, void *arg) { - (void) vsc; + (void) vsc, (void) arg; return (vs->vs_state == VDEV_STATE_REMOVED); } static int -vdev_non_native_ashift(vdev_stat_t *vs, uint_t vsc) +vdev_non_native_ashift(vdev_stat_t *vs, uint_t vsc, void *arg) { - if (getenv("ZPOOL_STATUS_NON_NATIVE_ASHIFT_IGNORE") != NULL) - return (0); + uint64_t ashift = *(uint64_t *)arg; return (VDEV_STAT_VALID(vs_physical_ashift, vsc) && + (ashift == 0 || vs->vs_configured_ashift < ashift) && vs->vs_configured_ashift < vs->vs_physical_ashift); } @@ -155,8 +156,8 @@ vdev_non_native_ashift(vdev_stat_t *vs, uint_t vsc) * Detect if any leaf devices that have seen errors or could not be opened. */ static boolean_t -find_vdev_problem(nvlist_t *vdev, int (*func)(vdev_stat_t *, uint_t), - boolean_t ignore_replacing) +find_vdev_problem(nvlist_t *vdev, int (*func)(vdev_stat_t *, uint_t, void *), + void *arg, boolean_t ignore_replacing) { nvlist_t **child; uint_t c, children; @@ -168,21 +169,24 @@ find_vdev_problem(nvlist_t *vdev, int (*func)(vdev_stat_t *, uint_t), * later. */ if (ignore_replacing == B_TRUE) { - char *type = fnvlist_lookup_string(vdev, ZPOOL_CONFIG_TYPE); + const char *type = fnvlist_lookup_string(vdev, + ZPOOL_CONFIG_TYPE); if (strcmp(type, VDEV_TYPE_REPLACING) == 0) return (B_FALSE); } if (nvlist_lookup_nvlist_array(vdev, ZPOOL_CONFIG_CHILDREN, &child, &children) == 0) { - for (c = 0; c < children; c++) - if (find_vdev_problem(child[c], func, ignore_replacing)) + for (c = 0; c < children; c++) { + if (find_vdev_problem(child[c], func, arg, + ignore_replacing)) return (B_TRUE); + } } else { uint_t vsc; vdev_stat_t *vs = (vdev_stat_t *)fnvlist_lookup_uint64_array( vdev, ZPOOL_CONFIG_VDEV_STATS, &vsc); - if (func(vs, vsc) != 0) + if (func(vs, vsc, arg) != 0) return (B_TRUE); } @@ -191,9 +195,11 @@ find_vdev_problem(nvlist_t *vdev, int (*func)(vdev_stat_t *, uint_t), */ if (nvlist_lookup_nvlist_array(vdev, ZPOOL_CONFIG_L2CACHE, &child, &children) == 0) { - for (c = 0; c < children; c++) - if (find_vdev_problem(child[c], func, ignore_replacing)) + for (c = 0; c < children; c++) { + if (find_vdev_problem(child[c], func, arg, + ignore_replacing)) return (B_TRUE); + } } return (B_FALSE); @@ -218,11 +224,10 @@ find_vdev_problem(nvlist_t *vdev, int (*func)(vdev_stat_t *, uint_t), */ static zpool_status_t check_status(nvlist_t *config, boolean_t isimport, - zpool_errata_t *erratap, const char *compat) + zpool_errata_t *erratap, const char *compat, uint64_t ashift) { pool_scan_stat_t *ps = NULL; uint_t vsc, psc; - uint64_t nerr; uint64_t suspended; uint64_t hostid = 0; uint64_t errata = 0; @@ -370,15 +375,15 @@ check_status(nvlist_t *config, boolean_t isimport, * Bad devices in non-replicated config. */ if (vs->vs_state == VDEV_STATE_CANT_OPEN && - find_vdev_problem(nvroot, vdev_faulted, B_TRUE)) + find_vdev_problem(nvroot, vdev_faulted, NULL, B_TRUE)) return (ZPOOL_STATUS_FAULTED_DEV_NR); if (vs->vs_state == VDEV_STATE_CANT_OPEN && - find_vdev_problem(nvroot, vdev_missing, B_TRUE)) + find_vdev_problem(nvroot, vdev_missing, NULL, B_TRUE)) return (ZPOOL_STATUS_MISSING_DEV_NR); if (vs->vs_state == VDEV_STATE_CANT_OPEN && - find_vdev_problem(nvroot, vdev_broken, B_TRUE)) + find_vdev_problem(nvroot, vdev_broken, NULL, B_TRUE)) return (ZPOOL_STATUS_CORRUPT_LABEL_NR); /* @@ -392,6 +397,7 @@ check_status(nvlist_t *config, boolean_t isimport, * Persistent data errors. */ if (!isimport) { + uint64_t nerr; if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_ERRCOUNT, &nerr) == 0 && nerr != 0) return (ZPOOL_STATUS_CORRUPT_DATA); @@ -400,35 +406,37 @@ check_status(nvlist_t *config, boolean_t isimport, /* * Missing devices in a replicated config. */ - if (find_vdev_problem(nvroot, vdev_faulted, B_TRUE)) + if (find_vdev_problem(nvroot, vdev_faulted, NULL, B_TRUE)) return (ZPOOL_STATUS_FAULTED_DEV_R); - if (find_vdev_problem(nvroot, vdev_missing, B_TRUE)) + if (find_vdev_problem(nvroot, vdev_missing, NULL, B_TRUE)) return (ZPOOL_STATUS_MISSING_DEV_R); - if (find_vdev_problem(nvroot, vdev_broken, B_TRUE)) + if (find_vdev_problem(nvroot, vdev_broken, NULL, B_TRUE)) return (ZPOOL_STATUS_CORRUPT_LABEL_R); /* * Devices with errors */ - if (!isimport && find_vdev_problem(nvroot, vdev_errors, B_TRUE)) + if (!isimport && find_vdev_problem(nvroot, vdev_errors, NULL, B_TRUE)) return (ZPOOL_STATUS_FAILING_DEV); /* * Offlined devices */ - if (find_vdev_problem(nvroot, vdev_offlined, B_TRUE)) + if (find_vdev_problem(nvroot, vdev_offlined, NULL, B_TRUE)) return (ZPOOL_STATUS_OFFLINE_DEV); /* * Removed device */ - if (find_vdev_problem(nvroot, vdev_removed, B_TRUE)) + if (find_vdev_problem(nvroot, vdev_removed, NULL, B_TRUE)) return (ZPOOL_STATUS_REMOVED_DEV); /* * Suboptimal, but usable, ashift configuration. */ - if (find_vdev_problem(nvroot, vdev_non_native_ashift, B_FALSE)) + if (!isimport && + getenv("ZPOOL_STATUS_NON_NATIVE_ASHIFT_IGNORE") == NULL && + find_vdev_problem(nvroot, vdev_non_native_ashift, &ashift, B_FALSE)) return (ZPOOL_STATUS_NON_NATIVE_ASHIFT); /* @@ -482,7 +490,8 @@ check_status(nvlist_t *config, boolean_t isimport, } for (i = 0; i < SPA_FEATURES; i++) { zfeature_info_t *fi = &spa_feature_table[i]; - if (!fi->fi_zfs_mod_supported) + if (!fi->fi_zfs_mod_supported || + (fi->fi_flags & ZFEATURE_FLAG_NO_UPGRADE)) continue; if (c_features[i] && !nvlist_exists(feat, fi->fi_guid)) return (ZPOOL_STATUS_FEAT_DISABLED); @@ -507,8 +516,10 @@ zpool_get_status(zpool_handle_t *zhp, const char **msgid, ZFS_MAXPROPLEN, NULL, B_FALSE) != 0) compatibility[0] = '\0'; + uint64_t ashift = zpool_get_prop_int(zhp, ZPOOL_PROP_ASHIFT, NULL); + zpool_status_t ret = check_status(zhp->zpool_config, B_FALSE, errata, - compatibility); + compatibility, ashift); if (msgid != NULL) { if (ret >= NMSGID) @@ -523,7 +534,7 @@ zpool_status_t zpool_import_status(nvlist_t *config, const char **msgid, zpool_errata_t *errata) { - zpool_status_t ret = check_status(config, B_TRUE, errata, NULL); + zpool_status_t ret = check_status(config, B_TRUE, errata, NULL, 0); if (ret >= NMSGID) *msgid = NULL; diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_util.c b/sys/contrib/openzfs/lib/libzfs/libzfs_util.c index 4adaab86ecec..26f5135dff62 100644 --- a/sys/contrib/openzfs/lib/libzfs/libzfs_util.c +++ b/sys/contrib/openzfs/lib/libzfs/libzfs_util.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,7 +23,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2020 Joyent, Inc. All rights reserved. - * Copyright (c) 2011, 2020 by Delphix. All rights reserved. + * Copyright (c) 2011, 2024 by Delphix. All rights reserved. * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com> * Copyright (c) 2017 Datto Inc. * Copyright (c) 2020 The FreeBSD Foundation @@ -68,6 +69,7 @@ * as necessary. */ #define URI_REGEX "^\\([A-Za-z][A-Za-z0-9+.\\-]*\\):" +#define STR_NUMS "0123456789" int libzfs_errno(libzfs_handle_t *hdl) @@ -170,6 +172,8 @@ libzfs_error_description(libzfs_handle_t *hdl) return (dgettext(TEXT_DOMAIN, "I/O error")); case EZFS_INTR: return (dgettext(TEXT_DOMAIN, "signal received")); + case EZFS_CKSUM: + return (dgettext(TEXT_DOMAIN, "insufficient replicas")); case EZFS_ISSPARE: return (dgettext(TEXT_DOMAIN, "device is reserved as a hot " "spare")); @@ -241,10 +245,20 @@ libzfs_error_description(libzfs_handle_t *hdl) "into a new one")); case EZFS_SCRUB_PAUSED: return (dgettext(TEXT_DOMAIN, "scrub is paused; " - "use 'zpool scrub' to resume")); + "use 'zpool scrub' to resume scrub")); + case EZFS_SCRUB_PAUSED_TO_CANCEL: + return (dgettext(TEXT_DOMAIN, "scrub is paused; " + "use 'zpool scrub' to resume or 'zpool scrub -s' to " + "cancel scrub")); case EZFS_SCRUBBING: return (dgettext(TEXT_DOMAIN, "currently scrubbing; " - "use 'zpool scrub -s' to cancel current scrub")); + "use 'zpool scrub -s' to cancel scrub")); + case EZFS_ERRORSCRUBBING: + return (dgettext(TEXT_DOMAIN, "currently error scrubbing; " + "use 'zpool scrub -s' to cancel error scrub")); + case EZFS_ERRORSCRUB_PAUSED: + return (dgettext(TEXT_DOMAIN, "error scrub is paused; " + "use 'zpool scrub -e' to resume error scrub")); case EZFS_NO_SCRUB: return (dgettext(TEXT_DOMAIN, "there is no active scrub")); case EZFS_DIFF: @@ -302,6 +316,14 @@ libzfs_error_description(libzfs_handle_t *hdl) case EZFS_NOT_USER_NAMESPACE: return (dgettext(TEXT_DOMAIN, "the provided file " "was not a user namespace file")); + case EZFS_RESUME_EXISTS: + return (dgettext(TEXT_DOMAIN, "Resuming recv on existing " + "dataset without force")); + case EZFS_RAIDZ_EXPAND_IN_PROGRESS: + return (dgettext(TEXT_DOMAIN, "raidz expansion in progress")); + case EZFS_ASHIFT_MISMATCH: + return (dgettext(TEXT_DOMAIN, "adding devices with " + "different physical sector sizes is not allowed")); case EZFS_UNKNOWN: return (dgettext(TEXT_DOMAIN, "unknown error")); default: @@ -396,6 +418,10 @@ zfs_common_error(libzfs_handle_t *hdl, int error, const char *fmt, case EINTR: zfs_verror(hdl, EZFS_INTR, fmt, ap); return (-1); + + case ECKSUM: + zfs_verror(hdl, EZFS_CKSUM, fmt, ap); + return (-1); } return (0); @@ -492,7 +518,7 @@ zfs_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...) zfs_verror(hdl, EZFS_NOT_USER_NAMESPACE, fmt, ap); break; default: - zfs_error_aux(hdl, "%s", strerror(error)); + zfs_error_aux(hdl, "%s", zfs_strerror(error)); zfs_verror(hdl, EZFS_UNKNOWN, fmt, ap); break; } @@ -679,7 +705,7 @@ zpool_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...) case ENOSPC: case EDQUOT: zfs_verror(hdl, EZFS_NOSPC, fmt, ap); - return (-1); + break; case EAGAIN: zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, @@ -744,8 +770,19 @@ zpool_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...) case ZFS_ERR_IOC_ARG_BADTYPE: zfs_verror(hdl, EZFS_IOC_NOTSUPPORTED, fmt, ap); break; + case ZFS_ERR_RAIDZ_EXPAND_IN_PROGRESS: + zfs_verror(hdl, EZFS_RAIDZ_EXPAND_IN_PROGRESS, fmt, ap); + break; + case ZFS_ERR_ASHIFT_MISMATCH: + zfs_verror(hdl, EZFS_ASHIFT_MISMATCH, fmt, ap); + break; + case ZFS_ERR_TOO_MANY_SITOUTS: + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "too many disks " + "already sitting out")); + zfs_verror(hdl, EZFS_BUSY, fmt, ap); + break; default: - zfs_error_aux(hdl, "%s", strerror(error)); + zfs_error_aux(hdl, "%s", zfs_strerror(error)); zfs_verror(hdl, EZFS_UNKNOWN, fmt, ap); } @@ -753,6 +790,12 @@ zpool_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...) return (-1); } +int +zfs_ioctl(libzfs_handle_t *hdl, int request, zfs_cmd_t *zc) +{ + return (lzc_ioctl_fd(hdl->libzfs_fd, request, zc)); +} + /* * Display an out of memory error message and abort the current program. */ @@ -901,6 +944,7 @@ libzfs_run_process_impl(const char *path, char *argv[], char *env[], int flags, pid = fork(); if (pid == 0) { /* Child process */ + setpgid(0, 0); devnull_fd = open("/dev/null", O_WRONLY | O_CLOEXEC); if (devnull_fd < 0) @@ -1237,10 +1281,18 @@ zcmd_read_dst_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc, nvlist_t **nvlp) * ================================================================ */ +void +zcmd_print_json(nvlist_t *nvl) +{ + nvlist_print_json(stdout, nvl); + (void) putchar('\n'); + nvlist_free(nvl); +} + static void zprop_print_headers(zprop_get_cbdata_t *cbp, zfs_type_t type) { - zprop_list_t *pl = cbp->cb_proplist; + zprop_list_t *pl; int i; char *title; size_t len; @@ -1364,6 +1416,103 @@ zprop_print_headers(zprop_get_cbdata_t *cbp, zfs_type_t type) } /* + * Add property value and source to provided nvlist, according to + * settings in cb structure. Later to be printed in JSON format. + */ +int +zprop_nvlist_one_property(const char *propname, + const char *value, zprop_source_t sourcetype, const char *source, + const char *recvd_value, nvlist_t *nvl, boolean_t as_int) +{ + int ret = 0; + nvlist_t *src_nv, *prop; + boolean_t all_numeric = strspn(value, STR_NUMS) == strlen(value); + src_nv = prop = NULL; + + if ((nvlist_alloc(&prop, NV_UNIQUE_NAME, 0) != 0) || + (nvlist_alloc(&src_nv, NV_UNIQUE_NAME, 0) != 0)) { + ret = -1; + goto err; + } + + if (as_int && all_numeric) { + uint64_t val; + sscanf(value, "%lld", (u_longlong_t *)&val); + if (nvlist_add_uint64(prop, "value", val) != 0) { + ret = -1; + goto err; + } + } else { + if (nvlist_add_string(prop, "value", value) != 0) { + ret = -1; + goto err; + } + } + + switch (sourcetype) { + case ZPROP_SRC_NONE: + if (nvlist_add_string(src_nv, "type", "NONE") != 0 || + (nvlist_add_string(src_nv, "data", "-") != 0)) { + ret = -1; + goto err; + } + break; + case ZPROP_SRC_DEFAULT: + if (nvlist_add_string(src_nv, "type", "DEFAULT") != 0 || + (nvlist_add_string(src_nv, "data", "-") != 0)) { + ret = -1; + goto err; + } + break; + case ZPROP_SRC_LOCAL: + if (nvlist_add_string(src_nv, "type", "LOCAL") != 0 || + (nvlist_add_string(src_nv, "data", "-") != 0)) { + ret = -1; + goto err; + } + break; + case ZPROP_SRC_TEMPORARY: + if (nvlist_add_string(src_nv, "type", "TEMPORARY") != 0 || + (nvlist_add_string(src_nv, "data", "-") != 0)) { + ret = -1; + goto err; + } + break; + case ZPROP_SRC_INHERITED: + if (nvlist_add_string(src_nv, "type", "INHERITED") != 0 || + (nvlist_add_string(src_nv, "data", source) != 0)) { + ret = -1; + goto err; + } + break; + case ZPROP_SRC_RECEIVED: + if (nvlist_add_string(src_nv, "type", "RECEIVED") != 0 || + (nvlist_add_string(src_nv, "data", + (recvd_value == NULL ? "-" : recvd_value)) != 0)) { + ret = -1; + goto err; + } + break; + default: + assert(!"unhandled zprop_source_t"); + if (nvlist_add_string(src_nv, "type", + "unhandled zprop_source_t") != 0) { + ret = -1; + goto err; + } + } + if ((nvlist_add_nvlist(prop, "source", src_nv) != 0) || + (nvlist_add_nvlist(nvl, propname, prop)) != 0) { + ret = -1; + goto err; + } +err: + nvlist_free(src_nv); + nvlist_free(prop); + return (ret); +} + +/* * Display a single line of output, according to the settings in the callback * structure. */ @@ -1454,6 +1603,26 @@ zprop_print_one_property(const char *name, zprop_get_cbdata_t *cbp, (void) printf("\n"); } +int +zprop_collect_property(const char *name, zprop_get_cbdata_t *cbp, + const char *propname, const char *value, zprop_source_t sourcetype, + const char *source, const char *recvd_value, nvlist_t *nvl) +{ + if (cbp->cb_json) { + if ((sourcetype & cbp->cb_sources) == 0) + return (0); + else { + return (zprop_nvlist_one_property(propname, value, + sourcetype, source, recvd_value, nvl, + cbp->cb_json_as_int)); + } + } else { + zprop_print_one_property(name, cbp, + propname, value, sourcetype, source, recvd_value); + return (0); + } +} + /* * Given a numeric suffix, convert the value into a number of bits that the * resulting value must be shifted. @@ -1462,15 +1631,17 @@ static int str2shift(libzfs_handle_t *hdl, const char *buf) { const char *ends = "BKMGTPEZ"; - int i; + int i, len; if (buf[0] == '\0') return (0); - for (i = 0; i < strlen(ends); i++) { + + len = strlen(ends); + for (i = 0; i < len; i++) { if (toupper(buf[0]) == ends[i]) break; } - if (i == strlen(ends)) { + if (i == len) { if (hdl) zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "invalid numeric suffix '%s'"), buf); @@ -1586,13 +1757,13 @@ zfs_nicestrtonum(libzfs_handle_t *hdl, const char *value, uint64_t *num) */ int zprop_parse_value(libzfs_handle_t *hdl, nvpair_t *elem, int prop, - zfs_type_t type, nvlist_t *ret, char **svalp, uint64_t *ivalp, + zfs_type_t type, nvlist_t *ret, const char **svalp, uint64_t *ivalp, const char *errbuf) { data_type_t datatype = nvpair_type(elem); zprop_type_t proptype; const char *propname; - char *value; + const char *value; boolean_t isnone = B_FALSE; boolean_t isauto = B_FALSE; int err = 0; @@ -1661,6 +1832,16 @@ zprop_parse_value(libzfs_handle_t *hdl, nvpair_t *elem, int prop, "use 'none' to disable quota/refquota")); goto error; } + /* + * Pool dedup table quota; force use of 'none' instead of 0 + */ + if ((type & ZFS_TYPE_POOL) && *ivalp == 0 && + (!isnone && !isauto) && + prop == ZPOOL_PROP_DEDUP_TABLE_QUOTA) { + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "use 'none' to disable ddt table quota")); + goto error; + } /* * Special handling for "*_limit=none". In this case it's not @@ -1673,6 +1854,20 @@ zprop_parse_value(libzfs_handle_t *hdl, nvpair_t *elem, int prop, } /* + * Special handling for "checksum_*=none". In this case it's not + * 0 but UINT64_MAX. + */ + if ((type & ZFS_TYPE_VDEV) && isnone && + (prop == VDEV_PROP_CHECKSUM_N || + prop == VDEV_PROP_CHECKSUM_T || + prop == VDEV_PROP_IO_N || + prop == VDEV_PROP_IO_T || + prop == VDEV_PROP_SLOW_IO_N || + prop == VDEV_PROP_SLOW_IO_T)) { + *ivalp = UINT64_MAX; + } + + /* * Special handling for setting 'refreservation' to 'auto'. Use * UINT64_MAX to tell the caller to use zfs_fix_auto_resv(). * 'auto' is only allowed on volumes. @@ -1688,6 +1883,10 @@ zprop_parse_value(libzfs_handle_t *hdl, nvpair_t *elem, int prop, } *ivalp = UINT64_MAX; break; + case ZPOOL_PROP_DEDUP_TABLE_QUOTA: + ASSERT(type & ZFS_TYPE_POOL); + *ivalp = UINT64_MAX; + break; default: zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "'auto' is invalid value for '%s'"), @@ -1753,6 +1952,7 @@ addlist(libzfs_handle_t *hdl, const char *propname, zprop_list_t **listp, * a user-defined property. */ if (prop == ZPROP_USERPROP && ((type == ZFS_TYPE_POOL && + !zfs_prop_user(propname) && !zpool_prop_feature(propname) && !zpool_prop_unsupported(propname)) || ((type == ZFS_TYPE_DATASET) && !zfs_prop_user(propname) && @@ -1931,7 +2131,7 @@ zfs_version_print(void) char *kver = zfs_version_kernel(); if (kver == NULL) { fprintf(stderr, "zfs_version_kernel() failed: %s\n", - strerror(errno)); + zfs_strerror(errno)); return (-1); } @@ -1941,10 +2141,38 @@ zfs_version_print(void) } /* + * Returns an nvlist with both zfs userland and kernel versions. + * Returns NULL on error. + */ +nvlist_t * +zfs_version_nvlist(void) +{ + nvlist_t *nvl; + char kmod_ver[64]; + if (nvlist_alloc(&nvl, NV_UNIQUE_NAME, 0) != 0) + return (NULL); + if (nvlist_add_string(nvl, "userland", ZFS_META_ALIAS) != 0) + goto err; + char *kver = zfs_version_kernel(); + if (kver == NULL) { + fprintf(stderr, "zfs_version_kernel() failed: %s\n", + zfs_strerror(errno)); + goto err; + } + (void) snprintf(kmod_ver, 64, "zfs-kmod-%s", kver); + if (nvlist_add_string(nvl, "kernel", kmod_ver) != 0) + goto err; + return (nvl); +err: + nvlist_free(nvl); + return (NULL); +} + +/* * Return 1 if the user requested ANSI color output, and our terminal supports * it. Return 0 for no color. */ -static int +int use_color(void) { static int use_color = -1; @@ -1990,10 +2218,11 @@ use_color(void) } /* - * color_start() and color_end() are used for when you want to colorize a block - * of text. For example: + * The functions color_start() and color_end() are used for when you want + * to colorize a block of text. * - * color_start(ANSI_RED_FG) + * For example: + * color_start(ANSI_RED) * printf("hello"); * printf("world"); * color_end(); @@ -2001,18 +2230,25 @@ use_color(void) void color_start(const char *color) { - if (use_color()) + if (color && use_color()) { fputs(color, stdout); + fflush(stdout); + } } void color_end(void) { - if (use_color()) + if (use_color()) { fputs(ANSI_RESET, stdout); + fflush(stdout); + } + } -/* printf() with a color. If color is NULL, then do a normal printf. */ +/* + * printf() with a color. If color is NULL, then do a normal printf. + */ int printf_color(const char *color, const char *format, ...) { @@ -2031,3 +2267,196 @@ printf_color(const char *color, const char *format, ...) return (rc); } + +/* PATH + 5 env vars + a NULL entry = 7 */ +#define ZPOOL_VDEV_SCRIPT_ENV_COUNT 7 + +/* + * There's a few places where ZFS will call external scripts (like the script + * in zpool.d/ and `zfs_prepare_disk`). These scripts are called with a + * reduced $PATH, and some vdev specific environment vars set. This function + * will allocate an populate the environment variable array that is passed to + * these scripts. The user must free the arrays with zpool_vdev_free_env() when + * they are done. + * + * The following env vars will be set (but value could be blank): + * + * POOL_NAME + * VDEV_PATH + * VDEV_UPATH + * VDEV_ENC_SYSFS_PATH + * + * In addition, you can set an optional environment variable named 'opt_key' + * to 'opt_val' if you want. + * + * Returns allocated env[] array on success, NULL otherwise. + */ +char ** +zpool_vdev_script_alloc_env(const char *pool_name, + const char *vdev_path, const char *vdev_upath, + const char *vdev_enc_sysfs_path, const char *opt_key, const char *opt_val) +{ + char **env = NULL; + int rc; + + env = calloc(ZPOOL_VDEV_SCRIPT_ENV_COUNT, sizeof (*env)); + if (!env) + return (NULL); + + env[0] = strdup("PATH=/bin:/sbin:/usr/bin:/usr/sbin"); + if (!env[0]) + goto error; + + /* Setup our custom environment variables */ + rc = asprintf(&env[1], "POOL_NAME=%s", pool_name ? pool_name : ""); + if (rc == -1) { + env[1] = NULL; + goto error; + } + + rc = asprintf(&env[2], "VDEV_PATH=%s", vdev_path ? vdev_path : ""); + if (rc == -1) { + env[2] = NULL; + goto error; + } + + rc = asprintf(&env[3], "VDEV_UPATH=%s", vdev_upath ? vdev_upath : ""); + if (rc == -1) { + env[3] = NULL; + goto error; + } + + rc = asprintf(&env[4], "VDEV_ENC_SYSFS_PATH=%s", + vdev_enc_sysfs_path ? vdev_enc_sysfs_path : ""); + if (rc == -1) { + env[4] = NULL; + goto error; + } + + if (opt_key != NULL) { + rc = asprintf(&env[5], "%s=%s", opt_key, + opt_val ? opt_val : ""); + if (rc == -1) { + env[5] = NULL; + goto error; + } + } + + return (env); + +error: + for (int i = 0; i < ZPOOL_VDEV_SCRIPT_ENV_COUNT; i++) + free(env[i]); + + free(env); + + return (NULL); +} + +/* + * Free the env[] array that was allocated by zpool_vdev_script_alloc_env(). + */ +void +zpool_vdev_script_free_env(char **env) +{ + for (int i = 0; i < ZPOOL_VDEV_SCRIPT_ENV_COUNT; i++) + free(env[i]); + + free(env); +} + +/* + * Prepare a disk by (optionally) running a program before labeling the disk. + * This can be useful for installing disk firmware or doing some pre-flight + * checks on the disk before it becomes part of the pool. The program run is + * located at ZFSEXECDIR/zfs_prepare_disk + * (E.x: /usr/local/libexec/zfs/zfs_prepare_disk). + * + * Return 0 on success, non-zero on failure. + */ +int +zpool_prepare_disk(zpool_handle_t *zhp, nvlist_t *vdev_nv, + const char *prepare_str, char **lines[], int *lines_cnt) +{ + const char *script_path = ZFSEXECDIR "/zfs_prepare_disk"; + const char *pool_name; + int rc = 0; + + /* Path to script and a NULL entry */ + char *argv[2] = {(char *)script_path}; + char **env = NULL; + const char *path = NULL, *enc_sysfs_path = NULL; + char *upath; + *lines_cnt = 0; + + if (access(script_path, X_OK) != 0) { + /* No script, nothing to do */ + return (0); + } + + (void) nvlist_lookup_string(vdev_nv, ZPOOL_CONFIG_PATH, &path); + (void) nvlist_lookup_string(vdev_nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH, + &enc_sysfs_path); + + upath = zfs_get_underlying_path(path); + pool_name = zhp ? zpool_get_name(zhp) : NULL; + + env = zpool_vdev_script_alloc_env(pool_name, path, upath, + enc_sysfs_path, "VDEV_PREPARE", prepare_str); + + free(upath); + + if (env == NULL) { + return (ENOMEM); + } + + rc = libzfs_run_process_get_stdout(script_path, argv, env, lines, + lines_cnt); + + zpool_vdev_script_free_env(env); + + return (rc); +} + +/* + * Optionally run a script and then label a disk. The script can be used to + * prepare a disk for inclusion into the pool. For example, it might update + * the disk's firmware or check its health. + * + * The 'name' provided is the short name, stripped of any leading + * /dev path, and is passed to zpool_label_disk. vdev_nv is the nvlist for + * the vdev. prepare_str is a string that gets passed as the VDEV_PREPARE + * env variable to the script. + * + * The following env vars are passed to the script: + * + * POOL_NAME: The pool name (blank during zpool create) + * VDEV_PREPARE: Reason why the disk is being prepared for inclusion: + * "create", "add", "replace", or "autoreplace" + * VDEV_PATH: Path to the disk + * VDEV_UPATH: One of the 'underlying paths' to the disk. This is + * useful for DM devices. + * VDEV_ENC_SYSFS_PATH: Path to the disk's enclosure sysfs path, if available. + * + * Note, some of these values can be blank. + * + * Return 0 on success, non-zero otherwise. + */ +int +zpool_prepare_and_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, + const char *name, nvlist_t *vdev_nv, const char *prepare_str, + char **lines[], int *lines_cnt) +{ + int rc; + char vdev_path[MAXPATHLEN]; + (void) snprintf(vdev_path, sizeof (vdev_path), "%s/%s", DISK_ROOT, + name); + + /* zhp will be NULL when creating a pool */ + rc = zpool_prepare_disk(zhp, vdev_nv, prepare_str, lines, lines_cnt); + if (rc != 0) + return (rc); + + rc = zpool_label_disk(hdl, zhp, name); + return (rc); +} 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 b08b7e2c439b..e772e3e12262 100644 --- a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c +++ b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -38,7 +39,8 @@ #define ZFS_KMOD "openzfs" #endif - +#ifndef HAVE_EXECVPE +/* FreeBSD prior to 15 lacks execvpe */ static int execvPe(const char *name, const char *path, char * const *argv, char * const *envp) @@ -192,6 +194,7 @@ execvpe(const char *name, char * const argv[], char * const envp[]) return (execvPe(name, path, argv, envp)); } +#endif /* !HAVE_EXECVPE */ static __thread char errbuf[ERRBUFLEN]; @@ -204,21 +207,17 @@ libzfs_error_init(int error) if (modfind("zfs") < 0) { size_t len = snprintf(msg, msglen, dgettext(TEXT_DOMAIN, "Failed to load %s module: "), ZFS_KMOD); + if (len >= msglen) + len = msglen - 1; msg += len; msglen -= len; } - (void) snprintf(msg, msglen, "%s", strerror(error)); + (void) snprintf(msg, msglen, "%s", zfs_strerror(error)); return (errbuf); } -int -zfs_ioctl(libzfs_handle_t *hdl, int request, zfs_cmd_t *zc) -{ - return (lzc_ioctl_fd(hdl->libzfs_fd, request, zc)); -} - /* * Verify the required ZFS_DEV device is available and optionally attempt * to load the ZFS modules. Under normal circumstances the modules diff --git a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_zmount.c b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_zmount.c index 6a26cae1e090..bc7d68b17eb1 100644 --- a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_zmount.c +++ b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_zmount.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2006 Pawel Jakub Dawidek <pjd@FreeBSD.org> * All rights reserved. @@ -28,9 +29,6 @@ * This file implements Solaris compatible zmount() function. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/mount.h> #include <sys/uio.h> @@ -73,33 +71,30 @@ build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, *iovlen = ++i; } -static int -do_mount_(const char *spec, const char *dir, int mflag, - char *dataptr, int datalen, const char *optptr, int optlen) +int +do_mount(zfs_handle_t *zhp, const char *mntpt, const char *opts, int flags) { struct iovec *iov; char *optstr, *p, *tofree; int iovlen, rv; + const char *spec = zfs_get_name(zhp); assert(spec != NULL); - assert(dir != NULL); - assert(dataptr == NULL), (void) dataptr; - assert(datalen == 0), (void) datalen; - assert(optptr != NULL); - assert(optlen > 0), (void) optlen; + assert(mntpt != NULL); + assert(opts != NULL); - tofree = optstr = strdup(optptr); + tofree = optstr = strdup(opts); assert(optstr != NULL); iov = NULL; iovlen = 0; if (strstr(optstr, MNTOPT_REMOUNT) != NULL) build_iovec(&iov, &iovlen, "update", NULL, 0); - if (mflag & MS_RDONLY) + if (flags & MS_RDONLY) build_iovec(&iov, &iovlen, "ro", NULL, 0); build_iovec(&iov, &iovlen, "fstype", __DECONST(char *, MNTTYPE_ZFS), (size_t)-1); - build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, dir), + build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, mntpt), (size_t)-1); build_iovec(&iov, &iovlen, "from", __DECONST(char *, spec), (size_t)-1); while ((p = strsep(&optstr, ",/")) != NULL) @@ -109,14 +104,7 @@ do_mount_(const char *spec, const char *dir, int mflag, if (rv < 0) return (errno); return (rv); -} - -int -do_mount(zfs_handle_t *zhp, const char *mntpt, const char *opts, int flags) -{ - return (do_mount_(zfs_get_name(zhp), mntpt, flags, NULL, 0, - opts, sizeof (mntpt))); } int diff --git a/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_mount_os.c b/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_mount_os.c index 299d3a66e67e..585d22d9e5b3 100644 --- a/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_mount_os.c +++ b/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_mount_os.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -84,6 +85,13 @@ static const option_map_t option_map[] = { { MNTOPT_ACL, MS_POSIXACL, ZS_COMMENT }, { MNTOPT_NOACL, MS_COMMENT, ZS_COMMENT }, { MNTOPT_POSIXACL, MS_POSIXACL, ZS_COMMENT }, + /* + * Case sensitive options are just listed here to silently + * ignore the error if passed with zfs mount command. + */ + { MNTOPT_CASESENSITIVE, MS_COMMENT, ZS_COMMENT }, + { MNTOPT_CASEINSENSITIVE, MS_COMMENT, ZS_COMMENT }, + { MNTOPT_CASEMIXED, MS_COMMENT, ZS_COMMENT }, #ifdef MS_NOATIME { MNTOPT_NOATIME, MS_NOATIME, ZS_COMMENT }, { MNTOPT_ATIME, MS_COMMENT, ZS_COMMENT }, diff --git a/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_pool_os.c b/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_pool_os.c index b135e0146962..aef169a3f880 100644 --- a/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_pool_os.c +++ b/sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_pool_os.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -96,7 +97,7 @@ zpool_relabel_disk(libzfs_handle_t *hdl, const char *path, const char *msg) static int read_efi_label(nvlist_t *config, diskaddr_t *sb) { - char *path; + const char *path; int fd; char diskname[MAXPATHLEN]; int err = -1; @@ -268,11 +269,22 @@ zpool_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, const char *name) if (start_block == MAXOFFSET_T) start_block = NEW_START_BLOCK; slice_size -= start_block; - slice_size = P2ALIGN(slice_size, PARTITION_END_ALIGNMENT); + slice_size = P2ALIGN_TYPED(slice_size, PARTITION_END_ALIGNMENT, + uint64_t); vtoc->efi_parts[0].p_start = start_block; vtoc->efi_parts[0].p_size = slice_size; + if (vtoc->efi_parts[0].p_size * vtoc->efi_lbasize < SPA_MINDEVSIZE) { + (void) close(fd); + efi_free(vtoc); + + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot " + "label '%s': partition would be less than the minimum " + "device size (64M)"), path); + return (zfs_error(hdl, EZFS_LABELFAILED, errbuf)); + } + /* * Why we use V_USR: V_BACKUP confuses users, and is considered * disposable by some EFI utilities (since EFI doesn't have a backup 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 712f8094755c..651d407b1884 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 @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -52,12 +53,6 @@ #define ZDIFF_SHARESDIR "/.zfs/shares/" -int -zfs_ioctl(libzfs_handle_t *hdl, int request, zfs_cmd_t *zc) -{ - return (ioctl(hdl->libzfs_fd, request, zc)); -} - const char * libzfs_error_init(int error) { @@ -83,6 +78,38 @@ libzfs_error_init(int error) } } +static int +in_container(void) +{ + char buffer[4096]; + ssize_t count; + int fd; + + if (access("/run/systemd/container", R_OK) == 0) + return (1); + + fd = open("/proc/1/cgroup", O_RDONLY); + if (fd == -1) + return (0); + + count = read(fd, buffer, sizeof (buffer) - 1); + close(fd); + + if (count <= 0) + return (0); + + buffer[count] = '\0'; + + if (strstr(buffer, "docker") || + strstr(buffer, "containerd") || + strstr(buffer, "kubepods") || + strstr(buffer, "lxc")) { + return (1); + } + + return (0); +} + /* * zfs(4) is loaded by udev if there's a fstype=zfs device present, * but if there isn't, load them automatically; @@ -109,6 +136,11 @@ libzfs_load_module(void) const char *timeout_str = getenv("ZFS_MODULE_TIMEOUT"); int seconds = 10; + + /* Set timeout to zero if inside of a container */ + if (in_container()) + seconds = 0; + if (timeout_str) seconds = MIN(strtol(timeout_str, NULL, 0), 600); struct itimerspec timeout = {.it_value.tv_sec = MAX(seconds, 0)}; @@ -145,8 +177,8 @@ libzfs_load_module(void) if (pfds[0].revents & POLLIN) { verify(read(ino, ev, evsz) > sizeof (struct inotify_event)); - if (strcmp(ev->name, &ZFS_DEV[sizeof (ZFS_DEVDIR)]) - == 0) { + if (strncmp(ev->name, &ZFS_DEV[sizeof (ZFS_DEVDIR)], + ev->len) == 0) { ret = 0; break; } diff --git a/sys/contrib/openzfs/lib/libzfs_core/Makefile.am b/sys/contrib/openzfs/lib/libzfs_core/Makefile.am index d1c6fb86d186..42ac6081cc99 100644 --- a/sys/contrib/openzfs/lib/libzfs_core/Makefile.am +++ b/sys/contrib/openzfs/lib/libzfs_core/Makefile.am @@ -1,18 +1,21 @@ libzfs_core_la_CFLAGS = $(AM_CFLAGS) $(LIBRARY_CFLAGS) libzfs_core_la_CFLAGS += -fvisibility=hidden +libzfs_core_la_CPPFLAGS = $(AM_CPPFLAGS) +libzfs_core_la_CPPFLAGS += -I$(srcdir)/%D% + lib_LTLIBRARIES += libzfs_core.la CPPCHECKTARGETS += libzfs_core.la libzfs_core_la_SOURCES = \ - %D%/libzfs_core.c + %D%/libzfs_core.c \ + %D%/libzfs_core_impl.h if BUILD_LINUX libzfs_core_la_SOURCES += \ %D%/os/linux/libzfs_core_ioctl.c endif -libzfs_core_la_CPPFLAGS = $(AM_CPPFLAGS) if BUILD_FREEBSD libzfs_core_la_CPPFLAGS += -Iinclude/os/freebsd/zfs diff --git a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi index fae98469a04f..238151d432f1 100644 --- a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi +++ b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi @@ -1,12 +1,14 @@ <abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='libzfs_core.so.3'> <elf-needed> <dependency name='libnvpair.so.3'/> - <dependency name='libpthread.so.0'/> + <dependency name='libunwind.so.8'/> <dependency name='libc.so.6'/> <dependency name='ld-linux-x86-64.so.2'/> </elf-needed> <elf-function-symbols> <elf-symbol name='_sol_getmntent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='_system_delay_taskq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='_system_taskq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_add_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -127,12 +129,41 @@ <elf-symbol name='atomic_swap_uint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_swap_ulong' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='atomic_swap_ushort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetgid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetgroups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetngroups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetruid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='crgetuid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_broadcast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_timedwait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_timedwait_hires' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='cv_wait_sig' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='format_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='get_system_hostid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='get_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getexecname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getextmntent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getmntany' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='getzoneid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_asprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_cache_reap_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_scnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kmem_vasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='ksid_lookupdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='ksiddomain_rele' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='kstat_set_raw_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_assertf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_backtrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='libspl_physmem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libspl_set_assert_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libzfs_core_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='libzfs_core_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -160,6 +191,7 @@ <elf-symbol name='lzc_channel_program_nosync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_clone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='lzc_ddt_prune' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_destroy_bookmarks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_destroy_snaps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -168,6 +200,7 @@ <elf-symbol name='lzc_get_bookmarks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_get_bootenv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_get_holds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='lzc_get_props' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_get_vdev_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_hold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_initialize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -175,18 +208,21 @@ <elf-symbol name='lzc_load_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_pool_checkpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_pool_checkpoint_discard' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='lzc_pool_prefetch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_promote' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_receive_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_receive_resumable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_receive_with_cmdprops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_receive_with_header' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='lzc_receive_with_heal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_redact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_reopen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_rollback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_rollback_to' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='lzc_scrub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_send_redacted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzc_send_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> @@ -208,41 +244,94 @@ <elf-symbol name='membar_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='membar_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='membar_producer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='membar_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='mkdirp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_enter_check_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='mutex_tryenter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='p0' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='print_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='procfs_list_uninstall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_force_pseudo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_get_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_get_pseudo_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='random_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_tryenter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='rw_tryupgrade' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spl_fstrans_mark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='spl_fstrans_unmark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='spl_pagesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='strlcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='system_taskq_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='system_taskq_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_cancel_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_create_synced' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_dispatch_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_empty_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_init_ent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_member' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_of_curthread' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='taskq_wait_outstanding' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='utsname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> + <elf-symbol name='zk_thread_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> </elf-function-symbols> - <abi-instr address-size='64' path='assert.c' language='LANG_C99'> - <type-decl name='variadic parameter type' id='2c1145c5'/> - <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'/> + <abi-instr address-size='64' path='lib/libspl/assert.c' language='LANG_C99'> + <typedef-decl name='__pid_t' type-id='95e97e5e' id='3629bad8'/> + <function-decl name='libspl_backtrace' mangled-name='libspl_backtrace' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_backtrace'> + <parameter type-id='95e97e5e'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> - <parameter type-id='80f4b756' name='file'/> - <parameter type-id='80f4b756' name='func'/> - <parameter type-id='95e97e5e' name='line'/> - <parameter type-id='80f4b756' name='format'/> + <function-decl name='abort' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='getpid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='__vfprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='gettid' visibility='default' binding='global' size-in-bits='64'> + <return type-id='3629bad8'/> + </function-decl> + <function-decl name='prctl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <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'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='atomic.c' language='LANG_C99'> - <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/> - <type-decl name='short int' size-in-bits='16' id='a2185560'/> - <type-decl name='signed char' size-in-bits='8' id='28577a57'/> - <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + <abi-instr address-size='64' path='lib/libspl/atomic.c' language='LANG_C99'> <typedef-decl name='ulong_t' type-id='7359adad' id='ee1f298e'/> <typedef-decl name='int8_t' type-id='2171a512' id='ee31ee44'/> - <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> <typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/> - <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/> <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/> - <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/> - <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/> <qualified-type-def type-id='149c6638' volatile='yes' id='5120c5f7'/> <pointer-type-def type-id='5120c5f7' size-in-bits='64' id='93977ae7'/> <qualified-type-def type-id='8f92235e' volatile='yes' id='430e0681'/> @@ -305,11 +394,6 @@ <parameter type-id='3ff5601b' name='bits'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='atomic_add_long' mangled-name='atomic_add_long' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_long'> - <parameter type-id='64698d33' name='target'/> - <parameter type-id='bd54fe1a' name='bits'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='atomic_sub_ptr' mangled-name='atomic_sub_ptr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_ptr'> <parameter type-id='fe09dd29' name='target'/> <parameter type-id='79a0948f' name='bits'/> @@ -330,11 +414,6 @@ <parameter type-id='3ff5601b' name='bits'/> <return type-id='48b5725f'/> </function-decl> - <function-decl name='atomic_sub_long' mangled-name='atomic_sub_long' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_long'> - <parameter type-id='64698d33' name='target'/> - <parameter type-id='bd54fe1a' name='bits'/> - <return type-id='48b5725f'/> - </function-decl> <function-decl name='atomic_or_8' mangled-name='atomic_or_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_8'> <parameter type-id='aa323ea4' name='target'/> <parameter type-id='b96825af' name='bits'/> @@ -572,13 +651,613 @@ <return type-id='48b5725f'/> </function-decl> <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='getexecname.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/backtrace.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='768' id='b80f3d9b'> + <subrange length='24' type-id='7359adad' id='fdd3342b'/> + </array-type-def> + <array-type-def dimensions='1' type-id='62f1140c' size-in-bits='128' id='bc19e735'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='22c546af' size-in-bits='1024' id='498c040b'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='4ea07cdb' size-in-bits='2048' id='4811c35e'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='de572c22' size-in-bits='1472' id='6d3c2f42'> + <subrange length='23' type-id='7359adad' id='fdd0f594'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='256' id='a133ec23'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='3a47d82b' size-in-bits='512' id='a13e797f'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'> + <subrange length='16' type-id='7359adad' id='848d0938'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'> + <subrange length='3' type-id='7359adad' id='56f209d2'/> + </array-type-def> + <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='64' id='3f30d495'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <array-type-def dimensions='1' type-id='73d941c6' size-in-bits='8128' id='dc70ec0b'> + <subrange length='127' type-id='7359adad' id='5ed08de5'/> + </array-type-def> + <class-decl name='__sigset_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='b9c97942' visibility='default' id='2616147f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__val' type-id='d2baa450' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='__sigset_t' type-id='2616147f' id='b9c97942'/> + <typedef-decl name='sigset_t' type-id='b9c97942' id='daf33c64'/> + <class-decl name='stack_t' size-in-bits='192' is-struct='yes' naming-typedef-id='ac5e685f' visibility='default' id='380f9954'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ss_sp' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ss_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ss_size' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/> + <typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/> + <class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='opaque' type-id='dc70ec0b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='unw_cursor_t' type-id='384a1f22' id='1203d35c'/> + <typedef-decl name='unw_context_t' type-id='190d09ef' id='8f527367'/> + <typedef-decl name='unw_word_t' type-id='9c313c2d' id='73d941c6'/> + <typedef-decl name='unw_tdep_context_t' type-id='c4daa689' id='190d09ef'/> + <typedef-decl name='greg_t' type-id='1eb56b1e' id='de572c22'/> + <typedef-decl name='gregset_t' type-id='6d3c2f42' id='a66f139c'/> + <class-decl name='_libc_fpxreg' size-in-bits='128' is-struct='yes' visibility='default' id='22c546af'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='significand' type-id='3f30d495' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='exponent' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='80'> + <var-decl name='__glibc_reserved1' type-id='ff2536e2' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_xmmreg' size-in-bits='128' is-struct='yes' visibility='default' id='4ea07cdb'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='element' type-id='bc19e735' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='_libc_fpstate' size-in-bits='4096' is-struct='yes' visibility='default' id='81cbe5ca'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='cwd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='16'> + <var-decl name='swd' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='ftw' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='fop' type-id='253c2d2a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='rip' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='rdp' type-id='8910171f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mxcsr' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='mxcr_mask' type-id='62f1140c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_st' type-id='498c040b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_xmm' type-id='4811c35e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3328'> + <var-decl name='__glibc_reserved1' type-id='b80f3d9b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='fpregset_t' type-id='5b1ab9a8' id='6e5851bb'/> + <class-decl name='mcontext_t' size-in-bits='2048' is-struct='yes' naming-typedef-id='bacab071' visibility='default' id='76fab990'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gregs' type-id='a66f139c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='fpregs' type-id='6e5851bb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='__reserved1' type-id='a13e797f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='mcontext_t' type-id='76fab990' id='bacab071'/> + <class-decl name='ucontext_t' size-in-bits='7744' is-struct='yes' visibility='default' id='1ba65dc8'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='uc_flags' type-id='7359adad' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='uc_link' type-id='4ed508de' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='uc_stack' type-id='ac5e685f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='uc_mcontext' type-id='bacab071' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2368'> + <var-decl name='uc_sigmask' type-id='daf33c64' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='3392'> + <var-decl name='__fpregs_mem' type-id='81cbe5ca' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='7488'> + <var-decl name='__ssp' type-id='a133ec23' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ucontext_t' type-id='1ba65dc8' id='c4daa689'/> + <pointer-type-def type-id='81cbe5ca' size-in-bits='64' id='5b1ab9a8'/> + <pointer-type-def type-id='1ba65dc8' size-in-bits='64' id='4ed508de'/> + <pointer-type-def type-id='8f527367' size-in-bits='64' id='2e408b96'/> + <pointer-type-def type-id='1203d35c' size-in-bits='64' id='3946e4d1'/> + <pointer-type-def type-id='190d09ef' size-in-bits='64' id='3e0601f0'/> + <pointer-type-def type-id='73d941c6' size-in-bits='64' id='42f5faab'/> + <function-decl name='write' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + <function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='c53620f0'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='2e408b96'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_step' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_reg' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_ULx86_64_get_proc_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3946e4d1'/> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='42f5faab'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_Ux86_64_getcontext' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='3e0601f0'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/condvar.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> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32' id='8e0573fd'> + <subrange length='4' type-id='7359adad' id='16fe7105'/> + </array-type-def> + <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/> + <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/> + <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'> + <subrange length='2' type-id='7359adad' id='52efc4ef'/> + </array-type-def> + <typedef-decl name='kcondvar_t' type-id='62fab762' id='29dbc0dd'/> + <class-decl name='kmutex' size-in-bits='384' is-struct='yes' visibility='default' id='f1cacfe1'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='m_lock' type-id='7a6844eb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='m_owner' type-id='4051f5e7' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='kmutex_t' type-id='f1cacfe1' id='b9eccc8f'/> + <typedef-decl name='hrtime_t' type-id='1eb56b1e' id='cebdd548'/> + <union-decl name='__atomic_wide_counter' size-in-bits='64' naming-typedef-id='f3b40860' visibility='default' id='613ce450'> + <data-member access='public'> + <var-decl name='__value64' type-id='3a47d82b' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__value32' 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> + <typedef-decl name='__atomic_wide_counter' type-id='613ce450' id='f3b40860'/> + <union-decl name='pthread_condattr_t' size-in-bits='32' naming-typedef-id='836265dd' visibility='default' id='33dd3aad'> + <data-member access='public'> + <var-decl name='__size' type-id='8e0573fd' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='95e97e5e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_condattr_t' type-id='33dd3aad' id='836265dd'/> + <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='__wseq' type-id='f3b40860' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='__g1_start' type-id='f3b40860' 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> + <typedef-decl name='__clock_t' type-id='bd54fe1a' id='4d66c6d7'/> + <typedef-decl name='__suseconds_t' type-id='bd54fe1a' id='5b102a54'/> + <typedef-decl name='__clockid_t' type-id='95e97e5e' id='08f9a87a'/> + <typedef-decl name='clock_t' type-id='4d66c6d7' id='4c3a2c61'/> + <typedef-decl name='clockid_t' type-id='08f9a87a' id='a1c3b834'/> + <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' id='2a693ac3'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tv_usec' type-id='5b102a54' visibility='default'/> + </data-member> + </class-decl> + <qualified-type-def type-id='836265dd' const='yes' id='7d24c58d'/> + <pointer-type-def type-id='7d24c58d' size-in-bits='64' id='a7e325e5'/> + <qualified-type-def type-id='a7e325e5' restrict='yes' id='4c428e67'/> + <qualified-type-def type-id='a9c79a1f' const='yes' id='cd087e36'/> + <pointer-type-def type-id='cd087e36' size-in-bits='64' id='e05e8614'/> + <qualified-type-def type-id='e05e8614' restrict='yes' id='0be2e71c'/> + <pointer-type-def type-id='29dbc0dd' size-in-bits='64' id='068c4f7e'/> + <pointer-type-def type-id='b9eccc8f' size-in-bits='64' id='78830f38'/> + <pointer-type-def type-id='62fab762' size-in-bits='64' id='db285b03'/> + <qualified-type-def type-id='db285b03' restrict='yes' id='2a468b41'/> + <qualified-type-def type-id='18c91f9e' restrict='yes' id='6e745582'/> + <pointer-type-def type-id='a9c79a1f' size-in-bits='64' id='3d83ba87'/> + <pointer-type-def type-id='2a693ac3' size-in-bits='64' id='896f1b83'/> + <qualified-type-def type-id='896f1b83' restrict='yes' id='4bcf44c1'/> + <function-decl name='pthread_self' visibility='default' binding='global' size-in-bits='64'> + <return type-id='4051f5e7'/> + </function-decl> + <function-decl name='pthread_cond_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='4c428e67'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_signal' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_broadcast' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='db285b03'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_wait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='6e745582'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_cond_timedwait' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2a468b41'/> + <parameter type-id='6e745582'/> + <parameter type-id='0be2e71c'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='clock_gettime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a1c3b834'/> + <parameter type-id='3d83ba87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='gettimeofday' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4bcf44c1'/> + <parameter type-id='1b7446cd'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_init' mangled-name='cv_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_init'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='arg'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_destroy' mangled-name='cv_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_destroy'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_wait' mangled-name='cv_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_wait'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_wait_sig' mangled-name='cv_wait_sig' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_wait_sig'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_timedwait' mangled-name='cv_timedwait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_timedwait'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='4c3a2c61' name='abstime'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_timedwait_hires' mangled-name='cv_timedwait_hires' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_timedwait_hires'> + <parameter type-id='068c4f7e' name='cv'/> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='cebdd548' name='tim'/> + <parameter type-id='cebdd548' name='res'/> + <parameter type-id='95e97e5e' name='flag'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='cv_signal' mangled-name='cv_signal' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_signal'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='cv_broadcast' mangled-name='cv_broadcast' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cv_broadcast'> + <parameter type-id='068c4f7e' name='cv'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/cred.c' language='LANG_C99'> + <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd09'/> + <typedef-decl name='cred_t' type-id='6739dd09' id='a42f1a8f'/> + <typedef-decl name='gid_t' type-id='d94ec6d9' id='2bb2b96f'/> + <typedef-decl name='uid_t' type-id='cc5fcceb' id='354978ed'/> + <pointer-type-def type-id='a42f1a8f' size-in-bits='64' id='f89fcf80'/> + <pointer-type-def type-id='2bb2b96f' size-in-bits='64' id='b52814e6'/> + <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd09'/> + <function-decl name='crgetuid' mangled-name='crgetuid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetuid'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='354978ed'/> + </function-decl> + <function-decl name='crgetngroups' mangled-name='crgetngroups' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetngroups'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='crgetgroups' mangled-name='crgetgroups' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crgetgroups'> + <parameter type-id='f89fcf80' name='cr'/> + <return type-id='b52814e6'/> + </function-decl> + </abi-instr> + <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> + <function-decl name='getexecname_impl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <return type-id='79a0948f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/kmem.c' language='LANG_C99'> + <class-decl name='__va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='d5027220'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='gp_offset' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='fp_offset' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='overflow_arg_area' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='reg_save_area' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='fstrans_cookie_t' type-id='95e97e5e' id='059934c1'/> + <pointer-type-def type-id='d5027220' size-in-bits='64' id='b7f2d5e6'/> + <qualified-type-def type-id='26a90f95' restrict='yes' id='266fe297'/> + <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> + <qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/> + <function-decl name='__vasprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b7f2d5e6'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='kmem_vasprintf' mangled-name='kmem_vasprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_vasprintf'> + <parameter type-id='80f4b756' name='fmt'/> + <parameter type-id='b7f2d5e6' name='adx'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='kmem_asprintf' mangled-name='kmem_asprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_asprintf'> + <parameter type-id='80f4b756' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='kmem_scnprintf' mangled-name='kmem_scnprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_scnprintf'> + <parameter type-id='266fe297' name='str'/> + <parameter type-id='b59d7dce' name='size'/> + <parameter type-id='9d26089a' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='spl_fstrans_unmark' mangled-name='spl_fstrans_unmark' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spl_fstrans_unmark'> + <parameter type-id='059934c1' name='cookie'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='kmem_cache_reap_active' mangled-name='kmem_cache_reap_active' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_reap_active'> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/kstat.c' language='LANG_C99'> + <class-decl name='kstat' size-in-bits='448' is-struct='yes' visibility='default' id='5f5c9d88'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='ks_flags' type-id='d8bf0010' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='ks_data' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='ks_ndata' type-id='3502e3ff' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='ks_data_size' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='ks_update' type-id='8cf7b7e1' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='ks_private' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='ks_lock' type-id='eaa32e2f' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='kstat_t' type-id='5f5c9d88' id='dd12e024'/> + <typedef-decl name='__loff_t' type-id='724e4de6' id='00c9d214'/> + <typedef-decl name='loff_t' type-id='00c9d214' id='69bf7bee'/> + <pointer-type-def type-id='9d5d322a' size-in-bits='64' id='bbe97414'/> + <pointer-type-def type-id='05b3c714' size-in-bits='64' id='27cc5c36'/> + <pointer-type-def type-id='7a9ace65' size-in-bits='64' id='8cf7b7e1'/> + <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/> + <pointer-type-def type-id='dd12e024' size-in-bits='64' id='46e5e463'/> + <pointer-type-def type-id='527a97c5' size-in-bits='64' id='673f2af9'/> + <function-decl name='kstat_create' mangled-name='kstat_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_create'> + <parameter type-id='80f4b756' name='module'/> + <parameter type-id='95e97e5e' name='instance'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='80f4b756' name='class'/> + <parameter type-id='d8bf0010' name='type'/> + <parameter type-id='ee1f298e' name='ndata'/> + <parameter type-id='d8bf0010' name='ks_flag'/> + <return type-id='46e5e463'/> + </function-decl> + <function-decl name='kstat_install' mangled-name='kstat_install' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_install'> + <parameter type-id='46e5e463' name='ksp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='kstat_set_raw_ops' mangled-name='kstat_set_raw_ops' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstat_set_raw_ops'> + <parameter type-id='46e5e463' name='ksp'/> + <parameter type-id='bbe97414' name='headers'/> + <parameter type-id='27cc5c36' name='data'/> + <parameter type-id='673f2af9' name='addr'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='9d5d322a'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='05b3c714'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='7a9ace65'> + <parameter type-id='0e87f9be'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='527a97c5'> + <parameter type-id='46e5e463'/> + <parameter type-id='69bf7bee'/> + <return type-id='eaa32e2f'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/libspl.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'> + <subrange length='65' type-id='7359adad' id='b50e2e4a'/> + </array-type-def> + <typedef-decl name='utsname_t' type-id='414a2ac6' id='5278297a'/> + <class-decl name='utsname' size-in-bits='3120' is-struct='yes' visibility='default' id='414a2ac6'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='sysname' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='520'> + <var-decl name='nodename' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='release' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1560'> + <var-decl name='version' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2080'> + <var-decl name='machine' type-id='5ddd38d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2600'> + <var-decl name='domainname' type-id='5ddd38d2' visibility='default'/> + </data-member> + </class-decl> + <pointer-type-def type-id='414a2ac6' size-in-bits='64' id='a6724cec'/> + <pointer-type-def type-id='5278297a' size-in-bits='64' id='5c7868ad'/> + <function-decl name='sysconf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='uname' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6724cec'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='libspl_physmem' mangled-name='libspl_physmem' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_physmem'> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='utsname' mangled-name='utsname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utsname'> + <return type-id='5c7868ad'/> + </function-decl> + <function-decl name='libspl_init' mangled-name='libspl_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='libspl_fini' mangled-name='libspl_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_fini'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_init' mangled-name='random_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_fini' mangled-name='random_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_fini'> + <return type-id='48b5725f'/> + </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'> @@ -589,18 +1268,14 @@ <var-decl name='prev' type-id='b03eadb4' visibility='default'/> </data-member> </class-decl> - <class-decl name='list' size-in-bits='256' is-struct='yes' visibility='default' id='e824dae9'> + <class-decl name='list' size-in-bits='192' is-struct='yes' visibility='default' id='e824dae9'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='list_size' type-id='b59d7dce' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> <var-decl name='list_offset' type-id='b59d7dce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='128'> + <data-member access='public' layout-offset-in-bits='64'> <var-decl name='list_head' type-id='b0b5e45e' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <pointer-type-def type-id='b0b5e45e' size-in-bits='64' id='b03eadb4'/> <pointer-type-def type-id='b21843b2' size-in-bits='64' id='ccc38265'/> <pointer-type-def type-id='0899125f' size-in-bits='64' id='352ec160'/> @@ -690,33 +1365,131 @@ <return type-id='95e97e5e'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='mkdirp.c' language='LANG_C99'> - <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/> + <abi-instr address-size='64' path='lib/libspl/mkdirp.c' language='LANG_C99'> <typedef-decl name='mode_t' type-id='e1c52942' id='d50d396c'/> + <typedef-decl name='wchar_t' type-id='95e97e5e' id='928221d2'/> + <qualified-type-def type-id='928221d2' const='yes' id='effb3702'/> + <pointer-type-def type-id='effb3702' size-in-bits='64' id='f077d3f8'/> + <qualified-type-def type-id='f077d3f8' restrict='yes' id='598aab80'/> + <pointer-type-def type-id='928221d2' size-in-bits='64' id='323d93c1'/> + <qualified-type-def type-id='323d93c1' restrict='yes' id='f1358bc3'/> + <function-decl name='calloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='strdup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='access' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__mbstowcs_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='f1358bc3'/> + <parameter type-id='9d26089a'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__wcstombs_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='598aab80'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='mkdir' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='e1c52942'/> + <return type-id='95e97e5e'/> + </function-decl> <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'/> <parameter type-id='d50d396c' name='mode'/> <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/mutex.c' language='LANG_C99'> + <union-decl name='pthread_mutexattr_t' size-in-bits='32' naming-typedef-id='8afd6070' visibility='default' id='7300eb00'> + <data-member access='public'> + <var-decl name='__size' type-id='8e0573fd' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='__align' type-id='95e97e5e' visibility='default'/> + </data-member> + </union-decl> + <typedef-decl name='pthread_mutexattr_t' type-id='7300eb00' id='8afd6070'/> + <qualified-type-def type-id='8afd6070' const='yes' id='1d853360'/> + <pointer-type-def type-id='1d853360' size-in-bits='64' id='c2afbd7e'/> + <function-decl name='pthread_mutex_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <parameter type-id='c2afbd7e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_trylock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_init' mangled-name='mutex_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_init'> + <parameter type-id='78830f38' name='mp'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='cookie'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_destroy' mangled-name='mutex_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_destroy'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_enter' mangled-name='mutex_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_enter'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='mutex_enter_check_return' mangled-name='mutex_enter_check_return' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_enter_check_return'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_tryenter' mangled-name='mutex_tryenter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_tryenter'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='mutex_exit' mangled-name='mutex_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_exit'> + <parameter type-id='78830f38' name='mp'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/os/linux/getexecname.c' language='LANG_C99'> + <function-decl name='__readlink_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/os/linux/gethostid.c' language='LANG_C99'> + <function-decl name='strtoull' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='3a47d82b'/> + </function-decl> <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'> - <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> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> - <subrange length='1' type-id='7359adad' id='52f813b4'/> - </array-type-def> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> - <subrange length='20' type-id='7359adad' id='fdca39cf'/> - </array-type-def> - <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> - <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> - <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <abi-instr address-size='64' path='lib/libspl/os/linux/getmntany.c' language='LANG_C99'> <class-decl name='mnttab' size-in-bits='256' is-struct='yes' visibility='default' id='1b055409'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='mnt_special' type-id='26a90f95' visibility='default'/> @@ -751,6 +1524,26 @@ <var-decl name='mnt_minor' type-id='3502e3ff' visibility='default'/> </data-member> </class-decl> + <class-decl name='mntent' size-in-bits='320' is-struct='yes' visibility='default' id='56fe4a37'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='mnt_fsname' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='mnt_dir' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='mnt_type' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='mnt_opts' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='mnt_freq' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='mnt_passno' type-id='95e97e5e' visibility='default'/> + </data-member> + </class-decl> <class-decl name='stat64' size-in-bits='1152' is-struct='yes' visibility='default' id='0bbec9cd'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='st_dev' type-id='35ed8932' visibility='default'/> @@ -798,185 +1591,750 @@ <var-decl name='__glibc_reserved' type-id='083f8d58' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='__dev_t' type-id='7359adad' id='35ed8932'/> - <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/> - <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/> <typedef-decl name='__ino64_t' type-id='7359adad' id='71288a47'/> - <typedef-decl name='__nlink_t' type-id='7359adad' id='80f0b9df'/> - <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> - <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> - <typedef-decl name='__time_t' type-id='bd54fe1a' id='65eda9c0'/> - <typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/> <typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/> - <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/> - <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> - <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> - <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/> + <pointer-type-def type-id='56fe4a37' size-in-bits='64' id='b6b61d2f'/> + <qualified-type-def type-id='b6b61d2f' restrict='yes' id='3cad23cd'/> + <pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/> + <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/> + <qualified-type-def type-id='62f7a03d' restrict='yes' id='f1cadedf'/> + <function-decl name='getmntent_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='3cad23cd'/> + <parameter type-id='266fe297'/> + <parameter type-id='95e97e5e'/> + <return type-id='b6b61d2f'/> + </function-decl> + <function-decl name='feof' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strerror' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='stat64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='f1cadedf'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getmntany' mangled-name='getmntany' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getmntany'> + <parameter type-id='822cd80b' name='fp'/> + <parameter type-id='9d424d31' name='mgetp'/> + <parameter type-id='9d424d31' name='mrefp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='_sol_getmntent' mangled-name='_sol_getmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_sol_getmntent'> + <parameter type-id='822cd80b' name='fp'/> + <parameter type-id='9d424d31' name='mgetp'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='getextmntent' mangled-name='getextmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getextmntent'> + <parameter type-id='80f4b756' name='path'/> + <parameter type-id='394fc496' name='entry'/> + <parameter type-id='62f7a03d' name='statbuf'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/os/linux/zone.c' language='LANG_C99'> + <typedef-decl name='zoneid_t' type-id='3502e3ff' id='4da03624'/> + <function-decl name='strtoul' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='7359adad'/> + </function-decl> + <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='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='lib/libspl/procfs_list.c' language='LANG_C99'> + <class-decl name='procfs_list' size-in-bits='768' is-struct='yes' visibility='default' id='0f4d3b87'> <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + <var-decl name='pl_private' type-id='eaa32e2f' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + <var-decl name='pl_lock' type-id='b9eccc8f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='pl_list' type-id='0899125f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='pl_next_id' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='pl_node_offset' type-id='b59d7dce' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='procfs_list_t' type-id='0f4d3b87' id='e5b5a21b'/> + <class-decl name='seq_file' is-struct='yes' visibility='default' id='f3415517'/> + <pointer-type-def type-id='be39c944' size-in-bits='64' id='b5c3ae96'/> + <pointer-type-def type-id='86932239' size-in-bits='64' id='6255c89d'/> + <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/> + <pointer-type-def type-id='e5b5a21b' size-in-bits='64' id='7f432372'/> + <pointer-type-def type-id='f3415517' size-in-bits='64' id='f8dc9def'/> + <function-decl name='seq_printf' mangled-name='seq_printf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_printf'> + <parameter type-id='f8dc9def' name='m'/> + <parameter type-id='80f4b756' name='fmt'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_install' mangled-name='procfs_list_install' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_install'> + <parameter type-id='80f4b756' name='module'/> + <parameter type-id='80f4b756' name='submodule'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='d50d396c' name='mode'/> + <parameter type-id='7f432372' name='procfs_list'/> + <parameter type-id='0131eb61' name='show'/> + <parameter type-id='6255c89d' name='show_header'/> + <parameter type-id='b5c3ae96' name='clear'/> + <parameter type-id='b59d7dce' name='procfs_list_node_off'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_uninstall' mangled-name='procfs_list_uninstall' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_uninstall'> + <parameter type-id='7f432372' name='procfs_list'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_destroy' mangled-name='procfs_list_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_destroy'> + <parameter type-id='7f432372' name='procfs_list'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='procfs_list_add' mangled-name='procfs_list_add' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='procfs_list_add'> + <parameter type-id='7f432372' name='procfs_list'/> + <parameter type-id='eaa32e2f' name='p'/> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='be39c944'> + <parameter type-id='7f432372'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='86932239'> + <parameter type-id='f8dc9def'/> + <return type-id='95e97e5e'/> + </function-type> + <function-type size-in-bits='64' id='cf9ec29d'> + <parameter type-id='f8dc9def'/> + <parameter type-id='eaa32e2f'/> + <return type-id='95e97e5e'/> + </function-type> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/random.c' language='LANG_C99'> + <function-decl name='random_force_pseudo' mangled-name='random_force_pseudo' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_force_pseudo'> + <parameter type-id='c19b74c3' name='onoff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='random_get_bytes' mangled-name='random_get_bytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_get_bytes'> + <parameter type-id='ae3e8ca6' name='ptr'/> + <parameter type-id='b59d7dce' name='len'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='random_get_pseudo_bytes' mangled-name='random_get_pseudo_bytes' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='random_get_pseudo_bytes'> + <parameter type-id='ae3e8ca6' name='ptr'/> + <parameter type-id='b59d7dce' name='len'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/rwlock.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'> + <subrange length='8' type-id='7359adad' id='56e0c0b1'/> + </array-type-def> + <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='56' id='08f7ce77'> + <subrange length='7' type-id='7359adad' id='16fc326e'/> + </array-type-def> + <class-decl name='krwlock' size-in-bits='576' is-struct='yes' visibility='default' id='4361e3b2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='rw_lock' type-id='3f680bc6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='rw_owner' type-id='4051f5e7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='rw_readers' type-id='3502e3ff' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='krwlock_t' type-id='4361e3b2' id='477df69a'/> + <typedef-decl name='krw_t' type-id='95e97e5e' id='932eed5d'/> + <union-decl name='pthread_rwlock_t' size-in-bits='448' naming-typedef-id='3f680bc6' visibility='default' id='981886f6'> + <data-member access='public'> + <var-decl name='__data' type-id='afe414a4' visibility='default'/> + </data-member> + <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_rwlock_t' type-id='981886f6' id='3f680bc6'/> + <union-decl name='pthread_rwlockattr_t' size-in-bits='64' naming-typedef-id='1b1c4591' visibility='default' id='b8e57521'> + <data-member access='public'> + <var-decl name='__size' type-id='8e100159' 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_rwlockattr_t' type-id='b8e57521' id='1b1c4591'/> + <class-decl name='__pthread_rwlock_arch_t' size-in-bits='448' is-struct='yes' visibility='default' id='afe414a4'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='__readers' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='__writers' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='__wrphase_futex' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='__writers_futex' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + <var-decl name='__pad3' type-id='f0981eeb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='__pad4' type-id='f0981eeb' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + <var-decl name='__cur_writer' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='__shared' type-id='95e97e5e' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> + <var-decl name='__rwelision' type-id='28577a57' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='264'> + <var-decl name='__pad1' type-id='08f7ce77' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + <var-decl name='__pad2' type-id='7359adad' visibility='default'/> </data-member> <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> + <var-decl name='__flags' type-id='f0981eeb' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> + </class-decl> + <qualified-type-def type-id='1b1c4591' const='yes' id='52c85581'/> + <pointer-type-def type-id='52c85581' size-in-bits='64' id='fc5edc31'/> + <qualified-type-def type-id='fc5edc31' restrict='yes' id='295e8f33'/> + <pointer-type-def type-id='477df69a' size-in-bits='64' id='0126db61'/> + <pointer-type-def type-id='3f680bc6' size-in-bits='64' id='a6210c87'/> + <qualified-type-def type-id='a6210c87' restrict='yes' id='27210b05'/> + <qualified-type-def type-id='3502e3ff' volatile='yes' id='d0290e74'/> + <pointer-type-def type-id='d0290e74' size-in-bits='64' id='0ea19dfa'/> + <function-decl name='atomic_inc_uint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0ea19dfa'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='atomic_dec_uint' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='0ea19dfa'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_rwlock_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='27210b05'/> + <parameter type-id='295e8f33'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_rdlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_tryrdlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_wrlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_trywrlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_rwlock_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='a6210c87'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rw_init' mangled-name='rw_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_init'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='26a90f95' name='name'/> + <parameter type-id='95e97e5e' name='type'/> + <parameter type-id='eaa32e2f' name='arg'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_destroy' mangled-name='rw_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_destroy'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_enter' mangled-name='rw_enter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_enter'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='932eed5d' name='rw'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_exit' mangled-name='rw_exit' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_exit'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='rw_tryenter' mangled-name='rw_tryenter' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_tryenter'> + <parameter type-id='0126db61' name='rwlp'/> + <parameter type-id='932eed5d' name='rw'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='rw_tryupgrade' mangled-name='rw_tryupgrade' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rw_tryupgrade'> + <parameter type-id='0126db61' name='rwlp'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/sid.c' language='LANG_C99'> + <class-decl name='ksiddomain' size-in-bits='128' is-struct='yes' visibility='default' id='b3a38f42'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='kd_ref' type-id='3502e3ff' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='kd_len' type-id='3502e3ff' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='576'> - <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='kd_name' type-id='26a90f95' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='640'> - <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> + </class-decl> + <typedef-decl name='ksiddomain_t' type-id='b3a38f42' id='db2eb030'/> + <pointer-type-def type-id='db2eb030' size-in-bits='64' id='3b684881'/> + <function-decl name='ksid_lookupdomain' mangled-name='ksid_lookupdomain' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksid_lookupdomain'> + <parameter type-id='80f4b756' name='dom'/> + <return type-id='3b684881'/> + </function-decl> + <function-decl name='ksiddomain_rele' mangled-name='ksiddomain_rele' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksiddomain_rele'> + <parameter type-id='3b684881' name='ksid'/> + <return type-id='48b5725f'/> + </function-decl> + </abi-instr> + <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'/> + <parameter type-id='b59d7dce' name='dstsize'/> + <return type-id='b59d7dce'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libspl/taskq.c' language='LANG_C99'> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'> + <subrange length='32' type-id='7359adad' id='ae5bde82'/> + </array-type-def> + <typedef-decl name='pri_t' type-id='a2185560' id='c497180a'/> + <typedef-decl name='taskqid_t' type-id='e475ab95' id='de0ea20e'/> + <typedef-decl name='task_func_t' type-id='c5c76c9c' id='d8481e1f'/> + <class-decl name='taskq_ent' size-in-bits='320' is-struct='yes' visibility='default' id='cfda1b05'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tqent_next' type-id='67918d75' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='704'> - <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tqent_prev' type-id='67918d75' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='768'> - <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='tqent_func' type-id='41cce5ce' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='832'> - <var-decl name='_chain' type-id='dca988a5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='tqent_arg' type-id='eaa32e2f' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='896'> - <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tqent_flags' type-id='e475ab95' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='928'> - <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + </class-decl> + <typedef-decl name='taskq_ent_t' type-id='cfda1b05' id='65d297d1'/> + <class-decl name='taskq' size-in-bits='3072' is-struct='yes' visibility='default' id='1804594f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tq_name' type-id='16dc656a' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='960'> - <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tq_lock' type-id='b9eccc8f' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1024'> - <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='tq_threadlock' type-id='477df69a' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1040'> - <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='tq_dispatch_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1048'> - <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1600'> + <var-decl name='tq_wait_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1088'> - <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='1984'> + <var-decl name='tq_threadlist' type-id='6e87b565' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1152'> - <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2048'> + <var-decl name='tq_flags' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1216'> - <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2080'> + <var-decl name='tq_active' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1280'> - <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2112'> + <var-decl name='tq_nthreads' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1344'> - <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2144'> + <var-decl name='tq_nalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1408'> - <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2176'> + <var-decl name='tq_minalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1472'> - <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2208'> + <var-decl name='tq_maxalloc' type-id='95e97e5e' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1536'> - <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2240'> + <var-decl name='tq_maxalloc_cv' type-id='29dbc0dd' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='1568'> - <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2624'> + <var-decl name='tq_maxalloc_wait' type-id='95e97e5e' visibility='default'/> </data-member> - </class-decl> - <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2688'> + <var-decl name='tq_freelist' type-id='3a4f23d4' visibility='default'/> </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='tv_nsec' type-id='03085adc' visibility='default'/> + <data-member access='public' layout-offset-in-bits='2752'> + <var-decl name='tq_task' type-id='65d297d1' visibility='default'/> </data-member> </class-decl> - <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> - <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> - <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> - <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> - <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> - <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> - <pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/> - <pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/> - <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/> - <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> - <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> - <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> - <function-decl name='getmntany' mangled-name='getmntany' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getmntany'> - <parameter type-id='822cd80b' name='fp'/> - <parameter type-id='9d424d31' name='mgetp'/> - <parameter type-id='9d424d31' name='mrefp'/> + <typedef-decl name='taskq_t' type-id='1804594f' id='ef507f03'/> + <typedef-decl name='kthread_t' type-id='4051f5e7' id='9bccee1a'/> + <typedef-decl name='uintptr_t' type-id='7359adad' id='e475ab95'/> + <typedef-decl name='pthread_key_t' type-id='f0981eeb' id='2de5383b'/> + <pointer-type-def type-id='9bccee1a' size-in-bits='64' id='6ae5a80d'/> + <pointer-type-def type-id='6ae5a80d' size-in-bits='64' id='6e87b565'/> + <pointer-type-def type-id='6e87b565' size-in-bits='64' id='4ea26b5d'/> + <pointer-type-def type-id='2de5383b' size-in-bits='64' id='ce04b822'/> + <pointer-type-def type-id='d8481e1f' size-in-bits='64' id='41cce5ce'/> + <pointer-type-def type-id='cfda1b05' size-in-bits='64' id='67918d75'/> + <pointer-type-def type-id='65d297d1' size-in-bits='64' id='3a4f23d4'/> + <pointer-type-def type-id='ef507f03' size-in-bits='64' id='4f8ed29a'/> + <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/> + <function-decl name='zk_thread_create' mangled-name='zk_thread_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zk_thread_create'> + <parameter type-id='80f4b756'/> + <parameter type-id='b7f9d8e6'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='95e97e5e'/> + <return type-id='6ae5a80d'/> + </function-decl> + <function-decl name='pthread_exit' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='pthread_key_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='ce04b822'/> + <parameter type-id='b7f9d8e6'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='_sol_getmntent' mangled-name='_sol_getmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_sol_getmntent'> - <parameter type-id='822cd80b' name='fp'/> - <parameter type-id='9d424d31' name='mgetp'/> + <function-decl name='pthread_key_delete' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> <return type-id='95e97e5e'/> </function-decl> - <function-decl name='getextmntent' mangled-name='getextmntent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getextmntent'> - <parameter type-id='80f4b756' name='path'/> - <parameter type-id='394fc496' name='entry'/> - <parameter type-id='62f7a03d' name='statbuf'/> + <function-decl name='pthread_getspecific' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='pthread_setspecific' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='2de5383b'/> + <parameter type-id='eaa32e2f'/> <return type-id='95e97e5e'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='os/linux/zone.c' language='LANG_C99'> - <typedef-decl name='zoneid_t' type-id='3502e3ff' 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 name='_system_taskq' mangled-name='_system_taskq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_system_taskq'> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='_system_delay_taskq' mangled-name='_system_delay_taskq' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_system_delay_taskq'> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_dispatch' mangled-name='taskq_dispatch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='tqflags'/> + <return type-id='de0ea20e'/> + </function-decl> + <function-decl name='taskq_dispatch_delay' mangled-name='taskq_dispatch_delay' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch_delay'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='tqflags'/> + <parameter type-id='4c3a2c61' name='expire_time'/> + <return type-id='de0ea20e'/> + </function-decl> + <function-decl name='taskq_empty_ent' mangled-name='taskq_empty_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_empty_ent'> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='95e97e5e'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='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 name='taskq_init_ent' mangled-name='taskq_init_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_init_ent'> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_dispatch_ent' mangled-name='taskq_dispatch_ent' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_dispatch_ent'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='41cce5ce' name='func'/> + <parameter type-id='eaa32e2f' name='arg'/> + <parameter type-id='3502e3ff' name='flags'/> + <parameter type-id='3a4f23d4' name='t'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_wait' mangled-name='taskq_wait' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_wait'> + <parameter type-id='4f8ed29a' name='tq'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_wait_id' mangled-name='taskq_wait_id' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_wait_id'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='de0ea20e' name='id'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_create' mangled-name='taskq_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_create'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='95e97e5e' name='nthreads'/> + <parameter type-id='c497180a' name='pri'/> + <parameter type-id='95e97e5e' name='minalloc'/> + <parameter type-id='95e97e5e' name='maxalloc'/> + <parameter type-id='3502e3ff' name='flags'/> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_destroy' mangled-name='taskq_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_destroy'> + <parameter type-id='4f8ed29a' name='tq'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='taskq_create_synced' mangled-name='taskq_create_synced' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_create_synced'> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='95e97e5e' name='nthreads'/> + <parameter type-id='c497180a' name='pri'/> + <parameter type-id='95e97e5e' name='minalloc'/> + <parameter type-id='95e97e5e' name='maxalloc'/> + <parameter type-id='3502e3ff' name='flags'/> + <parameter type-id='4ea26b5d' name='ktpp'/> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_member' mangled-name='taskq_member' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_member'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='6ae5a80d' name='t'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='taskq_of_curthread' mangled-name='taskq_of_curthread' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_of_curthread'> + <return type-id='4f8ed29a'/> + </function-decl> + <function-decl name='taskq_cancel_id' mangled-name='taskq_cancel_id' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='taskq_cancel_id'> + <parameter type-id='4f8ed29a' name='tq'/> + <parameter type-id='de0ea20e' name='id'/> + <return type-id='95e97e5e'/> </function-decl> + <function-decl name='system_taskq_init' mangled-name='system_taskq_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='system_taskq_init'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='system_taskq_fini' mangled-name='system_taskq_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='system_taskq_fini'> + <return type-id='48b5725f'/> + </function-decl> + <function-type size-in-bits='64' id='c5c76c9c'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-type> </abi-instr> - <abi-instr address-size='64' path='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'/> - <parameter type-id='b59d7dce' name='dstsize'/> - <return type-id='b59d7dce'/> + <abi-instr address-size='64' path='lib/libspl/thread.c' language='LANG_C99'> + <pointer-type-def type-id='7d8569fd' size-in-bits='64' id='7347a39e'/> + <function-decl name='pthread_attr_init' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_destroy' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setdetachstate' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setguardsize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_attr_setstacksize' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7347a39e'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_setname_np' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4051f5e7'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strtol' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='__sysconf' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='bd54fe1a'/> + </function-decl> + <function-decl name='p0' mangled-name='p0' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='p0'> + <return type-id='48b5725f'/> </function-decl> </abi-instr> - <abi-instr address-size='64' path='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'/> - <parameter type-id='b59d7dce' name='len'/> + <abi-instr address-size='64' path='lib/libspl/timestamp.c' language='LANG_C99'> + <typedef-decl name='nl_item' type-id='95e97e5e' id='03b79a94'/> + <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' id='dddf6ca2'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tm_sec' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='tm_min' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tm_hour' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='tm_mday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='tm_mon' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='tm_year' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='tm_wday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='tm_yday' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='tm_isdst' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='tm_gmtoff' type-id='bd54fe1a' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='tm_zone' type-id='80f4b756' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='time_t' type-id='65eda9c0' id='c9d12d66'/> + <qualified-type-def type-id='c9d12d66' const='yes' id='588b3216'/> + <pointer-type-def type-id='588b3216' size-in-bits='64' id='9f201474'/> + <qualified-type-def type-id='9f201474' restrict='yes' id='d6e2847c'/> + <qualified-type-def type-id='dddf6ca2' const='yes' id='e824a34f'/> + <pointer-type-def type-id='e824a34f' size-in-bits='64' id='d6ad37ff'/> + <qualified-type-def type-id='d6ad37ff' restrict='yes' id='f8c6051d'/> + <pointer-type-def type-id='c9d12d66' size-in-bits='64' id='b2eb2c3f'/> + <pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/> + <qualified-type-def type-id='d915a820' restrict='yes' id='f099ad08'/> + <function-decl name='nl_langinfo' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='03b79a94'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='time' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b2eb2c3f'/> + <return type-id='c9d12d66'/> + </function-decl> + <function-decl name='strftime' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='266fe297'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='9d26089a'/> + <parameter type-id='f8c6051d'/> <return type-id='b59d7dce'/> </function-decl> - </abi-instr> - <abi-instr address-size='64' path='timestamp.c' language='LANG_C99'> + <function-decl name='localtime_r' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='d6e2847c'/> + <parameter type-id='f099ad08'/> + <return type-id='d915a820'/> + </function-decl> + <function-decl name='__printf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> <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> + <function-decl name='get_timestamp' mangled-name='get_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_timestamp'> + <parameter type-id='3502e3ff' name='timestamp_fmt'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='95e97e5e' name='len'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='format_timestamp' mangled-name='format_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='format_timestamp'> + <parameter type-id='c9d12d66' name='t'/> + <parameter type-id='26a90f95' name='buf'/> + <parameter type-id='95e97e5e' name='len'/> + <return type-id='48b5725f'/> + </function-decl> </abi-instr> - <abi-instr address-size='64' path='libzfs_core.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libspl/tunables.c' language='LANG_C99'> + <typedef-decl name='intmax_t' type-id='5b475db0' id='e104d842'/> + <typedef-decl name='uintmax_t' type-id='04d82f4b' id='f8b828c9'/> + <typedef-decl name='__intmax_t' type-id='bd54fe1a' id='5b475db0'/> + <typedef-decl name='__uintmax_t' type-id='7359adad' id='04d82f4b'/> + <function-decl name='strtoimax' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='e104d842'/> + </function-decl> + <function-decl name='strtoumax' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='9d26089a'/> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <return type-id='f8b828c9'/> + </function-decl> + <function-decl name='strcmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libzfs_core/libzfs_core.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> <type-decl name='char' size-in-bits='8' id='a84c031d'/> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> + <subrange length='1' type-id='7359adad' id='52f813b4'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'> + <subrange length='20' type-id='7359adad' id='fdca39cf'/> + </array-type-def> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2048' id='d1617432'> <subrange length='256' type-id='7359adad' id='36e5b9fa'/> </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2816' id='514368c7'> + <subrange length='352' type-id='7359adad' id='b715cd6f'/> + </array-type-def> + <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> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'> + <subrange length='40' type-id='7359adad' id='8f80b239'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'> + <subrange length='56' type-id='7359adad' id='f8137894'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='65536' id='163f6aa5'> + <subrange length='8192' type-id='7359adad' id='c88f397d'/> + </array-type-def> + <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'> + <subrange length='infinite' type-id='7359adad' id='031f2035'/> + </array-type-def> + <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> + <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> + <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> <type-decl name='int' size-in-bits='32' id='95e97e5e'/> + <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/> + <type-decl name='short int' size-in-bits='16' id='a2185560'/> + <type-decl name='signed char' size-in-bits='8' id='28577a57'/> + <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='128' id='c1c22e6c'> + <subrange length='2' type-id='7359adad' id='52efc4ef'/> + </array-type-def> <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='2176' id='8c2bcad1'> <subrange length='34' type-id='7359adad' id='6a6a7e00'/> </array-type-def> @@ -1005,6 +2363,8 @@ <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/> <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/> <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> + <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + <type-decl name='variadic parameter type' id='2c1145c5'/> <type-decl name='void' id='48b5725f'/> <enum-decl name='lzc_dataset_type' id='bc9887f1'> <underlying-type type-id='9cac1fee'/> @@ -1019,7 +2379,7 @@ <enumerator name='LZC_SEND_FLAG_RAW' value='8'/> <enumerator name='LZC_SEND_FLAG_SAVED' value='16'/> </enum-decl> - <class-decl name='ddt_key' size-in-bits='320' is-struct='yes' visibility='default' id='e0a4a1cb'> + <class-decl name='ddt_key_t' size-in-bits='320' is-struct='yes' naming-typedef-id='67f6d2cf' visibility='default' id='5fae1718'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='ddk_cksum' type-id='39730d0b' visibility='default'/> </data-member> @@ -1027,7 +2387,7 @@ <var-decl name='ddk_prop' type-id='9c313c2d' visibility='default'/> </data-member> </class-decl> - <typedef-decl name='ddt_key_t' type-id='e0a4a1cb' id='67f6d2cf'/> + <typedef-decl name='ddt_key_t' type-id='5fae1718' id='67f6d2cf'/> <enum-decl name='dmu_object_type' id='04b3b0b9'> <underlying-type type-id='9cac1fee'/> <enumerator name='DMU_OT_NONE' value='0'/> @@ -1107,6 +2467,36 @@ <enumerator name='DMU_OTN_ZAP_ENC_METADATA' value='228'/> </enum-decl> <typedef-decl name='dmu_object_type_t' type-id='04b3b0b9' id='5c9d8906'/> + <class-decl name='dmu_objset_stats' size-in-bits='2304' is-struct='yes' visibility='default' id='098f0221'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='dds_num_clones' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='dds_creation_txg' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='dds_guid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='dds_type' type-id='230f1e16' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='dds_is_snapshot' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='232'> + <var-decl name='dds_inconsistent' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='240'> + <var-decl name='dds_redacted' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='248'> + <var-decl name='dds_origin' type-id='d1617432' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2296'> + <var-decl name='dds_flags' type-id='b96825af' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='dmu_objset_stats_t' type-id='098f0221' id='b2c14f17'/> <enum-decl name='dmu_objset_type' id='6b1b19f9'> <underlying-type type-id='9cac1fee'/> <enumerator name='DMU_OST_NONE' value='0'/> @@ -1123,7 +2513,8 @@ <enumerator name='POOL_INITIALIZE_START' value='0'/> <enumerator name='POOL_INITIALIZE_CANCEL' value='1'/> <enumerator name='POOL_INITIALIZE_SUSPEND' value='2'/> - <enumerator name='POOL_INITIALIZE_FUNCS' value='3'/> + <enumerator name='POOL_INITIALIZE_UNINIT' value='3'/> + <enumerator name='POOL_INITIALIZE_FUNCS' value='4'/> </enum-decl> <typedef-decl name='pool_initialize_func_t' type-id='5c246ad4' id='7063e1ab'/> <enum-decl name='pool_trim_func' id='54ed608a'> @@ -1134,6 +2525,114 @@ <enumerator name='POOL_TRIM_FUNCS' value='3'/> </enum-decl> <typedef-decl name='pool_trim_func_t' type-id='54ed608a' id='b1146b8d'/> + <enum-decl name='zfs_ioc' id='12033f13'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZFS_IOC_FIRST' value='23040'/> + <enumerator name='ZFS_IOC' value='23040'/> + <enumerator name='ZFS_IOC_POOL_CREATE' value='23040'/> + <enumerator name='ZFS_IOC_POOL_DESTROY' value='23041'/> + <enumerator name='ZFS_IOC_POOL_IMPORT' value='23042'/> + <enumerator name='ZFS_IOC_POOL_EXPORT' value='23043'/> + <enumerator name='ZFS_IOC_POOL_CONFIGS' value='23044'/> + <enumerator name='ZFS_IOC_POOL_STATS' value='23045'/> + <enumerator name='ZFS_IOC_POOL_TRYIMPORT' value='23046'/> + <enumerator name='ZFS_IOC_POOL_SCAN' value='23047'/> + <enumerator name='ZFS_IOC_POOL_FREEZE' value='23048'/> + <enumerator name='ZFS_IOC_POOL_UPGRADE' value='23049'/> + <enumerator name='ZFS_IOC_POOL_GET_HISTORY' value='23050'/> + <enumerator name='ZFS_IOC_VDEV_ADD' value='23051'/> + <enumerator name='ZFS_IOC_VDEV_REMOVE' value='23052'/> + <enumerator name='ZFS_IOC_VDEV_SET_STATE' value='23053'/> + <enumerator name='ZFS_IOC_VDEV_ATTACH' value='23054'/> + <enumerator name='ZFS_IOC_VDEV_DETACH' value='23055'/> + <enumerator name='ZFS_IOC_VDEV_SETPATH' value='23056'/> + <enumerator name='ZFS_IOC_VDEV_SETFRU' value='23057'/> + <enumerator name='ZFS_IOC_OBJSET_STATS' value='23058'/> + <enumerator name='ZFS_IOC_OBJSET_ZPLPROPS' value='23059'/> + <enumerator name='ZFS_IOC_DATASET_LIST_NEXT' value='23060'/> + <enumerator name='ZFS_IOC_SNAPSHOT_LIST_NEXT' value='23061'/> + <enumerator name='ZFS_IOC_SET_PROP' value='23062'/> + <enumerator name='ZFS_IOC_CREATE' value='23063'/> + <enumerator name='ZFS_IOC_DESTROY' value='23064'/> + <enumerator name='ZFS_IOC_ROLLBACK' value='23065'/> + <enumerator name='ZFS_IOC_RENAME' value='23066'/> + <enumerator name='ZFS_IOC_RECV' value='23067'/> + <enumerator name='ZFS_IOC_SEND' value='23068'/> + <enumerator name='ZFS_IOC_INJECT_FAULT' value='23069'/> + <enumerator name='ZFS_IOC_CLEAR_FAULT' value='23070'/> + <enumerator name='ZFS_IOC_INJECT_LIST_NEXT' value='23071'/> + <enumerator name='ZFS_IOC_ERROR_LOG' value='23072'/> + <enumerator name='ZFS_IOC_CLEAR' value='23073'/> + <enumerator name='ZFS_IOC_PROMOTE' value='23074'/> + <enumerator name='ZFS_IOC_SNAPSHOT' value='23075'/> + <enumerator name='ZFS_IOC_DSOBJ_TO_DSNAME' value='23076'/> + <enumerator name='ZFS_IOC_OBJ_TO_PATH' value='23077'/> + <enumerator name='ZFS_IOC_POOL_SET_PROPS' value='23078'/> + <enumerator name='ZFS_IOC_POOL_GET_PROPS' value='23079'/> + <enumerator name='ZFS_IOC_SET_FSACL' value='23080'/> + <enumerator name='ZFS_IOC_GET_FSACL' value='23081'/> + <enumerator name='ZFS_IOC_SHARE' value='23082'/> + <enumerator name='ZFS_IOC_INHERIT_PROP' value='23083'/> + <enumerator name='ZFS_IOC_SMB_ACL' value='23084'/> + <enumerator name='ZFS_IOC_USERSPACE_ONE' value='23085'/> + <enumerator name='ZFS_IOC_USERSPACE_MANY' value='23086'/> + <enumerator name='ZFS_IOC_USERSPACE_UPGRADE' value='23087'/> + <enumerator name='ZFS_IOC_HOLD' value='23088'/> + <enumerator name='ZFS_IOC_RELEASE' value='23089'/> + <enumerator name='ZFS_IOC_GET_HOLDS' value='23090'/> + <enumerator name='ZFS_IOC_OBJSET_RECVD_PROPS' value='23091'/> + <enumerator name='ZFS_IOC_VDEV_SPLIT' value='23092'/> + <enumerator name='ZFS_IOC_NEXT_OBJ' value='23093'/> + <enumerator name='ZFS_IOC_DIFF' value='23094'/> + <enumerator name='ZFS_IOC_TMP_SNAPSHOT' value='23095'/> + <enumerator name='ZFS_IOC_OBJ_TO_STATS' value='23096'/> + <enumerator name='ZFS_IOC_SPACE_WRITTEN' value='23097'/> + <enumerator name='ZFS_IOC_SPACE_SNAPS' value='23098'/> + <enumerator name='ZFS_IOC_DESTROY_SNAPS' value='23099'/> + <enumerator name='ZFS_IOC_POOL_REGUID' value='23100'/> + <enumerator name='ZFS_IOC_POOL_REOPEN' value='23101'/> + <enumerator name='ZFS_IOC_SEND_PROGRESS' value='23102'/> + <enumerator name='ZFS_IOC_LOG_HISTORY' value='23103'/> + <enumerator name='ZFS_IOC_SEND_NEW' value='23104'/> + <enumerator name='ZFS_IOC_SEND_SPACE' value='23105'/> + <enumerator name='ZFS_IOC_CLONE' value='23106'/> + <enumerator name='ZFS_IOC_BOOKMARK' value='23107'/> + <enumerator name='ZFS_IOC_GET_BOOKMARKS' value='23108'/> + <enumerator name='ZFS_IOC_DESTROY_BOOKMARKS' value='23109'/> + <enumerator name='ZFS_IOC_RECV_NEW' value='23110'/> + <enumerator name='ZFS_IOC_POOL_SYNC' value='23111'/> + <enumerator name='ZFS_IOC_CHANNEL_PROGRAM' value='23112'/> + <enumerator name='ZFS_IOC_LOAD_KEY' value='23113'/> + <enumerator name='ZFS_IOC_UNLOAD_KEY' value='23114'/> + <enumerator name='ZFS_IOC_CHANGE_KEY' value='23115'/> + <enumerator name='ZFS_IOC_REMAP' value='23116'/> + <enumerator name='ZFS_IOC_POOL_CHECKPOINT' value='23117'/> + <enumerator name='ZFS_IOC_POOL_DISCARD_CHECKPOINT' value='23118'/> + <enumerator name='ZFS_IOC_POOL_INITIALIZE' value='23119'/> + <enumerator name='ZFS_IOC_POOL_TRIM' value='23120'/> + <enumerator name='ZFS_IOC_REDACT' value='23121'/> + <enumerator name='ZFS_IOC_GET_BOOKMARK_PROPS' value='23122'/> + <enumerator name='ZFS_IOC_WAIT' value='23123'/> + <enumerator name='ZFS_IOC_WAIT_FS' value='23124'/> + <enumerator name='ZFS_IOC_VDEV_GET_PROPS' value='23125'/> + <enumerator name='ZFS_IOC_VDEV_SET_PROPS' value='23126'/> + <enumerator name='ZFS_IOC_POOL_SCRUB' value='23127'/> + <enumerator name='ZFS_IOC_POOL_PREFETCH' value='23128'/> + <enumerator name='ZFS_IOC_DDT_PRUNE' value='23129'/> + <enumerator name='ZFS_IOC_PLATFORM' value='23168'/> + <enumerator name='ZFS_IOC_EVENTS_NEXT' value='23169'/> + <enumerator name='ZFS_IOC_EVENTS_CLEAR' value='23170'/> + <enumerator name='ZFS_IOC_EVENTS_SEEK' value='23171'/> + <enumerator name='ZFS_IOC_NEXTBOOT' value='23172'/> + <enumerator name='ZFS_IOC_JAIL' value='23173'/> + <enumerator name='ZFS_IOC_USERNS_ATTACH' value='23173'/> + <enumerator name='ZFS_IOC_UNJAIL' value='23174'/> + <enumerator name='ZFS_IOC_USERNS_DETACH' value='23174'/> + <enumerator name='ZFS_IOC_SET_BOOTENV' value='23175'/> + <enumerator name='ZFS_IOC_GET_BOOTENV' value='23176'/> + <enumerator name='ZFS_IOC_LAST' value='23177'/> + </enum-decl> + <typedef-decl name='zfs_ioc_t' type-id='12033f13' id='5b35941c'/> <enum-decl name='zpool_wait_activity_t' naming-typedef-id='73446457' id='849338e3'> <underlying-type type-id='9cac1fee'/> <enumerator name='ZPOOL_WAIT_CKPT_DISCARD' value='0'/> @@ -1144,7 +2643,8 @@ <enumerator name='ZPOOL_WAIT_RESILVER' value='5'/> <enumerator name='ZPOOL_WAIT_SCRUB' value='6'/> <enumerator name='ZPOOL_WAIT_TRIM' value='7'/> - <enumerator name='ZPOOL_WAIT_NUM_ACTIVITIES' value='8'/> + <enumerator name='ZPOOL_WAIT_RAIDZ_EXPAND' value='8'/> + <enumerator name='ZPOOL_WAIT_NUM_ACTIVITIES' value='9'/> </enum-decl> <typedef-decl name='zpool_wait_activity_t' type-id='849338e3' id='73446457'/> <enum-decl name='zfs_wait_activity_t' naming-typedef-id='3024501a' id='527d5dc6'> @@ -1153,6 +2653,74 @@ <enumerator name='ZFS_WAIT_NUM_ACTIVITIES' value='1'/> </enum-decl> <typedef-decl name='zfs_wait_activity_t' type-id='527d5dc6' id='3024501a'/> + <enum-decl name='zpool_prefetch_type_t' naming-typedef-id='e55ff6bc' id='0299ab50'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPOOL_PREFETCH_NONE' value='0'/> + <enumerator name='ZPOOL_PREFETCH_DDT' value='1'/> + <enumerator name='ZPOOL_PREFETCH_BRT' value='2'/> + </enum-decl> + <typedef-decl name='zpool_prefetch_type_t' type-id='0299ab50' id='e55ff6bc'/> + <enum-decl name='zpool_ddt_prune_unit_t' naming-typedef-id='02e25ab0' id='509ae11c'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='ZPOOL_DDT_PRUNE_NONE' value='0'/> + <enumerator name='ZPOOL_DDT_PRUNE_AGE' value='1'/> + <enumerator name='ZPOOL_DDT_PRUNE_PERCENTAGE' value='2'/> + </enum-decl> + <typedef-decl name='zpool_ddt_prune_unit_t' type-id='509ae11c' id='02e25ab0'/> + <enum-decl name='data_type_t' naming-typedef-id='8d0687d2' id='aeeae136'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='DATA_TYPE_DONTCARE' value='-1'/> + <enumerator name='DATA_TYPE_UNKNOWN' value='0'/> + <enumerator name='DATA_TYPE_BOOLEAN' value='1'/> + <enumerator name='DATA_TYPE_BYTE' value='2'/> + <enumerator name='DATA_TYPE_INT16' value='3'/> + <enumerator name='DATA_TYPE_UINT16' value='4'/> + <enumerator name='DATA_TYPE_INT32' value='5'/> + <enumerator name='DATA_TYPE_UINT32' value='6'/> + <enumerator name='DATA_TYPE_INT64' value='7'/> + <enumerator name='DATA_TYPE_UINT64' value='8'/> + <enumerator name='DATA_TYPE_STRING' value='9'/> + <enumerator name='DATA_TYPE_BYTE_ARRAY' value='10'/> + <enumerator name='DATA_TYPE_INT16_ARRAY' value='11'/> + <enumerator name='DATA_TYPE_UINT16_ARRAY' value='12'/> + <enumerator name='DATA_TYPE_INT32_ARRAY' value='13'/> + <enumerator name='DATA_TYPE_UINT32_ARRAY' value='14'/> + <enumerator name='DATA_TYPE_INT64_ARRAY' value='15'/> + <enumerator name='DATA_TYPE_UINT64_ARRAY' value='16'/> + <enumerator name='DATA_TYPE_STRING_ARRAY' value='17'/> + <enumerator name='DATA_TYPE_HRTIME' value='18'/> + <enumerator name='DATA_TYPE_NVLIST' value='19'/> + <enumerator name='DATA_TYPE_NVLIST_ARRAY' value='20'/> + <enumerator name='DATA_TYPE_BOOLEAN_VALUE' value='21'/> + <enumerator name='DATA_TYPE_INT8' value='22'/> + <enumerator name='DATA_TYPE_UINT8' value='23'/> + <enumerator name='DATA_TYPE_BOOLEAN_ARRAY' value='24'/> + <enumerator name='DATA_TYPE_INT8_ARRAY' value='25'/> + <enumerator name='DATA_TYPE_UINT8_ARRAY' value='26'/> + <enumerator name='DATA_TYPE_DOUBLE' value='27'/> + </enum-decl> + <typedef-decl name='data_type_t' type-id='aeeae136' id='8d0687d2'/> + <class-decl name='nvpair' size-in-bits='128' is-struct='yes' visibility='default' id='1c34e459'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='nvp_size' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='nvp_name_sz' type-id='23bd8cb5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='48'> + <var-decl name='nvp_reserve' type-id='23bd8cb5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='nvp_value_elem' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='96'> + <var-decl name='nvp_type' type-id='8d0687d2' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='nvp_name' type-id='e84913bd' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='nvpair_t' type-id='1c34e459' id='57928edf'/> <class-decl name='nvlist' size-in-bits='192' is-struct='yes' visibility='default' id='ac266fd9'> <data-member access='public' layout-offset-in-bits='0'> <var-decl name='nvl_version' type-id='3ff5601b' visibility='default'/> @@ -1229,7 +2797,7 @@ <enumerator name='DRR_REDACT' value='10'/> <enumerator name='DRR_NUMTYPES' value='11'/> </enum-decl> - <union-decl name='__anonymous_union__' size-in-bits='2432' is-anonymous='yes' visibility='default' id='ac5ab595'> + <union-decl name='__anonymous_union__1' size-in-bits='2432' is-anonymous='yes' visibility='default' id='ac5ab595'> <data-member access='public'> <var-decl name='drr_begin' type-id='09fcdc01' visibility='default'/> </data-member> @@ -1545,41 +3113,753 @@ </data-member> </class-decl> <typedef-decl name='dmu_replay_record_t' type-id='781a52d7' id='8b8fc893'/> + <class-decl name='zinject_record' size-in-bits='2944' is-struct='yes' visibility='default' id='3216f820'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zi_objset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='zi_object' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='zi_start' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='zi_end' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='zi_guid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='zi_level' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='352'> + <var-decl name='zi_error' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='zi_type' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='zi_freq' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='480'> + <var-decl name='zi_failfast' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='zi_func' type-id='d1617432' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2560'> + <var-decl name='zi_iotype' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2592'> + <var-decl name='zi_duration' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2624'> + <var-decl name='zi_timer' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2688'> + <var-decl name='zi_nlanes' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2752'> + <var-decl name='zi_cmd' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2784'> + <var-decl name='zi_dvas' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2816'> + <var-decl name='zi_match_count' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2880'> + <var-decl name='zi_inject_count' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zinject_record_t' type-id='3216f820' id='a4301ca6'/> + <class-decl name='zfs_share' size-in-bits='256' is-struct='yes' visibility='default' id='feb6f2da'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='z_exportdata' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='z_sharedata' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='z_sharetype' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='z_sharemax' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_share_t' type-id='feb6f2da' id='ee5cec36'/> + <class-decl name='zfs_cmd' size-in-bits='109952' is-struct='yes' visibility='default' id='3522cd69'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zc_name' type-id='d16c6df4' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32768'> + <var-decl name='zc_nvlist_src' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32832'> + <var-decl name='zc_nvlist_src_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32896'> + <var-decl name='zc_nvlist_dst' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32960'> + <var-decl name='zc_nvlist_dst_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33024'> + <var-decl name='zc_nvlist_dst_filled' type-id='c19b74c3' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33056'> + <var-decl name='zc_pad2' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33088'> + <var-decl name='zc_history' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='33152'> + <var-decl name='zc_value' type-id='163f6aa5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='98688'> + <var-decl name='zc_string' type-id='d1617432' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100736'> + <var-decl name='zc_guid' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100800'> + <var-decl name='zc_nvlist_conf' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100864'> + <var-decl name='zc_nvlist_conf_size' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100928'> + <var-decl name='zc_cookie' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='100992'> + <var-decl name='zc_objset_type' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101056'> + <var-decl name='zc_perm_action' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101120'> + <var-decl name='zc_history_len' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101184'> + <var-decl name='zc_history_offset' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101248'> + <var-decl name='zc_obj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101312'> + <var-decl name='zc_iflags' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101376'> + <var-decl name='zc_share' type-id='ee5cec36' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='101632'> + <var-decl name='zc_objset_stats' type-id='b2c14f17' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='103936'> + <var-decl name='zc_begin_record' type-id='09fcdc01' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='106368'> + <var-decl name='' type-id='ac5ab596' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109312'> + <var-decl name='zc_cleanup_fd' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109344'> + <var-decl name='zc_simple' type-id='b96825af' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109352'> + <var-decl name='zc_pad' type-id='d3490169' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109376'> + <var-decl name='zc_sendobj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109440'> + <var-decl name='zc_fromobj' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109504'> + <var-decl name='zc_createtxg' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109568'> + <var-decl name='zc_stat' type-id='0371a9c7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='109888'> + <var-decl name='zc_zoneid' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <union-decl name='__anonymous_union__' size-in-bits='2944' is-anonymous='yes' visibility='default' id='ac5ab596'> + <data-member access='public'> + <var-decl name='zc_inject_record' type-id='a4301ca6' visibility='default'/> + </data-member> + <data-member access='public'> + <var-decl name='' type-id='e7f43f73' visibility='default'/> + </data-member> + </union-decl> + <class-decl name='__anonymous_struct__' size-in-bits='2944' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f73'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zc_pad1' type-id='514368c7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2816'> + <var-decl name='zc_defer_destroy' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2848'> + <var-decl name='zc_flags' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='2880'> + <var-decl name='zc_action_handle' type-id='9c313c2d' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_cmd_t' type-id='3522cd69' id='a5559cdd'/> + <class-decl name='zfs_stat' size-in-bits='320' is-struct='yes' visibility='default' id='6417f0b9'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='zs_gen' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='zs_mode' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='zs_links' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='zs_ctime' type-id='c1c22e6c' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='zfs_stat_t' type-id='6417f0b9' id='0371a9c7'/> <enum-decl name='boolean_t' naming-typedef-id='c19b74c3' id='f58c8277'> <underlying-type type-id='9cac1fee'/> <enumerator name='B_FALSE' value='0'/> <enumerator name='B_TRUE' value='1'/> </enum-decl> <typedef-decl name='boolean_t' type-id='f58c8277' id='c19b74c3'/> + <typedef-decl name='uchar_t' type-id='002ac4a6' id='d8bf0010'/> <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> + <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_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='int16_t' type-id='03896e23' id='23bd8cb5'/> <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='stat' size-in-bits='1152' is-struct='yes' visibility='default' id='aafc373f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='st_dev' type-id='35ed8932' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='st_ino' type-id='e43e523d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='st_nlink' type-id='80f0b9df' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='st_mode' type-id='e1c52942' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='224'> + <var-decl name='st_uid' type-id='cc5fcceb' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='st_gid' type-id='d94ec6d9' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='288'> + <var-decl name='__pad0' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='st_rdev' type-id='35ed8932' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='st_size' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='st_blksize' type-id='d3f10a7f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='st_blocks' type-id='dbc43803' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='st_atim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='st_mtim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='st_ctim' type-id='a9c79a1f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='__glibc_reserved' type-id='083f8d58' 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='__int16_t' type-id='a2185560' id='03896e23'/> <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='__dev_t' type-id='7359adad' id='35ed8932'/> + <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/> + <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/> + <typedef-decl name='__ino_t' type-id='7359adad' id='e43e523d'/> + <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/> + <typedef-decl name='__nlink_t' type-id='7359adad' id='80f0b9df'/> + <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/> + <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> + <typedef-decl name='__time_t' type-id='bd54fe1a' id='65eda9c0'/> + <typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/> + <typedef-decl name='__blkcnt_t' type-id='bd54fe1a' id='dbc43803'/> + <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/> + <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/> + <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> + <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/> + <class-decl name='_IO_FILE' size-in-bits='1728' is-struct='yes' visibility='default' id='ec1ed955'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='_flags' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='_IO_read_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='_IO_read_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='192'> + <var-decl name='_IO_read_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='256'> + <var-decl name='_IO_write_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='320'> + <var-decl name='_IO_write_ptr' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='384'> + <var-decl name='_IO_write_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='448'> + <var-decl name='_IO_buf_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='512'> + <var-decl name='_IO_buf_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='576'> + <var-decl name='_IO_save_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='640'> + <var-decl name='_IO_backup_base' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='704'> + <var-decl name='_IO_save_end' type-id='26a90f95' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='768'> + <var-decl name='_markers' type-id='e4c6fa61' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='832'> + <var-decl name='_chain' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='896'> + <var-decl name='_fileno' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='928'> + <var-decl name='_flags2' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='960'> + <var-decl name='_old_offset' type-id='79989e9c' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1024'> + <var-decl name='_cur_column' type-id='8efea9e5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1040'> + <var-decl name='_vtable_offset' type-id='28577a57' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1048'> + <var-decl name='_shortbuf' type-id='89feb1ec' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1088'> + <var-decl name='_lock' type-id='cecf4ea7' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1152'> + <var-decl name='_offset' type-id='724e4de6' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1216'> + <var-decl name='_codecvt' type-id='570f8c59' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1280'> + <var-decl name='_wide_data' type-id='c65a1f29' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1344'> + <var-decl name='_freeres_list' type-id='dca988a5' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1408'> + <var-decl name='_freeres_buf' type-id='eaa32e2f' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1472'> + <var-decl name='__pad5' type-id='b59d7dce' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1536'> + <var-decl name='_mode' type-id='95e97e5e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='1568'> + <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> + </data-member> + </class-decl> + <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='tv_nsec' type-id='03085adc' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/> + <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> + <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> + <qualified-type-def type-id='822cd80b' restrict='yes' id='e75a27e9'/> + <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> + <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> + <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> + <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> + <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> + <pointer-type-def type-id='724e4de6' size-in-bits='64' id='ecf845f9'/> + <pointer-type-def type-id='0e01899c' size-in-bits='64' id='4d98cd5a'/> <pointer-type-def type-id='c19b74c3' size-in-bits='64' id='37e3bd22'/> <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/> <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/> <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/> + <qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/> <qualified-type-def type-id='8b8fc893' const='yes' id='9623bc03'/> <pointer-type-def type-id='9623bc03' size-in-bits='64' id='8341348b'/> <qualified-type-def type-id='8e8d4be3' const='yes' id='693c3853'/> <pointer-type-def type-id='693c3853' size-in-bits='64' id='22cce67b'/> + <qualified-type-def type-id='57928edf' const='yes' id='642ee20f'/> + <pointer-type-def type-id='642ee20f' size-in-bits='64' id='dace003f'/> + <qualified-type-def type-id='7d8569fd' const='yes' id='e06dee2d'/> + <pointer-type-def type-id='e06dee2d' size-in-bits='64' id='540db505'/> + <qualified-type-def type-id='540db505' restrict='yes' id='e1815e87'/> + <qualified-type-def type-id='d8bf0010' const='yes' id='a9125480'/> + <pointer-type-def type-id='a9125480' size-in-bits='64' id='d1db479e'/> + <qualified-type-def type-id='b96825af' const='yes' id='2b61797f'/> + <pointer-type-def type-id='2b61797f' size-in-bits='64' id='9f7200cf'/> <pointer-type-def type-id='c70fa2e8' size-in-bits='64' id='2e711a2a'/> + <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/> <pointer-type-def type-id='8e8d4be3' size-in-bits='64' id='5ce45b60'/> <pointer-type-def type-id='5ce45b60' size-in-bits='64' id='857bb57e'/> + <pointer-type-def type-id='57928edf' size-in-bits='64' id='3fa542f0'/> + <pointer-type-def type-id='7a6844eb' size-in-bits='64' id='18c91f9e'/> + <pointer-type-def type-id='4051f5e7' size-in-bits='64' id='e01b5462'/> + <qualified-type-def type-id='e01b5462' restrict='yes' id='cc338b26'/> + <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/> + <pointer-type-def type-id='aafc373f' size-in-bits='64' id='4330df87'/> <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/> <pointer-type-def type-id='b96825af' size-in-bits='64' id='ae3e8ca6'/> <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/> + <pointer-type-def type-id='cd5d79f4' size-in-bits='64' id='5ad9edb6'/> + <qualified-type-def type-id='eaa32e2f' restrict='yes' id='1b7446cd'/> + <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> + <pointer-type-def type-id='3522cd69' size-in-bits='64' id='b65f7fd1'/> + <pointer-type-def type-id='a5559cdd' size-in-bits='64' id='e4ec4540'/> + <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> + <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> + <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <function-decl name='nvlist_print' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_unpack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='857bb57e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_next_nvpair' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='dace003f'/> + <return type-id='3fa542f0'/> + </function-decl> + <function-decl name='nvpair_name' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='dace003f'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64'> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_pack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='78c01427'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='fnvlist_pack_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_unpack' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='26a90f95'/> + <parameter type-id='b59d7dce'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_dup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_add_boolean' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_int32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='3ff5601b'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_byte_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='d1db479e'/> + <parameter type-id='3502e3ff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9f7200cf'/> + <parameter type-id='3502e3ff'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_lookup_boolean_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='fnvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='9c313c2d'/> + </function-decl> + <function-decl name='fnvlist_lookup_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='libspl_assertf' mangled-name='libspl_assertf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libspl_assertf'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='80f4b756'/> + <parameter is-variadic='yes'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strlcpy' mangled-name='strlcpy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'> + <parameter type-id='26a90f95'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__errno_location' visibility='default' binding='global' size-in-bits='64'> + <return type-id='7292109c'/> + </function-decl> + <function-decl name='pthread_create' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='cc338b26'/> + <parameter type-id='e1815e87'/> + <parameter type-id='5ad9edb6'/> + <parameter type-id='1b7446cd'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_join' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4051f5e7'/> + <parameter type-id='63e171df'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_lock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pthread_mutex_unlock' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='18c91f9e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='fclose' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='malloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b59d7dce'/> + <return type-id='eaa32e2f'/> + </function-decl> + <function-decl name='free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='getenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strrchr' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='95e97e5e'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strcspn' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='close' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='pipe2' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='7292109c'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='splice' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='ecf845f9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='ecf845f9'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='f0981eeb'/> + <return type-id='41060289'/> + </function-decl> + <function-decl name='__open_too_many_args' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__open_missing_mode' visibility='default' binding='global' size-in-bits='64'> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__read_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='eaa32e2f'/> + <parameter type-id='b59d7dce'/> + <parameter type-id='b59d7dce'/> + <return type-id='79a0948f'/> + </function-decl> <function-decl name='libzfs_core_init' mangled-name='libzfs_core_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_core_init'> <return type-id='95e97e5e'/> </function-decl> <function-decl name='libzfs_core_fini' mangled-name='libzfs_core_fini' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='libzfs_core_fini'> <return type-id='48b5725f'/> </function-decl> + <function-decl name='lzc_ioctl_fd' mangled-name='lzc_ioctl_fd' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_ioctl_fd'> + <parameter type-id='95e97e5e' name='fd'/> + <parameter type-id='7359adad' name='ioc'/> + <parameter type-id='e4ec4540' name='zc'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_scrub' mangled-name='lzc_scrub' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_scrub'> + <parameter type-id='5b35941c' name='ioc'/> + <parameter type-id='80f4b756' name='name'/> + <parameter type-id='5ce45b60' name='source'/> + <parameter type-id='857bb57e' name='resultp'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='lzc_create' mangled-name='lzc_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_create'> <parameter type-id='80f4b756' name='fsname'/> <parameter type-id='bc9887f1' name='type'/> @@ -1653,6 +3933,11 @@ <parameter type-id='857bb57e' name='holdsp'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='lzc_get_props' mangled-name='lzc_get_props' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_get_props'> + <parameter type-id='80f4b756' name='poolname'/> + <parameter type-id='857bb57e' name='props'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='lzc_send_wrapper' mangled-name='lzc_send_wrapper' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_send_wrapper'> <parameter type-id='2e711a2a' name='func'/> <parameter type-id='95e97e5e' name='orig_fd'/> @@ -1776,6 +4061,26 @@ <parameter type-id='857bb57e' name='errors'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='lzc_receive_with_heal' mangled-name='lzc_receive_with_heal' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_receive_with_heal'> + <parameter type-id='80f4b756' name='snapname'/> + <parameter type-id='5ce45b60' name='props'/> + <parameter type-id='5ce45b60' name='cmdprops'/> + <parameter type-id='ae3e8ca6' name='wkeydata'/> + <parameter type-id='3502e3ff' name='wkeylen'/> + <parameter type-id='80f4b756' name='origin'/> + <parameter type-id='c19b74c3' name='force'/> + <parameter type-id='c19b74c3' name='heal'/> + <parameter type-id='c19b74c3' name='resumable'/> + <parameter type-id='c19b74c3' name='raw'/> + <parameter type-id='95e97e5e' name='input_fd'/> + <parameter type-id='8341348b' name='begin_record'/> + <parameter type-id='95e97e5e' name='cleanup_fd'/> + <parameter type-id='5d6479ae' name='read_bytes'/> + <parameter type-id='5d6479ae' name='errflags'/> + <parameter type-id='5d6479ae' name='action_handle'/> + <parameter type-id='857bb57e' name='errors'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='lzc_rollback' mangled-name='lzc_rollback' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_rollback'> <parameter type-id='80f4b756' name='fsname'/> <parameter type-id='26a90f95' name='snapnamebuf'/> @@ -1825,6 +4130,11 @@ <parameter type-id='80f4b756' name='pool'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='lzc_pool_prefetch' mangled-name='lzc_pool_prefetch' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_pool_prefetch'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='e55ff6bc' name='type'/> + <return type-id='95e97e5e'/> + </function-decl> <function-decl name='lzc_channel_program_nosync' mangled-name='lzc_channel_program_nosync' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_channel_program_nosync'> <parameter type-id='80f4b756' name='pool'/> <parameter type-id='80f4b756' name='program'/> @@ -1921,246 +4231,33 @@ <parameter type-id='857bb57e' name='outnvl'/> <return type-id='95e97e5e'/> </function-decl> + <function-decl name='lzc_ddt_prune' mangled-name='lzc_ddt_prune' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_ddt_prune'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='02e25ab0' name='unit'/> + <parameter type-id='9c313c2d' name='amount'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzc_ioctl_fd_os' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='7359adad'/> + <parameter type-id='b65f7fd1'/> + <return type-id='95e97e5e'/> + </function-decl> <function-type size-in-bits='64' id='c70fa2e8'> <parameter type-id='95e97e5e'/> <parameter type-id='eaa32e2f'/> <return type-id='95e97e5e'/> </function-type> + <function-type size-in-bits='64' id='cd5d79f4'> + <parameter type-id='eaa32e2f'/> + <return type-id='eaa32e2f'/> + </function-type> </abi-instr> - <abi-instr address-size='64' path='os/linux/libzfs_core_ioctl.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> - <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='65536' id='163f6aa5'> - <subrange length='8192' type-id='7359adad' id='c88f397d'/> - </array-type-def> - <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='128' id='c1c22e6c'> - <subrange length='2' type-id='7359adad' id='52efc4ef'/> - </array-type-def> - <class-decl name='dmu_objset_stats' size-in-bits='2304' is-struct='yes' visibility='default' id='098f0221'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='dds_num_clones' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='dds_creation_txg' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='dds_guid' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='dds_type' type-id='230f1e16' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='224'> - <var-decl name='dds_is_snapshot' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='232'> - <var-decl name='dds_inconsistent' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='240'> - <var-decl name='dds_redacted' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='248'> - <var-decl name='dds_origin' type-id='d1617432' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='dmu_objset_stats_t' type-id='098f0221' id='b2c14f17'/> - <class-decl name='zinject_record' size-in-bits='2816' is-struct='yes' visibility='default' id='3216f820'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zi_objset' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='zi_object' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='zi_start' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='zi_end' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='256'> - <var-decl name='zi_guid' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='320'> - <var-decl name='zi_level' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='352'> - <var-decl name='zi_error' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='384'> - <var-decl name='zi_type' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='448'> - <var-decl name='zi_freq' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='480'> - <var-decl name='zi_failfast' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='512'> - <var-decl name='zi_func' type-id='d1617432' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2560'> - <var-decl name='zi_iotype' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2592'> - <var-decl name='zi_duration' type-id='3ff5601b' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2624'> - <var-decl name='zi_timer' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2688'> - <var-decl name='zi_nlanes' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2752'> - <var-decl name='zi_cmd' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='2784'> - <var-decl name='zi_dvas' type-id='8f92235e' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zinject_record_t' type-id='3216f820' id='a4301ca6'/> - <class-decl name='zfs_share' size-in-bits='256' is-struct='yes' visibility='default' id='feb6f2da'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='z_exportdata' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='z_sharedata' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='z_sharetype' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='z_sharemax' type-id='9c313c2d' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_share_t' type-id='feb6f2da' id='ee5cec36'/> - <class-decl name='zfs_cmd' size-in-bits='109952' is-struct='yes' visibility='default' id='3522cd69'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zc_name' type-id='d16c6df4' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32768'> - <var-decl name='zc_nvlist_src' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32832'> - <var-decl name='zc_nvlist_src_size' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32896'> - <var-decl name='zc_nvlist_dst' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='32960'> - <var-decl name='zc_nvlist_dst_size' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33024'> - <var-decl name='zc_nvlist_dst_filled' type-id='c19b74c3' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33056'> - <var-decl name='zc_pad2' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33088'> - <var-decl name='zc_history' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='33152'> - <var-decl name='zc_value' type-id='163f6aa5' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='98688'> - <var-decl name='zc_string' type-id='d1617432' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100736'> - <var-decl name='zc_guid' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100800'> - <var-decl name='zc_nvlist_conf' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100864'> - <var-decl name='zc_nvlist_conf_size' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100928'> - <var-decl name='zc_cookie' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='100992'> - <var-decl name='zc_objset_type' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101056'> - <var-decl name='zc_perm_action' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101120'> - <var-decl name='zc_history_len' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101184'> - <var-decl name='zc_history_offset' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101248'> - <var-decl name='zc_obj' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101312'> - <var-decl name='zc_iflags' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101376'> - <var-decl name='zc_share' type-id='ee5cec36' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='101632'> - <var-decl name='zc_objset_stats' type-id='b2c14f17' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='103936'> - <var-decl name='zc_begin_record' type-id='09fcdc01' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='106368'> - <var-decl name='zc_inject_record' type-id='a4301ca6' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109184'> - <var-decl name='zc_defer_destroy' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109216'> - <var-decl name='zc_flags' type-id='8f92235e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109248'> - <var-decl name='zc_action_handle' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109312'> - <var-decl name='zc_cleanup_fd' type-id='95e97e5e' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109344'> - <var-decl name='zc_simple' type-id='b96825af' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109352'> - <var-decl name='zc_pad' type-id='d3490169' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109376'> - <var-decl name='zc_sendobj' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109440'> - <var-decl name='zc_fromobj' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109504'> - <var-decl name='zc_createtxg' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109568'> - <var-decl name='zc_stat' type-id='0371a9c7' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='109888'> - <var-decl name='zc_zoneid' type-id='9c313c2d' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_cmd_t' type-id='3522cd69' id='a5559cdd'/> - <class-decl name='zfs_stat' size-in-bits='320' is-struct='yes' visibility='default' id='6417f0b9'> - <data-member access='public' layout-offset-in-bits='0'> - <var-decl name='zs_gen' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='64'> - <var-decl name='zs_mode' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='128'> - <var-decl name='zs_links' type-id='9c313c2d' visibility='default'/> - </data-member> - <data-member access='public' layout-offset-in-bits='192'> - <var-decl name='zs_ctime' type-id='c1c22e6c' visibility='default'/> - </data-member> - </class-decl> - <typedef-decl name='zfs_stat_t' type-id='6417f0b9' id='0371a9c7'/> - <pointer-type-def type-id='a5559cdd' size-in-bits='64' id='e4ec4540'/> - <function-decl name='lzc_ioctl_fd' mangled-name='lzc_ioctl_fd' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzc_ioctl_fd'> - <parameter type-id='95e97e5e' name='fd'/> - <parameter type-id='7359adad' name='request'/> - <parameter type-id='e4ec4540' name='zc'/> + <abi-instr address-size='64' path='lib/libzfs_core/os/linux/libzfs_core_ioctl.c' language='LANG_C99'> + <function-decl name='ioctl' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='95e97e5e'/> + <parameter type-id='7359adad'/> + <parameter is-variadic='yes'/> <return type-id='95e97e5e'/> </function-decl> </abi-instr> diff --git a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c index 681fd8c7ba5e..9347aa7c6a28 100644 --- a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c +++ b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,10 +23,10 @@ /* * Copyright (c) 2012, 2020 by Delphix. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. - * Copyright (c) 2017 Datto Inc. * Copyright 2017 RackTop Systems. * Copyright (c) 2017 Open-E, Inc. All Rights Reserved. * Copyright (c) 2019, 2020 by Christian Schwarz. All rights reserved. + * Copyright (c) 2019 Datto Inc. */ /* @@ -95,10 +96,14 @@ #define BIG_PIPE_SIZE (64 * 1024) /* From sys/pipe.h */ #endif +#include "libzfs_core_impl.h" + static int g_fd = -1; static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER; static int g_refcount; +static int g_ioc_trace = 0; + #ifdef ZFS_DEBUG static zfs_ioc_t fail_ioc_cmd = ZFS_IOC_LAST; static zfs_errno_t fail_ioc_err; @@ -151,6 +156,10 @@ libzfs_core_init(void) #ifdef ZFS_DEBUG libzfs_core_debug_ioc(); #endif + + if (getenv("ZFS_IOC_TRACE")) + g_ioc_trace = 1; + (void) pthread_mutex_unlock(&g_lock); return (0); } @@ -170,6 +179,42 @@ libzfs_core_fini(void) (void) pthread_mutex_unlock(&g_lock); } +int +lzc_ioctl_fd(int fd, unsigned long ioc, zfs_cmd_t *zc) +{ + if (!g_ioc_trace) + return (lzc_ioctl_fd_os(fd, ioc, zc)); + + nvlist_t *nvl; + + fprintf(stderr, "=== lzc_ioctl: call: ioc=0x%lx name=%s\n", + ioc, zc->zc_name[0] ? zc->zc_name : "[none]"); + if (zc->zc_nvlist_src) { + nvl = fnvlist_unpack( + (void *)(uintptr_t)zc->zc_nvlist_src, + zc->zc_nvlist_src_size); + nvlist_print(stderr, nvl); + fnvlist_free(nvl); + } + + int rc = lzc_ioctl_fd_os(fd, ioc, zc); + int err = errno; + + fprintf(stderr, "=== lzc_ioctl: result: ioc=0x%lx name=%s " + "rc=%d errno=%d\n", ioc, zc->zc_name[0] ? zc->zc_name : "[none]", + rc, (rc < 0 ? err : 0)); + if (rc >= 0 && zc->zc_nvlist_dst) { + nvl = fnvlist_unpack( + (void *)(uintptr_t)zc->zc_nvlist_dst, + zc->zc_nvlist_dst_size); + nvlist_print(stderr, nvl); + fnvlist_free(nvl); + } + + errno = err; + return (rc); +} + static int lzc_ioctl(zfs_ioc_t ioc, const char *name, nvlist_t *source, nvlist_t **resultp) @@ -235,7 +280,7 @@ lzc_ioctl(zfs_ioc_t ioc, const char *name, break; } } - if (zc.zc_nvlist_dst_filled) { + if (zc.zc_nvlist_dst_filled && resultp != NULL) { *resultp = fnvlist_unpack((void *)(uintptr_t)zc.zc_nvlist_dst, zc.zc_nvlist_dst_size); } @@ -248,6 +293,13 @@ out: } int +lzc_scrub(zfs_ioc_t ioc, const char *name, + nvlist_t *source, nvlist_t **resultp) +{ + return (lzc_ioctl(ioc, name, source, resultp)); +} + +int lzc_create(const char *fsname, enum lzc_dataset_type type, nvlist_t *props, uint8_t *wkeydata, uint_t wkeylen) { @@ -589,6 +641,12 @@ lzc_get_holds(const char *snapname, nvlist_t **holdsp) return (lzc_ioctl(ZFS_IOC_GET_HOLDS, snapname, NULL, holdsp)); } +int +lzc_get_props(const char *poolname, nvlist_t **props) +{ + return (lzc_ioctl(ZFS_IOC_POOL_GET_PROPS, poolname, NULL, props)); +} + static unsigned int max_pipe_buffer(int infd) { @@ -643,10 +701,12 @@ send_worker(void *arg) unsigned int bufsiz = max_pipe_buffer(ctx->from); ssize_t rd; - while ((rd = splice(ctx->from, NULL, ctx->to, NULL, bufsiz, - SPLICE_F_MOVE | SPLICE_F_MORE)) > 0) - ; - + for (;;) { + rd = splice(ctx->from, NULL, ctx->to, NULL, bufsiz, + SPLICE_F_MOVE | SPLICE_F_MORE); + if ((rd == -1 && errno != EINTR) || rd == 0) + break; + } int err = (rd == -1) ? errno : 0; close(ctx->from); return ((void *)(uintptr_t)err); @@ -986,7 +1046,7 @@ recv_read(int fd, void *buf, int ilen) static int recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops, uint8_t *wkeydata, uint_t wkeylen, const char *origin, boolean_t force, - boolean_t resumable, boolean_t raw, int input_fd, + boolean_t heal, boolean_t resumable, boolean_t raw, int input_fd, const dmu_replay_record_t *begin_record, uint64_t *read_bytes, uint64_t *errflags, nvlist_t **errors) { @@ -1041,7 +1101,7 @@ recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops, /* * All receives with a payload should use the new interface. */ - if (resumable || raw || wkeydata != NULL || payload) { + if (resumable || heal || raw || wkeydata != NULL || payload) { nvlist_t *outnvl = NULL; nvlist_t *innvl = fnvlist_alloc(); @@ -1081,6 +1141,8 @@ recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops, if (resumable) fnvlist_add_boolean(innvl, "resumable"); + if (heal) + fnvlist_add_boolean(innvl, "heal"); error = lzc_ioctl(ZFS_IOC_RECV_NEW, fsname, innvl, &outnvl); @@ -1103,7 +1165,8 @@ recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops, fnvlist_free(outnvl); } else { zfs_cmd_t zc = {"\0"}; - char *packed = NULL; + char *rp_packed = NULL; + char *lp_packed = NULL; size_t size; ASSERT3S(g_refcount, >, 0); @@ -1112,14 +1175,14 @@ recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops, (void) strlcpy(zc.zc_value, snapname, sizeof (zc.zc_value)); if (recvdprops != NULL) { - packed = fnvlist_pack(recvdprops, &size); - zc.zc_nvlist_src = (uint64_t)(uintptr_t)packed; + rp_packed = fnvlist_pack(recvdprops, &size); + zc.zc_nvlist_src = (uint64_t)(uintptr_t)rp_packed; zc.zc_nvlist_src_size = size; } if (localprops != NULL) { - packed = fnvlist_pack(localprops, &size); - zc.zc_nvlist_conf = (uint64_t)(uintptr_t)packed; + lp_packed = fnvlist_pack(localprops, &size); + zc.zc_nvlist_conf = (uint64_t)(uintptr_t)lp_packed; zc.zc_nvlist_conf_size = size; } @@ -1154,8 +1217,10 @@ recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops, zc.zc_nvlist_dst_size, errors, KM_SLEEP)); } - if (packed != NULL) - fnvlist_pack_free(packed, size); + if (rp_packed != NULL) + fnvlist_pack_free(rp_packed, size); + if (lp_packed != NULL) + fnvlist_pack_free(lp_packed, size); free((void *)(uintptr_t)zc.zc_nvlist_dst); } @@ -1180,7 +1245,7 @@ lzc_receive(const char *snapname, nvlist_t *props, const char *origin, boolean_t force, boolean_t raw, int fd) { return (recv_impl(snapname, props, NULL, NULL, 0, origin, force, - B_FALSE, raw, fd, NULL, NULL, NULL, NULL)); + B_FALSE, B_FALSE, raw, fd, NULL, NULL, NULL, NULL)); } /* @@ -1194,7 +1259,7 @@ lzc_receive_resumable(const char *snapname, nvlist_t *props, const char *origin, boolean_t force, boolean_t raw, int fd) { return (recv_impl(snapname, props, NULL, NULL, 0, origin, force, - B_TRUE, raw, fd, NULL, NULL, NULL, NULL)); + B_FALSE, B_TRUE, raw, fd, NULL, NULL, NULL, NULL)); } /* @@ -1217,7 +1282,7 @@ lzc_receive_with_header(const char *snapname, nvlist_t *props, return (EINVAL); return (recv_impl(snapname, props, NULL, NULL, 0, origin, force, - resumable, raw, fd, begin_record, NULL, NULL, NULL)); + B_FALSE, resumable, raw, fd, begin_record, NULL, NULL, NULL)); } /* @@ -1247,7 +1312,7 @@ lzc_receive_one(const char *snapname, nvlist_t *props, { (void) action_handle, (void) cleanup_fd; return (recv_impl(snapname, props, NULL, NULL, 0, origin, force, - resumable, raw, input_fd, begin_record, + B_FALSE, resumable, raw, input_fd, begin_record, read_bytes, errflags, errors)); } @@ -1269,7 +1334,27 @@ lzc_receive_with_cmdprops(const char *snapname, nvlist_t *props, { (void) action_handle, (void) cleanup_fd; return (recv_impl(snapname, props, cmdprops, wkeydata, wkeylen, origin, - force, resumable, raw, input_fd, begin_record, + force, B_FALSE, resumable, raw, input_fd, begin_record, + read_bytes, errflags, errors)); +} + +/* + * Like lzc_receive_with_cmdprops, but allows the caller to pass an additional + * 'heal' argument. + * + * The heal arguments tells us to heal the provided snapshot using the provided + * send stream + */ +int lzc_receive_with_heal(const char *snapname, nvlist_t *props, + nvlist_t *cmdprops, uint8_t *wkeydata, uint_t wkeylen, const char *origin, + boolean_t force, boolean_t heal, boolean_t resumable, boolean_t raw, + int input_fd, const dmu_replay_record_t *begin_record, int cleanup_fd, + uint64_t *read_bytes, uint64_t *errflags, uint64_t *action_handle, + nvlist_t **errors) +{ + (void) action_handle, (void) cleanup_fd; + return (recv_impl(snapname, props, cmdprops, wkeydata, wkeylen, origin, + force, heal, resumable, raw, input_fd, begin_record, read_bytes, errflags, errors)); } @@ -1590,6 +1675,26 @@ lzc_pool_checkpoint_discard(const char *pool) } /* + * Load the requested data type for the specified pool. + */ +int +lzc_pool_prefetch(const char *pool, zpool_prefetch_type_t type) +{ + int error; + nvlist_t *result = NULL; + nvlist_t *args = fnvlist_alloc(); + + fnvlist_add_int32(args, ZPOOL_PREFETCH_TYPE, type); + + error = lzc_ioctl(ZFS_IOC_POOL_PREFETCH, pool, args, &result); + + fnvlist_free(args); + fnvlist_free(result); + + return (error); +} + +/* * Executes a read-only channel program. * * A read-only channel program works programmatically the same way as a @@ -1867,3 +1972,25 @@ lzc_get_bootenv(const char *pool, nvlist_t **outnvl) { return (lzc_ioctl(ZFS_IOC_GET_BOOTENV, pool, NULL, outnvl)); } + +/* + * Prune the specified amount from the pool's dedup table. + */ +int +lzc_ddt_prune(const char *pool, zpool_ddt_prune_unit_t unit, uint64_t amount) +{ + int error; + + nvlist_t *result = NULL; + nvlist_t *args = fnvlist_alloc(); + + fnvlist_add_int32(args, DDT_PRUNE_UNIT, unit); + fnvlist_add_uint64(args, DDT_PRUNE_AMOUNT, amount); + + error = lzc_ioctl(ZFS_IOC_DDT_PRUNE, pool, args, &result); + + fnvlist_free(args); + fnvlist_free(result); + + return (error); +} diff --git a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core_impl.h b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core_impl.h new file mode 100644 index 000000000000..baf9a7a95834 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core_impl.h @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012, 2020 by Delphix. All rights reserved. + * Copyright 2017 RackTop Systems. + * Copyright (c) 2017 Open-E, Inc. All Rights Reserved. + * Copyright (c) 2019 Datto Inc. + */ + +#ifndef _LIBZFS_CORE_IMPL_H +#define _LIBZFS_CORE_IMPL_H + +struct zfs_cmd; +int lzc_ioctl_fd_os(int, unsigned long, struct zfs_cmd *); + +#endif /* _LIBZFS_CORE_IMPL_H */ diff --git a/sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c b/sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c index b8394886d034..39e217a9349e 100644 --- a/sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c +++ b/sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -25,6 +26,7 @@ #include <os/freebsd/zfs/sys/zfs_ioctl_compat.h> #include <err.h> #include <libzfs_core.h> +#include "libzfs_core_impl.h" int zfs_ioctl_version = ZFS_IOCVER_UNDEF; @@ -38,7 +40,7 @@ get_zfs_ioctl_version(void) int ver = ZFS_IOCVER_NONE; ver_size = sizeof (ver); - sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0); + (void) sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0); return (ver); } @@ -46,8 +48,11 @@ get_zfs_ioctl_version(void) static int zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag) { - int newrequest, ret; + int ret; +#ifdef ZFS_LEGACY_SUPPORT + int newrequest; void *zc_c = NULL; +#endif unsigned long ncmd; zfs_iocparm_t zp; @@ -58,6 +63,7 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag) zp.zfs_cmd_size = sizeof (zfs_cmd_t); zp.zfs_ioctl_version = ZFS_IOCVER_OZFS; break; +#ifdef ZFS_LEGACY_SUPPORT case ZFS_CMD_COMPAT_LEGACY: newrequest = zfs_ioctl_ozfs_to_legacy(request); ncmd = _IOWR('Z', newrequest, zfs_iocparm_t); @@ -67,6 +73,7 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag) zp.zfs_cmd_size = sizeof (zfs_cmd_legacy_t); zp.zfs_ioctl_version = ZFS_IOCVER_LEGACY; break; +#endif default: abort(); return (EINVAL); @@ -74,14 +81,18 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag) ret = ioctl(fd, ncmd, &zp); if (ret) { +#ifdef ZFS_LEGACY_SUPPORT if (zc_c) free(zc_c); +#endif return (ret); } +#ifdef ZFS_LEGACY_SUPPORT if (zc_c) { zfs_cmd_legacy_to_ozfs(zc_c, zc); free(zc_c); } +#endif return (ret); } @@ -91,7 +102,7 @@ zcmd_ioctl_compat(int fd, int request, zfs_cmd_t *zc, const int cflag) * error is returned zc_nvlist_dst_size won't be updated. */ int -lzc_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc) +lzc_ioctl_fd_os(int fd, unsigned long request, zfs_cmd_t *zc) { size_t oldsize; int ret, cflag = ZFS_CMD_COMPAT_NONE; @@ -100,9 +111,11 @@ lzc_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc) zfs_ioctl_version = get_zfs_ioctl_version(); switch (zfs_ioctl_version) { +#ifdef ZFS_LEGACY_SUPPORT case ZFS_IOCVER_LEGACY: cflag = ZFS_CMD_COMPAT_LEGACY; break; +#endif case ZFS_IOCVER_OZFS: cflag = ZFS_CMD_COMPAT_NONE; break; diff --git a/sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c b/sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c index 9b44a4e3be0d..6823588e23e2 100644 --- a/sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c +++ b/sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,9 +23,10 @@ #include <sys/param.h> #include <sys/zfs_ioctl.h> #include <libzfs_core.h> +#include "libzfs_core_impl.h" int -lzc_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc) +lzc_ioctl_fd_os(int fd, unsigned long request, zfs_cmd_t *zc) { return (ioctl(fd, request, zc)); } diff --git a/sys/contrib/openzfs/lib/libzfsbootenv/libzfsbootenv.abi b/sys/contrib/openzfs/lib/libzfsbootenv/libzfsbootenv.abi index 86ec25cf8470..e2b492a0780d 100644 --- a/sys/contrib/openzfs/lib/libzfsbootenv/libzfsbootenv.abi +++ b/sys/contrib/openzfs/lib/libzfsbootenv/libzfsbootenv.abi @@ -1,6 +1,6 @@ <abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='libzfsbootenv.so.1'> <elf-needed> - <dependency name='libzfs.so.4'/> + <dependency name='libzfs.so.7'/> <dependency name='libnvpair.so.3'/> <dependency name='libc.so.6'/> </elf-needed> @@ -14,69 +14,8 @@ <elf-symbol name='lzbe_remove_pair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> <elf-symbol name='lzbe_set_boot_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/> </elf-function-symbols> - <abi-instr address-size='64' path='lzbe_device.c' language='LANG_C99'> + <abi-instr address-size='64' path='lib/libzfsbootenv/lzbe_device.c' language='LANG_C99'> <type-decl name='char' size-in-bits='8' id='a84c031d'/> - <type-decl name='int' size-in-bits='32' id='95e97e5e'/> - <type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/> - <type-decl name='void' id='48b5725f'/> - <enum-decl name='lzbe_flags' id='2b77720b'> - <underlying-type type-id='9cac1fee'/> - <enumerator name='lzbe_add' value='0'/> - <enumerator name='lzbe_replace' value='1'/> - </enum-decl> - <typedef-decl name='lzbe_flags_t' type-id='2b77720b' id='a1936f04'/> - <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/> - <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> - <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/> - <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/> - <function-decl name='lzbe_set_boot_device' mangled-name='lzbe_set_boot_device' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_set_boot_device'> - <parameter type-id='80f4b756' name='pool'/> - <parameter type-id='a1936f04' name='flag'/> - <parameter type-id='80f4b756' name='device'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='lzbe_get_boot_device' mangled-name='lzbe_get_boot_device' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_get_boot_device'> - <parameter type-id='80f4b756' name='pool'/> - <parameter type-id='9b23c9ad' name='device'/> - <return type-id='95e97e5e'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='lzbe_pair.c' language='LANG_C99'> - <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> - <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> - <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/> - <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> - <function-decl name='lzbe_nvlist_get' mangled-name='lzbe_nvlist_get' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_nvlist_get'> - <parameter type-id='80f4b756' name='pool'/> - <parameter type-id='80f4b756' name='key'/> - <parameter type-id='63e171df' name='ptr'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='lzbe_nvlist_set' mangled-name='lzbe_nvlist_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_nvlist_set'> - <parameter type-id='80f4b756' name='pool'/> - <parameter type-id='80f4b756' name='key'/> - <parameter type-id='eaa32e2f' name='ptr'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='lzbe_nvlist_free' mangled-name='lzbe_nvlist_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_nvlist_free'> - <parameter type-id='eaa32e2f' name='ptr'/> - <return type-id='48b5725f'/> - </function-decl> - <function-decl name='lzbe_add_pair' mangled-name='lzbe_add_pair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_add_pair'> - <parameter type-id='eaa32e2f' name='ptr'/> - <parameter type-id='80f4b756' name='key'/> - <parameter type-id='80f4b756' name='type'/> - <parameter type-id='eaa32e2f' name='value'/> - <parameter type-id='b59d7dce' name='size'/> - <return type-id='95e97e5e'/> - </function-decl> - <function-decl name='lzbe_remove_pair' mangled-name='lzbe_remove_pair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_remove_pair'> - <parameter type-id='eaa32e2f' name='ptr'/> - <parameter type-id='80f4b756' name='key'/> - <return type-id='95e97e5e'/> - </function-decl> - </abi-instr> - <abi-instr address-size='64' path='lzbe_util.c' language='LANG_C99'> <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'> <subrange length='1' type-id='7359adad' id='52f813b4'/> </array-type-def> @@ -86,9 +25,55 @@ <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <class-decl name='libzfs_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='c8a9d9d8'/> + <class-decl name='zpool_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='67002a8a'/> + <type-decl name='int' size-in-bits='32' id='95e97e5e'/> <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/> <type-decl name='signed char' size-in-bits='8' id='28577a57'/> + <type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/> + <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/> + <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/> <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/> + <type-decl name='variadic parameter type' id='2c1145c5'/> + <type-decl name='void' id='48b5725f'/> + <typedef-decl name='zpool_handle_t' type-id='67002a8a' id='b1efc708'/> + <typedef-decl name='libzfs_handle_t' type-id='c8a9d9d8' id='95942d0c'/> + <enum-decl name='lzbe_flags' id='2b77720b'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='lzbe_add' value='0'/> + <enumerator name='lzbe_replace' value='1'/> + </enum-decl> + <typedef-decl name='lzbe_flags_t' type-id='2b77720b' id='a1936f04'/> + <class-decl name='nvlist' size-in-bits='192' is-struct='yes' visibility='default' id='ac266fd9'> + <data-member access='public' layout-offset-in-bits='0'> + <var-decl name='nvl_version' type-id='3ff5601b' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='32'> + <var-decl name='nvl_nvflag' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='64'> + <var-decl name='nvl_priv' type-id='9c313c2d' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='128'> + <var-decl name='nvl_flag' type-id='8f92235e' visibility='default'/> + </data-member> + <data-member access='public' layout-offset-in-bits='160'> + <var-decl name='nvl_pad' type-id='3ff5601b' visibility='default'/> + </data-member> + </class-decl> + <typedef-decl name='nvlist_t' type-id='ac266fd9' id='8e8d4be3'/> + <enum-decl name='boolean_t' naming-typedef-id='c19b74c3' id='f58c8277'> + <underlying-type type-id='9cac1fee'/> + <enumerator name='B_FALSE' value='0'/> + <enumerator name='B_TRUE' value='1'/> + </enum-decl> + <typedef-decl name='boolean_t' type-id='f58c8277' id='c19b74c3'/> + <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/> + <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/> + <typedef-decl name='uint64_t' type-id='8910171f' id='9c313c2d'/> + <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='__off_t' type-id='bd54fe1a' id='79989e9c'/> <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/> <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/> @@ -182,15 +167,413 @@ <var-decl name='_unused2' type-id='664ac0b7' visibility='default'/> </data-member> </class-decl> + <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/> <pointer-type-def type-id='aa12d1ba' size-in-bits='64' id='822cd80b'/> + <qualified-type-def type-id='822cd80b' restrict='yes' id='e75a27e9'/> <pointer-type-def type-id='ec1ed955' size-in-bits='64' id='dca988a5'/> <pointer-type-def type-id='a4036571' size-in-bits='64' id='570f8c59'/> <pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/> <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/> <pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/> + <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/> + <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/> + <qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/> + <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/> + <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/> + <qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/> + <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/> + <qualified-type-def type-id='8e8d4be3' const='yes' id='693c3853'/> + <pointer-type-def type-id='693c3853' size-in-bits='64' id='22cce67b'/> + <pointer-type-def type-id='95942d0c' size-in-bits='64' id='b0382bb3'/> + <pointer-type-def type-id='8e8d4be3' size-in-bits='64' id='5ce45b60'/> + <pointer-type-def type-id='5ce45b60' size-in-bits='64' id='857bb57e'/> + <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/> + <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/> + <pointer-type-def type-id='b1efc708' size-in-bits='64' id='4c81de99'/> <class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/> <class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/> <class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/> + <class-decl name='libzfs_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='c8a9d9d8'/> + <class-decl name='zpool_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='67002a8a'/> + <function-decl name='libzfs_init' visibility='default' binding='global' size-in-bits='64'> + <return type-id='b0382bb3'/> + </function-decl> + <function-decl name='libzfs_fini' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='libzfs_error_description' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <return type-id='80f4b756'/> + </function-decl> + <function-decl name='zpool_open' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='b0382bb3'/> + <parameter type-id='80f4b756'/> + <return type-id='4c81de99'/> + </function-decl> + <function-decl name='zpool_close' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4c81de99'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='zpool_set_bootenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4c81de99'/> + <parameter type-id='22cce67b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='zpool_get_bootenv' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='4c81de99'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='nvlist_lookup_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <parameter type-id='5d6479ae'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <parameter type-id='7d3cd834'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_exists' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='80f4b756'/> + <return type-id='c19b74c3'/> + </function-decl> + <function-decl name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64'> + <return type-id='5ce45b60'/> + </function-decl> + <function-decl name='fnvlist_free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_add_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='fnvlist_remove' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='free' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='eaa32e2f'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='strncmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b59d7dce'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strdup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='26a90f95'/> + </function-decl> + <function-decl name='strlen' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <return type-id='b59d7dce'/> + </function-decl> + <function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='e75a27e9'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='__asprintf_chk' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='8c85230f'/> + <parameter type-id='95e97e5e'/> + <parameter type-id='9d26089a'/> + <parameter is-variadic='yes'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzbe_set_boot_device' mangled-name='lzbe_set_boot_device' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_set_boot_device'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='a1936f04' name='flag'/> + <parameter type-id='80f4b756' name='device'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzbe_get_boot_device' mangled-name='lzbe_get_boot_device' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_get_boot_device'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='9b23c9ad' name='device'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libzfsbootenv/lzbe_pair.c' language='LANG_C99'> + <type-decl name='short int' size-in-bits='16' id='a2185560'/> + <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/> + <typedef-decl name='uchar_t' type-id='002ac4a6' id='d8bf0010'/> + <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/> + <typedef-decl name='int8_t' type-id='2171a512' id='ee31ee44'/> + <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/> + <typedef-decl name='int64_t' type-id='0c9942d2' id='9da381c4'/> + <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/> + <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/> + <typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/> + <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/> + <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/> + <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/> + <typedef-decl name='__int64_t' type-id='bd54fe1a' id='0c9942d2'/> + <qualified-type-def type-id='c19b74c3' const='yes' id='12373e33'/> + <pointer-type-def type-id='12373e33' size-in-bits='64' id='c5f6c15b'/> + <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/> + <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/> + <qualified-type-def type-id='23bd8cb5' const='yes' id='75f7b0c5'/> + <pointer-type-def type-id='75f7b0c5' size-in-bits='64' id='a3eb883d'/> + <qualified-type-def type-id='3ff5601b' const='yes' id='922df12b'/> + <pointer-type-def type-id='922df12b' size-in-bits='64' id='1f526493'/> + <qualified-type-def type-id='9da381c4' const='yes' id='f07b7694'/> + <pointer-type-def type-id='f07b7694' size-in-bits='64' id='505bed1a'/> + <qualified-type-def type-id='ee31ee44' const='yes' id='721c32d4'/> + <pointer-type-def type-id='721c32d4' size-in-bits='64' id='a06445da'/> + <qualified-type-def type-id='22cce67b' const='yes' id='d2816df0'/> + <pointer-type-def type-id='d2816df0' size-in-bits='64' id='3bbfee2e'/> + <qualified-type-def type-id='d8bf0010' const='yes' id='a9125480'/> + <pointer-type-def type-id='a9125480' size-in-bits='64' id='d1db479e'/> + <qualified-type-def type-id='149c6638' const='yes' id='b01a5ac8'/> + <pointer-type-def type-id='b01a5ac8' size-in-bits='64' id='1b7d11c6'/> + <qualified-type-def type-id='8f92235e' const='yes' id='b9930aae'/> + <pointer-type-def type-id='b9930aae' size-in-bits='64' id='a6798dcc'/> + <qualified-type-def type-id='9c313c2d' const='yes' id='c3b7ba7d'/> + <pointer-type-def type-id='c3b7ba7d' size-in-bits='64' id='713a56f5'/> + <qualified-type-def type-id='b96825af' const='yes' id='2b61797f'/> + <pointer-type-def type-id='2b61797f' size-in-bits='64' id='9f7200cf'/> + <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/> + <function-decl name='nvlist_alloc' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='857bb57e'/> + <parameter type-id='3502e3ff'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_dup' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='22cce67b'/> + <parameter type-id='857bb57e'/> + <parameter type-id='95e97e5e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_boolean_value' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c19b74c3'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_byte' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='d8bf0010'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int8' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='ee31ee44'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint8' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='b96825af'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int16' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='23bd8cb5'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint16' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='149c6638'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='3ff5601b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint32' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='8f92235e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9da381c4'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint64' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9c313c2d'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_string' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='22cce67b'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_boolean_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='c5f6c15b'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_byte_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='d1db479e'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int8_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='a06445da'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint8_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='9f7200cf'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int16_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='a3eb883d'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint16_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='1b7d11c6'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int32_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='1f526493'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint32_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='a6798dcc'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_int64_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='505bed1a'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_uint64_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='713a56f5'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_string_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='13956559'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_add_nvlist_array' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='3bbfee2e'/> + <parameter type-id='3502e3ff'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_remove_all' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='nvlist_lookup_nvlist' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='5ce45b60'/> + <parameter type-id='80f4b756'/> + <parameter type-id='857bb57e'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='strcmp' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='80f4b756'/> + <parameter type-id='80f4b756'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzbe_nvlist_get' mangled-name='lzbe_nvlist_get' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_nvlist_get'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='80f4b756' name='key'/> + <parameter type-id='63e171df' name='ptr'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzbe_nvlist_set' mangled-name='lzbe_nvlist_set' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_nvlist_set'> + <parameter type-id='80f4b756' name='pool'/> + <parameter type-id='80f4b756' name='key'/> + <parameter type-id='eaa32e2f' name='ptr'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzbe_nvlist_free' mangled-name='lzbe_nvlist_free' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_nvlist_free'> + <parameter type-id='eaa32e2f' name='ptr'/> + <return type-id='48b5725f'/> + </function-decl> + <function-decl name='lzbe_add_pair' mangled-name='lzbe_add_pair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_add_pair'> + <parameter type-id='eaa32e2f' name='ptr'/> + <parameter type-id='80f4b756' name='key'/> + <parameter type-id='80f4b756' name='type'/> + <parameter type-id='eaa32e2f' name='value'/> + <parameter type-id='b59d7dce' name='size'/> + <return type-id='95e97e5e'/> + </function-decl> + <function-decl name='lzbe_remove_pair' mangled-name='lzbe_remove_pair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_remove_pair'> + <parameter type-id='eaa32e2f' name='ptr'/> + <parameter type-id='80f4b756' name='key'/> + <return type-id='95e97e5e'/> + </function-decl> + </abi-instr> + <abi-instr address-size='64' path='lib/libzfsbootenv/lzbe_util.c' language='LANG_C99'> + <function-decl name='nvlist_print' visibility='default' binding='global' size-in-bits='64'> + <parameter type-id='822cd80b'/> + <parameter type-id='5ce45b60'/> + <return type-id='48b5725f'/> + </function-decl> <function-decl name='lzbe_bootenv_print' mangled-name='lzbe_bootenv_print' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzbe_bootenv_print'> <parameter type-id='80f4b756' name='pool'/> <parameter type-id='80f4b756' name='nvlist'/> diff --git a/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_device.c b/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_device.c index 39e33324b315..f155960bfea0 100644 --- a/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_device.c +++ b/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_device.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. @@ -74,6 +75,7 @@ lzbe_set_boot_device(const char *pool, lzbe_flags_t flag, const char *device) /* version is mandatory */ fnvlist_add_uint64(nv, BOOTENV_VERSION, VB_NVLIST); + rv = 0; /* * If device name is empty, remove boot device configuration. */ @@ -95,8 +97,8 @@ lzbe_set_boot_device(const char *pool, lzbe_flags_t flag, const char *device) rv = ENOMEM; } } - - rv = zpool_set_bootenv(zphdl, nv); + if (rv == 0) + rv = zpool_set_bootenv(zphdl, nv); if (rv != 0) fprintf(stderr, "%s\n", libzfs_error_description(hdl)); @@ -115,7 +117,7 @@ lzbe_get_boot_device(const char *pool, char **device) libzfs_handle_t *hdl; zpool_handle_t *zphdl; nvlist_t *nv; - char *val; + const char *val; int rv = -1; if (pool == NULL || *pool == '\0' || device == NULL) @@ -139,14 +141,13 @@ lzbe_get_boot_device(const char *pool, char **device) * we only do need dataset name. */ if (strncmp(val, "zfs:", 4) == 0) { - val += 4; - val = strdup(val); - if (val != NULL) { - size_t len = strlen(val); - - if (val[len - 1] == ':') - val[len - 1] = '\0'; - *device = val; + char *tmp = strdup(val + 4); + if (tmp != NULL) { + size_t len = strlen(tmp); + + if (tmp[len - 1] == ':') + tmp[len - 1] = '\0'; + *device = tmp; } else { rv = ENOMEM; } diff --git a/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_pair.c b/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_pair.c index b92225984517..3f576a569f28 100644 --- a/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_pair.c +++ b/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_pair.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. diff --git a/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_util.c b/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_util.c index 35e98549582e..fc60f698f3bc 100644 --- a/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_util.c +++ b/sys/contrib/openzfs/lib/libzfsbootenv/lzbe_util.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. diff --git a/sys/contrib/openzfs/lib/libzpool/Makefile.am b/sys/contrib/openzfs/lib/libzpool/Makefile.am index eaa920e56106..8340fe2efd71 100644 --- a/sys/contrib/openzfs/lib/libzpool/Makefile.am +++ b/sys/contrib/openzfs/lib/libzpool/Makefile.am @@ -1,17 +1,22 @@ +include $(srcdir)/%D%/include/Makefile.am + libzpool_la_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) $(LIBRARY_CFLAGS) libzpool_la_CFLAGS += $(ZLIB_CFLAGS) -libzpool_la_CPPFLAGS = $(AM_CPPFLAGS) $(FORCEDEBUG_CPPFLAGS) -libzpool_la_CPPFLAGS += -I$(srcdir)/include/os/@ac_system_l@/zfs +libzpool_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBZPOOL_CPPFLAGS) libzpool_la_CPPFLAGS += -DLIB_ZPOOL_BUILD lib_LTLIBRARIES += libzpool.la CPPCHECKTARGETS += libzpool.la dist_libzpool_la_SOURCES = \ + %D%/abd_os.c \ + %D%/arc_os.c \ %D%/kernel.c \ - %D%/taskq.c \ - %D%/util.c + %D%/util.c \ + %D%/vdev_label_os.c \ + %D%/zfs_racct.c \ + %D%/zfs_debug.c nodist_libzpool_la_SOURCES = \ module/lua/lapi.c \ @@ -39,16 +44,10 @@ nodist_libzpool_la_SOURCES = \ module/lua/lvm.c \ module/lua/lzio.c \ \ - module/os/linux/zfs/abd_os.c \ - module/os/linux/zfs/arc_os.c \ - module/os/linux/zfs/trace.c \ - module/os/linux/zfs/vdev_file.c \ - module/os/linux/zfs/zfs_debug.c \ - module/os/linux/zfs/zfs_racct.c \ - module/os/linux/zfs/zfs_znode.c \ module/os/linux/zfs/zio_crypt.c \ \ module/zcommon/cityhash.c \ + module/zcommon/simd_stat.c \ module/zcommon/zfeature_common.c \ module/zcommon/zfs_comutil.c \ module/zcommon/zfs_deleg.c \ @@ -61,6 +60,7 @@ nodist_libzpool_la_SOURCES = \ module/zcommon/zfs_fletcher_superscalar4.c \ module/zcommon/zfs_namecheck.c \ module/zcommon/zfs_prop.c \ + module/zcommon/zfs_valstr.c \ module/zcommon/zpool_prop.c \ module/zcommon/zprop_common.c \ \ @@ -74,12 +74,16 @@ nodist_libzpool_la_SOURCES = \ module/zfs/bptree.c \ module/zfs/bqueue.c \ module/zfs/btree.c \ + module/zfs/brt.c \ module/zfs/dbuf.c \ module/zfs/dbuf_stats.c \ module/zfs/ddt.c \ + module/zfs/ddt_log.c \ + module/zfs/ddt_stats.c \ module/zfs/ddt_zap.c \ module/zfs/dmu.c \ module/zfs/dmu_diff.c \ + module/zfs/dmu_direct.c \ module/zfs/dmu_object.c \ module/zfs/dmu_objset.c \ module/zfs/dmu_recv.c \ @@ -118,10 +122,9 @@ nodist_libzpool_la_SOURCES = \ module/zfs/refcount.c \ module/zfs/rrwlock.c \ module/zfs/sa.c \ - module/zfs/sha256.c \ + module/zfs/sha2_zfs.c \ module/zfs/skein_zfs.c \ module/zfs/spa.c \ - module/zfs/spa_boot.c \ module/zfs/spa_checkpoint.c \ module/zfs/spa_config.c \ module/zfs/spa_errlog.c \ @@ -135,9 +138,9 @@ nodist_libzpool_la_SOURCES = \ module/zfs/uberblock.c \ module/zfs/unique.c \ module/zfs/vdev.c \ - module/zfs/vdev_cache.c \ module/zfs/vdev_draid.c \ module/zfs/vdev_draid_rand.c \ + module/zfs/vdev_file.c \ module/zfs/vdev_indirect.c \ module/zfs/vdev_indirect_births.c \ module/zfs/vdev_indirect_mapping.c \ @@ -173,11 +176,15 @@ nodist_libzpool_la_SOURCES = \ module/zfs/zfeature.c \ module/zfs/zfs_byteswap.c \ module/zfs/zfs_chksum.c \ + module/zfs/zfs_debug_common.c \ + module/zfs/zfs_crrd.c \ module/zfs/zfs_fm.c \ module/zfs/zfs_fuid.c \ + module/zfs/zfs_impl.c \ module/zfs/zfs_ratelimit.c \ module/zfs/zfs_rlock.c \ module/zfs/zfs_sa.c \ + module/zfs/zfs_znode.c \ module/zfs/zil.c \ module/zfs/zio.c \ module/zfs/zio_checksum.c \ @@ -194,7 +201,7 @@ libzpool_la_LIBADD = \ libzstd.la \ libzutil.la -libzpool_la_LIBADD += $(LIBCLOCK_GETTIME) $(ZLIB_LIBS) -ldl -lm +libzpool_la_LIBADD += $(LIBCLOCK_GETTIME) $(ZLIB_LIBS) -lm libzpool_la_LDFLAGS = -pthread @@ -206,7 +213,7 @@ if BUILD_FREEBSD libzpool_la_LIBADD += -lgeom endif -libzpool_la_LDFLAGS += -version-info 5:0:0 +libzpool_la_LDFLAGS += -version-info 7:0:0 if TARGET_CPU_POWERPC module/zfs/libzpool_la-vdev_raidz_math_powerpc_altivec.$(OBJEXT) : CFLAGS += -maltivec diff --git a/sys/contrib/openzfs/lib/libzpool/abd_os.c b/sys/contrib/openzfs/lib/libzpool/abd_os.c new file mode 100644 index 000000000000..8bd7a64ab24a --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/abd_os.c @@ -0,0 +1,430 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Chunwei Chen. All rights reserved. + * Copyright (c) 2019 by Delphix. All rights reserved. + * Copyright (c) 2023, 2024, Klara Inc. + */ + +#include <sys/abd_impl.h> +#include <sys/param.h> +#include <sys/zio.h> +#include <sys/arc.h> +#include <sys/zfs_context.h> +#include <sys/zfs_znode.h> + +/* + * We're simulating scatter/gather with 4K allocations, since that's more like + * what a typical kernel does. + */ +#define ABD_PAGESIZE (4096) +#define ABD_PAGESHIFT (12) +#define ABD_PAGEMASK (ABD_PAGESIZE-1) + +/* + * See rationale in module/os/linux/zfs/abd_os.c, but in userspace this is + * mostly useful to get a mix of linear and scatter ABDs for testing. + */ +#define ABD_SCATTER_MIN_SIZE (512 * 3) + +abd_t *abd_zero_scatter = NULL; + +static uint_t +abd_iovcnt_for_bytes(size_t size) +{ + /* + * Each iovec points to a 4K page. There's no real reason to do this + * in userspace, but our whole point here is to make it feel a bit + * more like a real paged memory model. + */ + return (P2ROUNDUP(size, ABD_PAGESIZE) / ABD_PAGESIZE); +} + +abd_t * +abd_alloc_struct_impl(size_t size) +{ + /* + * Zero-sized means it will be used for a linear or gang abd, so just + * allocate the abd itself and return. + */ + if (size == 0) + return (umem_alloc(sizeof (abd_t), UMEM_NOFAIL)); + + /* + * Allocating for a scatter abd, so compute how many ABD_PAGESIZE + * iovecs we will need to hold this size. Append that allocation to the + * end. Note that struct abd_scatter has includes abd_iov[1], so we + * allocate one less iovec than we need. + * + * Note we're not allocating the pages proper, just the iovec pointers. + * That's down in abd_alloc_chunks. We _could_ do it here in a single + * allocation, but it's fiddly and harder to read for no real gain. + */ + uint_t n = abd_iovcnt_for_bytes(size); + abd_t *abd = umem_alloc(sizeof (abd_t) + (n-1) * sizeof (struct iovec), + UMEM_NOFAIL); + ABD_SCATTER(abd).abd_offset = 0; + ABD_SCATTER(abd).abd_iovcnt = n; + return (abd); +} + +void +abd_free_struct_impl(abd_t *abd) +{ + /* For scatter, compute the extra amount we need to free */ + uint_t iovcnt = + abd_is_linear(abd) || abd_is_gang(abd) ? + 0 : (ABD_SCATTER(abd).abd_iovcnt - 1); + umem_free(abd, sizeof (abd_t) + iovcnt * sizeof (struct iovec)); +} + +void +abd_alloc_chunks(abd_t *abd, size_t size) +{ + /* + * We've already allocated the iovec array; ensure that the wanted size + * actually matches, otherwise the caller has made a mistake somewhere. + */ + uint_t n = ABD_SCATTER(abd).abd_iovcnt; + ASSERT3U(n, ==, abd_iovcnt_for_bytes(size)); + + /* + * Allocate a ABD_PAGESIZE region for each iovec. + */ + struct iovec *iov = ABD_SCATTER(abd).abd_iov; + for (int i = 0; i < n; i++) { + iov[i].iov_base = + umem_alloc_aligned(ABD_PAGESIZE, ABD_PAGESIZE, UMEM_NOFAIL); + iov[i].iov_len = ABD_PAGESIZE; + } +} + +void +abd_free_chunks(abd_t *abd) +{ + uint_t n = ABD_SCATTER(abd).abd_iovcnt; + struct iovec *iov = ABD_SCATTER(abd).abd_iov; + for (int i = 0; i < n; i++) + umem_free_aligned(iov[i].iov_base, ABD_PAGESIZE); +} + +boolean_t +abd_size_alloc_linear(size_t size) +{ + return (size < ABD_SCATTER_MIN_SIZE); +} + +void +abd_update_scatter_stats(abd_t *abd, abd_stats_op_t op) +{ + ASSERT(op == ABDSTAT_INCR || op == ABDSTAT_DECR); + int waste = P2ROUNDUP(abd->abd_size, ABD_PAGESIZE) - abd->abd_size; + if (op == ABDSTAT_INCR) { + arc_space_consume(waste, ARC_SPACE_ABD_CHUNK_WASTE); + } else { + arc_space_return(waste, ARC_SPACE_ABD_CHUNK_WASTE); + } +} + +void +abd_update_linear_stats(abd_t *abd, abd_stats_op_t op) +{ + (void) abd; + (void) op; + ASSERT(op == ABDSTAT_INCR || op == ABDSTAT_DECR); +} + +void +abd_verify_scatter(abd_t *abd) +{ +#ifdef ZFS_DEBUG + /* + * scatter abds shall have: + * - at least one iovec + * - all iov_base point somewhere + * - all iov_len are ABD_PAGESIZE + * - offset set within the abd pages somewhere + */ + uint_t n = ABD_SCATTER(abd).abd_iovcnt; + ASSERT3U(n, >, 0); + + uint_t len = 0; + for (int i = 0; i < n; i++) { + ASSERT3P(ABD_SCATTER(abd).abd_iov[i].iov_base, !=, NULL); + ASSERT3U(ABD_SCATTER(abd).abd_iov[i].iov_len, ==, ABD_PAGESIZE); + len += ABD_PAGESIZE; + } + + ASSERT3U(ABD_SCATTER(abd).abd_offset, <, len); +#endif +} + +void +abd_init(void) +{ + /* + * Create the "zero" scatter abd. This is always the size of the + * largest possible block, but only actually has a single allocated + * page, which all iovecs in the abd point to. + */ + abd_zero_scatter = abd_alloc_struct(SPA_MAXBLOCKSIZE); + abd_zero_scatter->abd_flags |= ABD_FLAG_OWNER; + abd_zero_scatter->abd_size = SPA_MAXBLOCKSIZE; + + void *zero = + umem_alloc_aligned(ABD_PAGESIZE, ABD_PAGESIZE, UMEM_NOFAIL); + memset(zero, 0, ABD_PAGESIZE); + + uint_t n = abd_iovcnt_for_bytes(SPA_MAXBLOCKSIZE); + struct iovec *iov = ABD_SCATTER(abd_zero_scatter).abd_iov; + for (int i = 0; i < n; i++) { + iov[i].iov_base = zero; + iov[i].iov_len = ABD_PAGESIZE; + } +} + +void +abd_fini(void) +{ + umem_free_aligned( + ABD_SCATTER(abd_zero_scatter).abd_iov[0].iov_base, ABD_PAGESIZE); + abd_free_struct(abd_zero_scatter); + abd_zero_scatter = NULL; +} + +void +abd_free_linear_page(abd_t *abd) +{ + /* + * LINEAR_PAGE is specific to the Linux kernel; we never set this + * flag, so this will never be called. + */ + (void) abd; + PANIC("unreachable"); +} + +abd_t * +abd_alloc_for_io(size_t size, boolean_t is_metadata) +{ + return (abd_alloc(size, is_metadata)); +} + +abd_t * +abd_get_offset_scatter(abd_t *dabd, abd_t *sabd, size_t off, size_t size) +{ + + /* + * Create a new scatter dabd by borrowing data pages from sabd to cover + * off+size. + * + * sabd is an existing scatter abd with a set of iovecs, each covering + * an ABD_PAGESIZE (4K) allocation. It's "zero" is at abd_offset. + * + * [........][........][........][........] + * ^- sabd_offset + * + * We want to produce a new abd, referencing those allocations at the + * given offset. + * + * [........][........][........][........] + * ^- dabd_offset = sabd_offset + off + * ^- dabd_offset + size + * + * In this example, dabd needs three iovecs. The first iovec is offset + * 0, so the final dabd_offset is masked back into the first iovec. + * + * [........][........][........] + * ^- dabd_offset + */ + size_t soff = ABD_SCATTER(sabd).abd_offset + off; + size_t doff = soff & ABD_PAGEMASK; + size_t iovcnt = abd_iovcnt_for_bytes(doff + size); + + /* + * If the passed-in abd has enough allocated iovecs already, reuse it. + * Otherwise, make a new one. The caller will free the original if the + * one it gets back is not the same. + * + * Note that it's ok if we reuse an abd with more iovecs than we need. + * abd_size has the usable amount of data, and the abd does not own the + * pages referenced by the iovecs. At worst, they're holding dangling + * pointers that we'll never use anyway. + */ + if (dabd == NULL || ABD_SCATTER(dabd).abd_iovcnt < iovcnt) + dabd = abd_alloc_struct(iovcnt << ABD_PAGESHIFT); + + /* Set offset into first page in view */ + ABD_SCATTER(dabd).abd_offset = doff; + + /* Copy the wanted iovecs from the source to the dest */ + memcpy(&ABD_SCATTER(dabd).abd_iov[0], + &ABD_SCATTER(sabd).abd_iov[soff >> ABD_PAGESHIFT], + iovcnt * sizeof (struct iovec)); + + return (dabd); +} + +void +abd_iter_init(struct abd_iter *aiter, abd_t *abd) +{ + ASSERT(!abd_is_gang(abd)); + abd_verify(abd); + memset(aiter, 0, sizeof (struct abd_iter)); + aiter->iter_abd = abd; +} + +boolean_t +abd_iter_at_end(struct abd_iter *aiter) +{ + ASSERT3U(aiter->iter_pos, <=, aiter->iter_abd->abd_size); + return (aiter->iter_pos == aiter->iter_abd->abd_size); +} + +void +abd_iter_advance(struct abd_iter *aiter, size_t amount) +{ + ASSERT0P(aiter->iter_mapaddr); + ASSERT0(aiter->iter_mapsize); + + if (abd_iter_at_end(aiter)) + return; + + aiter->iter_pos += amount; + ASSERT3U(aiter->iter_pos, <=, aiter->iter_abd->abd_size); +} + +void +abd_iter_map(struct abd_iter *aiter) +{ + ASSERT0P(aiter->iter_mapaddr); + ASSERT0(aiter->iter_mapsize); + + if (abd_iter_at_end(aiter)) + return; + + if (abd_is_linear(aiter->iter_abd)) { + aiter->iter_mapaddr = + ABD_LINEAR_BUF(aiter->iter_abd) + aiter->iter_pos; + aiter->iter_mapsize = + aiter->iter_abd->abd_size - aiter->iter_pos; + return; + } + + /* + * For scatter, we index into the appropriate iovec, and return the + * smaller of the amount requested, or up to the end of the page. + */ + size_t poff = aiter->iter_pos + ABD_SCATTER(aiter->iter_abd).abd_offset; + + ASSERT3U(poff >> ABD_PAGESHIFT, <=, + ABD_SCATTER(aiter->iter_abd).abd_iovcnt); + struct iovec *iov = &ABD_SCATTER(aiter->iter_abd). + abd_iov[poff >> ABD_PAGESHIFT]; + + aiter->iter_mapsize = MIN(ABD_PAGESIZE - (poff & ABD_PAGEMASK), + aiter->iter_abd->abd_size - aiter->iter_pos); + ASSERT3U(aiter->iter_mapsize, <=, ABD_PAGESIZE); + + aiter->iter_mapaddr = iov->iov_base + (poff & ABD_PAGEMASK); +} + +void +abd_iter_unmap(struct abd_iter *aiter) +{ + if (abd_iter_at_end(aiter)) + return; + + ASSERT3P(aiter->iter_mapaddr, !=, NULL); + ASSERT3U(aiter->iter_mapsize, >, 0); + + aiter->iter_mapaddr = NULL; + aiter->iter_mapsize = 0; +} + +void +abd_cache_reap_now(void) +{ +} + +/* + * Borrow a raw buffer from an ABD without copying the contents of the ABD + * into the buffer. If the ABD is scattered, this will alloate a raw buffer + * whose contents are undefined. To copy over the existing data in the ABD, use + * abd_borrow_buf_copy() instead. + */ +void * +abd_borrow_buf(abd_t *abd, size_t n) +{ + void *buf; + abd_verify(abd); + ASSERT3U(abd->abd_size, >=, 0); + if (abd_is_linear(abd)) { + buf = abd_to_buf(abd); + } else { + buf = zio_buf_alloc(n); + } +#ifdef ZFS_DEBUG + (void) zfs_refcount_add_many(&abd->abd_children, n, buf); +#endif + return (buf); +} + +void * +abd_borrow_buf_copy(abd_t *abd, size_t n) +{ + void *buf = abd_borrow_buf(abd, n); + if (!abd_is_linear(abd)) { + abd_copy_to_buf(buf, abd, n); + } + return (buf); +} + +/* + * Return a borrowed raw buffer to an ABD. If the ABD is scattered, this will + * no change the contents of the ABD and will ASSERT that you didn't modify + * the buffer since it was borrowed. If you want any changes you made to buf to + * be copied back to abd, use abd_return_buf_copy() instead. + */ +void +abd_return_buf(abd_t *abd, void *buf, size_t n) +{ + abd_verify(abd); + ASSERT3U(abd->abd_size, >=, n); +#ifdef ZFS_DEBUG + (void) zfs_refcount_remove_many(&abd->abd_children, n, buf); +#endif + if (abd_is_linear(abd)) { + ASSERT3P(buf, ==, abd_to_buf(abd)); + } else { + ASSERT0(abd_cmp_buf(abd, buf, n)); + zio_buf_free(buf, n); + } +} + +void +abd_return_buf_copy(abd_t *abd, void *buf, size_t n) +{ + if (!abd_is_linear(abd)) { + abd_copy_from_buf(abd, buf, n); + } + abd_return_buf(abd, buf, n); +} diff --git a/sys/contrib/openzfs/lib/libzpool/arc_os.c b/sys/contrib/openzfs/lib/libzpool/arc_os.c new file mode 100644 index 000000000000..6ad1a2bcda6e --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/arc_os.c @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, Joyent, Inc. + * Copyright (c) 2011, 2019 by Delphix. All rights reserved. + * Copyright (c) 2014 by Saso Kiselkov. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. All rights reserved. + */ + +#include <sys/zfs_context.h> +#include <sys/arc_impl.h> + +/* + * Return a default max arc size based on the amount of physical memory. + * This may be overridden by tuning the zfs_arc_max module parameter. + */ +uint64_t +arc_default_max(uint64_t min, uint64_t allmem) +{ + uint64_t size; + + if (allmem >= 1 << 30) + size = allmem - (1 << 30); + else + size = min; + return (MAX(allmem * 5 / 8, size)); +} + +int64_t +arc_available_memory(void) +{ + int64_t lowest = INT64_MAX; + + /* Every 100 calls, free a small amount */ + if (random_in_range(100) == 0) + lowest = -1024; + + return (lowest); +} + +int +arc_memory_throttle(spa_t *spa, uint64_t reserve, uint64_t txg) +{ + (void) spa, (void) reserve, (void) txg; + return (0); +} + +uint64_t +arc_all_memory(void) +{ + return (ptob(physmem) / 2); +} + +uint64_t +arc_free_memory(void) +{ + return (random_in_range(arc_all_memory() * 20 / 100)); +} + +void +arc_register_hotplug(void) +{ +} + +void +arc_unregister_hotplug(void) +{ +} diff --git a/sys/contrib/openzfs/lib/libzpool/include/Makefile.am b/sys/contrib/openzfs/lib/libzpool/include/Makefile.am new file mode 100644 index 000000000000..6cfa2d5ce089 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/include/Makefile.am @@ -0,0 +1,8 @@ +libzpool_sysdir = $(includedir)/libzpool/sys +libzpool_sys_HEADERS = \ + %D%/sys/abd_os.h \ + %D%/sys/abd_impl_os.h \ + %D%/sys/trace_zfs.h \ + %D%/sys/zfs_bootenv_os.h \ + %D%/sys/zfs_context_os.h \ + %D%/sys/zfs_debug_os.h diff --git a/sys/contrib/openzfs/lib/libzpool/include/sys/abd_impl_os.h b/sys/contrib/openzfs/lib/libzpool/include/sys/abd_impl_os.h new file mode 100644 index 000000000000..dee95652c71c --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/include/sys/abd_impl_os.h @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Chunwei Chen. All rights reserved. + * Copyright (c) 2016, 2019 by Delphix. All rights reserved. + * Copyright (c) 2023, 2024, Klara Inc. + */ + +#ifndef _ABD_IMPL_OS_H +#define _ABD_IMPL_OS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define abd_enter_critical(flags) ((void)0) +#define abd_exit_critical(flags) ((void)0) + +#ifdef __cplusplus +} +#endif + +#endif /* _ABD_IMPL_OS_H */ diff --git a/sys/contrib/openzfs/lib/libzpool/include/sys/abd_os.h b/sys/contrib/openzfs/lib/libzpool/include/sys/abd_os.h new file mode 100644 index 000000000000..80ce46e99a8e --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/include/sys/abd_os.h @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Chunwei Chen. All rights reserved. + * Copyright (c) 2016, 2019 by Delphix. All rights reserved. + */ + +#ifndef _ABD_OS_H +#define _ABD_OS_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct abd_scatter { + uint_t abd_offset; + uint_t abd_iovcnt; + struct iovec abd_iov[1]; /* actually variable-length */ +}; + +struct abd_linear { + void *abd_buf; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _ABD_H */ diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/sysmacros.h b/sys/contrib/openzfs/lib/libzpool/include/sys/trace_zfs.h index d9639d27b60e..d9639d27b60e 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/sysmacros.h +++ b/sys/contrib/openzfs/lib/libzpool/include/sys/trace_zfs.h diff --git a/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_bootenv_os.h b/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_bootenv_os.h new file mode 100644 index 000000000000..a4dadd83346f --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_bootenv_os.h @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2025, Rob Norris <robn@despairlabs.com> + */ + +#ifndef _ZFS_BOOTENV_OS_H +#define _ZFS_BOOTENV_OS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BOOTENV_OS BE_FREEBSD_VENDOR + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFS_BOOTENV_OS_H */ diff --git a/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_context_os.h b/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_context_os.h new file mode 100644 index 000000000000..4dcf386e3351 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_context_os.h @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef ZFS_CONTEXT_OS_H_ +#define ZFS_CONTEXT_OS_H_ + +#define HAVE_LARGE_STACKS 1 + +#endif diff --git a/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_debug_os.h b/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_debug_os.h new file mode 100644 index 000000000000..b59165a6c903 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/include/sys/zfs_debug_os.h @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#ifndef _SYS_ZFS_DEBUG_OS_H +#define _SYS_ZFS_DEBUG_OS_H + +#define SET_ERROR(err) \ + (__set_error(__FILE__, __func__, __LINE__, err), err) + +#endif diff --git a/sys/contrib/openzfs/lib/libzpool/kernel.c b/sys/contrib/openzfs/lib/libzpool/kernel.c index 05c278f91940..7e3ffec3b81d 100644 --- a/sys/contrib/openzfs/lib/libzpool/kernel.c +++ b/sys/contrib/openzfs/lib/libzpool/kernel.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -22,6 +23,7 @@ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2018 by Delphix. All rights reserved. * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2025, Klara, Inc. */ #include <assert.h> @@ -31,15 +33,21 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <limits.h> #include <libzutil.h> #include <sys/crypto/icp.h> #include <sys/processor.h> #include <sys/rrwlock.h> #include <sys/spa.h> +#include <sys/spa_impl.h> +#include <sys/sid.h> #include <sys/stat.h> #include <sys/systeminfo.h> #include <sys/time.h> -#include <sys/utsname.h> +#include <sys/tsd.h> + +#include <libspl.h> +#include <libzpool.h> #include <sys/zfs_context.h> #include <sys/zfs_onexit.h> #include <sys/zfs_vfsops.h> @@ -52,246 +60,11 @@ * Emulation of kernel services in userland. */ -uint64_t physmem; uint32_t hostid; -struct utsname hw_utsname; /* If set, all blocks read will be copied to the specified directory. */ char *vn_dumpdir = NULL; -/* this only exists to have its address taken */ -struct proc p0; - -/* - * ========================================================================= - * threads - * ========================================================================= - * - * TS_STACK_MIN is dictated by the minimum allowed pthread stack size. While - * TS_STACK_MAX is somewhat arbitrary, it was selected to be large enough for - * the expected stack depth while small enough to avoid exhausting address - * space with high thread counts. - */ -#define TS_STACK_MIN MAX(PTHREAD_STACK_MIN, 32768) -#define TS_STACK_MAX (256 * 1024) - -struct zk_thread_wrapper { - void (*func)(void *); - void *arg; -}; - -static void * -zk_thread_wrapper(void *arg) -{ - struct zk_thread_wrapper ztw; - memcpy(&ztw, arg, sizeof (ztw)); - free(arg); - ztw.func(ztw.arg); - return (NULL); -} - -kthread_t * -zk_thread_create(void (*func)(void *), void *arg, size_t stksize, int state) -{ - pthread_attr_t attr; - pthread_t tid; - char *stkstr; - struct zk_thread_wrapper *ztw; - int detachstate = PTHREAD_CREATE_DETACHED; - - VERIFY0(pthread_attr_init(&attr)); - - if (state & TS_JOINABLE) - detachstate = PTHREAD_CREATE_JOINABLE; - - VERIFY0(pthread_attr_setdetachstate(&attr, detachstate)); - - /* - * We allow the default stack size in user space to be specified by - * setting the ZFS_STACK_SIZE environment variable. This allows us - * the convenience of observing and debugging stack overruns in - * user space. Explicitly specified stack sizes will be honored. - * The usage of ZFS_STACK_SIZE is discussed further in the - * ENVIRONMENT VARIABLES sections of the ztest(1) man page. - */ - if (stksize == 0) { - stkstr = getenv("ZFS_STACK_SIZE"); - - if (stkstr == NULL) - stksize = TS_STACK_MAX; - else - stksize = MAX(atoi(stkstr), TS_STACK_MIN); - } - - VERIFY3S(stksize, >, 0); - stksize = P2ROUNDUP(MAX(stksize, TS_STACK_MIN), PAGESIZE); - - /* - * If this ever fails, it may be because the stack size is not a - * multiple of system page size. - */ - VERIFY0(pthread_attr_setstacksize(&attr, stksize)); - VERIFY0(pthread_attr_setguardsize(&attr, PAGESIZE)); - - VERIFY(ztw = malloc(sizeof (*ztw))); - ztw->func = func; - ztw->arg = arg; - VERIFY0(pthread_create(&tid, &attr, zk_thread_wrapper, ztw)); - VERIFY0(pthread_attr_destroy(&attr)); - - return ((void *)(uintptr_t)tid); -} - -/* - * ========================================================================= - * kstats - * ========================================================================= - */ -kstat_t * -kstat_create(const char *module, int instance, const char *name, - const char *class, uchar_t type, ulong_t ndata, uchar_t ks_flag) -{ - (void) module, (void) instance, (void) name, (void) class, (void) type, - (void) ndata, (void) ks_flag; - return (NULL); -} - -void -kstat_install(kstat_t *ksp) -{ - (void) ksp; -} - -void -kstat_delete(kstat_t *ksp) -{ - (void) ksp; -} - -void -kstat_set_raw_ops(kstat_t *ksp, - int (*headers)(char *buf, size_t size), - int (*data)(char *buf, size_t size, void *data), - void *(*addr)(kstat_t *ksp, loff_t index)) -{ - (void) ksp, (void) headers, (void) data, (void) addr; -} - -/* - * ========================================================================= - * mutexes - * ========================================================================= - */ - -void -mutex_init(kmutex_t *mp, char *name, int type, void *cookie) -{ - (void) name, (void) type, (void) cookie; - VERIFY0(pthread_mutex_init(&mp->m_lock, NULL)); - memset(&mp->m_owner, 0, sizeof (pthread_t)); -} - -void -mutex_destroy(kmutex_t *mp) -{ - VERIFY0(pthread_mutex_destroy(&mp->m_lock)); -} - -void -mutex_enter(kmutex_t *mp) -{ - VERIFY0(pthread_mutex_lock(&mp->m_lock)); - mp->m_owner = pthread_self(); -} - -int -mutex_tryenter(kmutex_t *mp) -{ - int error = pthread_mutex_trylock(&mp->m_lock); - if (error == 0) { - mp->m_owner = pthread_self(); - return (1); - } else { - VERIFY3S(error, ==, EBUSY); - return (0); - } -} - -void -mutex_exit(kmutex_t *mp) -{ - memset(&mp->m_owner, 0, sizeof (pthread_t)); - VERIFY0(pthread_mutex_unlock(&mp->m_lock)); -} - -/* - * ========================================================================= - * rwlocks - * ========================================================================= - */ - -void -rw_init(krwlock_t *rwlp, char *name, int type, void *arg) -{ - (void) name, (void) type, (void) arg; - VERIFY0(pthread_rwlock_init(&rwlp->rw_lock, NULL)); - rwlp->rw_readers = 0; - rwlp->rw_owner = 0; -} - -void -rw_destroy(krwlock_t *rwlp) -{ - VERIFY0(pthread_rwlock_destroy(&rwlp->rw_lock)); -} - -void -rw_enter(krwlock_t *rwlp, krw_t rw) -{ - if (rw == RW_READER) { - VERIFY0(pthread_rwlock_rdlock(&rwlp->rw_lock)); - atomic_inc_uint(&rwlp->rw_readers); - } else { - VERIFY0(pthread_rwlock_wrlock(&rwlp->rw_lock)); - rwlp->rw_owner = pthread_self(); - } -} - -void -rw_exit(krwlock_t *rwlp) -{ - if (RW_READ_HELD(rwlp)) - atomic_dec_uint(&rwlp->rw_readers); - else - rwlp->rw_owner = 0; - - VERIFY0(pthread_rwlock_unlock(&rwlp->rw_lock)); -} - -int -rw_tryenter(krwlock_t *rwlp, krw_t rw) -{ - int error; - - if (rw == RW_READER) - error = pthread_rwlock_tryrdlock(&rwlp->rw_lock); - else - error = pthread_rwlock_trywrlock(&rwlp->rw_lock); - - if (error == 0) { - if (rw == RW_READER) - atomic_inc_uint(&rwlp->rw_readers); - else - rwlp->rw_owner = pthread_self(); - - return (1); - } - - VERIFY3S(error, ==, EBUSY); - - return (0); -} - uint32_t zone_get_hostid(void *zonep) { @@ -302,191 +75,6 @@ zone_get_hostid(void *zonep) return (hostid); } -int -rw_tryupgrade(krwlock_t *rwlp) -{ - (void) rwlp; - return (0); -} - -/* - * ========================================================================= - * condition variables - * ========================================================================= - */ - -void -cv_init(kcondvar_t *cv, char *name, int type, void *arg) -{ - (void) name, (void) type, (void) arg; - VERIFY0(pthread_cond_init(cv, NULL)); -} - -void -cv_destroy(kcondvar_t *cv) -{ - VERIFY0(pthread_cond_destroy(cv)); -} - -void -cv_wait(kcondvar_t *cv, kmutex_t *mp) -{ - memset(&mp->m_owner, 0, sizeof (pthread_t)); - VERIFY0(pthread_cond_wait(cv, &mp->m_lock)); - mp->m_owner = pthread_self(); -} - -int -cv_wait_sig(kcondvar_t *cv, kmutex_t *mp) -{ - cv_wait(cv, mp); - return (1); -} - -int -cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime) -{ - int error; - struct timeval tv; - struct timespec ts; - clock_t delta; - - delta = abstime - ddi_get_lbolt(); - if (delta <= 0) - return (-1); - - VERIFY(gettimeofday(&tv, NULL) == 0); - - ts.tv_sec = tv.tv_sec + delta / hz; - ts.tv_nsec = tv.tv_usec * NSEC_PER_USEC + (delta % hz) * (NANOSEC / hz); - if (ts.tv_nsec >= NANOSEC) { - ts.tv_sec++; - ts.tv_nsec -= NANOSEC; - } - - memset(&mp->m_owner, 0, sizeof (pthread_t)); - error = pthread_cond_timedwait(cv, &mp->m_lock, &ts); - mp->m_owner = pthread_self(); - - if (error == ETIMEDOUT) - return (-1); - - VERIFY0(error); - - return (1); -} - -int -cv_timedwait_hires(kcondvar_t *cv, kmutex_t *mp, hrtime_t tim, hrtime_t res, - int flag) -{ - (void) res; - int error; - struct timeval tv; - struct timespec ts; - hrtime_t delta; - - ASSERT(flag == 0 || flag == CALLOUT_FLAG_ABSOLUTE); - - delta = tim; - if (flag & CALLOUT_FLAG_ABSOLUTE) - delta -= gethrtime(); - - if (delta <= 0) - return (-1); - - VERIFY0(gettimeofday(&tv, NULL)); - - ts.tv_sec = tv.tv_sec + delta / NANOSEC; - ts.tv_nsec = tv.tv_usec * NSEC_PER_USEC + (delta % NANOSEC); - if (ts.tv_nsec >= NANOSEC) { - ts.tv_sec++; - ts.tv_nsec -= NANOSEC; - } - - memset(&mp->m_owner, 0, sizeof (pthread_t)); - error = pthread_cond_timedwait(cv, &mp->m_lock, &ts); - mp->m_owner = pthread_self(); - - if (error == ETIMEDOUT) - return (-1); - - VERIFY0(error); - - return (1); -} - -void -cv_signal(kcondvar_t *cv) -{ - VERIFY0(pthread_cond_signal(cv)); -} - -void -cv_broadcast(kcondvar_t *cv) -{ - VERIFY0(pthread_cond_broadcast(cv)); -} - -/* - * ========================================================================= - * procfs list - * ========================================================================= - */ - -void -seq_printf(struct seq_file *m, const char *fmt, ...) -{ - (void) m, (void) fmt; -} - -void -procfs_list_install(const char *module, - const char *submodule, - const char *name, - mode_t mode, - procfs_list_t *procfs_list, - int (*show)(struct seq_file *f, void *p), - int (*show_header)(struct seq_file *f), - int (*clear)(procfs_list_t *procfs_list), - size_t procfs_list_node_off) -{ - (void) module, (void) submodule, (void) name, (void) mode, (void) show, - (void) show_header, (void) clear; - mutex_init(&procfs_list->pl_lock, NULL, MUTEX_DEFAULT, NULL); - list_create(&procfs_list->pl_list, - procfs_list_node_off + sizeof (procfs_list_node_t), - procfs_list_node_off + offsetof(procfs_list_node_t, pln_link)); - procfs_list->pl_next_id = 1; - procfs_list->pl_node_offset = procfs_list_node_off; -} - -void -procfs_list_uninstall(procfs_list_t *procfs_list) -{ - (void) procfs_list; -} - -void -procfs_list_destroy(procfs_list_t *procfs_list) -{ - ASSERT(list_is_empty(&procfs_list->pl_list)); - list_destroy(&procfs_list->pl_list); - mutex_destroy(&procfs_list->pl_lock); -} - -#define NODE_ID(procfs_list, obj) \ - (((procfs_list_node_t *)(((char *)obj) + \ - (procfs_list)->pl_node_offset))->pln_id) - -void -procfs_list_add(procfs_list_t *procfs_list, void *p) -{ - ASSERT(MUTEX_HELD(&procfs_list->pl_lock)); - NODE_ID(procfs_list, p) = procfs_list->pl_next_id++; - list_insert_tail(&procfs_list->pl_list, p); -} - /* * ========================================================================= * vnode operations @@ -630,39 +218,60 @@ __dprintf(boolean_t dprint, const char *file, const char *func, * cmn_err() and panic() * ========================================================================= */ -static char ce_prefix[CE_IGNORE][10] = { "", "NOTICE: ", "WARNING: ", "" }; -static char ce_suffix[CE_IGNORE][2] = { "", "\n", "\n", "" }; -__attribute__((noreturn)) void -vpanic(const char *fmt, va_list adx) +static __attribute__((noreturn)) void +panic_stop_or_abort(void) { - (void) fprintf(stderr, "error: "); - (void) vfprintf(stderr, fmt, adx); - (void) fprintf(stderr, "\n"); + const char *stopenv = getenv("LIBZPOOL_PANIC_STOP"); + if (stopenv != NULL && atoi(stopenv)) { + fputs("libzpool: LIBZPOOL_PANIC_STOP is set, sending " + "SIGSTOP to process group\n", stderr); + fflush(stderr); + + kill(0, SIGSTOP); + + fputs("libzpool: continued after panic stop, " + "aborting\n", stderr); + } abort(); /* think of it as a "user-level crash dump" */ } -__attribute__((noreturn)) void -panic(const char *fmt, ...) -{ - va_list adx; +static void +vcmn_msg(int ce, const char *fmt, va_list adx) +{ + switch (ce) { + case CE_IGNORE: + return; + case CE_CONT: + break; + case CE_NOTE: + fputs("libzpool: NOTICE: ", stderr); + break; + case CE_WARN: + fputs("libzpool: WARNING: ", stderr); + break; + case CE_PANIC: + fputs("libzpool: PANIC: ", stderr); + break; + default: + fputs("libzpool: [unknown severity %d]: ", stderr); + break; + } - va_start(adx, fmt); - vpanic(fmt, adx); - va_end(adx); + vfprintf(stderr, fmt, adx); + if (ce != CE_CONT) + fputc('\n', stderr); + fflush(stderr); } void vcmn_err(int ce, const char *fmt, va_list adx) { + vcmn_msg(ce, fmt, adx); + if (ce == CE_PANIC) - vpanic(fmt, adx); - if (ce != CE_NOTE) { /* suppress noise in userland stress testing */ - (void) fprintf(stderr, "%s", ce_prefix[ce]); - (void) vfprintf(stderr, fmt, adx); - (void) fprintf(stderr, "%s", ce_suffix[ce]); - } + panic_stop_or_abort(); } void @@ -675,6 +284,25 @@ cmn_err(int ce, const char *fmt, ...) va_end(adx); } +__attribute__((noreturn)) void +panic(const char *fmt, ...) +{ + va_list adx; + + va_start(adx, fmt); + vcmn_msg(CE_PANIC, fmt, adx); + va_end(adx); + + panic_stop_or_abort(); +} + +__attribute__((noreturn)) void +vpanic(const char *fmt, va_list adx) +{ + vcmn_msg(CE_PANIC, fmt, adx); + panic_stop_or_abort(); +} + /* * ========================================================================= * misc routines @@ -715,75 +343,16 @@ lowbit64(uint64_t i) return (__builtin_ffsll(i)); } -const char *random_path = "/dev/random"; -const char *urandom_path = "/dev/urandom"; -static int random_fd = -1, urandom_fd = -1; - -void -random_init(void) -{ - VERIFY((random_fd = open(random_path, O_RDONLY | O_CLOEXEC)) != -1); - VERIFY((urandom_fd = open(urandom_path, O_RDONLY | O_CLOEXEC)) != -1); -} - -void -random_fini(void) -{ - close(random_fd); - close(urandom_fd); - - random_fd = -1; - urandom_fd = -1; -} - -static int -random_get_bytes_common(uint8_t *ptr, size_t len, int fd) -{ - size_t resid = len; - ssize_t bytes; - - ASSERT(fd != -1); - - while (resid != 0) { - bytes = read(fd, ptr, resid); - ASSERT3S(bytes, >=, 0); - ptr += bytes; - resid -= bytes; - } - - return (0); -} - -int -random_get_bytes(uint8_t *ptr, size_t len) -{ - return (random_get_bytes_common(ptr, len, random_fd)); -} - -int -random_get_pseudo_bytes(uint8_t *ptr, size_t len) -{ - return (random_get_bytes_common(ptr, len, urandom_fd)); -} - int ddi_strtoull(const char *str, char **nptr, int base, u_longlong_t *result) { - (void) nptr; - char *end; - - *result = strtoull(str, &end, base); + errno = 0; + *result = strtoull(str, nptr, base); if (*result == 0) return (errno); return (0); } -utsname_t * -utsname(void) -{ - return (&hw_utsname); -} - /* * ========================================================================= * kernel emulation setup & teardown @@ -799,161 +368,118 @@ umem_out_of_memory(void) return (0); } -void -kernel_init(int mode) +static void +spa_config_load(void) { - extern uint_t rrw_tsd_key; - - umem_nofail_callback(umem_out_of_memory); - - physmem = sysconf(_SC_PHYS_PAGES); + void *buf = NULL; + nvlist_t *nvlist, *child; + nvpair_t *nvpair; + char *pathname; + zfs_file_t *fp; + zfs_file_attr_t zfa; + uint64_t fsize; + int err; - dprintf("physmem = %llu pages (%.2f GB)\n", (u_longlong_t)physmem, - (double)physmem * sysconf(_SC_PAGE_SIZE) / (1ULL << 30)); + /* + * Open the configuration file. + */ + pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP); - hostid = (mode & SPA_MODE_WRITE) ? get_system_hostid() : 0; + (void) snprintf(pathname, MAXPATHLEN, "%s", spa_config_path); - random_init(); + err = zfs_file_open(pathname, O_RDONLY, 0, &fp); + if (err) + err = zfs_file_open(ZPOOL_CACHE_BOOT, O_RDONLY, 0, &fp); - VERIFY0(uname(&hw_utsname)); + kmem_free(pathname, MAXPATHLEN); - system_taskq_init(); - icp_init(); + if (err) + return; - zstd_init(); + if (zfs_file_getattr(fp, &zfa)) + goto out; - spa_init((spa_mode_t)mode); + fsize = zfa.zfa_size; + buf = kmem_alloc(fsize, KM_SLEEP); - fletcher_4_init(); + /* + * Read the nvlist from the file. + */ + if (zfs_file_read(fp, buf, fsize, NULL) < 0) + goto out; - tsd_create(&rrw_tsd_key, rrw_tsd_destroy); -} + /* + * Unpack the nvlist. + */ + if (nvlist_unpack(buf, fsize, &nvlist, KM_SLEEP) != 0) + goto out; -void -kernel_fini(void) -{ - fletcher_4_fini(); - spa_fini(); + /* + * Iterate over all elements in the nvlist, creating a new spa_t for + * each one with the specified configuration. + */ + spa_namespace_enter(FTAG); + nvpair = NULL; + while ((nvpair = nvlist_next_nvpair(nvlist, nvpair)) != NULL) { + if (nvpair_type(nvpair) != DATA_TYPE_NVLIST) + continue; - zstd_fini(); + child = fnvpair_value_nvlist(nvpair); - icp_fini(); - system_taskq_fini(); + if (spa_lookup(nvpair_name(nvpair)) != NULL) + continue; + (void) spa_add(nvpair_name(nvpair), child, NULL); + } + spa_namespace_exit(FTAG); - random_fini(); -} + nvlist_free(nvlist); -uid_t -crgetuid(cred_t *cr) -{ - (void) cr; - return (0); -} +out: + if (buf != NULL) + kmem_free(buf, fsize); -uid_t -crgetruid(cred_t *cr) -{ - (void) cr; - return (0); + zfs_file_close(fp); } -gid_t -crgetgid(cred_t *cr) +void +kernel_init(int mode) { - (void) cr; - return (0); -} + extern uint_t rrw_tsd_key; -int -crgetngroups(cred_t *cr) -{ - (void) cr; - return (0); -} + libspl_init(); -gid_t * -crgetgroups(cred_t *cr) -{ - (void) cr; - return (NULL); -} + umem_nofail_callback(umem_out_of_memory); -int -zfs_secpolicy_snapshot_perms(const char *name, cred_t *cr) -{ - (void) name, (void) cr; - return (0); -} + dprintf("physmem = %llu pages (%.2f GB)\n", (u_longlong_t)physmem, + (double)physmem * sysconf(_SC_PAGE_SIZE) / (1ULL << 30)); -int -zfs_secpolicy_rename_perms(const char *from, const char *to, cred_t *cr) -{ - (void) from, (void) to, (void) cr; - return (0); -} + hostid = (mode & SPA_MODE_WRITE) ? get_system_hostid() : 0; -int -zfs_secpolicy_destroy_perms(const char *name, cred_t *cr) -{ - (void) name, (void) cr; - return (0); -} + system_taskq_init(); + icp_init(); -int -secpolicy_zfs(const cred_t *cr) -{ - (void) cr; - return (0); -} + zstd_init(); -int -secpolicy_zfs_proc(const cred_t *cr, proc_t *proc) -{ - (void) cr, (void) proc; - return (0); -} + spa_init((spa_mode_t)mode); + spa_config_load(); -ksiddomain_t * -ksid_lookupdomain(const char *dom) -{ - ksiddomain_t *kd; + fletcher_4_init(); - kd = umem_zalloc(sizeof (ksiddomain_t), UMEM_NOFAIL); - kd->kd_name = spa_strdup(dom); - return (kd); + tsd_create(&rrw_tsd_key, rrw_tsd_destroy); } void -ksiddomain_rele(ksiddomain_t *ksid) -{ - spa_strfree(ksid->kd_name); - umem_free(ksid, sizeof (ksiddomain_t)); -} - -char * -kmem_vasprintf(const char *fmt, va_list adx) +kernel_fini(void) { - char *buf = NULL; - va_list adx_copy; - - va_copy(adx_copy, adx); - VERIFY(vasprintf(&buf, fmt, adx_copy) != -1); - va_end(adx_copy); - - return (buf); -} + fletcher_4_fini(); + spa_fini(); -char * -kmem_asprintf(const char *fmt, ...) -{ - char *buf = NULL; - va_list adx; + zstd_fini(); - va_start(adx, fmt); - VERIFY(vasprintf(&buf, fmt, adx) != -1); - va_end(adx); + icp_fini(); + system_taskq_fini(); - return (buf); + libspl_fini(); } zfs_file_t * @@ -972,44 +498,14 @@ zfs_onexit_fd_rele(zfs_file_t *fp) int zfs_onexit_add_cb(minor_t minor, void (*func)(void *), void *data, - uint64_t *action_handle) + uintptr_t *action_handle) { (void) minor, (void) func, (void) data, (void) action_handle; return (0); } -fstrans_cookie_t -spl_fstrans_mark(void) -{ - return ((fstrans_cookie_t)0); -} - void -spl_fstrans_unmark(fstrans_cookie_t cookie) -{ - (void) cookie; -} - -int -__spl_pf_fstrans_check(void) -{ - return (0); -} - -int -kmem_cache_reap_active(void) -{ - return (0); -} - -void -zvol_create_minor(const char *name) -{ - (void) name; -} - -void -zvol_create_minors_recursive(const char *name) +zvol_create_minors(const char *name) { (void) name; } @@ -1039,8 +535,8 @@ zvol_rename_minors(spa_t *spa, const char *oldname, const char *newname, int zfs_file_open(const char *path, int flags, int mode, zfs_file_t **fpp) { - int fd = -1; - int dump_fd = -1; + int fd; + int dump_fd; int err; int old_umask = 0; zfs_file_t *fp; @@ -1141,7 +637,7 @@ zfs_file_write(zfs_file_t *fp, const void *buf, size_t count, ssize_t *resid) */ int zfs_file_pwrite(zfs_file_t *fp, const void *buf, - size_t count, loff_t pos, ssize_t *resid) + size_t count, loff_t pos, uint8_t ashift, ssize_t *resid) { ssize_t rc, split, done; int sectors; @@ -1151,8 +647,8 @@ zfs_file_pwrite(zfs_file_t *fp, const void *buf, * system calls so that the process can be killed in between. * This is used by ztest to simulate realistic failure modes. */ - sectors = count >> SPA_MINBLOCKSHIFT; - split = (sectors > 0 ? rand() % sectors : 0) << SPA_MINBLOCKSHIFT; + sectors = count >> ashift; + split = (sectors > 0 ? rand() % sectors : 0) << ashift; rc = pwrite64(fp->f_fd, buf, split, pos); if (rc != -1) { done = rc; @@ -1327,24 +823,32 @@ zfs_file_fsync(zfs_file_t *fp, int flags) } /* - * fallocate - allocate or free space on disk + * deallocate - zero and/or deallocate file storage * * fp - file pointer - * mode (non-standard options for hole punching etc) - * offset - offset to start allocating or freeing from - * len - length to free / allocate - * - * OPTIONAL + * offset - offset to start zeroing or deallocating + * len - length to zero or deallocate */ int -zfs_file_fallocate(zfs_file_t *fp, int mode, loff_t offset, loff_t len) +zfs_file_deallocate(zfs_file_t *fp, loff_t offset, loff_t len) { -#ifdef __linux__ - return (fallocate(fp->f_fd, mode, offset, len)); + int rc; +#if defined(__linux__) + rc = fallocate(fp->f_fd, + FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, offset, len); +#elif defined(__FreeBSD__) && (__FreeBSD_version >= 1400029) + struct spacectl_range rqsr = { + .r_offset = offset, + .r_len = len, + }; + rc = fspacectl(fp->f_fd, SPACECTL_DEALLOC, &rqsr, 0, &rqsr); #else - (void) fp, (void) mode, (void) offset, (void) len; - return (EOPNOTSUPP); + (void) fp, (void) offset, (void) len; + rc = EOPNOTSUPP; #endif + if (rc) + return (SET_ERROR(rc)); + return (0); } /* diff --git a/sys/contrib/openzfs/lib/libzpool/util.c b/sys/contrib/openzfs/lib/libzpool/util.c index 9a6326e425ff..a0b4480c4bcf 100644 --- a/sys/contrib/openzfs/lib/libzpool/util.c +++ b/sys/contrib/openzfs/lib/libzpool/util.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -35,8 +36,9 @@ #include <sys/fs/zfs.h> #include <sys/zfs_refcount.h> #include <sys/zfs_ioctl.h> -#include <dlfcn.h> +#include <sys/tunables.h> #include <libzutil.h> +#include <libzpool.h> /* * Routines needed by more than one client of libzpool. @@ -65,7 +67,7 @@ show_vdev_stats(const char *desc, const char *ctype, nvlist_t *nv, int indent) if (desc != NULL) { const char *suffix = ""; - char *bias = NULL; + const char *bias = NULL; char bias_suffix[32]; (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_IS_LOG, &is_log); @@ -113,12 +115,13 @@ show_vdev_stats(const char *desc, const char *ctype, nvlist_t *nv, int indent) for (c = 0; c < children; c++) { nvlist_t *cnv = child[c]; - char *cname = NULL, *tname; + const char *cname = NULL; + char *tname; uint64_t np; int len; if (nvlist_lookup_string(cnv, ZPOOL_CONFIG_PATH, &cname) && nvlist_lookup_string(cnv, ZPOOL_CONFIG_TYPE, &cname)) - cname = (char *)"<unknown>"; + cname = "<unknown>"; len = strlen(cname) + 2; tname = umem_zalloc(len, UMEM_NOFAIL); (void) strlcpy(tname, cname, len); @@ -133,14 +136,12 @@ void show_pool_stats(spa_t *spa) { nvlist_t *config, *nvroot; - char *name; + const char *name; - VERIFY(spa_get_stats(spa_name(spa), &config, NULL, 0) == 0); + VERIFY0(spa_get_stats(spa_name(spa), &config, NULL, 0)); - VERIFY(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, - &nvroot) == 0); - VERIFY(nvlist_lookup_string(config, ZPOOL_CONFIG_POOL_NAME, - &name) == 0); + VERIFY0(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nvroot)); + VERIFY0(nvlist_lookup_string(config, ZPOOL_CONFIG_POOL_NAME, &name)); show_vdev_stats(name, ZPOOL_CONFIG_CHILDREN, nvroot, 0); show_vdev_stats(NULL, ZPOOL_CONFIG_L2CACHE, nvroot, 0); @@ -149,95 +150,119 @@ show_pool_stats(spa_t *spa) nvlist_free(config); } -/* *k_out must be freed by the caller */ +/* + * Common helper for working with libzpool tunables from the command line. + * + * Valid inputs: + * + * <name> show named tunable and value + * <name>=<value> set tunable value + * + * show show all tunables and values + * show=<name> show named tunable and value + * info show info about all tunables + * info=<name> show info about named tunable + */ + +typedef enum { SHOW, INFO, SET } tunable_mode_t; + static int -set_global_var_parse_kv(const char *arg, char **k_out, u_longlong_t *v_out) +list_tunables_cb(const zfs_tunable_t *tunable, void *arg) { - int err; - VERIFY(arg); - char *d = strdup(arg); - - char *save = NULL; - char *k = strtok_r(d, "=", &save); - char *v_str = strtok_r(NULL, "=", &save); - char *follow = strtok_r(NULL, "=", &save); - if (k == NULL || v_str == NULL || follow != NULL) { - err = EINVAL; - goto err_free; - } - - u_longlong_t val = strtoull(v_str, NULL, 0); - if (val > UINT32_MAX) { - fprintf(stderr, "Value for global variable '%s' must " - "be a 32-bit unsigned integer, got '%s'\n", k, v_str); - err = EOVERFLOW; - goto err_free; + const tunable_mode_t *mode = arg; + + static const char *type[] = { + "int", "uint", "ulong", "u64", "str", + }; + static const char *perm[] = { + "rw", "rd", + }; + + if (*mode == SHOW) { + char val[64]; + int err = zfs_tunable_get(tunable, val, sizeof (val)); + if (err == 0) + printf("%s: %s\n", tunable->zt_name, val); + else + printf("%s: [error getting tunable value: %s]\n", + tunable->zt_name, strerror(err)); + } else { + printf("%s [%s %s]: %s\n", tunable->zt_name, + type[tunable->zt_type], perm[tunable->zt_perm], + tunable->zt_desc); } - *k_out = k; - *v_out = val; return (0); - -err_free: - free(k); - - return (err); } - -/* - * Sets given global variable in libzpool to given unsigned 32-bit value. - * arg: "<variable>=<value>" - */ int -set_global_var(char const *arg) +handle_tunable_option(const char *_arg, boolean_t quiet) { - void *zpoolhdl; - char *varname; - u_longlong_t val; - int ret; - -#ifndef _ZFS_LITTLE_ENDIAN - /* - * On big endian systems changing a 64-bit variable would set the high - * 32 bits instead of the low 32 bits, which could cause unexpected - * results. - */ - fprintf(stderr, "Setting global variables is only supported on " - "little-endian systems\n"); - ret = ENOTSUP; - goto out_ret; -#endif + int err = 0; + char *arg = strdup(_arg); + char *k, *v; + + v = arg; + k = strsep(&v, "="); + + tunable_mode_t mode; + + if (strcmp(k, "show") == 0) { + mode = SHOW; + k = v; + } else if (strcmp(k, "info") == 0) { + mode = INFO; + k = v; + } else if (v == NULL) { + mode = SHOW; + } else { + mode = SET; + } - if ((ret = set_global_var_parse_kv(arg, &varname, &val)) != 0) { - goto out_ret; + if (quiet && mode != SET) { + err = EINVAL; + goto out; } - zpoolhdl = dlopen("libzpool.so", RTLD_LAZY); - if (zpoolhdl != NULL) { - uint32_t *var; - var = dlsym(zpoolhdl, varname); - if (var == NULL) { - fprintf(stderr, "Global variable '%s' does not exist " - "in libzpool.so\n", varname); - ret = EINVAL; - goto out_dlclose; + if (mode == SET) { + const zfs_tunable_t *tunable = zfs_tunable_lookup(k); + if (tunable == NULL) { + err = ENOENT; + goto out; } - *var = (uint32_t)val; + char vold[256], vnew[256]; + if (zfs_tunable_get(tunable, vold, sizeof (vold)) != 0) + strcpy(vold, "???"); + err = zfs_tunable_set(tunable, v); + if (err != 0) + goto out; + if (zfs_tunable_get(tunable, vnew, sizeof (vnew)) != 0) + strcpy(vnew, "???"); + + if (!quiet) + printf("%s: %s -> %s\n", k, vold, vnew); + } else if (k != NULL) { + const zfs_tunable_t *tunable = zfs_tunable_lookup(k); + if (tunable == NULL) { + err = ENOENT; + goto out; + } + list_tunables_cb(tunable, &mode); } else { - fprintf(stderr, "Failed to open libzpool.so to set global " - "variable\n"); - ret = EIO; - goto out_dlclose; + zfs_tunable_iter(list_tunables_cb, &mode); } - ret = 0; +out: + if (!quiet) { + if (err == ENOENT) + fprintf(stderr, "no such tunable: %s\n", k); + else if (err != 0) + fprintf(stderr, "couldn't set tunable '%s': %s\n", + k, strerror(err)); + } -out_dlclose: - dlclose(zpoolhdl); - free(varname); -out_ret: - return (ret); + free(arg); + return (err); } static nvlist_t * @@ -259,7 +284,9 @@ pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive) (void) unused, (void) guid; zfs_iocparm_t zp; zfs_cmd_t *zc = NULL; +#ifdef ZFS_LEGACY_SUPPORT zfs_cmd_legacy_t *zcl = NULL; +#endif unsigned long request; int ret; @@ -294,6 +321,7 @@ pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive) umem_free(zc, sizeof (zfs_cmd_t)); break; +#ifdef ZFS_LEGACY_SUPPORT case ZFS_IOCVER_LEGACY: zcl = umem_zalloc(sizeof (zfs_cmd_legacy_t), UMEM_NOFAIL); @@ -309,6 +337,7 @@ pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive) umem_free(zcl, sizeof (zfs_cmd_legacy_t)); break; +#endif default: fprintf(stderr, "unrecognized zfs ioctl version %d", ver); exit(1); @@ -349,7 +378,7 @@ pool_active(void *unused, const char *name, uint64_t guid, } #endif -const pool_config_ops_t libzpool_config_ops = { +pool_config_ops_t libzpool_config_ops = { .pco_refresh_config = refresh_config, .pco_pool_active = pool_active, }; diff --git a/sys/contrib/openzfs/lib/libzpool/vdev_label_os.c b/sys/contrib/openzfs/lib/libzpool/vdev_label_os.c new file mode 100644 index 000000000000..803840884b24 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/vdev_label_os.c @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2023 by iXsystems, Inc. + */ + +#include <sys/zfs_context.h> +#include <sys/spa.h> +#include <sys/spa_impl.h> +#include <sys/vdev.h> +#include <sys/vdev_impl.h> + +/* + * Check if the reserved boot area is in-use. This is called from + * spa_vdev_attach() when adding a device to a raidz vdev, to ensure that the + * reserved area is available as scratch space for raidz expansion. + * + * This function currently always returns 0. On Linux, there are no known + * external uses of the reserved area. On FreeBSD, the reserved boot area is + * used when booting to a ZFS root from an MBR partition. + * + * Currently nothing using libzpool can add a disk to a pool, so this does + * nothing. + */ +int +vdev_check_boot_reserve(spa_t *spa, vdev_t *childvd) +{ + (void) spa; + (void) childvd; + + return (0); +} diff --git a/sys/contrib/openzfs/lib/libzpool/zfs_debug.c b/sys/contrib/openzfs/lib/libzpool/zfs_debug.c new file mode 100644 index 000000000000..3e5cff76abe9 --- /dev/null +++ b/sys/contrib/openzfs/lib/libzpool/zfs_debug.c @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + * Copyright (c) 2024, Rob Norris <robn@despairlabs.com> + */ + +#include <sys/zfs_context.h> + +typedef struct zfs_dbgmsg { + list_node_t zdm_node; + uint64_t zdm_timestamp; + uint_t zdm_size; + char zdm_msg[]; /* variable length allocation */ +} zfs_dbgmsg_t; + +static list_t zfs_dbgmsgs; +static kmutex_t zfs_dbgmsgs_lock; +static uint_t zfs_dbgmsg_size = 0; +static uint_t zfs_dbgmsg_maxsize = 4<<20; /* 4MB */ + +int zfs_dbgmsg_enable = B_TRUE; + +static void +zfs_dbgmsg_purge(uint_t max_size) +{ + while (zfs_dbgmsg_size > max_size) { + zfs_dbgmsg_t *zdm = list_remove_head(&zfs_dbgmsgs); + if (zdm == NULL) + return; + + uint_t size = zdm->zdm_size; + kmem_free(zdm, size); + zfs_dbgmsg_size -= size; + } +} + +void +zfs_dbgmsg_init(void) +{ + list_create(&zfs_dbgmsgs, sizeof (zfs_dbgmsg_t), + offsetof(zfs_dbgmsg_t, zdm_node)); + mutex_init(&zfs_dbgmsgs_lock, NULL, MUTEX_DEFAULT, NULL); +} + +void +zfs_dbgmsg_fini(void) +{ + zfs_dbgmsg_t *zdm; + while ((zdm = list_remove_head(&zfs_dbgmsgs))) + umem_free(zdm, zdm->zdm_size); + mutex_destroy(&zfs_dbgmsgs_lock); +} + +void +__set_error(const char *file, const char *func, int line, int err) +{ + if (zfs_flags & ZFS_DEBUG_SET_ERROR) + __dprintf(B_FALSE, file, func, line, "error %lu", + (ulong_t)err); +} + +void +__zfs_dbgmsg(char *buf) +{ + uint_t size = sizeof (zfs_dbgmsg_t) + strlen(buf) + 1; + zfs_dbgmsg_t *zdm = umem_zalloc(size, KM_SLEEP); + zdm->zdm_size = size; + zdm->zdm_timestamp = gethrestime_sec(); + strcpy(zdm->zdm_msg, buf); + + mutex_enter(&zfs_dbgmsgs_lock); + list_insert_tail(&zfs_dbgmsgs, zdm); + zfs_dbgmsg_size += size; + zfs_dbgmsg_purge(zfs_dbgmsg_maxsize); + mutex_exit(&zfs_dbgmsgs_lock); +} + +void +zfs_dbgmsg_print(int fd, const char *tag) +{ + ssize_t ret __attribute__((unused)); + + mutex_enter(&zfs_dbgmsgs_lock); + + /* + * We use write() in this function instead of printf() + * so it is safe to call from a signal handler. + */ + ret = write(fd, "ZFS_DBGMSG(", 11); + ret = write(fd, tag, strlen(tag)); + ret = write(fd, ") START:\n", 9); + + for (zfs_dbgmsg_t *zdm = list_head(&zfs_dbgmsgs); zdm != NULL; + zdm = list_next(&zfs_dbgmsgs, zdm)) { + ret = write(fd, zdm->zdm_msg, strlen(zdm->zdm_msg)); + ret = write(fd, "\n", 1); + } + + ret = write(fd, "ZFS_DBGMSG(", 11); + ret = write(fd, tag, strlen(tag)); + ret = write(fd, ") END\n", 6); + + mutex_exit(&zfs_dbgmsgs_lock); +} diff --git a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/zfs_context_os.h b/sys/contrib/openzfs/lib/libzpool/zfs_racct.c index 9b9d69bddcf7..5c9583581d94 100644 --- a/sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/zfs_context_os.h +++ b/sys/contrib/openzfs/lib/libzpool/zfs_racct.c @@ -1,6 +1,6 @@ +// SPDX-License-Identifier: BSD-2-Clause /* - * Copyright (c) 2020 iXsystems, Inc. - * All rights reserved. + * Copyright (c) 2021 iXsystems, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -22,13 +22,18 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ -#ifndef ZFS_CONTEXT_OS_H_ -#define ZFS_CONTEXT_OS_H_ +#include <sys/zfs_racct.h> -#define HAVE_LARGE_STACKS 1 +void +zfs_racct_read(spa_t *spa, uint64_t size, uint64_t iops, dmu_flags_t flags) +{ + (void) spa, (void) size, (void) iops, (void) flags; +} -#endif +void +zfs_racct_write(spa_t *spa, uint64_t size, uint64_t iops, dmu_flags_t flags) +{ + (void) spa, (void) size, (void) iops, (void) flags; +} diff --git a/sys/contrib/openzfs/lib/libzstd/Makefile.am b/sys/contrib/openzfs/lib/libzstd/Makefile.am index 49bfb328a6f7..856175137906 100644 --- a/sys/contrib/openzfs/lib/libzstd/Makefile.am +++ b/sys/contrib/openzfs/lib/libzstd/Makefile.am @@ -1,4 +1,6 @@ libzstd_la_CFLAGS = $(AM_CFLAGS) $(LIBRARY_CFLAGS) +libzstd_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBZPOOL_CPPFLAGS) + # -fno-tree-vectorize is set for gcc in zstd/common/compiler.h # Set it for other compilers, too. libzstd_la_CFLAGS += -fno-tree-vectorize diff --git a/sys/contrib/openzfs/lib/libzutil/Makefile.am b/sys/contrib/openzfs/lib/libzutil/Makefile.am index ecdf940508b2..519906235f7f 100644 --- a/sys/contrib/openzfs/lib/libzutil/Makefile.am +++ b/sys/contrib/openzfs/lib/libzutil/Makefile.am @@ -17,6 +17,7 @@ libzutil_la_SOURCES = \ if BUILD_LINUX libzutil_la_SOURCES += \ + %D%/os/linux/zutil_setproctitle.c \ %D%/os/linux/zutil_device_path_os.c \ %D%/os/linux/zutil_import_os.c endif diff --git a/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_device_path_os.c b/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_device_path_os.c index f93ab9ad7538..6e348e8b6ec1 100644 --- a/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_device_path_os.c +++ b/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_device_path_os.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_import_os.c b/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_import_os.c index da9a7ded936a..324ba1cf372b 100644 --- a/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_import_os.c +++ b/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_import_os.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -250,7 +251,24 @@ zfs_dev_flush(int fd) } void +update_vdev_config_dev_sysfs_path(nvlist_t *nv, const char *path, + const char *key) +{ + (void) nv; + (void) path; + (void) key; +} + +void update_vdevs_config_dev_sysfs_path(nvlist_t *config) { (void) config; } + +int +zpool_disk_wait(const char *path) +{ + + (void) path; + return (ENOTSUP); +} diff --git a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_device_path_os.c b/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_device_path_os.c index cfd4bfbf1e2c..8ed062bf9b37 100644 --- a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_device_path_os.c +++ b/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_device_path_os.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -273,7 +274,6 @@ zfs_get_pci_slots_sys_path(const char *dev_name) free(address2); if (asprintf(&path, "/sys/bus/pci/slots/%s", ep->d_name) == -1) { - free(tmp); continue; } break; @@ -345,6 +345,8 @@ zfs_get_enclosure_sysfs_path(const char *dev_name) if (strstr(ep->d_name, "enclosure_device") == NULL) continue; + if (tmp2 != NULL) + free(tmp2); if (asprintf(&tmp2, "%s/%s", tmp1, ep->d_name) == -1) { tmp2 = NULL; break; @@ -373,14 +375,13 @@ zfs_get_enclosure_sysfs_path(const char *dev_name) if (tmp3 == NULL) break; + if (path != NULL) + free(path); if (asprintf(&path, "/sys/class/%s", tmp3) == -1) { /* If asprintf() fails, 'path' is undefined */ path = NULL; break; } - - if (path == NULL) - break; } end: @@ -428,7 +429,6 @@ dm_get_underlying_path(const char *dm_name) char *tmp = NULL; char *path = NULL; char *dev_str; - int size; char *first_path = NULL; char *enclosure_path; @@ -450,7 +450,7 @@ dm_get_underlying_path(const char *dm_name) else dev_str = tmp; - if ((size = asprintf(&tmp, "/sys/block/%s/slaves/", dev_str)) == -1) { + if (asprintf(&tmp, "/sys/block/%s/slaves/", dev_str) == -1) { tmp = NULL; goto end; } @@ -479,8 +479,7 @@ dm_get_underlying_path(const char *dm_name) if (!enclosure_path) continue; - if ((size = asprintf( - &path, "/dev/%s", ep->d_name)) == -1) + if (asprintf(&path, "/dev/%s", ep->d_name) == -1) path = NULL; free(enclosure_path); break; @@ -499,7 +498,7 @@ end: * enclosure devices. Throw up out hands and return the first * underlying path. */ - if ((size = asprintf(&path, "/dev/%s", first_path)) == -1) + if (asprintf(&path, "/dev/%s", first_path) == -1) path = NULL; } diff --git a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_import_os.c b/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_import_os.c index 85f367237996..2b2043889e68 100644 --- a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_import_os.c +++ b/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_import_os.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -168,27 +169,19 @@ zpool_open_func(void *arg) * Add additional entries for paths described by this label. */ if (rn->rn_labelpaths) { - char *path = NULL; - char *devid = NULL; - char *env = NULL; + const char *path = NULL; + const char *devid = NULL; rdsk_node_t *slice; avl_index_t where; - int timeout; int error; if (label_paths(rn->rn_hdl, rn->rn_config, &path, &devid)) return; - env = getenv("ZPOOL_IMPORT_UDEV_TIMEOUT_MS"); - if ((env == NULL) || sscanf(env, "%d", &timeout) != 1 || - timeout < 0) { - timeout = DISK_LABEL_WAIT; - } - /* * Allow devlinks to stabilize so all paths are available. */ - zpool_label_disk_wait(rn->rn_name, timeout); + zpool_disk_wait(rn->rn_name); if (path != NULL) { slice = zutil_alloc(hdl, sizeof (rdsk_node_t)); @@ -582,9 +575,8 @@ zfs_device_get_physical(struct udev_device *dev, char *bufptr, size_t buflen) * Wait up to timeout_ms for udev to set up the device node. The device is * considered ready when libudev determines it has been initialized, all of * the device links have been verified to exist, and it has been allowed to - * settle. At this point the device the device can be accessed reliably. - * Depending on the complexity of the udev rules this process could take - * several seconds. + * settle. At this point the device can be accessed reliably. Depending on + * the complexity of the udev rules this process could take several seconds. */ int zpool_label_disk_wait(const char *path, int timeout_ms) @@ -684,6 +676,20 @@ zpool_label_disk_wait(const char *path, int timeout_ms) } /* + * Simplified version of zpool_label_disk_wait() where we wait for a device + * to appear using the default timeouts. + */ +int +zpool_disk_wait(const char *path) +{ + int timeout; + timeout = zpool_getenv_int("ZPOOL_IMPORT_UDEV_TIMEOUT_MS", + DISK_LABEL_WAIT); + + return (zpool_label_disk_wait(path, timeout)); +} + +/* * Encode the persistent devices strings * used for the vdev disk label */ @@ -767,20 +773,37 @@ no_dev: * Rescan the enclosure sysfs path for turning on enclosure LEDs and store it * in the nvlist * (if applicable). Like: * vdev_enc_sysfs_path: '/sys/class/enclosure/11:0:1:0/SLOT 4' + * + * If an old path was in the nvlist, and the rescan can not find a new path, + * then keep the old path, since the disk may have been removed. + * + * path: The vdev path (value from ZPOOL_CONFIG_PATH) + * key: The nvlist_t name (like ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH) */ -static void -update_vdev_config_dev_sysfs_path(nvlist_t *nv, char *path) +void +update_vdev_config_dev_sysfs_path(nvlist_t *nv, const char *path, + const char *key) { char *upath, *spath; + const char *oldpath = NULL; + + (void) nvlist_lookup_string(nv, key, &oldpath); /* Add enclosure sysfs path (if disk is in an enclosure). */ upath = zfs_get_underlying_path(path); spath = zfs_get_enclosure_sysfs_path(upath); if (spath) { - nvlist_add_string(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH, spath); + (void) nvlist_add_string(nv, key, spath); } else { - nvlist_remove_all(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH); + /* + * We couldn't dynamically scan the disk's enclosure sysfs path. + * This could be because the disk went away. If there's an old + * enclosure sysfs path in the nvlist, then keep using it. + */ + if (!oldpath) { + (void) nvlist_remove_all(nv, key); + } } free(upath); @@ -795,12 +818,13 @@ sysfs_path_pool_vdev_iter_f(void *hdl_data, nvlist_t *nv, void *data) { (void) hdl_data, (void) data; - char *path = NULL; + const char *path = NULL; if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) != 0) return (1); /* Rescan our enclosure sysfs path for this vdev */ - update_vdev_config_dev_sysfs_path(nv, path); + update_vdev_config_dev_sysfs_path(nv, path, + ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH); return (0); } @@ -841,7 +865,7 @@ void update_vdev_config_dev_strs(nvlist_t *nv) { vdev_dev_strs_t vds; - char *env, *type, *path; + const char *env, *type, *path; uint64_t wholedisk = 0; /* @@ -889,7 +913,8 @@ update_vdev_config_dev_strs(nvlist_t *nv) (void) nvlist_add_string(nv, ZPOOL_CONFIG_PHYS_PATH, vds.vds_devphys); } - update_vdev_config_dev_sysfs_path(nv, path); + update_vdev_config_dev_sysfs_path(nv, path, + ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH); } else { /* Clear out any stale entries. */ (void) nvlist_remove_all(nv, ZPOOL_CONFIG_DEVID); diff --git a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_setproctitle.c b/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_setproctitle.c new file mode 100644 index 000000000000..fc727e29ce2a --- /dev/null +++ b/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_setproctitle.c @@ -0,0 +1,277 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Copyright © 2013 Guillem Jover <guillem@hadrons.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <errno.h> +#include <stddef.h> +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <err.h> +#include <unistd.h> +#include <string.h> +#include <sys/param.h> +#include <libzutil.h> + +static struct { + /* Original value. */ + const char *arg0; + + /* Title space available. */ + char *base, *end; + + /* Pointer to original nul character within base. */ + char *nul; + + boolean_t warned; + boolean_t reset; + int error; +} SPT; + +#define LIBBSD_IS_PATHNAME_SEPARATOR(c) ((c) == '/') +#define SPT_MAXTITLE 255 + +extern const char *__progname; + +static const char * +getprogname(void) +{ + return (__progname); +} + +static void +setprogname(const char *progname) +{ + size_t i; + + for (i = strlen(progname); i > 0; i--) { + if (LIBBSD_IS_PATHNAME_SEPARATOR(progname[i - 1])) { + __progname = progname + i; + return; + } + } + __progname = progname; +} + + +static inline size_t +spt_min(size_t a, size_t b) +{ + return ((a < b) ? a : b); +} + +static int +spt_copyenv(int envc, char *envp[]) +{ + char **envcopy; + char *eq; + int envsize; + int i, error = 0; + + if (environ != envp) + return (0); + + /* + * Make a copy of the old environ array of pointers, in case + * clearenv() or setenv() is implemented to free the internal + * environ array, because we will need to access the old environ + * contents to make the new copy. + */ + envsize = (envc + 1) * sizeof (char *); + envcopy = malloc(envsize); + if (envcopy == NULL) + return (errno); + memcpy(envcopy, envp, envsize); + + environ = NULL; + + for (i = 0; envcopy[i]; i++) { + eq = strchr(envcopy[i], '='); + if (eq == NULL) + continue; + + *eq = '\0'; + if (setenv(envcopy[i], eq + 1, 1) < 0) + error = errno; + *eq = '='; + + if (error) { + clearenv(); + environ = envp; + free(envcopy); + return (error); + } + } + + /* + * Dispose of the shallow copy, now that we've finished transfering + * the old environment. + */ + free(envcopy); + + return (0); +} + +static int +spt_copyargs(int argc, char *argv[]) +{ + char *tmp; + int i; + + for (i = 1; i < argc || (i >= argc && argv[i]); i++) { + if (argv[i] == NULL) + continue; + + tmp = strdup(argv[i]); + if (tmp == NULL) + return (errno); + + argv[i] = tmp; + } + + return (0); +} + +void +zfs_setproctitle_init(int argc, char *argv[], char *envp[]) +{ + char *base, *end, *nul, *tmp; + int i, envc, error; + + /* Try to make sure we got called with main() arguments. */ + if (argc < 0) + return; + + base = argv[0]; + if (base == NULL) + return; + + nul = base + strlen(base); + end = nul + 1; + + for (i = 0; i < argc || (i >= argc && argv[i]); i++) { + if (argv[i] == NULL || argv[i] != end) + continue; + + end = argv[i] + strlen(argv[i]) + 1; + } + + for (i = 0; envp[i]; i++) { + if (envp[i] != end) + continue; + + end = envp[i] + strlen(envp[i]) + 1; + } + envc = i; + + SPT.arg0 = strdup(argv[0]); + if (SPT.arg0 == NULL) { + SPT.error = errno; + return; + } + + tmp = strdup(getprogname()); + if (tmp == NULL) { + SPT.error = errno; + return; + } + setprogname(tmp); + + error = spt_copyenv(envc, envp); + if (error) { + SPT.error = error; + return; + } + + error = spt_copyargs(argc, argv); + if (error) { + SPT.error = error; + return; + } + + SPT.nul = nul; + SPT.base = base; + SPT.end = end; +} + +void +zfs_setproctitle(const char *fmt, ...) +{ + /* Use buffer in case argv[0] is passed. */ + char buf[SPT_MAXTITLE + 1]; + va_list ap; + char *nul; + int len; + if (SPT.base == NULL) { + if (!SPT.warned) { + warnx("setproctitle not initialized, please" + "call zfs_setproctitle_init()"); + SPT.warned = B_TRUE; + } + return; + } + + if (fmt) { + if (fmt[0] == '-') { + /* Skip program name prefix. */ + fmt++; + len = 0; + } else { + /* Print program name heading for grep. */ + snprintf(buf, sizeof (buf), "%s: ", getprogname()); + len = strlen(buf); + } + + va_start(ap, fmt); + len += vsnprintf(buf + len, sizeof (buf) - len, fmt, ap); + va_end(ap); + } else { + len = snprintf(buf, sizeof (buf), "%s", SPT.arg0); + } + + if (len <= 0) { + SPT.error = errno; + return; + } + + if (!SPT.reset) { + memset(SPT.base, 0, SPT.end - SPT.base); + SPT.reset = B_TRUE; + } else { + memset(SPT.base, 0, spt_min(sizeof (buf), SPT.end - SPT.base)); + } + + len = spt_min(len, spt_min(sizeof (buf), SPT.end - SPT.base) - 1); + memcpy(SPT.base, buf, len); + nul = SPT.base + len; + + if (nul < SPT.nul) { + *SPT.nul = '.'; + } else if (nul == SPT.nul && nul + 1 < SPT.end) { + *SPT.nul = ' '; + *++nul = '\0'; + } +} diff --git a/sys/contrib/openzfs/lib/libzutil/zutil_device_path.c b/sys/contrib/openzfs/lib/libzutil/zutil_device_path.c index 6a8c8869edf1..97a2a998bb62 100644 --- a/sys/contrib/openzfs/lib/libzutil/zutil_device_path.c +++ b/sys/contrib/openzfs/lib/libzutil/zutil_device_path.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -57,6 +58,7 @@ int zfs_resolve_shortname(const char *name, char *path, size_t len) { const char *env = getenv("ZPOOL_IMPORT_PATH"); + char resolved_path[PATH_MAX]; if (env) { for (;;) { @@ -85,6 +87,20 @@ zfs_resolve_shortname(const char *name, char *path, size_t len) } } + /* + * The user can pass a relative path like ./file1 for the vdev. The path + * must contain a directory prefix like './file1' or '../file1'. Simply + * passing 'file1' is not allowed, as it may match a block device name. + */ + if ((strncmp(name, "./", 2) == 0 || strncmp(name, "../", 3) == 0) && + realpath(name, resolved_path) != NULL) { + if (access(resolved_path, F_OK) == 0) { + if (strlen(resolved_path) + 1 <= len) { + if (strlcpy(path, resolved_path, len) < len) + return (0); /* success */ + } + } + } return (errno = ENOENT); } diff --git a/sys/contrib/openzfs/lib/libzutil/zutil_import.c b/sys/contrib/openzfs/lib/libzutil/zutil_import.c index 26fba2cadf74..08367f4c064d 100644 --- a/sys/contrib/openzfs/lib/libzutil/zutil_import.c +++ b/sys/contrib/openzfs/lib/libzutil/zutil_import.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -71,6 +72,30 @@ #include "zutil_import.h" +const char * +libpc_error_description(libpc_handle_t *hdl) +{ + if (hdl->lpc_desc[0] != '\0') + return (hdl->lpc_desc); + + switch (hdl->lpc_error) { + case LPC_BADCACHE: + return (dgettext(TEXT_DOMAIN, "invalid or missing cache file")); + case LPC_BADPATH: + return (dgettext(TEXT_DOMAIN, "must be an absolute path")); + case LPC_NOMEM: + return (dgettext(TEXT_DOMAIN, "out of memory")); + case LPC_EACCESS: + return (dgettext(TEXT_DOMAIN, "some devices require root " + "privileges")); + case LPC_UNKNOWN: + return (dgettext(TEXT_DOMAIN, "unknown error")); + default: + assert(hdl->lpc_error == 0); + return (dgettext(TEXT_DOMAIN, "no error")); + } +} + static __attribute__((format(printf, 2, 3))) void zutil_error_aux(libpc_handle_t *hdl, const char *fmt, ...) { @@ -85,28 +110,27 @@ zutil_error_aux(libpc_handle_t *hdl, const char *fmt, ...) } static void -zutil_verror(libpc_handle_t *hdl, const char *error, const char *fmt, +zutil_verror(libpc_handle_t *hdl, lpc_error_t error, const char *fmt, va_list ap) { char action[1024]; (void) vsnprintf(action, sizeof (action), fmt, ap); + hdl->lpc_error = error; if (hdl->lpc_desc_active) hdl->lpc_desc_active = B_FALSE; else hdl->lpc_desc[0] = '\0'; - if (hdl->lpc_printerr) { - if (hdl->lpc_desc[0] != '\0') - error = hdl->lpc_desc; - - (void) fprintf(stderr, "%s: %s\n", action, error); - } + if (hdl->lpc_printerr) + (void) fprintf(stderr, "%s: %s\n", action, + libpc_error_description(hdl)); } static __attribute__((format(printf, 3, 4))) int -zutil_error_fmt(libpc_handle_t *hdl, const char *error, const char *fmt, ...) +zutil_error_fmt(libpc_handle_t *hdl, lpc_error_t error, + const char *fmt, ...) { va_list ap; @@ -120,7 +144,7 @@ zutil_error_fmt(libpc_handle_t *hdl, const char *error, const char *fmt, ...) } static int -zutil_error(libpc_handle_t *hdl, const char *error, const char *msg) +zutil_error(libpc_handle_t *hdl, lpc_error_t error, const char *msg) { return (zutil_error_fmt(hdl, error, "%s", msg)); } @@ -128,7 +152,7 @@ zutil_error(libpc_handle_t *hdl, const char *error, const char *msg) static int zutil_no_memory(libpc_handle_t *hdl) { - zutil_error(hdl, EZFS_NOMEM, "internal error"); + zutil_error(hdl, LPC_NOMEM, "internal error"); exit(1); } @@ -210,7 +234,7 @@ fix_paths(libpc_handle_t *hdl, nvlist_t *nv, name_entry_t *names) uint_t c, children; uint64_t guid; name_entry_t *ne, *best; - char *path; + const char *path; if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, &child, &children) == 0) { @@ -474,15 +498,13 @@ get_configs(libpc_handle_t *hdl, pool_list_t *pl, boolean_t active_ok, uint_t i, nspares, nl2cache; boolean_t config_seen; uint64_t best_txg; - char *name, *hostname = NULL; + const char *name, *hostname = NULL; uint64_t guid; uint_t children = 0; nvlist_t **child = NULL; - uint_t holes; uint64_t *hole_array, max_id; uint_t c; boolean_t isactive; - uint64_t hostid; nvlist_t *nvl; boolean_t valid_top_config = B_FALSE; @@ -490,7 +512,8 @@ get_configs(libpc_handle_t *hdl, pool_list_t *pl, boolean_t active_ok, goto nomem; for (pe = pl->pools; pe != NULL; pe = pe->pe_next) { - uint64_t id, max_txg = 0; + uint64_t id, max_txg = 0, hostid = 0; + uint_t holes = 0; if (nvlist_alloc(&config, NV_UNIQUE_NAME, 0) != 0) goto nomem; @@ -569,8 +592,8 @@ get_configs(libpc_handle_t *hdl, pool_list_t *pl, boolean_t active_ok, * hostname (if available) */ uint64_t state, version; - char *comment = NULL; - char *compatibility = NULL; + const char *comment = NULL; + const char *compatibility = NULL; version = fnvlist_lookup_uint64(tmp, ZPOOL_CONFIG_VERSION); @@ -894,7 +917,7 @@ error: static uint64_t label_offset(uint64_t size, int l) { - ASSERT(P2PHASE_TYPED(size, sizeof (vdev_label_t), uint64_t) == 0); + ASSERT0(P2PHASE_TYPED(size, sizeof (vdev_label_t), uint64_t)); return (l * sizeof (vdev_label_t) + (l < VDEV_LABELS / 2 ? 0 : size - VDEV_LABELS * sizeof (vdev_label_t))); } @@ -912,7 +935,6 @@ zpool_read_label_slow(int fd, nvlist_t **config, int *num_labels) vdev_phys_t *label; nvlist_t *expected_config = NULL; uint64_t expected_guid = 0, size; - int error; *config = NULL; @@ -920,8 +942,9 @@ zpool_read_label_slow(int fd, nvlist_t **config, int *num_labels) return (0); size = P2ALIGN_TYPED(statbuf.st_size, sizeof (vdev_label_t), uint64_t); - error = posix_memalign((void **)&label, PAGESIZE, sizeof (*label)); - if (error) + label = (vdev_phys_t *)umem_alloc_aligned(sizeof (*label), PAGESIZE, + UMEM_DEFAULT); + if (label == NULL) return (-1); for (l = 0; l < VDEV_LABELS; l++) { @@ -970,7 +993,7 @@ zpool_read_label_slow(int fd, nvlist_t **config, int *num_labels) if (num_labels != NULL) *num_labels = count; - free(label); + umem_free_aligned(label, sizeof (*label)); *config = expected_config; return (0); @@ -1001,9 +1024,9 @@ zpool_read_label(int fd, nvlist_t **config, int *num_labels) return (0); size = P2ALIGN_TYPED(statbuf.st_size, sizeof (vdev_label_t), uint64_t); - error = posix_memalign((void **)&labels, PAGESIZE, - VDEV_LABELS * sizeof (*labels)); - if (error) + labels = (vdev_phys_t *)umem_alloc_aligned( + VDEV_LABELS * sizeof (*labels), PAGESIZE, UMEM_DEFAULT); + if (labels == NULL) return (-1); memset(aiocbs, 0, sizeof (aiocbs)); @@ -1034,10 +1057,22 @@ zpool_read_label(int fd, nvlist_t **config, int *num_labels) case EINVAL: break; case EINPROGRESS: - // This shouldn't be possible to - // encounter, die if we do. + /* + * This shouldn't be possible to + * encounter, die if we do. + */ ASSERT(B_FALSE); zfs_fallthrough; + case EREMOTEIO: + /* + * May be returned by an NVMe device + * which is visible in /dev/ but due + * to a low-level format change, or + * other error, needs to be rescanned. + * Try the slow method. + */ + zfs_fallthrough; + case EAGAIN: case EOPNOTSUPP: case ENOSYS: do_slow = B_TRUE; @@ -1056,7 +1091,7 @@ zpool_read_label(int fd, nvlist_t **config, int *num_labels) error = zpool_read_label_slow(fd, config, num_labels); saved_errno = errno; } - free(labels); + umem_free_aligned(labels, VDEV_LABELS * sizeof (*labels)); errno = saved_errno; return (error); } @@ -1105,7 +1140,7 @@ zpool_read_label(int fd, nvlist_t **config, int *num_labels) if (num_labels != NULL) *num_labels = count; - free(labels); + umem_free_aligned(labels, VDEV_LABELS * sizeof (*labels)); *config = expected_config; return (0); @@ -1139,12 +1174,12 @@ slice_cache_compare(const void *arg1, const void *arg2) static int label_paths_impl(libpc_handle_t *hdl, nvlist_t *nvroot, uint64_t pool_guid, - uint64_t vdev_guid, char **path, char **devid) + uint64_t vdev_guid, const char **path, const char **devid) { nvlist_t **child; uint_t c, children; uint64_t guid; - char *val; + const char *val; int error; if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_CHILDREN, @@ -1182,18 +1217,32 @@ label_paths_impl(libpc_handle_t *hdl, nvlist_t *nvroot, uint64_t pool_guid, * The returned pointers are only valid as long as label remains valid. */ int -label_paths(libpc_handle_t *hdl, nvlist_t *label, char **path, char **devid) +label_paths(libpc_handle_t *hdl, nvlist_t *label, const char **path, + const char **devid) { nvlist_t *nvroot; uint64_t pool_guid; uint64_t vdev_guid; + uint64_t state; *path = NULL; *devid = NULL; + if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &vdev_guid) != 0) + return (ENOENT); + + /* + * In case of spare or l2cache, we directly return path/devid from the + * label. + */ + if (!(nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_STATE, &state)) && + (state == POOL_STATE_SPARE || state == POOL_STATE_L2CACHE)) { + (void) nvlist_lookup_string(label, ZPOOL_CONFIG_PATH, path); + (void) nvlist_lookup_string(label, ZPOOL_CONFIG_DEVID, devid); + return (0); + } if (nvlist_lookup_nvlist(label, ZPOOL_CONFIG_VDEV_TREE, &nvroot) || - nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_GUID, &pool_guid) || - nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &vdev_guid)) + nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_GUID, &pool_guid)) return (ENOENT); return (label_paths_impl(hdl, nvroot, pool_guid, vdev_guid, path, @@ -1243,18 +1292,18 @@ zpool_find_import_scan_dir(libpc_handle_t *hdl, pthread_mutex_t *lock, if (error == ENOENT) return (0); - zutil_error_aux(hdl, "%s", strerror(error)); - (void) zutil_error_fmt(hdl, EZFS_BADPATH, dgettext( - TEXT_DOMAIN, "cannot resolve path '%s'"), dir); + zutil_error_aux(hdl, "%s", zfs_strerror(error)); + (void) zutil_error_fmt(hdl, LPC_BADPATH, dgettext(TEXT_DOMAIN, + "cannot resolve path '%s'"), dir); return (error); } dirp = opendir(path); if (dirp == NULL) { error = errno; - zutil_error_aux(hdl, "%s", strerror(error)); - (void) zutil_error_fmt(hdl, EZFS_BADPATH, - dgettext(TEXT_DOMAIN, "cannot open '%s'"), path); + zutil_error_aux(hdl, "%s", zfs_strerror(error)); + (void) zutil_error_fmt(hdl, LPC_BADPATH, dgettext(TEXT_DOMAIN, + "cannot open '%s'"), path); return (error); } @@ -1314,9 +1363,9 @@ zpool_find_import_scan_path(libpc_handle_t *hdl, pthread_mutex_t *lock, goto out; } - zutil_error_aux(hdl, "%s", strerror(error)); - (void) zutil_error_fmt(hdl, EZFS_BADPATH, dgettext( - TEXT_DOMAIN, "cannot resolve path '%s'"), dir); + zutil_error_aux(hdl, "%s", zfs_strerror(error)); + (void) zutil_error_fmt(hdl, LPC_BADPATH, dgettext(TEXT_DOMAIN, + "cannot resolve path '%s'"), dir); goto out; } @@ -1352,8 +1401,8 @@ zpool_find_import_scan(libpc_handle_t *hdl, pthread_mutex_t *lock, if (error == ENOENT) continue; - zutil_error_aux(hdl, "%s", strerror(error)); - (void) zutil_error_fmt(hdl, EZFS_BADPATH, dgettext( + zutil_error_aux(hdl, "%s", zfs_strerror(error)); + (void) zutil_error_fmt(hdl, LPC_BADPATH, dgettext( TEXT_DOMAIN, "cannot resolve path '%s'"), dir[i]); goto error; } @@ -1417,7 +1466,21 @@ zpool_find_import_impl(libpc_handle_t *hdl, importargs_t *iarg, * validating labels, a large number of threads can be used due to * minimal contention. */ - t = tpool_create(1, 2 * sysconf(_SC_NPROCESSORS_ONLN), 0, NULL); + long threads = 2 * sysconf(_SC_NPROCESSORS_ONLN); +#ifdef HAVE_AIO_H + long am; +#ifdef _SC_AIO_LISTIO_MAX + am = sysconf(_SC_AIO_LISTIO_MAX); + if (am >= VDEV_LABELS) + threads = MIN(threads, am / VDEV_LABELS); +#endif +#ifdef _SC_AIO_MAX + am = sysconf(_SC_AIO_MAX); + if (am >= VDEV_LABELS) + threads = MIN(threads, am / VDEV_LABELS); +#endif +#endif + t = tpool_create(1, threads, 0, NULL); for (slice = avl_first(cache); slice; (slice = avl_walk(cache, slice, AVL_AFTER))) (void) tpool_dispatch(t, zpool_open_func, slice); @@ -1451,7 +1514,7 @@ zpool_find_import_impl(libpc_handle_t *hdl, importargs_t *iarg, } if (iarg->poolname != NULL && !aux) { - char *pname; + const char *pname; matched = nvlist_lookup_string(config, ZPOOL_CONFIG_POOL_NAME, &pname) == 0 && @@ -1525,7 +1588,7 @@ static int discover_cached_paths(libpc_handle_t *hdl, nvlist_t *nv, avl_tree_t *cache, pthread_mutex_t *lock) { - char *path = NULL; + const char *path = NULL; ssize_t dl; uint_t children; nvlist_t **child; @@ -1542,12 +1605,21 @@ discover_cached_paths(libpc_handle_t *hdl, nvlist_t *nv, * our directory cache. */ if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0) { - if ((dl = zfs_dirnamelen(path)) == -1) - path = (char *)"."; - else - path[dl] = '\0'; - return (zpool_find_import_scan_dir(hdl, lock, cache, - path, 0)); + int ret; + char c = '\0'; + if ((dl = zfs_dirnamelen(path)) == -1) { + path = "."; + } else { + c = path[dl]; + ((char *)path)[dl] = '\0'; + + } + ret = zpool_find_import_scan_dir(hdl, lock, cache, + path, 0); + if (c != '\0') + ((char *)path)[dl] = c; + + return (ret); } return (0); } @@ -1566,24 +1638,24 @@ zpool_find_import_cached(libpc_handle_t *hdl, importargs_t *iarg) nvlist_t *raw, *src, *dst; nvlist_t *pools; nvpair_t *elem; - char *name; + const char *name; uint64_t this_guid; boolean_t active; verify(iarg->poolname == NULL || iarg->guid == 0); if ((fd = open(iarg->cachefile, O_RDONLY | O_CLOEXEC)) < 0) { - zutil_error_aux(hdl, "%s", strerror(errno)); - (void) zutil_error(hdl, EZFS_BADCACHE, - dgettext(TEXT_DOMAIN, "failed to open cache file")); + zutil_error_aux(hdl, "%s", zfs_strerror(errno)); + (void) zutil_error(hdl, LPC_BADCACHE, dgettext(TEXT_DOMAIN, + "failed to open cache file")); return (NULL); } if (fstat64(fd, &statbuf) != 0) { - zutil_error_aux(hdl, "%s", strerror(errno)); + zutil_error_aux(hdl, "%s", zfs_strerror(errno)); (void) close(fd); - (void) zutil_error(hdl, EZFS_BADCACHE, - dgettext(TEXT_DOMAIN, "failed to get size of cache file")); + (void) zutil_error(hdl, LPC_BADCACHE, dgettext(TEXT_DOMAIN, + "failed to get size of cache file")); return (NULL); } @@ -1595,8 +1667,7 @@ zpool_find_import_cached(libpc_handle_t *hdl, importargs_t *iarg) if (read(fd, buf, statbuf.st_size) != statbuf.st_size) { (void) close(fd); free(buf); - (void) zutil_error(hdl, EZFS_BADCACHE, - dgettext(TEXT_DOMAIN, + (void) zutil_error(hdl, LPC_BADCACHE, dgettext(TEXT_DOMAIN, "failed to read cache file contents")); return (NULL); } @@ -1605,8 +1676,7 @@ zpool_find_import_cached(libpc_handle_t *hdl, importargs_t *iarg) if (nvlist_unpack(buf, statbuf.st_size, &raw, 0) != 0) { free(buf); - (void) zutil_error(hdl, EZFS_BADCACHE, - dgettext(TEXT_DOMAIN, + (void) zutil_error(hdl, LPC_BADCACHE, dgettext(TEXT_DOMAIN, "invalid or corrupt cache file contents")); return (NULL); } @@ -1694,10 +1764,12 @@ zpool_find_import_cached(libpc_handle_t *hdl, importargs_t *iarg) * caller. */ nvpair_t *pair = nvlist_next_nvpair(nv, NULL); + if (pair == NULL) + continue; fnvlist_add_nvlist(pools, nvpair_name(pair), fnvpair_value_nvlist(pair)); - VERIFY3P(nvlist_next_nvpair(nv, pair), ==, NULL); + VERIFY0P(nvlist_next_nvpair(nv, pair)); iarg->guid = saved_guid; iarg->poolname = saved_poolname; @@ -1775,26 +1847,20 @@ zpool_find_import(libpc_handle_t *hdl, importargs_t *iarg) nvlist_t * -zpool_search_import(void *hdl, importargs_t *import, - const pool_config_ops_t *pco) +zpool_search_import(libpc_handle_t *hdl, importargs_t *import) { - libpc_handle_t handle = { 0 }; nvlist_t *pools = NULL; - handle.lpc_lib_handle = hdl; - handle.lpc_ops = pco; - handle.lpc_printerr = B_TRUE; - verify(import->poolname == NULL || import->guid == 0); if (import->cachefile != NULL) - pools = zpool_find_import_cached(&handle, import); + pools = zpool_find_import_cached(hdl, import); else - pools = zpool_find_import(&handle, import); + pools = zpool_find_import(hdl, import); if ((pools == NULL || nvlist_empty(pools)) && - handle.lpc_open_access_error && geteuid() != 0) { - (void) zutil_error(&handle, EZFS_EACESS, dgettext(TEXT_DOMAIN, + hdl->lpc_open_access_error && geteuid() != 0) { + (void) zutil_error(hdl, LPC_EACCESS, dgettext(TEXT_DOMAIN, "no pools found")); } @@ -1802,10 +1868,10 @@ zpool_search_import(void *hdl, importargs_t *import, } static boolean_t -pool_match(nvlist_t *cfg, char *tgt) +pool_match(nvlist_t *cfg, const char *tgt) { uint64_t v, guid = strtoull(tgt, NULL, 0); - char *s; + const char *s; if (guid != 0) { if (nvlist_lookup_uint64(cfg, ZPOOL_CONFIG_POOL_GUID, &v) == 0) @@ -1818,8 +1884,8 @@ pool_match(nvlist_t *cfg, char *tgt) } int -zpool_find_config(void *hdl, const char *target, nvlist_t **configp, - importargs_t *args, const pool_config_ops_t *pco) +zpool_find_config(libpc_handle_t *hdl, const char *target, nvlist_t **configp, + importargs_t *args) { nvlist_t *pools; nvlist_t *match = NULL; @@ -1828,36 +1894,52 @@ zpool_find_config(void *hdl, const char *target, nvlist_t **configp, int count = 0; char *targetdup = strdup(target); + if (targetdup == NULL) + return (ENOMEM); + *configp = NULL; if ((sepp = strpbrk(targetdup, "/@")) != NULL) *sepp = '\0'; - pools = zpool_search_import(hdl, args, pco); + pools = zpool_search_import(hdl, args); + if (pools == NULL) { + zutil_error_aux(hdl, dgettext(TEXT_DOMAIN, "no pools found")); + (void) zutil_error_fmt(hdl, LPC_UNKNOWN, dgettext(TEXT_DOMAIN, + "failed to find config for pool '%s'"), targetdup); + free(targetdup); + return (ENOENT); + } - if (pools != NULL) { - nvpair_t *elem = NULL; - while ((elem = nvlist_next_nvpair(pools, elem)) != NULL) { - VERIFY0(nvpair_value_nvlist(elem, &config)); - if (pool_match(config, targetdup)) { - count++; - if (match != NULL) { - /* multiple matches found */ - continue; - } else { - match = fnvlist_dup(config); - } + nvpair_t *elem = NULL; + while ((elem = nvlist_next_nvpair(pools, elem)) != NULL) { + VERIFY0(nvpair_value_nvlist(elem, &config)); + if (pool_match(config, targetdup)) { + count++; + if (match != NULL) { + /* multiple matches found */ + continue; + } else { + match = fnvlist_dup(config); } } - fnvlist_free(pools); } + fnvlist_free(pools); if (count == 0) { + zutil_error_aux(hdl, dgettext(TEXT_DOMAIN, + "no matching pools")); + (void) zutil_error_fmt(hdl, LPC_UNKNOWN, dgettext(TEXT_DOMAIN, + "failed to find config for pool '%s'"), targetdup); free(targetdup); return (ENOENT); } if (count > 1) { + zutil_error_aux(hdl, dgettext(TEXT_DOMAIN, + "more than one matching pool")); + (void) zutil_error_fmt(hdl, LPC_UNKNOWN, dgettext(TEXT_DOMAIN, + "failed to find config for pool '%s'"), targetdup); free(targetdup); fnvlist_free(match); return (EINVAL); @@ -1869,6 +1951,104 @@ zpool_find_config(void *hdl, const char *target, nvlist_t **configp, return (0); } +/* Return if a vdev is a leaf vdev. Note: draid spares are leaf vdevs. */ +static boolean_t +vdev_is_leaf(nvlist_t *nv) +{ + uint_t children = 0; + nvlist_t **child; + + (void) nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, + &child, &children); + + return (children == 0); +} + +/* Return if a vdev is a leaf vdev and a real device (disk or file) */ +static boolean_t +vdev_is_real_leaf(nvlist_t *nv) +{ + const char *type = NULL; + if (!vdev_is_leaf(nv)) + return (B_FALSE); + + (void) nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type); + if ((strcmp(type, VDEV_TYPE_DISK) == 0) || + (strcmp(type, VDEV_TYPE_FILE) == 0)) { + return (B_TRUE); + } + + return (B_FALSE); +} + +/* + * This function is called by our FOR_EACH_VDEV() macros. + * + * state: State machine status (stored inside of a (nvlist_t *)) + * nv: The current vdev nvlist_t we are iterating over. + * last_nv: The previous vdev nvlist_t we returned to the user in + * the last iteration of FOR_EACH_VDEV(). We use it + * to find the next vdev nvlist_t we should return. + * real_leaves_only: Only return leaf vdevs. + * + * Returns 1 if we found the next vdev nvlist_t for this iteration. 0 if + * we're still searching for it. + */ +static int +__for_each_vdev_macro_helper_func(void *state, nvlist_t *nv, void *last_nv, + boolean_t real_leaves_only) +{ + enum {FIRST_NV = 0, NEXT_IS_MATCH = 1, STOP_LOOKING = 2}; + + /* The very first entry in the NV list is a special case */ + if (*((nvlist_t **)state) == (nvlist_t *)FIRST_NV) { + if (real_leaves_only && !vdev_is_real_leaf(nv)) + return (0); + + *((nvlist_t **)last_nv) = nv; + *((nvlist_t **)state) = (nvlist_t *)STOP_LOOKING; + return (1); + } + + /* + * We came across our last_nv, meaning the next one is the one we + * want + */ + if (nv == *((nvlist_t **)last_nv)) { + /* Next iteration of this function will return the nvlist_t */ + *((nvlist_t **)state) = (nvlist_t *)NEXT_IS_MATCH; + return (0); + } + + /* + * We marked NEXT_IS_MATCH on the previous iteration, so this is the one + * we want. + */ + if (*(nvlist_t **)state == (nvlist_t *)NEXT_IS_MATCH) { + if (real_leaves_only && !vdev_is_real_leaf(nv)) + return (0); + + *((nvlist_t **)last_nv) = nv; + *((nvlist_t **)state) = (nvlist_t *)STOP_LOOKING; + return (1); + } + + return (0); +} + +int +for_each_vdev_macro_helper_func(void *state, nvlist_t *nv, void *last_nv) +{ + return (__for_each_vdev_macro_helper_func(state, nv, last_nv, B_FALSE)); +} + +int +for_each_real_leaf_vdev_macro_helper_func(void *state, nvlist_t *nv, + void *last_nv) +{ + return (__for_each_vdev_macro_helper_func(state, nv, last_nv, B_TRUE)); +} + /* * Internal function for iterating over the vdevs. * @@ -1887,7 +2067,7 @@ for_each_vdev_cb(void *zhp, nvlist_t *nv, pool_vdev_iter_f func, uint_t c, children; int ret = 0; int i; - char *type; + const char *type; const char *list[] = { ZPOOL_CONFIG_SPARES, @@ -1898,9 +2078,8 @@ for_each_vdev_cb(void *zhp, nvlist_t *nv, pool_vdev_iter_f func, if (nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) != 0) return (ret); - /* Don't run our function on root or indirect vdevs */ - if ((strcmp(type, VDEV_TYPE_ROOT) != 0) && - (strcmp(type, VDEV_TYPE_INDIRECT) != 0)) { + /* Don't run our function on indirect vdevs */ + if (strcmp(type, VDEV_TYPE_INDIRECT) != 0) { ret |= func(zhp, nv, data); } diff --git a/sys/contrib/openzfs/lib/libzutil/zutil_import.h b/sys/contrib/openzfs/lib/libzutil/zutil_import.h index 0108eb45c5cf..0c140c226b03 100644 --- a/sys/contrib/openzfs/lib/libzutil/zutil_import.h +++ b/sys/contrib/openzfs/lib/libzutil/zutil_import.h @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -28,28 +29,13 @@ #ifndef _LIBZUTIL_ZUTIL_IMPORT_H_ #define _LIBZUTIL_ZUTIL_IMPORT_H_ -#define EZFS_BADCACHE "invalid or missing cache file" -#define EZFS_BADPATH "must be an absolute path" -#define EZFS_NOMEM "out of memory" -#define EZFS_EACESS "some devices require root privileges" - #define IMPORT_ORDER_PREFERRED_1 1 #define IMPORT_ORDER_PREFERRED_2 2 #define IMPORT_ORDER_SCAN_OFFSET 10 #define IMPORT_ORDER_DEFAULT 100 -typedef struct libpc_handle { - boolean_t lpc_printerr; - boolean_t lpc_open_access_error; - boolean_t lpc_desc_active; - char lpc_desc[1024]; - const pool_config_ops_t *lpc_ops; - void *lpc_lib_handle; -} libpc_handle_t; - - -int label_paths(libpc_handle_t *hdl, nvlist_t *label, char **path, - char **devid); +int label_paths(libpc_handle_t *hdl, nvlist_t *label, const char **path, + const char **devid); int zpool_find_import_blkid(libpc_handle_t *hdl, pthread_mutex_t *lock, avl_tree_t **slice_cache); diff --git a/sys/contrib/openzfs/lib/libzutil/zutil_nicenum.c b/sys/contrib/openzfs/lib/libzutil/zutil_nicenum.c index 4dcac1f855ff..44d68e85d0db 100644 --- a/sys/contrib/openzfs/lib/libzutil/zutil_nicenum.c +++ b/sys/contrib/openzfs/lib/libzutil/zutil_nicenum.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * diff --git a/sys/contrib/openzfs/lib/libzutil/zutil_pool.c b/sys/contrib/openzfs/lib/libzutil/zutil_pool.c index 21dc1f9d9458..2aacfa53b5e0 100644 --- a/sys/contrib/openzfs/lib/libzutil/zutil_pool.c +++ b/sys/contrib/openzfs/lib/libzutil/zutil_pool.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: CDDL-1.0 /* * CDDL HEADER START * @@ -6,7 +7,7 @@ * 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. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -28,6 +29,7 @@ #include <string.h> #include <sys/nvpair.h> #include <sys/fs/zfs.h> +#include <math.h> #include <libzutil.h> @@ -144,3 +146,33 @@ zpool_history_unpack(char *buf, uint64_t bytes_read, uint64_t *leftover, *leftover = bytes_read; return (0); } + +/* + * Floating point sleep(). Allows you to pass in a floating point value for + * seconds. + */ +void +fsleep(float sec) +{ + struct timespec req; + req.tv_sec = floor(sec); + req.tv_nsec = (sec - (float)req.tv_sec) * NANOSEC; + nanosleep(&req, NULL); +} + +/* + * Get environment variable 'env' and return it as an integer. + * If 'env' is not set, then return 'default_val' instead. + */ +int +zpool_getenv_int(const char *env, int default_val) +{ + char *str; + int val; + str = getenv(env); + if ((str == NULL) || sscanf(str, "%d", &val) != 1 || + val < 0) { + val = default_val; + } + return (val); +} |
