aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2021-10-21 11:58:45 +0000
committerMartin Matuska <mm@FreeBSD.org>2021-10-21 13:06:06 +0000
commit6ba2210ee039f2f12878c217bcf058e9c8b26b29 (patch)
tree2021a442bcd8b3b299185254855563280859dda1 /sys
parent01593a0ff9f16e2cb23ab2ebc4ca3b8bd2434425 (diff)
parentec64fdb93d144ab1884097cfd36e18b62a2db848 (diff)
downloadsrc-6ba2210ee039f2f12878c217bcf058e9c8b26b29.tar.gz
src-6ba2210ee039f2f12878c217bcf058e9c8b26b29.zip
zfs: merge openzfs/zfs@ec64fdb93 (master) into main
Notable upstream pull request merges: #12392 Avoid panic in case of pool errors and missing L2ARC #12448 skip snapshot in zfs_iter_mounted() #12516 Fix NFS and large reads on older kernels #12533 Fail invalid incremental recursive send gracefully #12569 FreeBSD: Really zero the zero page #12575 Reject zfs send -RI with nonexistent fromsnap #12602 Correct refcount_add in dmu_zfetch #12650 zpool should call zfs_nicestrtonum() with non-NULL handle Obtained from: OpenZFS OpenZFS commit: ec64fdb93d144ab1884097cfd36e18b62a2db848
Diffstat (limited to 'sys')
-rw-r--r--sys/contrib/openzfs/META2
-rwxr-xr-xsys/contrib/openzfs/cmd/arcstat/arcstat.in66
-rwxr-xr-xsys/contrib/openzfs/cmd/vdev_id/vdev_id4
-rw-r--r--sys/contrib/openzfs/cmd/zdb/zdb.c9
-rwxr-xr-xsys/contrib/openzfs/cmd/zed/zed.d/statechange-notify.sh5
-rw-r--r--sys/contrib/openzfs/cmd/zpool/Makefile.am3
-rw-r--r--sys/contrib/openzfs/cmd/zpool/zpool_iter.c50
-rw-r--r--sys/contrib/openzfs/cmd/zpool/zpool_main.c10
-rw-r--r--sys/contrib/openzfs/cmd/zpool/zpool_util.h2
-rwxr-xr-xsys/contrib/openzfs/contrib/initramfs/hooks/zfs.in1
-rw-r--r--sys/contrib/openzfs/contrib/initramfs/scripts/zfs1
-rw-r--r--sys/contrib/openzfs/include/libzfs.h1
-rw-r--r--sys/contrib/openzfs/include/libzfs_core.h3
-rw-r--r--sys/contrib/openzfs/include/libzutil.h11
-rw-r--r--sys/contrib/openzfs/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h1
-rw-r--r--sys/contrib/openzfs/include/sys/dmu.h2
-rw-r--r--sys/contrib/openzfs/include/sys/zfs_refcount.h8
-rw-r--r--sys/contrib/openzfs/include/sys/zio.h72
-rw-r--r--sys/contrib/openzfs/lib/Makefile.am39
-rw-r--r--sys/contrib/openzfs/lib/libshare/os/linux/nfs.c47
-rw-r--r--sys/contrib/openzfs/lib/libspl/page.c1
-rw-r--r--sys/contrib/openzfs/lib/libzfs/Makefile.am2
-rw-r--r--sys/contrib/openzfs/lib/libzfs/libzfs.abi1809
-rw-r--r--sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c5
-rw-r--r--sys/contrib/openzfs/lib/libzfs/libzfs_iter.c7
-rw-r--r--sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c28
-rw-r--r--sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c9
-rw-r--r--sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_ioctl_compat.c432
-rw-r--r--sys/contrib/openzfs/lib/libzfs/os/linux/libzfs_util_os.c6
-rw-r--r--sys/contrib/openzfs/lib/libzfs_core/Makefile.am20
-rw-r--r--sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi946
-rw-r--r--sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c10
-rw-r--r--sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c (renamed from sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_compat.c)5
-rw-r--r--sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c (renamed from sys/contrib/openzfs/lib/libzutil/os/linux/zutil_compat.c)4
-rw-r--r--sys/contrib/openzfs/lib/libzpool/Makefile.am4
-rw-r--r--sys/contrib/openzfs/lib/libzpool/util.c98
-rw-r--r--sys/contrib/openzfs/lib/libzutil/Makefile.am12
-rw-r--r--sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_import_os.c5
-rw-r--r--sys/contrib/openzfs/lib/libzutil/os/linux/zutil_import_os.c67
-rw-r--r--sys/contrib/openzfs/lib/libzutil/zutil_import.c68
-rw-r--r--sys/contrib/openzfs/man/man8/zfs-send.83
-rw-r--r--sys/contrib/openzfs/man/man8/zfs.82
-rw-r--r--sys/contrib/openzfs/module/Makefile.in9
-rw-r--r--sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c1
-rw-r--r--sys/contrib/openzfs/module/os/freebsd/zfs/dmu_os.c19
-rw-r--r--sys/contrib/openzfs/module/zfs/arc.c7
-rw-r--r--sys/contrib/openzfs/module/zfs/dmu.c6
-rw-r--r--sys/contrib/openzfs/module/zfs/dmu_zfetch.c3
-rw-r--r--sys/contrib/openzfs/module/zfs/dnode.c75
-rw-r--r--sys/contrib/openzfs/module/zfs/refcount.c8
-rw-r--r--sys/contrib/openzfs/module/zfs/vdev.c24
-rw-r--r--sys/contrib/openzfs/module/zfs/zfs_vnops.c8
-rw-r--r--sys/contrib/openzfs/tests/runfiles/linux.run2
-rw-r--r--sys/contrib/openzfs/tests/runfiles/sanity.run2
-rwxr-xr-xsys/contrib/openzfs/tests/test-runner/bin/zts-report.py.in4
-rw-r--r--sys/contrib/openzfs/tests/test-runner/include/logapi.shlib50
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c6
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/Makefile.am2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/mkbusy.c20
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/include/blkdev.shlib2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/Makefile.am1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_007_neg.ksh2
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_013_pos.ksh80
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_unmount/zfs_unmount_nested.ksh8
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/Makefile.am4
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/compress_zstd_bswap.ksh55
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/testpool_zstd.tar.gzbin0 -> 1286794 bytes
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/Makefile.am2
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/ctime.c10
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/deadman/deadman_sync.ksh4
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_016_neg.ksh14
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib11
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_rename_inuse.ksh4
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_snapdev.ksh2
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh46
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_zil.ksh4
-rw-r--r--sys/contrib/openzfs/tests/zfs-tests/tests/perf/perf.shlib1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_reads.ksh1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite.ksh1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite_fixed.ksh1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes.ksh1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh3
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads.ksh1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached.ksh3
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached_clone.ksh3
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_dbuf_cached.ksh1
-rwxr-xr-xsys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_writes.ksh3
-rw-r--r--sys/modules/zfs/zfs_config.h21
-rw-r--r--sys/modules/zfs/zfs_gitrev.h2
89 files changed, 2700 insertions, 1717 deletions
diff --git a/sys/contrib/openzfs/META b/sys/contrib/openzfs/META
index 9776223b88d8..8dacb8082f05 100644
--- a/sys/contrib/openzfs/META
+++ b/sys/contrib/openzfs/META
@@ -6,5 +6,5 @@ Release: 1
Release-Tags: relext
License: CDDL
Author: OpenZFS
-Linux-Maximum: 5.13
+Linux-Maximum: 5.14
Linux-Minimum: 3.10
diff --git a/sys/contrib/openzfs/cmd/arcstat/arcstat.in b/sys/contrib/openzfs/cmd/arcstat/arcstat.in
index 9e7c52a6c7a3..cd9a803a2414 100755
--- a/sys/contrib/openzfs/cmd/arcstat/arcstat.in
+++ b/sys/contrib/openzfs/cmd/arcstat/arcstat.in
@@ -441,73 +441,73 @@ def calculate():
v = dict()
v["time"] = time.strftime("%H:%M:%S", time.localtime())
- v["hits"] = d["hits"] / sint
- v["miss"] = d["misses"] / sint
+ v["hits"] = d["hits"] // sint
+ v["miss"] = d["misses"] // sint
v["read"] = v["hits"] + v["miss"]
- v["hit%"] = 100 * v["hits"] / v["read"] if v["read"] > 0 else 0
+ v["hit%"] = 100 * v["hits"] // v["read"] if v["read"] > 0 else 0
v["miss%"] = 100 - v["hit%"] if v["read"] > 0 else 0
- v["dhit"] = (d["demand_data_hits"] + d["demand_metadata_hits"]) / sint
- v["dmis"] = (d["demand_data_misses"] + d["demand_metadata_misses"]) / sint
+ v["dhit"] = (d["demand_data_hits"] + d["demand_metadata_hits"]) // sint
+ v["dmis"] = (d["demand_data_misses"] + d["demand_metadata_misses"]) // sint
v["dread"] = v["dhit"] + v["dmis"]
- v["dh%"] = 100 * v["dhit"] / v["dread"] if v["dread"] > 0 else 0
+ v["dh%"] = 100 * v["dhit"] // v["dread"] if v["dread"] > 0 else 0
v["dm%"] = 100 - v["dh%"] if v["dread"] > 0 else 0
- v["phit"] = (d["prefetch_data_hits"] + d["prefetch_metadata_hits"]) / sint
+ v["phit"] = (d["prefetch_data_hits"] + d["prefetch_metadata_hits"]) // sint
v["pmis"] = (d["prefetch_data_misses"] +
- d["prefetch_metadata_misses"]) / sint
+ d["prefetch_metadata_misses"]) // sint
v["pread"] = v["phit"] + v["pmis"]
- v["ph%"] = 100 * v["phit"] / v["pread"] if v["pread"] > 0 else 0
+ v["ph%"] = 100 * v["phit"] // v["pread"] if v["pread"] > 0 else 0
v["pm%"] = 100 - v["ph%"] if v["pread"] > 0 else 0
v["mhit"] = (d["prefetch_metadata_hits"] +
- d["demand_metadata_hits"]) / sint
+ d["demand_metadata_hits"]) // sint
v["mmis"] = (d["prefetch_metadata_misses"] +
- d["demand_metadata_misses"]) / sint
+ d["demand_metadata_misses"]) // sint
v["mread"] = v["mhit"] + v["mmis"]
- v["mh%"] = 100 * v["mhit"] / v["mread"] if v["mread"] > 0 else 0
+ v["mh%"] = 100 * v["mhit"] // v["mread"] if v["mread"] > 0 else 0
v["mm%"] = 100 - v["mh%"] if v["mread"] > 0 else 0
v["arcsz"] = cur["size"]
v["size"] = cur["size"]
v["c"] = cur["c"]
- v["mfu"] = d["mfu_hits"] / sint
- v["mru"] = d["mru_hits"] / sint
- v["mrug"] = d["mru_ghost_hits"] / sint
- v["mfug"] = d["mfu_ghost_hits"] / sint
- v["eskip"] = d["evict_skip"] / sint
- v["el2skip"] = d["evict_l2_skip"] / sint
- v["el2cach"] = d["evict_l2_cached"] / sint
- v["el2el"] = d["evict_l2_eligible"] / sint
- v["el2mfu"] = d["evict_l2_eligible_mfu"] / sint
- v["el2mru"] = d["evict_l2_eligible_mru"] / sint
- v["el2inel"] = d["evict_l2_ineligible"] / sint
- v["mtxmis"] = d["mutex_miss"] / sint
+ v["mfu"] = d["mfu_hits"] // sint
+ v["mru"] = d["mru_hits"] // sint
+ v["mrug"] = d["mru_ghost_hits"] // sint
+ v["mfug"] = d["mfu_ghost_hits"] // sint
+ v["eskip"] = d["evict_skip"] // sint
+ v["el2skip"] = d["evict_l2_skip"] // sint
+ v["el2cach"] = d["evict_l2_cached"] // sint
+ v["el2el"] = d["evict_l2_eligible"] // sint
+ v["el2mfu"] = d["evict_l2_eligible_mfu"] // sint
+ v["el2mru"] = d["evict_l2_eligible_mru"] // sint
+ v["el2inel"] = d["evict_l2_ineligible"] // sint
+ v["mtxmis"] = d["mutex_miss"] // sint
if l2exist:
- v["l2hits"] = d["l2_hits"] / sint
- v["l2miss"] = d["l2_misses"] / sint
+ v["l2hits"] = d["l2_hits"] // sint
+ v["l2miss"] = d["l2_misses"] // sint
v["l2read"] = v["l2hits"] + v["l2miss"]
- v["l2hit%"] = 100 * v["l2hits"] / v["l2read"] if v["l2read"] > 0 else 0
+ v["l2hit%"] = 100 * v["l2hits"] // v["l2read"] if v["l2read"] > 0 else 0
v["l2miss%"] = 100 - v["l2hit%"] if v["l2read"] > 0 else 0
v["l2asize"] = cur["l2_asize"]
v["l2size"] = cur["l2_size"]
- v["l2bytes"] = d["l2_read_bytes"] / sint
+ v["l2bytes"] = d["l2_read_bytes"] // sint
v["l2pref"] = cur["l2_prefetch_asize"]
v["l2mfu"] = cur["l2_mfu_asize"]
v["l2mru"] = cur["l2_mru_asize"]
v["l2data"] = cur["l2_bufc_data_asize"]
v["l2meta"] = cur["l2_bufc_metadata_asize"]
- v["l2pref%"] = 100 * v["l2pref"] / v["l2asize"]
- v["l2mfu%"] = 100 * v["l2mfu"] / v["l2asize"]
- v["l2mru%"] = 100 * v["l2mru"] / v["l2asize"]
- v["l2data%"] = 100 * v["l2data"] / v["l2asize"]
- v["l2meta%"] = 100 * v["l2meta"] / v["l2asize"]
+ v["l2pref%"] = 100 * v["l2pref"] // v["l2asize"]
+ v["l2mfu%"] = 100 * v["l2mfu"] // v["l2asize"]
+ v["l2mru%"] = 100 * v["l2mru"] // v["l2asize"]
+ v["l2data%"] = 100 * v["l2data"] // v["l2asize"]
+ v["l2meta%"] = 100 * v["l2meta"] // v["l2asize"]
v["grow"] = 0 if cur["arc_no_grow"] else 1
v["need"] = cur["arc_need_free"]
diff --git a/sys/contrib/openzfs/cmd/vdev_id/vdev_id b/sys/contrib/openzfs/cmd/vdev_id/vdev_id
index cad59c93f078..ab9d7326fc7b 100755
--- a/sys/contrib/openzfs/cmd/vdev_id/vdev_id
+++ b/sys/contrib/openzfs/cmd/vdev_id/vdev_id
@@ -622,8 +622,8 @@ enclosure_handler () {
PCI_ID=$(echo "$PCI_ID_LONG" | sed -r 's/^[0-9]+://g')
# Name our device according to vdev_id.conf (like "L0" or "U1").
- NAME=$(awk '/channel/{if ($1 == "channel" && $2 == "$PCI_ID" && \
- $3 == "$PORT_ID") {print ${4}int(count[$4])}; count[$4]++}' $CONFIG)
+ NAME=$(awk "/channel/{if (\$1 == \"channel\" && \$2 == \"$PCI_ID\" && \
+ \$3 == \"$PORT_ID\") {print \$4\$3}}" $CONFIG)
echo "${NAME}"
}
diff --git a/sys/contrib/openzfs/cmd/zdb/zdb.c b/sys/contrib/openzfs/cmd/zdb/zdb.c
index 797cac0874fe..81b9604f3789 100644
--- a/sys/contrib/openzfs/cmd/zdb/zdb.c
+++ b/sys/contrib/openzfs/cmd/zdb/zdb.c
@@ -5469,9 +5469,9 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
uint64_t now = gethrtime();
char buf[10];
uint64_t bytes = zcb->zcb_type[ZB_TOTAL][ZDB_OT_TOTAL].zb_asize;
- int kb_per_sec =
+ uint64_t kb_per_sec =
1 + bytes / (1 + ((now - zcb->zcb_start) / 1000 / 1000));
- int sec_remaining =
+ uint64_t sec_remaining =
(zcb->zcb_totalasize - bytes) / 1024 / kb_per_sec;
/* make sure nicenum has enough space */
@@ -5479,8 +5479,9 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
zfs_nicebytes(bytes, buf, sizeof (buf));
(void) fprintf(stderr,
- "\r%5s completed (%4dMB/s) "
- "estimated time remaining: %uhr %02umin %02usec ",
+ "\r%5s completed (%4"PRIu64"MB/s) "
+ "estimated time remaining: "
+ "%"PRIu64"hr %02"PRIu64"min %02"PRIu64"sec ",
buf, kb_per_sec / 1024,
sec_remaining / 60 / 60,
sec_remaining / 60 % 60,
diff --git a/sys/contrib/openzfs/cmd/zed/zed.d/statechange-notify.sh b/sys/contrib/openzfs/cmd/zed/zed.d/statechange-notify.sh
index 76f09061c5b5..ab11dfbc99d5 100755
--- a/sys/contrib/openzfs/cmd/zed/zed.d/statechange-notify.sh
+++ b/sys/contrib/openzfs/cmd/zed/zed.d/statechange-notify.sh
@@ -15,7 +15,7 @@
# Send notification in response to a fault induced statechange
#
# ZEVENT_SUBCLASS: 'statechange'
-# ZEVENT_VDEV_STATE_STR: 'DEGRADED', 'FAULTED' or 'REMOVED'
+# ZEVENT_VDEV_STATE_STR: 'DEGRADED', 'FAULTED', 'REMOVED', or 'UNAVAIL'
#
# Exit codes:
# 0: notification sent
@@ -31,7 +31,8 @@
if [ "${ZEVENT_VDEV_STATE_STR}" != "FAULTED" ] \
&& [ "${ZEVENT_VDEV_STATE_STR}" != "DEGRADED" ] \
- && [ "${ZEVENT_VDEV_STATE_STR}" != "REMOVED" ]; then
+ && [ "${ZEVENT_VDEV_STATE_STR}" != "REMOVED" ] \
+ && [ "${ZEVENT_VDEV_STATE_STR}" != "UNAVAIL" ]; then
exit 3
fi
diff --git a/sys/contrib/openzfs/cmd/zpool/Makefile.am b/sys/contrib/openzfs/cmd/zpool/Makefile.am
index aad45d4f7497..fa494c030e1c 100644
--- a/sys/contrib/openzfs/cmd/zpool/Makefile.am
+++ b/sys/contrib/openzfs/cmd/zpool/Makefile.am
@@ -26,7 +26,8 @@ zpool_LDADD = \
$(abs_top_builddir)/lib/libzfs/libzfs.la \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la \
- $(abs_top_builddir)/lib/libuutil/libuutil.la
+ $(abs_top_builddir)/lib/libuutil/libuutil.la \
+ $(abs_top_builddir)/lib/libzutil/libzutil.la
zpool_LDADD += $(LTLIBINTL)
diff --git a/sys/contrib/openzfs/cmd/zpool/zpool_iter.c b/sys/contrib/openzfs/cmd/zpool/zpool_iter.c
index 3d7a0cfc35e6..abfa2b7f6b90 100644
--- a/sys/contrib/openzfs/cmd/zpool/zpool_iter.c
+++ b/sys/contrib/openzfs/cmd/zpool/zpool_iter.c
@@ -264,51 +264,6 @@ for_each_pool(int argc, char **argv, boolean_t unavail,
return (ret);
}
-static int
-for_each_vdev_cb(zpool_handle_t *zhp, nvlist_t *nv, pool_vdev_iter_f func,
- void *data)
-{
- nvlist_t **child;
- uint_t c, children;
- int ret = 0;
- int i;
- char *type;
-
- const char *list[] = {
- ZPOOL_CONFIG_SPARES,
- ZPOOL_CONFIG_L2CACHE,
- ZPOOL_CONFIG_CHILDREN
- };
-
- for (i = 0; i < ARRAY_SIZE(list); i++) {
- if (nvlist_lookup_nvlist_array(nv, list[i], &child,
- &children) == 0) {
- for (c = 0; c < children; c++) {
- uint64_t ishole = 0;
-
- (void) nvlist_lookup_uint64(child[c],
- ZPOOL_CONFIG_IS_HOLE, &ishole);
-
- if (ishole)
- continue;
-
- ret |= for_each_vdev_cb(zhp, child[c], func,
- data);
- }
- }
- }
-
- if (nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) != 0)
- return (ret);
-
- /* Don't run our function on root vdevs */
- if (strcmp(type, VDEV_TYPE_ROOT) != 0) {
- ret |= func(zhp, nv, data);
- }
-
- return (ret);
-}
-
/*
* This is the equivalent of for_each_pool() for vdevs. It iterates thorough
* all vdevs in the pool, ignoring root vdevs and holes, calling func() on
@@ -327,7 +282,7 @@ for_each_vdev(zpool_handle_t *zhp, pool_vdev_iter_f func, void *data)
verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE,
&nvroot) == 0);
}
- return (for_each_vdev_cb(zhp, nvroot, func, data));
+ return (for_each_vdev_cb((void *) zhp, nvroot, func, data));
}
/*
@@ -603,7 +558,7 @@ vdev_run_cmd_thread(void *cb_cmd_data)
/* For each vdev in the pool run a command */
static int
-for_each_vdev_run_cb(zpool_handle_t *zhp, nvlist_t *nv, void *cb_vcdl)
+for_each_vdev_run_cb(void *zhp_data, nvlist_t *nv, void *cb_vcdl)
{
vdev_cmd_data_list_t *vcdl = cb_vcdl;
vdev_cmd_data_t *data;
@@ -611,6 +566,7 @@ for_each_vdev_run_cb(zpool_handle_t *zhp, nvlist_t *nv, void *cb_vcdl)
char *vname = NULL;
char *vdev_enc_sysfs_path = NULL;
int i, match = 0;
+ zpool_handle_t *zhp = zhp_data;
if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) != 0)
return (1);
diff --git a/sys/contrib/openzfs/cmd/zpool/zpool_main.c b/sys/contrib/openzfs/cmd/zpool/zpool_main.c
index bfef6fc43285..3a2caa9a8101 100644
--- a/sys/contrib/openzfs/cmd/zpool/zpool_main.c
+++ b/sys/contrib/openzfs/cmd/zpool/zpool_main.c
@@ -5156,11 +5156,12 @@ get_stat_flags(zpool_list_t *list)
* Return 1 if cb_data->cb_vdev_names[0] is this vdev's name, 0 otherwise.
*/
static int
-is_vdev_cb(zpool_handle_t *zhp, nvlist_t *nv, void *cb_data)
+is_vdev_cb(void *zhp_data, nvlist_t *nv, void *cb_data)
{
iostat_cbdata_t *cb = cb_data;
char *name = NULL;
int ret = 0;
+ zpool_handle_t *zhp = zhp_data;
name = zpool_vdev_name(g_zfs, zhp, nv, cb->cb_name_flags);
@@ -7352,9 +7353,10 @@ zpool_do_trim(int argc, char **argv)
"combined with the -c or -s options\n"));
usage(B_FALSE);
}
- if (zfs_nicestrtonum(NULL, optarg, &rate) == -1) {
- (void) fprintf(stderr,
- gettext("invalid value for rate\n"));
+ if (zfs_nicestrtonum(g_zfs, optarg, &rate) == -1) {
+ (void) fprintf(stderr, "%s: %s\n",
+ gettext("invalid value for rate"),
+ libzfs_error_description(g_zfs));
usage(B_FALSE);
}
break;
diff --git a/sys/contrib/openzfs/cmd/zpool/zpool_util.h b/sys/contrib/openzfs/cmd/zpool/zpool_util.h
index 4002e5794021..6665eaf0d44e 100644
--- a/sys/contrib/openzfs/cmd/zpool/zpool_util.h
+++ b/sys/contrib/openzfs/cmd/zpool/zpool_util.h
@@ -27,6 +27,7 @@
#include <libnvpair.h>
#include <libzfs.h>
+#include <libzutil.h>
#ifdef __cplusplus
extern "C" {
@@ -68,7 +69,6 @@ int for_each_pool(int, char **, boolean_t unavail, zprop_list_t **,
boolean_t, zpool_iter_f, void *);
/* Vdev list functions */
-typedef int (*pool_vdev_iter_f)(zpool_handle_t *, nvlist_t *, void *);
int for_each_vdev(zpool_handle_t *zhp, pool_vdev_iter_f func, void *data);
typedef struct zpool_list zpool_list_t;
diff --git a/sys/contrib/openzfs/contrib/initramfs/hooks/zfs.in b/sys/contrib/openzfs/contrib/initramfs/hooks/zfs.in
index bdf169fd96c2..9d5c397cf224 100755
--- a/sys/contrib/openzfs/contrib/initramfs/hooks/zfs.in
+++ b/sys/contrib/openzfs/contrib/initramfs/hooks/zfs.in
@@ -17,7 +17,6 @@ for req in "@sbindir@/zpool" "@sbindir@/zfs" "@mounthelperdir@/mount.zfs"; do
}
done
-copy_exec "@sbindir@/zdb"
copy_exec "@udevdir@/vdev_id"
copy_exec "@udevdir@/zvol_id"
if command -v systemd-ask-password > /dev/null; then
diff --git a/sys/contrib/openzfs/contrib/initramfs/scripts/zfs b/sys/contrib/openzfs/contrib/initramfs/scripts/zfs
index 306e6e157e62..35502291e6f2 100644
--- a/sys/contrib/openzfs/contrib/initramfs/scripts/zfs
+++ b/sys/contrib/openzfs/contrib/initramfs/scripts/zfs
@@ -630,6 +630,7 @@ setup_snapshot_booting()
then
# Rollback snapshot
rollback_snap "$s" || retval=$((retval + 1))
+ ZFS_BOOTFS="${rootfs}"
else
# Setup a destination filesystem name.
# Ex: Called with 'rpool/ROOT/debian@snap2'
diff --git a/sys/contrib/openzfs/include/libzfs.h b/sys/contrib/openzfs/include/libzfs.h
index 270f810027bb..c0883a983678 100644
--- a/sys/contrib/openzfs/include/libzfs.h
+++ b/sys/contrib/openzfs/include/libzfs.h
@@ -650,6 +650,7 @@ _LIBZFS_H int zfs_create_ancestors(libzfs_handle_t *, const char *);
_LIBZFS_H int zfs_destroy(zfs_handle_t *, boolean_t);
_LIBZFS_H int zfs_destroy_snaps(zfs_handle_t *, char *, boolean_t);
_LIBZFS_H int zfs_destroy_snaps_nvl(libzfs_handle_t *, nvlist_t *, boolean_t);
+_LIBZFS_H int zfs_destroy_snaps_nvl_os(libzfs_handle_t *, nvlist_t *);
_LIBZFS_H int zfs_clone(zfs_handle_t *, const char *, nvlist_t *);
_LIBZFS_H int zfs_snapshot(libzfs_handle_t *, const char *, boolean_t,
nvlist_t *);
diff --git a/sys/contrib/openzfs/include/libzfs_core.h b/sys/contrib/openzfs/include/libzfs_core.h
index 83d8211ab615..9020d70db397 100644
--- a/sys/contrib/openzfs/include/libzfs_core.h
+++ b/sys/contrib/openzfs/include/libzfs_core.h
@@ -41,6 +41,9 @@ extern "C" {
_LIBZFS_CORE_H int libzfs_core_init(void);
_LIBZFS_CORE_H void libzfs_core_fini(void);
+struct zfs_cmd;
+_LIBZFS_CORE_H int lzc_ioctl_fd(int, unsigned long, struct zfs_cmd *);
+
/*
* NB: this type should be kept binary-compatible with dmu_objset_type_t.
*/
diff --git a/sys/contrib/openzfs/include/libzutil.h b/sys/contrib/openzfs/include/libzutil.h
index ef17bd5426df..c0a660ea7067 100644
--- a/sys/contrib/openzfs/include/libzutil.h
+++ b/sys/contrib/openzfs/include/libzutil.h
@@ -146,7 +146,6 @@ _LIBZUTIL_H int zpool_history_unpack(char *, uint64_t, uint64_t *, nvlist_t ***,
uint_t *);
struct zfs_cmd;
-_LIBZUTIL_H int zfs_ioctl_fd(int fd, unsigned long request, struct zfs_cmd *zc);
/*
* List of colors to use
@@ -163,6 +162,16 @@ _LIBZUTIL_H int printf_color(char *color, char *format, ...);
_LIBZUTIL_H const char *zfs_basename(const char *path);
_LIBZUTIL_H ssize_t zfs_dirnamelen(const char *path);
+/*
+ * These functions are used by the ZFS libraries and cmd/zpool code, but are
+ * not exported in the ABI.
+ */
+typedef int (*pool_vdev_iter_f)(void *, nvlist_t *, void *);
+int for_each_vdev_cb(void *zhp, nvlist_t *nv, pool_vdev_iter_f func,
+ void *data);
+int for_each_vdev_in_nvlist(nvlist_t *nvroot, pool_vdev_iter_f func,
+ void *data);
+void update_vdevs_config_dev_sysfs_path(nvlist_t *config);
#ifdef __cplusplus
}
#endif
diff --git a/sys/contrib/openzfs/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h b/sys/contrib/openzfs/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h
index 91bc48effe3f..d36a6d2ce7e2 100644
--- a/sys/contrib/openzfs/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h
+++ b/sys/contrib/openzfs/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h
@@ -148,7 +148,6 @@ nvlist_t *zfs_ioctl_compat_outnvl(zfs_cmd_t *, nvlist_t *, const int,
int zfs_ioctl_legacy_to_ozfs(int request);
int zfs_ioctl_ozfs_to_legacy(int request);
void zfs_cmd_legacy_to_ozfs(zfs_cmd_legacy_t *src, zfs_cmd_t *dst);
-void zfs_cmd_compat_get(zfs_cmd_t *, caddr_t, const int);
void zfs_cmd_ozfs_to_legacy(zfs_cmd_t *src, zfs_cmd_legacy_t *dst);
void zfs_cmd_compat_put(zfs_cmd_t *, caddr_t, const int, const int);
diff --git a/sys/contrib/openzfs/include/sys/dmu.h b/sys/contrib/openzfs/include/sys/dmu.h
index 10e29a45c89f..942ab9b10835 100644
--- a/sys/contrib/openzfs/include/sys/dmu.h
+++ b/sys/contrib/openzfs/include/sys/dmu.h
@@ -559,6 +559,8 @@ int dmu_spill_hold_existing(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp);
*/
int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset,
void *tag, dmu_buf_t **, int flags);
+int dmu_buf_hold_array(objset_t *os, uint64_t object, uint64_t offset,
+ uint64_t length, int read, void *tag, int *numbufsp, dmu_buf_t ***dbpp);
int dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset,
void *tag, dmu_buf_t **dbp, int flags);
int dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset,
diff --git a/sys/contrib/openzfs/include/sys/zfs_refcount.h b/sys/contrib/openzfs/include/sys/zfs_refcount.h
index 1e6449472e38..2f59ebb32b07 100644
--- a/sys/contrib/openzfs/include/sys/zfs_refcount.h
+++ b/sys/contrib/openzfs/include/sys/zfs_refcount.h
@@ -72,6 +72,14 @@ int zfs_refcount_is_zero(zfs_refcount_t *);
int64_t zfs_refcount_count(zfs_refcount_t *);
int64_t zfs_refcount_add(zfs_refcount_t *, const void *);
int64_t zfs_refcount_remove(zfs_refcount_t *, const void *);
+/*
+ * Note that (add|remove)_many add/remove one reference with "number" N,
+ * _not_ make N references with "number" 1, which is what vanilla
+ * zfs_refcount_(add|remove) would do if called N times.
+ *
+ * Attempting to remove a reference with number N when none exists is a
+ * panic on debug kernels with reference_tracking enabled.
+ */
int64_t zfs_refcount_add_many(zfs_refcount_t *, uint64_t, const void *);
int64_t zfs_refcount_remove_many(zfs_refcount_t *, uint64_t, const void *);
void zfs_refcount_transfer(zfs_refcount_t *, zfs_refcount_t *);
diff --git a/sys/contrib/openzfs/include/sys/zio.h b/sys/contrib/openzfs/include/sys/zio.h
index 5b606eaf8d50..b3589e9b0312 100644
--- a/sys/contrib/openzfs/include/sys/zio.h
+++ b/sys/contrib/openzfs/include/sys/zio.h
@@ -104,7 +104,7 @@ enum zio_checksum {
#define ZIO_CHECKSUM_DEFAULT ZIO_CHECKSUM_ON
#define ZIO_CHECKSUM_MASK 0xffULL
-#define ZIO_CHECKSUM_VERIFY (1 << 8)
+#define ZIO_CHECKSUM_VERIFY (1U << 8)
#define ZIO_DEDUPCHECKSUM ZIO_CHECKSUM_SHA256
@@ -169,27 +169,27 @@ enum zio_flag {
* Flags inherited by gang, ddt, and vdev children,
* and that must be equal for two zios to aggregate
*/
- ZIO_FLAG_DONT_AGGREGATE = 1 << 0,
- ZIO_FLAG_IO_REPAIR = 1 << 1,
- ZIO_FLAG_SELF_HEAL = 1 << 2,
- ZIO_FLAG_RESILVER = 1 << 3,
- ZIO_FLAG_SCRUB = 1 << 4,
- ZIO_FLAG_SCAN_THREAD = 1 << 5,
- ZIO_FLAG_PHYSICAL = 1 << 6,
+ ZIO_FLAG_DONT_AGGREGATE = 1U << 0,
+ ZIO_FLAG_IO_REPAIR = 1U << 1,
+ ZIO_FLAG_SELF_HEAL = 1U << 2,
+ ZIO_FLAG_RESILVER = 1U << 3,
+ ZIO_FLAG_SCRUB = 1U << 4,
+ ZIO_FLAG_SCAN_THREAD = 1U << 5,
+ ZIO_FLAG_PHYSICAL = 1U << 6,
#define ZIO_FLAG_AGG_INHERIT (ZIO_FLAG_CANFAIL - 1)
/*
* Flags inherited by ddt, gang, and vdev children.
*/
- ZIO_FLAG_CANFAIL = 1 << 7, /* must be first for INHERIT */
- ZIO_FLAG_SPECULATIVE = 1 << 8,
- ZIO_FLAG_CONFIG_WRITER = 1 << 9,
- ZIO_FLAG_DONT_RETRY = 1 << 10,
- ZIO_FLAG_DONT_CACHE = 1 << 11,
- ZIO_FLAG_NODATA = 1 << 12,
- ZIO_FLAG_INDUCE_DAMAGE = 1 << 13,
- ZIO_FLAG_IO_ALLOCATING = 1 << 14,
+ ZIO_FLAG_CANFAIL = 1U << 7, /* must be first for INHERIT */
+ ZIO_FLAG_SPECULATIVE = 1U << 8,
+ ZIO_FLAG_CONFIG_WRITER = 1U << 9,
+ ZIO_FLAG_DONT_RETRY = 1U << 10,
+ ZIO_FLAG_DONT_CACHE = 1U << 11,
+ ZIO_FLAG_NODATA = 1U << 12,
+ ZIO_FLAG_INDUCE_DAMAGE = 1U << 13,
+ ZIO_FLAG_IO_ALLOCATING = 1U << 14,
#define ZIO_FLAG_DDT_INHERIT (ZIO_FLAG_IO_RETRY - 1)
#define ZIO_FLAG_GANG_INHERIT (ZIO_FLAG_IO_RETRY - 1)
@@ -197,29 +197,29 @@ enum zio_flag {
/*
* Flags inherited by vdev children.
*/
- ZIO_FLAG_IO_RETRY = 1 << 15, /* must be first for INHERIT */
- ZIO_FLAG_PROBE = 1 << 16,
- ZIO_FLAG_TRYHARD = 1 << 17,
- ZIO_FLAG_OPTIONAL = 1 << 18,
+ ZIO_FLAG_IO_RETRY = 1U << 15, /* must be first for INHERIT */
+ ZIO_FLAG_PROBE = 1U << 16,
+ ZIO_FLAG_TRYHARD = 1U << 17,
+ ZIO_FLAG_OPTIONAL = 1U << 18,
#define ZIO_FLAG_VDEV_INHERIT (ZIO_FLAG_DONT_QUEUE - 1)
/*
* Flags not inherited by any children.
*/
- ZIO_FLAG_DONT_QUEUE = 1 << 19, /* must be first for INHERIT */
- ZIO_FLAG_DONT_PROPAGATE = 1 << 20,
- ZIO_FLAG_IO_BYPASS = 1 << 21,
- ZIO_FLAG_IO_REWRITE = 1 << 22,
- ZIO_FLAG_RAW_COMPRESS = 1 << 23,
- ZIO_FLAG_RAW_ENCRYPT = 1 << 24,
- ZIO_FLAG_GANG_CHILD = 1 << 25,
- ZIO_FLAG_DDT_CHILD = 1 << 26,
- ZIO_FLAG_GODFATHER = 1 << 27,
- ZIO_FLAG_NOPWRITE = 1 << 28,
- ZIO_FLAG_REEXECUTED = 1 << 29,
- ZIO_FLAG_DELEGATED = 1 << 30,
- ZIO_FLAG_FASTWRITE = 1 << 31,
+ ZIO_FLAG_DONT_QUEUE = 1U << 19, /* must be first for INHERIT */
+ ZIO_FLAG_DONT_PROPAGATE = 1U << 20,
+ ZIO_FLAG_IO_BYPASS = 1U << 21,
+ ZIO_FLAG_IO_REWRITE = 1U << 22,
+ ZIO_FLAG_RAW_COMPRESS = 1U << 23,
+ ZIO_FLAG_RAW_ENCRYPT = 1U << 24,
+ ZIO_FLAG_GANG_CHILD = 1U << 25,
+ ZIO_FLAG_DDT_CHILD = 1U << 26,
+ ZIO_FLAG_GODFATHER = 1U << 27,
+ ZIO_FLAG_NOPWRITE = 1U << 28,
+ ZIO_FLAG_REEXECUTED = 1U << 29,
+ ZIO_FLAG_DELEGATED = 1U << 30,
+ ZIO_FLAG_FASTWRITE = 1U << 31,
};
#define ZIO_FLAG_MUSTSUCCEED 0
@@ -237,8 +237,8 @@ enum zio_flag {
(((zio)->io_flags & ZIO_FLAG_VDEV_INHERIT) | \
ZIO_FLAG_DONT_PROPAGATE | ZIO_FLAG_CANFAIL)
-#define ZIO_CHILD_BIT(x) (1 << (x))
-#define ZIO_CHILD_BIT_IS_SET(val, x) ((val) & (1 << (x)))
+#define ZIO_CHILD_BIT(x) (1U << (x))
+#define ZIO_CHILD_BIT_IS_SET(val, x) ((val) & (1U << (x)))
enum zio_child {
ZIO_CHILD_VDEV = 0,
@@ -404,7 +404,7 @@ typedef zio_t *zio_pipe_stage_t(zio_t *zio);
* only apply to ZIO_TYPE_TRIM zios are distinct from io_flags.
*/
enum trim_flag {
- ZIO_TRIM_SECURE = 1 << 0,
+ ZIO_TRIM_SECURE = 1U << 0,
};
typedef struct zio_alloc_list {
diff --git a/sys/contrib/openzfs/lib/Makefile.am b/sys/contrib/openzfs/lib/Makefile.am
index db7a3fa31d40..f07975cc03fc 100644
--- a/sys/contrib/openzfs/lib/Makefile.am
+++ b/sys/contrib/openzfs/lib/Makefile.am
@@ -1,5 +1,44 @@
+#
+# Shown below is a simplified dependency graph of the OpenZFS provided
+# libraries. Administrative commands (`zfs`, `zpool`, etc) interface with
+# the kernel modules using the `libzfs.so` and `libzfs_core.so` libraries.
+# These libraries provide a stable ABI across OpenZFS point releases.
+#
+# The `libzpool.so` library is a user space build of the DMU and SPA layers
+# used to implement debugging tools (zdb) and code validation tools (ztest).
+# These library interfaces are subject to change at any time.
+#
+#
+# CMDS: zhack/ztest/zdb/ zfs/zpool/zed/
+# raidz_{test,bench} zinject/zstream
+# | |
+# LIBS: | | libzfsbootenv*
+# | | |
+# | | |
+# libzpool libzfs* ----------------+
+# | | | \ / | | |
+# libicp --/ | | \ / | | \------- libshare
+# | | \ / | |
+# libzstd ---/ | \ / | \--------- libuutil
+# | \ / \ | |
+# libunicode --/ \ / \ | |
+# \ / \ | |
+# libzutil libzfs_core* | |
+# | | | | \ | | | |
+# | | | | | | | | |
+# | | | | | | | | |
+# libtpool -------------/ | | | \---- libnvpair* | | |
+# | | | | | |
+# libefi -----------------/ | \------ libavl* --------/ |
+# | | |
+# \-------- libspl ----+------/
+#
+# * - A stable ABI is provided for these libraries
+#
+#
# NB: GNU Automake Manual, Chapter 8.3.5: Libtool Convenience Libraries
# These nine libraries are intermediary build components.
+#
SUBDIRS = libavl libicp libshare libspl libtpool libzstd
CPPCHECKDIRS = libavl libicp libnvpair libshare libspl libtpool libunicode
CPPCHECKDIRS += libuutil libzfs libzfs_core libzfsbootenv libzpool libzutil
diff --git a/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c b/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c
index bd578adeec5d..4f754aabd3a3 100644
--- a/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c
+++ b/sys/contrib/openzfs/lib/libshare/os/linux/nfs.c
@@ -136,8 +136,9 @@ foreach_nfs_host_cb(const char *opt, const char *value, void *pcookie)
{
int error;
const char *access;
- char *host_dup, *host, *next;
+ char *host_dup, *host, *next, *v6Literal;
nfs_host_cookie_t *udata = (nfs_host_cookie_t *)pcookie;
+ int cidr_len;
#ifdef DEBUG
fprintf(stderr, "foreach_nfs_host_cb: key=%s, value=%s\n", opt, value);
@@ -160,10 +161,46 @@ foreach_nfs_host_cb(const char *opt, const char *value, void *pcookie)
host = host_dup;
do {
- next = strchr(host, ':');
- if (next != NULL) {
- *next = '\0';
- next++;
+ if (*host == '[') {
+ host++;
+ v6Literal = strchr(host, ']');
+ if (v6Literal == NULL) {
+ free(host_dup);
+ return (SA_SYNTAX_ERR);
+ }
+ if (v6Literal[1] == '\0') {
+ *v6Literal = '\0';
+ next = NULL;
+ } else if (v6Literal[1] == '/') {
+ next = strchr(v6Literal + 2, ':');
+ if (next == NULL) {
+ cidr_len =
+ strlen(v6Literal + 1);
+ memmove(v6Literal,
+ v6Literal + 1,
+ cidr_len);
+ v6Literal[cidr_len] = '\0';
+ } else {
+ cidr_len = next - v6Literal - 1;
+ memmove(v6Literal,
+ v6Literal + 1,
+ cidr_len);
+ v6Literal[cidr_len] = '\0';
+ next++;
+ }
+ } else if (v6Literal[1] == ':') {
+ *v6Literal = '\0';
+ next = v6Literal + 2;
+ } else {
+ free(host_dup);
+ return (SA_SYNTAX_ERR);
+ }
+ } else {
+ next = strchr(host, ':');
+ if (next != NULL) {
+ *next = '\0';
+ next++;
+ }
}
error = udata->callback(udata->filename,
diff --git a/sys/contrib/openzfs/lib/libspl/page.c b/sys/contrib/openzfs/lib/libspl/page.c
index ad9aad998231..5b0d3f2e5786 100644
--- a/sys/contrib/openzfs/lib/libspl/page.c
+++ b/sys/contrib/openzfs/lib/libspl/page.c
@@ -21,6 +21,7 @@
*/
#include <unistd.h>
+#include <sys/param.h>
static size_t pagesize = 0;
diff --git a/sys/contrib/openzfs/lib/libzfs/Makefile.am b/sys/contrib/openzfs/lib/libzfs/Makefile.am
index e3527ffe7058..e23f7c162afb 100644
--- a/sys/contrib/openzfs/lib/libzfs/Makefile.am
+++ b/sys/contrib/openzfs/lib/libzfs/Makefile.am
@@ -35,7 +35,6 @@ USER_C = \
if BUILD_FREEBSD
USER_C += \
os/freebsd/libzfs_compat.c \
- os/freebsd/libzfs_ioctl_compat.c \
os/freebsd/libzfs_zmount.c
endif
@@ -75,6 +74,7 @@ libzfs_la_LIBADD = \
$(abs_top_builddir)/lib/libshare/libshare.la \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la \
+ $(abs_top_builddir)/lib/libzutil/libzutil.la \
$(abs_top_builddir)/lib/libuutil/libuutil.la
libzfs_la_LIBADD += -lm $(LIBCRYPTO_LIBS) $(ZLIB_LIBS) $(LIBFETCH_LIBS) $(LTLIBINTL)
diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs.abi b/sys/contrib/openzfs/lib/libzfs/libzfs.abi
index a2c79c8568ca..86d612f5e326 100644
--- a/sys/contrib/openzfs/lib/libzfs/libzfs.abi
+++ b/sys/contrib/openzfs/lib/libzfs/libzfs.abi
@@ -2,22 +2,174 @@
<elf-needed>
<dependency name='libzfs_core.so.3'/>
<dependency name='libnvpair.so.3'/>
+ <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='libz.so.1'/>
<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='_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='_sol_getmntent' 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'/>
+ <elf-symbol name='atomic_add_32_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_64_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_8_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_char_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_int_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_long' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_long_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_ptr_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_short' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_add_short_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_32_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_64_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_8_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_uchar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_uchar_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_uint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_uint_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_ulong' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_ulong_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_ushort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_and_ushort_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_uchar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_uint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_ulong' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_cas_ushort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_clear_long_excl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_32_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_64_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_8_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_uchar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_uchar_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_uint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_uint_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_ulong' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_ulong_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_ushort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_dec_ushort_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_32_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_64_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_8_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_uchar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_uchar_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_uint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_uint_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_ulong' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_ulong_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_ushort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_inc_ushort_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_32_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_64_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_8_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_uchar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_uchar_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_uint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_uint_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_ulong' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_ulong_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_ushort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_or_ushort_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_set_long_excl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_16_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_32_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_64_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_8_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_char_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_int_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_long' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_long_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_ptr_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_short' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_sub_short_nv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_swap_16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_swap_32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_swap_64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_swap_8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_swap_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='atomic_swap_uchar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <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='avl_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_destroy_nodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_first' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_insert_here' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_is_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_last' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_nearest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_numnodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_swap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='avl_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <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='bookmark_namecheck' 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='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'/>
+ <elf-symbol name='efi_alloc_and_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='efi_err_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='efi_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='efi_rescan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='efi_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='efi_use_whole_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='efi_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='entity_namecheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='fletcher_2_byteswap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='fletcher_2_incremental_byteswap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -33,8 +185,15 @@
<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='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='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='getprop_uint64' 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='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='libspl_assertf' 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'/>
<elf-symbol name='libzfs_errno' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -54,9 +213,33 @@
<elf-symbol name='libzfs_run_process' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='libzfs_run_process_get_stdout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='libzfs_run_process_get_stdout_nopath' 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'/>
+ <elf-symbol name='list_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_insert_after' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_insert_before' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_insert_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_insert_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_is_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_link_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_link_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_link_replace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_move_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_prev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_remove_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_remove_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='list_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='membar_consumer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <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='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='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='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'/>
@@ -65,6 +248,19 @@
<elf-symbol name='sa_is_shared' 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='snapshot_namecheck' 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='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'/>
+ <elf-symbol name='tpool_dispatch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='tpool_member' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='tpool_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='tpool_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <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='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'/>
@@ -72,6 +268,8 @@
<elf-symbol name='zfeature_lookup_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_adjust_mount_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_allocatable_devs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_append_partition' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_basename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_bookmark_exists' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_clone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -97,10 +295,18 @@
<elf-symbol name='zfs_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_destroy_snaps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_destroy_snaps_nvl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_destroy_snaps_nvl_os' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_dev_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_dev_is_dm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_dev_is_whole_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_device_get_devid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_device_get_physical' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_dirnamelen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_expand_proplist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_foreach_mountpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_all_props' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_clones_nvl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_get_enclosure_sysfs_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_fsacl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_holds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -109,6 +315,7 @@
<elf-symbol name='zfs_get_pool_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_recvd_props' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_get_underlying_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_underlying_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_get_user_props' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_handle_dup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -119,6 +326,7 @@
<elf-symbol name='zfs_is_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_is_shared_nfs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_is_shared_smb' 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_children' 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'/>
@@ -134,7 +342,12 @@
<elf-symbol name='zfs_mount_delegation_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_name_to_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_name_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_nicebytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_nicenum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_nicenum_format' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_niceraw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_nicestrtonum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_nicetime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_parent_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_parse_mount_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -180,6 +393,7 @@
<elf-symbol name='zfs_refresh_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zfs_resolve_shortname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_rollback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_save_arguments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -204,6 +418,9 @@
<elf-symbol name='zfs_spa_version_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_special_devs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zfs_standard_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <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_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'/>
@@ -228,11 +445,13 @@
<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_create' 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_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'/>
<elf-symbol name='zpool_events_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -242,6 +461,7 @@
<elf-symbol name='zpool_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<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_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'/>
@@ -259,6 +479,7 @@
<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_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'/>
@@ -268,6 +489,7 @@
<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'/>
<elf-symbol name='zpool_label_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='zpool_label_disk_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zpool_load_compat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zpool_log_history' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zpool_name_to_prop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -295,10 +517,12 @@
<elf-symbol name='zpool_prop_unsupported' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='zpool_prop_values' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<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_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_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_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'/>
@@ -341,6 +565,7 @@
<elf-symbol name='zvol_volsize_to_reservation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
<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'/>
@@ -349,6 +574,7 @@
<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='libspl_assert_ok' size='4' 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='spa_feature_table' size='1904' 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'/>
@@ -357,6 +583,307 @@
<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 version='1.0' 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_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-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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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>
+ <pointer-type-def type-id='f20fbd51' size-in-bits='64' id='a3681dea'/>
+ <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
+ <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/>
+ <typedef-decl name='boolean_t' type-id='08f5ca17' id='c19b74c3'/>
+ <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/>
+ <typedef-decl name='uintptr_t' type-id='7359adad' id='e475ab95'/>
+ <typedef-decl name='ulong_t' type-id='7359adad' id='ee1f298e'/>
+ <type-decl name='void' id='48b5725f'/>
+ <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
+ <enum-decl name='__anonymous_enum__' is-anonymous='yes' id='08f5ca17'>
+ <underlying-type type-id='9cac1fee'/>
+ <enumerator name='B_FALSE' value='0'/>
+ <enumerator name='B_TRUE' value='1'/>
+ </enum-decl>
+ <typedef-decl name='avl_tree_t' type-id='b351119f' id='f20fbd51'/>
+ <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
+ <class-decl name='avl_tree' size-in-bits='320' is-struct='yes' visibility='default' id='b351119f'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='avl_root' type-id='bf311473' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='avl_compar' type-id='585e1de9' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='avl_offset' type-id='b59d7dce' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='avl_numnodes' type-id='ee1f298e' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='avl_pad' type-id='b59d7dce' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='428b67b3' size-in-bits='64' id='bf311473'/>
+ <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'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='avl_pcb' type-id='e475ab95' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <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>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='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_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>
+ <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>
+ <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'/>
+ <var-decl name='efi_debug' type-id='95e97e5e' mangled-name='efi_debug' visibility='default' elf-symbol-id='efi_debug'/>
+ <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>
+ <function-decl name='efi_type' mangled-name='efi_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_type'>
+ <parameter type-id='95e97e5e' name='fd'/>
+ <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>
+ <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'/>
+ <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>
+ <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_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_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>
+ <type-decl name='char' size-in-bits='8' id='a84c031d'/>
+ <typedef-decl name='diskaddr_t' type-id='9b3ff54f' id='804dc465'/>
+ <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/>
+ <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/>
+ <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/>
+ <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/>
+ <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
+ <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/>
+ <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/>
+ <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/>
+ <typedef-decl name='longlong_t' type-id='1eb56b1e' id='9b3ff54f'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+ <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/>
+ <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
+ </abi-instr>
<abi-instr version='1.0' address-size='64' path='libshare.c' language='LANG_C99'>
<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='26a90f95' name='options'/>
@@ -390,16 +917,7 @@
</function-decl>
<pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/>
<pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
- <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
- <typedef-decl name='boolean_t' type-id='08f5ca17' id='c19b74c3'/>
- <type-decl name='void' id='48b5725f'/>
- <type-decl name='char' size-in-bits='8' id='a84c031d'/>
<qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
- <enum-decl name='__anonymous_enum__' is-anonymous='yes' id='08f5ca17'>
- <underlying-type type-id='9cac1fee'/>
- <enumerator name='B_FALSE' value='0'/>
- <enumerator name='B_TRUE' value='1'/>
- </enum-decl>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='os/linux/smb.c' language='LANG_C99'>
<array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2040' id='11641789'>
@@ -429,7 +947,1019 @@
<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>
- <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='assert.c' language='LANG_C99'>
+ <var-decl name='libspl_assert_ok' type-id='95e97e5e' mangled-name='libspl_assert_ok' visibility='default' elf-symbol-id='libspl_assert_ok'/>
+ <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 version='1.0' address-size='64' path='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='uint16_t' type-id='253c2d2a' id='149c6638'/>
+ <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/>
+ <typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/>
+ <typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/>
+ <typedef-decl name='int8_t' type-id='2171a512' id='ee31ee44'/>
+ <typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/>
+ <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='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_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='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='atomic_clear_long_excl' mangled-name='atomic_clear_long_excl' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_clear_long_excl'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='3502e3ff' name='value'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ <function-decl name='atomic_set_long_excl' mangled-name='atomic_set_long_excl' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_set_long_excl'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='3502e3ff' name='value'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ <function-decl name='atomic_swap_ptr' mangled-name='atomic_swap_ptr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_swap_ptr'>
+ <parameter type-id='fe09dd29' name='target'/>
+ <parameter type-id='eaa32e2f' name='bits'/>
+ <return type-id='eaa32e2f'/>
+ </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'/>
+ <return type-id='ee1f298e'/>
+ </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_16' mangled-name='atomic_swap_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_swap_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='149c6638' name='bits'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_swap_8' mangled-name='atomic_swap_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_swap_8'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='b96825af' name='bits'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_cas_ptr' mangled-name='atomic_cas_ptr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_cas_ptr'>
+ <parameter type-id='fe09dd29' name='target'/>
+ <parameter type-id='eaa32e2f' name='exp'/>
+ <parameter type-id='eaa32e2f' name='des'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='atomic_and_ulong_nv' mangled-name='atomic_and_ulong_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_ulong_nv'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='ee1f298e' name='bits'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <function-decl name='atomic_and_32_nv' mangled-name='atomic_and_32_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_32_nv'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='8f92235e' name='bits'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_and_16_nv' mangled-name='atomic_and_16_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_16_nv'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='149c6638' name='bits'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_and_8_nv' mangled-name='atomic_and_8_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_8_nv'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='b96825af' name='bits'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_or_ulong_nv' mangled-name='atomic_or_ulong_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_ulong_nv'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='ee1f298e' name='bits'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <function-decl name='atomic_or_32_nv' mangled-name='atomic_or_32_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_32_nv'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='8f92235e' name='bits'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_or_16_nv' mangled-name='atomic_or_16_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_16_nv'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='149c6638' name='bits'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_or_8_nv' mangled-name='atomic_or_8_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_8_nv'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='b96825af' name='bits'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_sub_ptr_nv' mangled-name='atomic_sub_ptr_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_ptr_nv'>
+ <parameter type-id='fe09dd29' name='target'/>
+ <parameter type-id='79a0948f' name='bits'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='atomic_sub_long_nv' mangled-name='atomic_sub_long_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_long_nv'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='bd54fe1a' name='bits'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <function-decl name='atomic_sub_32_nv' mangled-name='atomic_sub_32_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_32_nv'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='3ff5601b' name='bits'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_sub_16_nv' mangled-name='atomic_sub_16_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_16_nv'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='23bd8cb5' name='bits'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_sub_8_nv' mangled-name='atomic_sub_8_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_8_nv'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='ee31ee44' name='bits'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_add_ptr_nv' mangled-name='atomic_add_ptr_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_ptr_nv'>
+ <parameter type-id='fe09dd29' name='target'/>
+ <parameter type-id='79a0948f' name='bits'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='atomic_add_long_nv' mangled-name='atomic_add_long_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_long_nv'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='bd54fe1a' name='bits'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <function-decl name='atomic_add_32_nv' mangled-name='atomic_add_32_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_32_nv'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='3ff5601b' name='bits'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_add_16_nv' mangled-name='atomic_add_16_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_16_nv'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='23bd8cb5' name='bits'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_add_8_nv' mangled-name='atomic_add_8_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_8_nv'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='ee31ee44' name='bits'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_dec_ulong_nv' mangled-name='atomic_dec_ulong_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_ulong_nv'>
+ <parameter type-id='64698d33' name='target'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <function-decl name='atomic_dec_32_nv' mangled-name='atomic_dec_32_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_32_nv'>
+ <parameter type-id='3a147f31' name='target'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_dec_16_nv' mangled-name='atomic_dec_16_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_16_nv'>
+ <parameter type-id='93977ae7' name='target'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_dec_8_nv' mangled-name='atomic_dec_8_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_8_nv'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_inc_ulong_nv' mangled-name='atomic_inc_ulong_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_ulong_nv'>
+ <parameter type-id='64698d33' name='target'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <function-decl name='atomic_inc_32_nv' mangled-name='atomic_inc_32_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_32_nv'>
+ <parameter type-id='3a147f31' name='target'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_inc_16_nv' mangled-name='atomic_inc_16_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_16_nv'>
+ <parameter type-id='93977ae7' name='target'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_inc_8_nv' mangled-name='atomic_inc_8_nv' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_8_nv'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_and_ulong' mangled-name='atomic_and_ulong' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_ulong'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='ee1f298e' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_and_32' mangled-name='atomic_and_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='8f92235e' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_and_16' mangled-name='atomic_and_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='149c6638' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_and_8' mangled-name='atomic_and_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_and_8'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='b96825af' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_or_ulong' mangled-name='atomic_or_ulong' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_ulong'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='ee1f298e' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_or_32' mangled-name='atomic_or_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='8f92235e' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_or_16' mangled-name='atomic_or_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_or_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='149c6638' 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'/>
+ <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'/>
+ <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_sub_32' mangled-name='atomic_sub_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='3ff5601b' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_sub_16' mangled-name='atomic_sub_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='23bd8cb5' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_sub_8' mangled-name='atomic_sub_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_sub_8'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='ee31ee44' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_add_ptr' mangled-name='atomic_add_ptr' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_ptr'>
+ <parameter type-id='fe09dd29' name='target'/>
+ <parameter type-id='79a0948f' 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_add_32' mangled-name='atomic_add_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='3ff5601b' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_add_16' mangled-name='atomic_add_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='23bd8cb5' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_add_8' mangled-name='atomic_add_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_add_8'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='ee31ee44' name='bits'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_dec_ulong' mangled-name='atomic_dec_ulong' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_ulong'>
+ <parameter type-id='64698d33' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_dec_32' mangled-name='atomic_dec_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_dec_16' mangled-name='atomic_dec_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_dec_8' mangled-name='atomic_dec_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_dec_8'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_inc_ulong' mangled-name='atomic_inc_ulong' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_ulong'>
+ <parameter type-id='64698d33' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_inc_32' mangled-name='atomic_inc_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='atomic_inc_16' mangled-name='atomic_inc_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_inc_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <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'/>
+ </function-decl>
+ <function-decl name='atomic_cas_8' mangled-name='atomic_cas_8' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_cas_8'>
+ <parameter type-id='aa323ea4' name='target'/>
+ <parameter type-id='b96825af' name='exp'/>
+ <parameter type-id='b96825af' name='des'/>
+ <return type-id='b96825af'/>
+ </function-decl>
+ <function-decl name='atomic_cas_16' mangled-name='atomic_cas_16' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_cas_16'>
+ <parameter type-id='93977ae7' name='target'/>
+ <parameter type-id='149c6638' name='exp'/>
+ <parameter type-id='149c6638' name='des'/>
+ <return type-id='149c6638'/>
+ </function-decl>
+ <function-decl name='atomic_cas_32' mangled-name='atomic_cas_32' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_cas_32'>
+ <parameter type-id='3a147f31' name='target'/>
+ <parameter type-id='8f92235e' name='exp'/>
+ <parameter type-id='8f92235e' name='des'/>
+ <return type-id='8f92235e'/>
+ </function-decl>
+ <function-decl name='atomic_cas_ulong' mangled-name='atomic_cas_ulong' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_cas_ulong'>
+ <parameter type-id='64698d33' name='target'/>
+ <parameter type-id='ee1f298e' name='exp'/>
+ <parameter type-id='ee1f298e' name='des'/>
+ <return type-id='ee1f298e'/>
+ </function-decl>
+ <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
+ <type-decl name='short int' size-in-bits='16' id='a2185560'/>
+ <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/>
+ <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/>
+ <typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/>
+ <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='getexecname.c' language='LANG_C99'>
+ <function-decl name='getexecname' mangled-name='getexecname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getexecname'>
+ <return type-id='80f4b756'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='list.c' language='LANG_C99'>
+ <typedef-decl name='list_t' type-id='e824dae9' id='0899125f'/>
+ <class-decl name='list' size-in-bits='256' 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'>
+ <var-decl name='list_head' type-id='b0b5e45e' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='list_node' size-in-bits='128' is-struct='yes' visibility='default' id='b0b5e45e'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='next' type-id='b03eadb4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='prev' type-id='b03eadb4' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='list_node_t' type-id='b0b5e45e' id='b21843b2'/>
+ <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'/>
+ <function-decl name='list_is_empty' mangled-name='list_is_empty' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_is_empty'>
+ <parameter type-id='352ec160' name='list'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ <function-decl name='list_link_active' mangled-name='list_link_active' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_link_active'>
+ <parameter type-id='ccc38265' name='ln'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ <function-decl name='list_link_init' mangled-name='list_link_init' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_link_init'>
+ <parameter type-id='ccc38265' name='ln'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_link_replace' mangled-name='list_link_replace' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_link_replace'>
+ <parameter type-id='ccc38265' name='lold'/>
+ <parameter type-id='ccc38265' name='lnew'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_move_tail' mangled-name='list_move_tail' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_move_tail'>
+ <parameter type-id='352ec160' name='dst'/>
+ <parameter type-id='352ec160' name='src'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_prev' mangled-name='list_prev' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_prev'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='list_next' mangled-name='list_next' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_next'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='list_tail' mangled-name='list_tail' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_tail'>
+ <parameter type-id='352ec160' name='list'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='list_head' mangled-name='list_head' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_head'>
+ <parameter type-id='352ec160' name='list'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='list_remove_tail' mangled-name='list_remove_tail' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_remove_tail'>
+ <parameter type-id='352ec160' name='list'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='list_remove_head' mangled-name='list_remove_head' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_remove_head'>
+ <parameter type-id='352ec160' name='list'/>
+ <return type-id='eaa32e2f'/>
+ </function-decl>
+ <function-decl name='list_remove' mangled-name='list_remove' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_remove'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_insert_tail' mangled-name='list_insert_tail' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_insert_tail'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_insert_head' mangled-name='list_insert_head' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_insert_head'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_insert_before' mangled-name='list_insert_before' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_insert_before'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <parameter type-id='eaa32e2f' name='nobject'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_insert_after' mangled-name='list_insert_after' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_insert_after'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='eaa32e2f' name='object'/>
+ <parameter type-id='eaa32e2f' name='nobject'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_destroy' mangled-name='list_destroy' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_destroy'>
+ <parameter type-id='352ec160' name='list'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <function-decl name='list_create' mangled-name='list_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_create'>
+ <parameter type-id='352ec160' name='list'/>
+ <parameter type-id='b59d7dce' name='size'/>
+ <parameter type-id='b59d7dce' name='offset'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='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'/>
+ </function-decl>
+ <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='os/linux/gethostid.c' language='LANG_C99'>
+ <function-decl name='get_system_hostid' mangled-name='get_system_hostid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_system_hostid'>
+ <return type-id='7359adad'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' 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='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>
+ <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='__nlink_t' type-id='7359adad' id='80f0b9df'/>
+ <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/>
+ <typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/>
+ <typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/>
+ <typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/>
+ <typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/>
+ <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='__time_t' type-id='bd54fe1a' id='65eda9c0'/>
+ <typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/>
+ <typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/>
+ <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='__pad1' type-id='eaa32e2f' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='1280'>
+ <var-decl name='__pad2' type-id='eaa32e2f' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='1344'>
+ <var-decl name='__pad3' type-id='eaa32e2f' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='1408'>
+ <var-decl name='__pad4' 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='_IO_marker' size-in-bits='192' is-struct='yes' visibility='default' id='010ae0b9'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_next' type-id='e4c6fa61' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_sbuf' type-id='dca988a5' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_pos' type-id='95e97e5e' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='_IO_lock_t' type-id='48b5725f' id='bb4788fa'/>
+ <typedef-decl name='__off64_t' type-id='bd54fe1a' id='724e4de6'/>
+ <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='bb4788fa' size-in-bits='64' id='cecf4ea7'/>
+ <pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/>
+ <pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/>
+ <pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/>
+ <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>
+ <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>
+ <pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/>
+ <typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/>
+ <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'/>
+ </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>
+ </class-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='os/linux/zone.c' language='LANG_C99'>
+ <typedef-decl name='zoneid_t' type-id='95e97e5e' id='4da03624'/>
+ <function-decl name='getzoneid' mangled-name='getzoneid' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getzoneid'>
+ <return type-id='4da03624'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' 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>
+ </abi-instr>
+ <abi-instr version='1.0' 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'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' 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'/>
+ <return type-id='b59d7dce'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='timestamp.c' language='LANG_C99'>
+ <function-decl name='print_timestamp' mangled-name='print_timestamp' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='print_timestamp'>
+ <parameter type-id='3502e3ff' name='timestamp_fmt'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='thread_pool.c' language='LANG_C99'>
+ <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='384' id='36d7f119'>
+ <subrange length='48' type-id='7359adad' id='8f6d2a81'/>
+ </array-type-def>
+ <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>
+ <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>
+ <typedef-decl name='tpool_t' type-id='88d1b7f9' id='b1bbf10d'/>
+ <typedef-decl name='pthread_cond_t' type-id='be6ed7a7' id='62fab762'/>
+ <union-decl name='__anonymous_union__' size-in-bits='384' is-anonymous='yes' visibility='default' id='be6ed7a7'>
+ <data-member access='private'>
+ <var-decl name='__data' type-id='c987b47c' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__size' type-id='36d7f119' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__align' type-id='1eb56b1e' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <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='2516de83' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='' type-id='fc82e0c5' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='__g_refs' type-id='0d532ec1' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='__g_size' type-id='0d532ec1' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='__g1_orig_size' type-id='f0981eeb' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='288'>
+ <var-decl name='__wrefs' type-id='f0981eeb' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='__g_signals' type-id='0d532ec1' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' id='2516de83'>
+ <data-member access='private'>
+ <var-decl name='__wseq' type-id='3a47d82b' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__wseq32' type-id='2e971cfd' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='2e971cfd'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__low' type-id='f0981eeb' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='__high' type-id='f0981eeb' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' id='fc82e0c5'>
+ <data-member access='private'>
+ <var-decl name='__g1_start' type-id='3a47d82b' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__g1_start32' type-id='2e971cfd' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <class-decl name='tpool_active' size-in-bits='128' is-struct='yes' visibility='default' id='c8d086f4'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tpa_next' type-id='ad33e5e7' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tpa_tid' type-id='4051f5e7' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='tpool_active_t' type-id='c8d086f4' id='6fcda10e'/>
+ <typedef-decl name='pthread_t' type-id='7359adad' id='4051f5e7'/>
+ <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'>
+ <var-decl name='tpj_next' type-id='f32b30e4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tpj_func' type-id='b7f9d8e6' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tpj_arg' type-id='eaa32e2f' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='tpool_job_t' type-id='3b8579e5' id='66a0afc9'/>
+ <typedef-decl name='pthread_attr_t' type-id='b63afacd' id='7d8569fd'/>
+ <union-decl name='pthread_attr_t' size-in-bits='448' visibility='default' id='b63afacd'>
+ <data-member access='private'>
+ <var-decl name='__size' type-id='6093ff7c' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__align' type-id='bd54fe1a' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <pointer-type-def type-id='7d8569fd' size-in-bits='64' id='7347a39e'/>
+ <pointer-type-def type-id='6fcda10e' size-in-bits='64' id='ad33e5e7'/>
+ <pointer-type-def type-id='66a0afc9' size-in-bits='64' id='f32b30e4'/>
+ <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_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-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_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_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_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_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_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_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_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-type size-in-bits='64' id='c5c76c9c'>
+ <parameter type-id='eaa32e2f'/>
+ <return type-id='48b5725f'/>
+ </function-type>
+ <typedef-decl name='pthread_mutex_t' type-id='c4794498' id='7a6844eb'/>
+ <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' id='c4794498'>
+ <data-member access='private'>
+ <var-decl name='__data' type-id='4c734837' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__size' type-id='36c46961' visibility='default'/>
+ </data-member>
+ <data-member access='private'>
+ <var-decl name='__align' type-id='bd54fe1a' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <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>
+ <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>
+ <typedef-decl name='__pthread_list_t' type-id='0e01899c' id='518fb49c'/>
+ <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>
+ <pointer-type-def type-id='0e01899c' size-in-bits='64' id='4d98cd5a'/>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../../module/zcommon/cityhash.c' language='LANG_C99'>
<function-decl name='cityhash4' mangled-name='cityhash4' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cityhash4'>
@@ -613,8 +2143,6 @@
<return type-id='c19b74c3'/>
</function-decl>
<pointer-type-def type-id='8e8d4be3' size-in-bits='64' id='5ce45b60'/>
- <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/>
- <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/>
<typedef-decl name='nvlist_t' type-id='ac266fd9' id='8e8d4be3'/>
<class-decl name='nvlist' size-in-bits='192' is-struct='yes' visibility='default' id='ac266fd9'>
<data-member access='public' layout-offset-in-bits='0'>
@@ -633,9 +2161,6 @@
<var-decl name='nvl_pad' type-id='3ff5601b' visibility='default'/>
</data-member>
</class-decl>
- <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
- <typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/>
- <typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='../../module/zcommon/zfs_deleg.c' language='LANG_C99'>
<array-type-def dimensions='1' type-id='f3f851ad' size-in-bits='infinite' id='bc4e5d90'>
@@ -717,7 +2242,6 @@
<parameter type-id='80f4b756' name='perm'/>
<return type-id='80f4b756'/>
</function-decl>
- <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
</abi-instr>
<abi-instr version='1.0' 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'>
@@ -912,7 +2436,6 @@
<parameter type-id='eefe7427'/>
<return type-id='48b5725f'/>
</function-type>
- <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/>
<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>
@@ -4161,6 +5684,11 @@
<parameter type-id='95e97e5e' name='len'/>
<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'/>
+ <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'/>
@@ -4172,4 +5700,251 @@
<return type-id='95e97e5e'/>
</function-decl>
</abi-instr>
+ <abi-instr version='1.0' address-size='64' path='os/linux/zutil_device_path_os.c' language='LANG_C99'>
+ <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>
+ <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='zfs_dev_is_whole_disk' mangled-name='zfs_dev_is_whole_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dev_is_whole_disk'>
+ <parameter type-id='80f4b756' name='dev_name'/>
+ <return type-id='c19b74c3'/>
+ </function-decl>
+ <function-decl name='zfs_dev_is_dm' mangled-name='zfs_dev_is_dm' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dev_is_dm'>
+ <parameter type-id='80f4b756' name='dev_name'/>
+ <return type-id='c19b74c3'/>
+ </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'/>
+ </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='26a90f95' name='path'/>
+ <return type-id='26a90f95'/>
+ </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='26a90f95' name='path'/>
+ <return type-id='26a90f95'/>
+ </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' name='path'/>
+ <parameter type-id='b59d7dce' name='max_len'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='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'/>
+ <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/>
+ <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'/>
+ <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' name='nv'/>
+ <return type-id='48b5725f'/>
+ </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'>
+ <parameter type-id='80f4b756' name='path'/>
+ <parameter type-id='95e97e5e' name='timeout_ms'/>
+ <return type-id='95e97e5e'/>
+ </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'/>
+ <parameter type-id='b59d7dce' name='buflen'/>
+ <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_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='zfs_device_get_physical' mangled-name='zfs_device_get_physical' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_device_get_physical'>
+ <parameter type-id='b32bae08' name='dev'/>
+ <parameter type-id='26a90f95' name='bufptr'/>
+ <parameter type-id='b59d7dce' name='buflen'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='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_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>
+ <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_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_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>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='zutil_import.c' language='LANG_C99'>
+ <typedef-decl name='importargs_t' type-id='7ac83801' id='7a842a6b'/>
+ <class-decl name='importargs' size-in-bits='448' is-struct='yes' visibility='default' id='7ac83801'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='path' type-id='9b23c9ad' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='paths' type-id='95e97e5e' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='poolname' type-id='80f4b756' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='guid' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='cachefile' type-id='80f4b756' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='can_be_active' type-id='c19b74c3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='352'>
+ <var-decl name='scan' type-id='c19b74c3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='policy' type-id='5ce45b60' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='7a842a6b' size-in-bits='64' id='07ee4a58'/>
+ <pointer-type-def type-id='b1e62775' size-in-bits='64' id='f095e320'/>
+ <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='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_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='07ee4a58' name='import'/>
+ <parameter type-id='f095e320' name='pco'/>
+ <return type-id='5ce45b60'/>
+ </function-decl>
+ <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'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='zutil_nicenum.c' language='LANG_C99'>
+ <enum-decl name='zfs_nicenum_format' id='29cf1969'>
+ <underlying-type type-id='9cac1fee'/>
+ <enumerator name='ZFS_NICENUM_1024' value='0'/>
+ <enumerator name='ZFS_NICENUM_BYTES' value='1'/>
+ <enumerator name='ZFS_NICENUM_TIME' value='2'/>
+ <enumerator name='ZFS_NICENUM_RAW' value='3'/>
+ <enumerator name='ZFS_NICENUM_RAWTIME' value='4'/>
+ </enum-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>
+ <function-decl name='zfs_niceraw' mangled-name='zfs_niceraw' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_niceraw'>
+ <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'/>
+ <parameter type-id='b59d7dce' name='buflen'/>
+ <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_nicenum_format' mangled-name='zfs_nicenum_format' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicenum_format'>
+ <parameter type-id='9c313c2d' name='num'/>
+ <parameter type-id='26a90f95' name='buf'/>
+ <parameter type-id='b59d7dce' name='buflen'/>
+ <parameter type-id='29cf1969' name='format'/>
+ <return type-id='48b5725f'/>
+ </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'/>
+ </function-decl>
+ </abi-instr>
+ <abi-instr version='1.0' address-size='64' path='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>
+ <typedef-decl name='ddt_stat_t' type-id='65242dfe' id='853fd5dc'/>
+ <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'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='dds_lsize' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='dds_psize' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='dds_dsize' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='dds_ref_blocks' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='dds_ref_lsize' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='dds_ref_psize' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='dds_ref_dsize' type-id='9c313c2d' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='ddt_histogram_t' type-id='bc2b3086' id='2d7fe832'/>
+ <class-decl name='ddt_histogram' size-in-bits='32768' is-struct='yes' visibility='default' id='bc2b3086'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='ddh_stat' type-id='b505fc2f' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <qualified-type-def type-id='2d7fe832' const='yes' id='ec92d602'/>
+ <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'/>
+ <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'/>
+ <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>
+ </abi-instr>
</abi-corpus>
diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c b/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c
index 20251e9e7a5a..fb337ca3f0e6 100644
--- a/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c
+++ b/sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c
@@ -3884,10 +3884,13 @@ zfs_destroy_snaps(zfs_handle_t *zhp, char *snapname, boolean_t defer)
int
zfs_destroy_snaps_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, boolean_t defer)
{
- int ret;
nvlist_t *errlist = NULL;
nvpair_t *pair;
+ int ret = zfs_destroy_snaps_nvl_os(hdl, snaps);
+ if (ret != 0)
+ return (ret);
+
ret = lzc_destroy_snaps(snaps, defer, &errlist);
if (ret == 0) {
diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c b/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c
index 7806e21cd9a9..3c537be79487 100644
--- a/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c
+++ b/sys/contrib/openzfs/lib/libzfs/libzfs_iter.c
@@ -575,8 +575,11 @@ zfs_iter_mounted(zfs_handle_t *zhp, zfs_iter_f func, void *data)
/* Ignore datasets not within the provided dataset */
if (strncmp(entry.mnt_special, zhp->zfs_name, namelen) != 0 ||
- (entry.mnt_special[namelen] != '/' &&
- entry.mnt_special[namelen] != '@'))
+ entry.mnt_special[namelen] != '/')
+ continue;
+
+ /* Skip snapshot of any child dataset */
+ if (strchr(entry.mnt_special, '@') != NULL)
continue;
if ((mtab_zhp = zfs_open(zhp->zfs_hdl, entry.mnt_special,
diff --git a/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c b/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c
index bee0aff4b49c..e95f28088df6 100644
--- a/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c
+++ b/sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c
@@ -1059,9 +1059,14 @@ dump_snapshot(zfs_handle_t *zhp, void *arg)
nvlist_t *nvfs = fsavl_find(sdd->fsavl,
zhp->zfs_dmustats.dds_guid, &snapname);
- snapprops = fnvlist_lookup_nvlist(nvfs, "snapprops");
- snapprops = fnvlist_lookup_nvlist(snapprops, thissnap);
- exclude = !nvlist_exists(snapprops, "is_clone_origin");
+ if (nvfs != NULL) {
+ snapprops = fnvlist_lookup_nvlist(nvfs,
+ "snapprops");
+ snapprops = fnvlist_lookup_nvlist(snapprops,
+ thissnap);
+ exclude = !nvlist_exists(snapprops,
+ "is_clone_origin");
+ }
} else {
exclude = B_TRUE;
}
@@ -2144,6 +2149,23 @@ zfs_send(zfs_handle_t *zhp, const char *fromsnap, const char *tosnap,
return (zfs_error(zhp->zfs_hdl, EZFS_NOENT, errbuf));
}
+ if (fromsnap) {
+ char full_fromsnap_name[ZFS_MAX_DATASET_NAME_LEN];
+ if (snprintf(full_fromsnap_name, sizeof (full_fromsnap_name),
+ "%s@%s", zhp->zfs_name, fromsnap) >=
+ sizeof (full_fromsnap_name)) {
+ err = EINVAL;
+ goto stderr_out;
+ }
+ zfs_handle_t *fromsnapn = zfs_open(zhp->zfs_hdl,
+ full_fromsnap_name, ZFS_TYPE_SNAPSHOT);
+ if (fromsnapn == NULL) {
+ err = -1;
+ goto err_out;
+ }
+ zfs_close(fromsnapn);
+ }
+
if (flags->replicate || flags->doall || flags->props ||
flags->holds || flags->backup) {
char full_tosnap_name[ZFS_MAX_DATASET_NAME_LEN];
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 4d7421df8d3b..f143f9cb63b3 100644
--- a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c
+++ b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_compat.c
@@ -22,7 +22,6 @@
/*
* Copyright (c) 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
*/
-#include <os/freebsd/zfs/sys/zfs_ioctl_compat.h>
#include "../../libzfs_impl.h"
#include <libzfs.h>
#include <libzutil.h>
@@ -224,7 +223,7 @@ libzfs_error_init(int error)
int
zfs_ioctl(libzfs_handle_t *hdl, int request, zfs_cmd_t *zc)
{
- return (zfs_ioctl_fd(hdl->libzfs_fd, request, zc));
+ return (lzc_ioctl_fd(hdl->libzfs_fd, request, zc));
}
/*
@@ -267,6 +266,12 @@ find_shares_object(differ_info_t *di)
return (0);
}
+int
+zfs_destroy_snaps_nvl_os(libzfs_handle_t *hdl, nvlist_t *snaps)
+{
+ return (0);
+}
+
/*
* Attach/detach the given filesystem to/from the given jail.
*/
diff --git a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_ioctl_compat.c b/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_ioctl_compat.c
deleted file mode 100644
index 18b93fe27969..000000000000
--- a/sys/contrib/openzfs/lib/libzfs/os/freebsd/libzfs_ioctl_compat.c
+++ /dev/null
@@ -1,432 +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 2013 Xin Li <delphij@FreeBSD.org>. All rights reserved.
- * Copyright 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
- * Portions Copyright 2005, 2010, Oracle and/or its affiliates.
- * All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/cred.h>
-#include <sys/dmu.h>
-#include <sys/zio.h>
-#include <sys/nvpair.h>
-#include <sys/dsl_deleg.h>
-#include <sys/zfs_ioctl.h>
-#include "zfs_namecheck.h"
-#include <os/freebsd/zfs/sys/zfs_ioctl_compat.h>
-
-/*
- * FreeBSD zfs_cmd compatibility with older binaries
- * appropriately remap/extend the zfs_cmd_t structure
- */
-void
-zfs_cmd_compat_get(zfs_cmd_t *zc, caddr_t addr, const int cflag)
-{
-
-}
-#if 0
-static int
-zfs_ioctl_compat_get_nvlist(uint64_t nvl, size_t size, int iflag,
- nvlist_t **nvp)
-{
- char *packed;
- int error;
- nvlist_t *list = NULL;
-
- /*
- * Read in and unpack the user-supplied nvlist.
- */
- if (size == 0)
- return (EINVAL);
-
-#ifdef _KERNEL
- packed = kmem_alloc(size, KM_SLEEP);
- if ((error = ddi_copyin((void *)(uintptr_t)nvl, packed, size,
- iflag)) != 0) {
- kmem_free(packed, size);
- return (error);
- }
-#else
- packed = (void *)(uintptr_t)nvl;
-#endif
-
- error = nvlist_unpack(packed, size, &list, 0);
-
-#ifdef _KERNEL
- kmem_free(packed, size);
-#endif
-
- if (error != 0)
- return (error);
-
- *nvp = list;
- return (0);
-}
-
-static int
-zfs_ioctl_compat_put_nvlist(zfs_cmd_t *zc, nvlist_t *nvl)
-{
- char *packed = NULL;
- int error = 0;
- size_t size;
-
- VERIFY(nvlist_size(nvl, &size, NV_ENCODE_NATIVE) == 0);
-
-#ifdef _KERNEL
- packed = kmem_alloc(size, KM_SLEEP);
- VERIFY(nvlist_pack(nvl, &packed, &size, NV_ENCODE_NATIVE,
- KM_SLEEP) == 0);
-
- if (ddi_copyout(packed,
- (void *)(uintptr_t)zc->zc_nvlist_dst, size, zc->zc_iflags) != 0)
- error = EFAULT;
- kmem_free(packed, size);
-#else
- packed = (void *)(uintptr_t)zc->zc_nvlist_dst;
- VERIFY(nvlist_pack(nvl, &packed, &size, NV_ENCODE_NATIVE,
- 0) == 0);
-#endif
-
- zc->zc_nvlist_dst_size = size;
- return (error);
-}
-
-static void
-zfs_ioctl_compat_fix_stats_nvlist(nvlist_t *nvl)
-{
- nvlist_t **child;
- nvlist_t *nvroot = NULL;
- vdev_stat_t *vs;
- uint_t c, children, nelem;
-
- if (nvlist_lookup_nvlist_array(nvl, ZPOOL_CONFIG_CHILDREN,
- &child, &children) == 0) {
- for (c = 0; c < children; c++) {
- zfs_ioctl_compat_fix_stats_nvlist(child[c]);
- }
- }
-
- if (nvlist_lookup_nvlist(nvl, ZPOOL_CONFIG_VDEV_TREE,
- &nvroot) == 0)
- zfs_ioctl_compat_fix_stats_nvlist(nvroot);
- if ((nvlist_lookup_uint64_array(nvl, "stats",
- (uint64_t **)&vs, &nelem) == 0)) {
- nvlist_add_uint64_array(nvl,
- ZPOOL_CONFIG_VDEV_STATS,
- (uint64_t *)vs, nelem);
- nvlist_remove(nvl, "stats",
- DATA_TYPE_UINT64_ARRAY);
- }
-}
-
-
-static int
-zfs_ioctl_compat_fix_stats(zfs_cmd_t *zc, const int nc)
-{
- nvlist_t *nv, *nvp = NULL;
- nvpair_t *elem;
- int error;
-
- if ((error = zfs_ioctl_compat_get_nvlist(zc->zc_nvlist_dst,
- zc->zc_nvlist_dst_size, zc->zc_iflags, &nv)) != 0)
- return (error);
-
- if (nc == 5) { /* ZFS_IOC_POOL_STATS */
- elem = NULL;
- while ((elem = nvlist_next_nvpair(nv, elem)) != NULL) {
- if (nvpair_value_nvlist(elem, &nvp) == 0)
- zfs_ioctl_compat_fix_stats_nvlist(nvp);
- }
- elem = NULL;
- } else
- zfs_ioctl_compat_fix_stats_nvlist(nv);
-
- error = zfs_ioctl_compat_put_nvlist(zc, nv);
-
- nvlist_free(nv);
-
- return (error);
-}
-
-static int
-zfs_ioctl_compat_pool_get_props(zfs_cmd_t *zc)
-{
- nvlist_t *nv, *nva = NULL;
- int error;
-
- if ((error = zfs_ioctl_compat_get_nvlist(zc->zc_nvlist_dst,
- zc->zc_nvlist_dst_size, zc->zc_iflags, &nv)) != 0)
- return (error);
-
- if (nvlist_lookup_nvlist(nv, "used", &nva) == 0) {
- nvlist_add_nvlist(nv, "allocated", nva);
- nvlist_remove(nv, "used", DATA_TYPE_NVLIST);
- }
-
- if (nvlist_lookup_nvlist(nv, "available", &nva) == 0) {
- nvlist_add_nvlist(nv, "free", nva);
- nvlist_remove(nv, "available", DATA_TYPE_NVLIST);
- }
-
- error = zfs_ioctl_compat_put_nvlist(zc, nv);
-
- nvlist_free(nv);
-
- return (error);
-}
-#endif
-
-#ifdef _KERNEL
-int
-zfs_ioctl_compat_pre(zfs_cmd_t *zc, int *vec, const int cflag)
-{
- int error = 0;
-
- /* are we creating a clone? */
- if (*vec == ZFS_IOC_CREATE && zc->zc_value[0] != '\0')
- *vec = ZFS_IOC_CLONE;
-
- if (cflag == ZFS_CMD_COMPAT_V15) {
- switch (*vec) {
-
- case 7: /* ZFS_IOC_POOL_SCRUB (v15) */
- zc->zc_cookie = POOL_SCAN_SCRUB;
- break;
- }
- }
-
- return (error);
-}
-
-void
-zfs_ioctl_compat_post(zfs_cmd_t *zc, int vec, const int cflag)
-{
- if (cflag == ZFS_CMD_COMPAT_V15) {
- switch (vec) {
- case ZFS_IOC_POOL_CONFIGS:
- case ZFS_IOC_POOL_STATS:
- case ZFS_IOC_POOL_TRYIMPORT:
- zfs_ioctl_compat_fix_stats(zc, vec);
- break;
- case 41: /* ZFS_IOC_POOL_GET_PROPS (v15) */
- zfs_ioctl_compat_pool_get_props(zc);
- break;
- }
- }
-}
-
-nvlist_t *
-zfs_ioctl_compat_innvl(zfs_cmd_t *zc, nvlist_t *innvl, const int vec,
- const int cflag)
-{
- nvlist_t *nvl, *tmpnvl, *hnvl;
- nvpair_t *elem;
- char *poolname, *snapname;
- int err;
-
- if (cflag == ZFS_CMD_COMPAT_NONE || cflag == ZFS_CMD_COMPAT_LZC ||
- cflag == ZFS_CMD_COMPAT_ZCMD || cflag == ZFS_CMD_COMPAT_EDBP ||
- cflag == ZFS_CMD_COMPAT_RESUME || cflag == ZFS_CMD_COMPAT_INLANES)
- goto out;
-
- switch (vec) {
- case ZFS_IOC_CREATE:
- nvl = fnvlist_alloc();
- fnvlist_add_int32(nvl, "type", zc->zc_objset_type);
- if (innvl != NULL) {
- fnvlist_add_nvlist(nvl, "props", innvl);
- nvlist_free(innvl);
- }
- return (nvl);
- break;
- case ZFS_IOC_CLONE:
- nvl = fnvlist_alloc();
- fnvlist_add_string(nvl, "origin", zc->zc_value);
- if (innvl != NULL) {
- fnvlist_add_nvlist(nvl, "props", innvl);
- nvlist_free(innvl);
- }
- return (nvl);
- break;
- case ZFS_IOC_SNAPSHOT:
- if (innvl == NULL)
- goto out;
- nvl = fnvlist_alloc();
- fnvlist_add_nvlist(nvl, "props", innvl);
- tmpnvl = fnvlist_alloc();
- snapname = kmem_asprintf("%s@%s", zc->zc_name, zc->zc_value);
- fnvlist_add_boolean(tmpnvl, snapname);
- kmem_free(snapname, strlen(snapname + 1));
- /* check if we are doing a recursive snapshot */
- if (zc->zc_cookie)
- dmu_get_recursive_snaps_nvl(zc->zc_name, zc->zc_value,
- tmpnvl);
- fnvlist_add_nvlist(nvl, "snaps", tmpnvl);
- fnvlist_free(tmpnvl);
- nvlist_free(innvl);
- /* strip dataset part from zc->zc_name */
- zc->zc_name[strcspn(zc->zc_name, "/@")] = '\0';
- return (nvl);
- break;
- case ZFS_IOC_SPACE_SNAPS:
- nvl = fnvlist_alloc();
- fnvlist_add_string(nvl, "firstsnap", zc->zc_value);
- if (innvl != NULL)
- nvlist_free(innvl);
- return (nvl);
- break;
- case ZFS_IOC_DESTROY_SNAPS:
- if (innvl == NULL && cflag == ZFS_CMD_COMPAT_DEADMAN)
- goto out;
- nvl = fnvlist_alloc();
- if (innvl != NULL) {
- fnvlist_add_nvlist(nvl, "snaps", innvl);
- } else {
- /*
- * We are probably called by even older binaries,
- * allocate and populate nvlist with recursive
- * snapshots
- */
- if (zfs_component_namecheck(zc->zc_value, NULL,
- NULL) == 0) {
- tmpnvl = fnvlist_alloc();
- if (dmu_get_recursive_snaps_nvl(zc->zc_name,
- zc->zc_value, tmpnvl) == 0)
- fnvlist_add_nvlist(nvl, "snaps",
- tmpnvl);
- nvlist_free(tmpnvl);
- }
- }
- if (innvl != NULL)
- nvlist_free(innvl);
- /* strip dataset part from zc->zc_name */
- zc->zc_name[strcspn(zc->zc_name, "/@")] = '\0';
- return (nvl);
- break;
- case ZFS_IOC_HOLD:
- nvl = fnvlist_alloc();
- tmpnvl = fnvlist_alloc();
- if (zc->zc_cleanup_fd != -1)
- fnvlist_add_int32(nvl, "cleanup_fd",
- (int32_t)zc->zc_cleanup_fd);
- if (zc->zc_cookie) {
- hnvl = fnvlist_alloc();
- if (dmu_get_recursive_snaps_nvl(zc->zc_name,
- zc->zc_value, hnvl) == 0) {
- elem = NULL;
- while ((elem = nvlist_next_nvpair(hnvl,
- elem)) != NULL) {
- nvlist_add_string(tmpnvl,
- nvpair_name(elem), zc->zc_string);
- }
- }
- nvlist_free(hnvl);
- } else {
- snapname = kmem_asprintf("%s@%s", zc->zc_name,
- zc->zc_value);
- nvlist_add_string(tmpnvl, snapname, zc->zc_string);
- kmem_free(snapname, strlen(snapname + 1));
- }
- fnvlist_add_nvlist(nvl, "holds", tmpnvl);
- nvlist_free(tmpnvl);
- if (innvl != NULL)
- nvlist_free(innvl);
- /* strip dataset part from zc->zc_name */
- zc->zc_name[strcspn(zc->zc_name, "/@")] = '\0';
- return (nvl);
- break;
- case ZFS_IOC_RELEASE:
- nvl = fnvlist_alloc();
- tmpnvl = fnvlist_alloc();
- if (zc->zc_cookie) {
- hnvl = fnvlist_alloc();
- if (dmu_get_recursive_snaps_nvl(zc->zc_name,
- zc->zc_value, hnvl) == 0) {
- elem = NULL;
- while ((elem = nvlist_next_nvpair(hnvl,
- elem)) != NULL) {
- fnvlist_add_boolean(tmpnvl,
- zc->zc_string);
- fnvlist_add_nvlist(nvl,
- nvpair_name(elem), tmpnvl);
- }
- }
- nvlist_free(hnvl);
- } else {
- snapname = kmem_asprintf("%s@%s", zc->zc_name,
- zc->zc_value);
- fnvlist_add_boolean(tmpnvl, zc->zc_string);
- fnvlist_add_nvlist(nvl, snapname, tmpnvl);
- kmem_free(snapname, strlen(snapname + 1));
- }
- nvlist_free(tmpnvl);
- if (innvl != NULL)
- nvlist_free(innvl);
- /* strip dataset part from zc->zc_name */
- zc->zc_name[strcspn(zc->zc_name, "/@")] = '\0';
- return (nvl);
- break;
- }
-out:
- return (innvl);
-}
-
-nvlist_t *
-zfs_ioctl_compat_outnvl(zfs_cmd_t *zc, nvlist_t *outnvl, const int vec,
- const int cflag)
-{
- nvlist_t *tmpnvl;
-
- if (cflag == ZFS_CMD_COMPAT_NONE || cflag == ZFS_CMD_COMPAT_LZC ||
- cflag == ZFS_CMD_COMPAT_ZCMD || cflag == ZFS_CMD_COMPAT_EDBP ||
- cflag == ZFS_CMD_COMPAT_RESUME || cflag == ZFS_CMD_COMPAT_INLANES)
- return (outnvl);
-
- switch (vec) {
- case ZFS_IOC_SPACE_SNAPS:
- (void) nvlist_lookup_uint64(outnvl, "used", &zc->zc_cookie);
- (void) nvlist_lookup_uint64(outnvl, "compressed",
- &zc->zc_objset_type);
- (void) nvlist_lookup_uint64(outnvl, "uncompressed",
- &zc->zc_perm_action);
- nvlist_free(outnvl);
- /* return empty outnvl */
- tmpnvl = fnvlist_alloc();
- return (tmpnvl);
- break;
- case ZFS_IOC_CREATE:
- case ZFS_IOC_CLONE:
- case ZFS_IOC_HOLD:
- case ZFS_IOC_RELEASE:
- nvlist_free(outnvl);
- /* return empty outnvl */
- tmpnvl = fnvlist_alloc();
- return (tmpnvl);
- break;
- }
-
- return (outnvl);
-}
-#endif /* KERNEL */
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 b116f92d97af..2ac31f1077ca 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
@@ -184,6 +184,12 @@ find_shares_object(differ_info_t *di)
return (0);
}
+int
+zfs_destroy_snaps_nvl_os(libzfs_handle_t *hdl, nvlist_t *snaps)
+{
+ return (0);
+}
+
/*
* Fill given version buffer with zfs kernel version read from ZFS_SYSFS_DIR
* Returns 0 on success, and -1 on error (with errno set)
diff --git a/sys/contrib/openzfs/lib/libzfs_core/Makefile.am b/sys/contrib/openzfs/lib/libzfs_core/Makefile.am
index b2101e21144d..64cb76f1995b 100644
--- a/sys/contrib/openzfs/lib/libzfs_core/Makefile.am
+++ b/sys/contrib/openzfs/lib/libzfs_core/Makefile.am
@@ -11,11 +11,27 @@ include $(top_srcdir)/config/Abigail.am
USER_C = \
libzfs_core.c
+if BUILD_LINUX
+USER_C += \
+ os/linux/libzfs_core_ioctl.c
+endif
+
+if BUILD_FREEBSD
+DEFAULT_INCLUDES += -I$(top_srcdir)/include/os/freebsd/zfs
+
+USER_C += \
+ os/freebsd/libzfs_core_ioctl.c
+
+VPATH += $(top_srcdir)/module/os/freebsd/zfs
+
+nodist_libzfs_core_la_SOURCES = zfs_ioctl_compat.c
+endif
+
libzfs_core_la_SOURCES = $(USER_C)
libzfs_core_la_LIBADD = \
- $(abs_top_builddir)/lib/libzutil/libzutil.la \
- $(abs_top_builddir)/lib/libnvpair/libnvpair.la
+ $(abs_top_builddir)/lib/libnvpair/libnvpair.la \
+ $(abs_top_builddir)/lib/libspl/libspl.la
libzfs_core_la_LIBADD += $(LTLIBINTL)
diff --git a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi
index 6abec9a8ab5b..b3ae682efcdf 100644
--- a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi
+++ b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.abi
@@ -1,11 +1,5 @@
<abi-corpus architecture='elf-amd-x86_64' soname='libzfs_core.so.3'>
<elf-needed>
- <dependency name='libuuid.so.1'/>
- <dependency name='libz.so.1'/>
- <dependency name='librt.so.1'/>
- <dependency name='libm.so.6'/>
- <dependency name='libblkid.so.1'/>
- <dependency name='libudev.so.1'/>
<dependency name='libnvpair.so.3'/>
<dependency name='libpthread.so.0'/>
<dependency name='libc.so.6'/>
@@ -135,38 +129,11 @@
<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='avl_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_destroy_nodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_first' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_insert_here' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_is_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_last' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_nearest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_numnodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_swap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='avl_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <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='efi_alloc_and_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_alloc_and_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_err_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_rescan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_use_whole_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='efi_write' 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='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='is_mpath_whole_disk' 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='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'/>
@@ -204,6 +171,7 @@
<elf-symbol name='lzc_get_holds' 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'/>
+ <elf-symbol name='lzc_ioctl_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<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'/>
@@ -243,355 +211,10 @@
<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='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'/>
- <elf-symbol name='tpool_dispatch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='tpool_member' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='tpool_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='tpool_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <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='zfs_append_partition' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_basename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_dev_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_dev_is_dm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_dev_is_whole_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_device_get_devid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_device_get_physical' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_dirnamelen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_get_enclosure_sysfs_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_get_underlying_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_ioctl_fd' 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_nicebytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_nicenum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_nicenum_format' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_niceraw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_nicetime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='zfs_resolve_shortname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <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='zpool_default_search_paths' 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_find_config' 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_label_disk_wait' 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_search_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
<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='libspl_assert_ok' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-variable-symbols>
- <abi-instr version='1.0' address-size='64' path='../../module/avl/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>
- <typedef-decl name='avl_tree_t' type-id='b351119f' id='f20fbd51'/>
- <class-decl name='avl_tree' size-in-bits='320' is-struct='yes' visibility='default' id='b351119f'>
- <data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='avl_root' type-id='bf311473' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='avl_compar' type-id='585e1de9' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='avl_offset' type-id='b59d7dce' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='192'>
- <var-decl name='avl_numnodes' type-id='ee1f298e' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='256'>
- <var-decl name='avl_pad' type-id='b59d7dce' visibility='default'/>
- </data-member>
- </class-decl>
- <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'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='avl_pcb' type-id='e475ab95' visibility='default'/>
- </data-member>
- </class-decl>
- <typedef-decl name='uintptr_t' type-id='7359adad' id='e475ab95'/>
- <typedef-decl name='ulong_t' type-id='7359adad' id='ee1f298e'/>
- <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='428b67b3' size-in-bits='64' id='bf311473'/>
- <pointer-type-def type-id='f20fbd51' size-in-bits='64' id='a3681dea'/>
- <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/>
- <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/>
- <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-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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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-type size-in-bits='64' id='96ee24a5'>
- <parameter type-id='eaa32e2f'/>
- <parameter type-id='eaa32e2f'/>
- <return type-id='95e97e5e'/>
- </function-type>
- <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
- <typedef-decl name='boolean_t' type-id='40ed39d2' id='c19b74c3'/>
- <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/>
- <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
- <type-decl name='void' id='48b5725f'/>
- <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
- <enum-decl name='__anonymous_enum__1' is-anonymous='yes' id='40ed39d2'>
- <underlying-type type-id='9cac1fee'/>
- <enumerator name='B_FALSE' value='0'/>
- <enumerator name='B_TRUE' value='1'/>
- </enum-decl>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='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='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_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>
- <typedef-decl name='diskaddr_t' type-id='9b3ff54f' id='804dc465'/>
- <typedef-decl name='longlong_t' type-id='1eb56b1e' id='9b3ff54f'/>
- <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>
- <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>
- <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'/>
- <var-decl name='efi_debug' type-id='95e97e5e' mangled-name='efi_debug' visibility='default' elf-symbol-id='efi_debug'/>
- <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>
- <function-decl name='efi_type' mangled-name='efi_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='efi_type'>
- <parameter type-id='95e97e5e' name='fd'/>
- <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>
- <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'/>
- <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>
- <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_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_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>
- <type-decl name='char' size-in-bits='8' id='a84c031d'/>
- <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/>
- <typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/>
- <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/>
- <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/>
- <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/>
- <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>
- <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
- <typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/>
- <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/>
- <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/>
- <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
- <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
- </abi-instr>
<abi-instr version='1.0' address-size='64' path='assert.c' language='LANG_C99'>
<type-decl name='variadic parameter type' id='2c1145c5'/>
<var-decl name='libspl_assert_ok' type-id='95e97e5e' mangled-name='libspl_assert_ok' visibility='default' elf-symbol-id='libspl_assert_ok'/>
@@ -604,17 +227,26 @@
<return type-id='48b5725f'/>
</function-decl>
<pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
+ <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
+ <type-decl name='void' id='48b5725f'/>
<qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
+ <type-decl name='char' size-in-bits='8' id='a84c031d'/>
</abi-instr>
<abi-instr version='1.0' 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'/>
+ <typedef-decl name='ulong_t' type-id='7359adad' id='ee1f298e'/>
<typedef-decl name='uint16_t' type-id='253c2d2a' id='149c6638'/>
<typedef-decl name='__uint16_t' type-id='8efea9e5' id='253c2d2a'/>
+ <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/>
+ <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/>
<typedef-decl name='int16_t' type-id='03896e23' id='23bd8cb5'/>
<typedef-decl name='__int16_t' type-id='a2185560' id='03896e23'/>
<typedef-decl name='int8_t' type-id='2171a512' id='ee31ee44'/>
<typedef-decl name='__int8_t' type-id='28577a57' id='2171a512'/>
+ <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
<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'/>
@@ -943,12 +575,16 @@
<parameter type-id='ee1f298e' name='des'/>
<return type-id='ee1f298e'/>
</function-decl>
- <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
- <type-decl name='short int' size-in-bits='16' id='a2185560'/>
<typedef-decl name='int32_t' type-id='33f57a65' id='3ff5601b'/>
- <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/>
+ <typedef-decl name='uint32_t' type-id='62f1140c' id='8f92235e'/>
+ <typedef-decl name='uint8_t' type-id='c51d6389' id='b96825af'/>
+ <typedef-decl name='uint_t' type-id='f0981eeb' id='3502e3ff'/>
+ <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
<typedef-decl name='__int32_t' type-id='95e97e5e' id='33f57a65'/>
- <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/>
+ <typedef-decl name='__uint32_t' type-id='f0981eeb' id='62f1140c'/>
+ <typedef-decl name='__uint8_t' type-id='002ac4a6' id='c51d6389'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+ <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='getexecname.c' language='LANG_C99'>
<function-decl name='getexecname' mangled-name='getexecname' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getexecname'>
@@ -968,6 +604,7 @@
<var-decl name='list_head' type-id='b0b5e45e' visibility='default'/>
</data-member>
</class-decl>
+ <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/>
<class-decl name='list_node' size-in-bits='128' is-struct='yes' visibility='default' id='b0b5e45e'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='next' type-id='b03eadb4' visibility='default'/>
@@ -1068,12 +705,12 @@
</abi-instr>
<abi-instr version='1.0' address-size='64' path='mkdirp.c' language='LANG_C99'>
<typedef-decl name='mode_t' type-id='e1c52942' id='d50d396c'/>
+ <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/>
<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>
- <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/>
</abi-instr>
<abi-instr version='1.0' address-size='64' path='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'>
@@ -1160,7 +797,6 @@
<typedef-decl name='__dev_t' type-id='7359adad' id='35ed8932'/>
<typedef-decl name='__ino64_t' type-id='7359adad' id='71288a47'/>
<typedef-decl name='__nlink_t' type-id='7359adad' id='80f0b9df'/>
- <typedef-decl name='__mode_t' type-id='f0981eeb' id='e1c52942'/>
<typedef-decl name='__uid_t' type-id='f0981eeb' id='cc5fcceb'/>
<typedef-decl name='__gid_t' type-id='f0981eeb' id='d94ec6d9'/>
<typedef-decl name='__off_t' type-id='bd54fe1a' id='79989e9c'/>
@@ -1352,265 +988,6 @@
<return type-id='48b5725f'/>
</function-decl>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='thread_pool.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>
- <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 int' size-in-bits='64' id='1eb56b1e'/>
- <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/>
- <type-decl name='short int' size-in-bits='16' id='a2185560'/>
- <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>
- <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>
- <typedef-decl name='tpool_t' type-id='88d1b7f9' id='b1bbf10d'/>
- <typedef-decl name='pthread_mutex_t' type-id='c4794498' id='7a6844eb'/>
- <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' id='c4794498'>
- <data-member access='private'>
- <var-decl name='__data' type-id='4c734837' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__size' type-id='36c46961' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__align' type-id='bd54fe1a' visibility='default'/>
- </data-member>
- </union-decl>
- <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>
- <typedef-decl name='__pthread_list_t' type-id='0e01899c' id='518fb49c'/>
- <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_cond_t' type-id='be6ed7a7' id='62fab762'/>
- <union-decl name='__anonymous_union__1' size-in-bits='384' is-anonymous='yes' visibility='default' id='be6ed7a7'>
- <data-member access='private'>
- <var-decl name='__data' type-id='c987b47c' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__size' type-id='36d7f119' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__align' type-id='1eb56b1e' visibility='default'/>
- </data-member>
- </union-decl>
- <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='2516de83' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='' type-id='fc82e0c5' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='__g_refs' type-id='0d532ec1' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='192'>
- <var-decl name='__g_size' type-id='0d532ec1' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='256'>
- <var-decl name='__g1_orig_size' type-id='f0981eeb' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='288'>
- <var-decl name='__wrefs' type-id='f0981eeb' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='320'>
- <var-decl name='__g_signals' type-id='0d532ec1' visibility='default'/>
- </data-member>
- </class-decl>
- <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' id='2516de83'>
- <data-member access='private'>
- <var-decl name='__wseq' type-id='3a47d82b' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__wseq32' type-id='2e971cfd' visibility='default'/>
- </data-member>
- </union-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='2e971cfd'>
- <data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='__low' type-id='f0981eeb' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='32'>
- <var-decl name='__high' type-id='f0981eeb' visibility='default'/>
- </data-member>
- </class-decl>
- <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' id='fc82e0c5'>
- <data-member access='private'>
- <var-decl name='__g1_start' type-id='3a47d82b' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__g1_start32' type-id='2e971cfd' visibility='default'/>
- </data-member>
- </union-decl>
- <class-decl name='tpool_active' size-in-bits='128' is-struct='yes' visibility='default' id='c8d086f4'>
- <data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='tpa_next' type-id='ad33e5e7' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='tpa_tid' type-id='4051f5e7' visibility='default'/>
- </data-member>
- </class-decl>
- <typedef-decl name='tpool_active_t' type-id='c8d086f4' id='6fcda10e'/>
- <typedef-decl name='pthread_t' type-id='7359adad' id='4051f5e7'/>
- <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'>
- <var-decl name='tpj_next' type-id='f32b30e4' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='tpj_func' type-id='b7f9d8e6' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='tpj_arg' type-id='eaa32e2f' visibility='default'/>
- </data-member>
- </class-decl>
- <typedef-decl name='tpool_job_t' type-id='3b8579e5' id='66a0afc9'/>
- <typedef-decl name='pthread_attr_t' type-id='b63afacd' id='7d8569fd'/>
- <union-decl name='pthread_attr_t' size-in-bits='448' visibility='default' id='b63afacd'>
- <data-member access='private'>
- <var-decl name='__size' type-id='6093ff7c' visibility='default'/>
- </data-member>
- <data-member access='private'>
- <var-decl name='__align' type-id='bd54fe1a' visibility='default'/>
- </data-member>
- </union-decl>
- <pointer-type-def type-id='0e01899c' size-in-bits='64' id='4d98cd5a'/>
- <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_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-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_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_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_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_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_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_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_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-type size-in-bits='64' id='c5c76c9c'>
- <parameter type-id='eaa32e2f'/>
- <return type-id='48b5725f'/>
- </function-type>
- </abi-instr>
<abi-instr version='1.0' address-size='64' path='libzfs_core.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='2048' id='d1617432'>
@@ -2542,7 +1919,7 @@
<return type-id='95e97e5e'/>
</function-decl>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='os/linux/zutil_compat.c' language='LANG_C99'>
+ <abi-instr version='1.0' 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>
@@ -2772,290 +2149,11 @@
</data-member>
</class-decl>
<pointer-type-def type-id='a5559cdd' size-in-bits='64' id='e4ec4540'/>
- <function-decl name='zfs_ioctl_fd' mangled-name='zfs_ioctl_fd' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_ioctl_fd'>
+ <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'/>
<return type-id='95e97e5e'/>
</function-decl>
</abi-instr>
- <abi-instr version='1.0' address-size='64' path='os/linux/zutil_device_path_os.c' language='LANG_C99'>
- <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>
- <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='zfs_dev_is_whole_disk' mangled-name='zfs_dev_is_whole_disk' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dev_is_whole_disk'>
- <parameter type-id='80f4b756' name='dev_name'/>
- <return type-id='c19b74c3'/>
- </function-decl>
- <function-decl name='zfs_dev_is_dm' mangled-name='zfs_dev_is_dm' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_dev_is_dm'>
- <parameter type-id='80f4b756' name='dev_name'/>
- <return type-id='c19b74c3'/>
- </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'/>
- </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='26a90f95' name='path'/>
- <return type-id='26a90f95'/>
- </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='26a90f95' name='path'/>
- <return type-id='26a90f95'/>
- </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' name='path'/>
- <parameter type-id='b59d7dce' name='max_len'/>
- <return type-id='95e97e5e'/>
- </function-decl>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='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'/>
- <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/>
- <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'/>
- <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' name='nv'/>
- <return type-id='48b5725f'/>
- </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'>
- <parameter type-id='80f4b756' name='path'/>
- <parameter type-id='95e97e5e' name='timeout_ms'/>
- <return type-id='95e97e5e'/>
- </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'/>
- <parameter type-id='b59d7dce' name='buflen'/>
- <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_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='zfs_device_get_physical' mangled-name='zfs_device_get_physical' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_device_get_physical'>
- <parameter type-id='b32bae08' name='dev'/>
- <parameter type-id='26a90f95' name='bufptr'/>
- <parameter type-id='b59d7dce' name='buflen'/>
- <return type-id='95e97e5e'/>
- </function-decl>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='zutil_device_path.c' language='LANG_C99'>
- <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
- <typedef-decl name='size_t' type-id='7359adad' id='b59d7dce'/>
- <typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/>
- <typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/>
- <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>
- <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_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_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>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='zutil_import.c' language='LANG_C99'>
- <typedef-decl name='importargs_t' type-id='7ac83801' id='7a842a6b'/>
- <class-decl name='importargs' size-in-bits='448' is-struct='yes' visibility='default' id='7ac83801'>
- <data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='path' type-id='9b23c9ad' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='paths' type-id='95e97e5e' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='poolname' type-id='80f4b756' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='192'>
- <var-decl name='guid' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='256'>
- <var-decl name='cachefile' type-id='80f4b756' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='320'>
- <var-decl name='can_be_active' type-id='c19b74c3' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='352'>
- <var-decl name='scan' type-id='c19b74c3' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='384'>
- <var-decl name='policy' type-id='5ce45b60' visibility='default'/>
- </data-member>
- </class-decl>
- <typedef-decl name='pool_config_ops_t' type-id='1a21babe' id='b1e62775'/>
- <class-decl name='pool_config_ops' size-in-bits='128' is-struct='yes' visibility='default' id='8b092c69'>
- <data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='pco_refresh_config' type-id='e7c00489' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='pco_pool_active' type-id='9eadf5e0' visibility='default'/>
- </data-member>
- </class-decl>
- <typedef-decl name='refresh_config_func_t' type-id='29f040d2' id='b7c58eaa'/>
- <typedef-decl name='pool_active_func_t' type-id='baa42fef' id='de5d1d8f'/>
- <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/>
- <qualified-type-def type-id='8b092c69' const='yes' id='1a21babe'/>
- <pointer-type-def type-id='7a842a6b' size-in-bits='64' id='07ee4a58'/>
- <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/>
- <pointer-type-def type-id='de5d1d8f' size-in-bits='64' id='9eadf5e0'/>
- <pointer-type-def type-id='b1e62775' size-in-bits='64' id='f095e320'/>
- <pointer-type-def type-id='b7c58eaa' size-in-bits='64' id='e7c00489'/>
- <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
- <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='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_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='07ee4a58' name='import'/>
- <parameter type-id='f095e320' name='pco'/>
- <return type-id='5ce45b60'/>
- </function-decl>
- <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'/>
- <return type-id='95e97e5e'/>
- </function-decl>
- <function-type size-in-bits='64' id='baa42fef'>
- <parameter type-id='eaa32e2f'/>
- <parameter type-id='80f4b756'/>
- <parameter type-id='9c313c2d'/>
- <parameter type-id='37e3bd22'/>
- <return type-id='95e97e5e'/>
- </function-type>
- <function-type size-in-bits='64' id='29f040d2'>
- <parameter type-id='eaa32e2f'/>
- <parameter type-id='5ce45b60'/>
- <return type-id='5ce45b60'/>
- </function-type>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='zutil_nicenum.c' language='LANG_C99'>
- <enum-decl name='zfs_nicenum_format' id='29cf1969'>
- <underlying-type type-id='9cac1fee'/>
- <enumerator name='ZFS_NICENUM_1024' value='0'/>
- <enumerator name='ZFS_NICENUM_BYTES' value='1'/>
- <enumerator name='ZFS_NICENUM_TIME' value='2'/>
- <enumerator name='ZFS_NICENUM_RAW' value='3'/>
- <enumerator name='ZFS_NICENUM_RAWTIME' value='4'/>
- </enum-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>
- <function-decl name='zfs_niceraw' mangled-name='zfs_niceraw' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_niceraw'>
- <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'/>
- <parameter type-id='b59d7dce' name='buflen'/>
- <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_nicenum_format' mangled-name='zfs_nicenum_format' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_nicenum_format'>
- <parameter type-id='9c313c2d' name='num'/>
- <parameter type-id='26a90f95' name='buf'/>
- <parameter type-id='b59d7dce' name='buflen'/>
- <parameter type-id='29cf1969' name='format'/>
- <return type-id='48b5725f'/>
- </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'/>
- </function-decl>
- </abi-instr>
- <abi-instr version='1.0' address-size='64' path='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>
- <typedef-decl name='ddt_stat_t' type-id='65242dfe' id='853fd5dc'/>
- <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'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='dds_lsize' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='dds_psize' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='192'>
- <var-decl name='dds_dsize' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='256'>
- <var-decl name='dds_ref_blocks' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='320'>
- <var-decl name='dds_ref_lsize' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='384'>
- <var-decl name='dds_ref_psize' type-id='9c313c2d' visibility='default'/>
- </data-member>
- <data-member access='public' layout-offset-in-bits='448'>
- <var-decl name='dds_ref_dsize' type-id='9c313c2d' visibility='default'/>
- </data-member>
- </class-decl>
- <typedef-decl name='ddt_histogram_t' type-id='bc2b3086' id='2d7fe832'/>
- <class-decl name='ddt_histogram' size-in-bits='32768' is-struct='yes' visibility='default' id='bc2b3086'>
- <data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='ddh_stat' type-id='b505fc2f' visibility='default'/>
- </data-member>
- </class-decl>
- <qualified-type-def type-id='2d7fe832' const='yes' id='ec92d602'/>
- <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'/>
- <pointer-type-def type-id='3502e3ff' size-in-bits='64' id='4dd26a40'/>
- <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'/>
- <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>
- </abi-instr>
</abi-corpus>
diff --git a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c
index ce33b2153062..cbe486d08ba1 100644
--- a/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c
+++ b/sys/contrib/openzfs/lib/libzfs_core/libzfs_core.c
@@ -209,7 +209,7 @@ lzc_ioctl(zfs_ioc_t ioc, const char *name,
}
}
- while (zfs_ioctl_fd(g_fd, ioc, &zc) != 0) {
+ while (lzc_ioctl_fd(g_fd, ioc, &zc) != 0) {
/*
* If ioctl exited with ENOMEM, we retry the ioctl after
* increasing the size of the destination nvlist.
@@ -298,7 +298,7 @@ lzc_promote(const char *fsname, char *snapnamebuf, int snapnamelen)
VERIFY3S(g_fd, !=, -1);
(void) strlcpy(zc.zc_name, fsname, sizeof (zc.zc_name));
- if (zfs_ioctl_fd(g_fd, ZFS_IOC_PROMOTE, &zc) != 0) {
+ if (lzc_ioctl_fd(g_fd, ZFS_IOC_PROMOTE, &zc) != 0) {
int error = errno;
if (error == EEXIST && snapnamebuf != NULL)
(void) strlcpy(snapnamebuf, zc.zc_string, snapnamelen);
@@ -317,7 +317,7 @@ lzc_rename(const char *source, const char *target)
VERIFY3S(g_fd, !=, -1);
(void) strlcpy(zc.zc_name, source, sizeof (zc.zc_name));
(void) strlcpy(zc.zc_value, target, sizeof (zc.zc_value));
- error = zfs_ioctl_fd(g_fd, ZFS_IOC_RENAME, &zc);
+ error = lzc_ioctl_fd(g_fd, ZFS_IOC_RENAME, &zc);
if (error != 0)
error = errno;
return (error);
@@ -468,7 +468,7 @@ lzc_exists(const char *dataset)
VERIFY3S(g_fd, !=, -1);
(void) strlcpy(zc.zc_name, dataset, sizeof (zc.zc_name));
- return (zfs_ioctl_fd(g_fd, ZFS_IOC_OBJSET_STATS, &zc) == 0);
+ return (lzc_ioctl_fd(g_fd, ZFS_IOC_OBJSET_STATS, &zc) == 0);
}
/*
@@ -925,7 +925,7 @@ recv_impl(const char *snapname, nvlist_t *recvdprops, nvlist_t *localprops,
zc.zc_nvlist_dst = (uint64_t)(uintptr_t)
malloc(zc.zc_nvlist_dst_size);
- error = zfs_ioctl_fd(g_fd, ZFS_IOC_RECV, &zc);
+ error = lzc_ioctl_fd(g_fd, ZFS_IOC_RECV, &zc);
if (error != 0) {
error = errno;
} else {
diff --git a/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_compat.c b/sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c
index baaf4b598ab1..b8394886d034 100644
--- a/sys/contrib/openzfs/lib/libzutil/os/freebsd/zutil_compat.c
+++ b/sys/contrib/openzfs/lib/libzfs_core/os/freebsd/libzfs_core_ioctl.c
@@ -23,9 +23,8 @@
#include <sys/sysctl.h>
#include <sys/zfs_ioctl.h>
#include <os/freebsd/zfs/sys/zfs_ioctl_compat.h>
-#include <libzutil.h>
-
#include <err.h>
+#include <libzfs_core.h>
int zfs_ioctl_version = ZFS_IOCVER_UNDEF;
@@ -92,7 +91,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
-zfs_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc)
+lzc_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc)
{
size_t oldsize;
int ret, cflag = ZFS_CMD_COMPAT_NONE;
diff --git a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_compat.c b/sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c
index 173ae9cb619c..9b44a4e3be0d 100644
--- a/sys/contrib/openzfs/lib/libzutil/os/linux/zutil_compat.c
+++ b/sys/contrib/openzfs/lib/libzfs_core/os/linux/libzfs_core_ioctl.c
@@ -21,10 +21,10 @@
#include <sys/types.h>
#include <sys/param.h>
#include <sys/zfs_ioctl.h>
-#include <libzutil.h>
+#include <libzfs_core.h>
int
-zfs_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc)
+lzc_ioctl_fd(int fd, unsigned long request, zfs_cmd_t *zc)
{
return (ioctl(fd, request, zc));
}
diff --git a/sys/contrib/openzfs/lib/libzpool/Makefile.am b/sys/contrib/openzfs/lib/libzpool/Makefile.am
index c9a55591e5ca..3cc0c2f2ec05 100644
--- a/sys/contrib/openzfs/lib/libzpool/Makefile.am
+++ b/sys/contrib/openzfs/lib/libzpool/Makefile.am
@@ -214,9 +214,9 @@ nodist_libzpool_la_SOURCES = \
libzpool_la_LIBADD = \
$(abs_top_builddir)/lib/libicp/libicp.la \
$(abs_top_builddir)/lib/libunicode/libunicode.la \
- $(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la \
- $(abs_top_builddir)/lib/libzstd/libzstd.la
+ $(abs_top_builddir)/lib/libzstd/libzstd.la \
+ $(abs_top_builddir)/lib/libzutil/libzutil.la
libzpool_la_LIBADD += $(LIBCLOCK_GETTIME) $(ZLIB_LIBS) -ldl -lm
diff --git a/sys/contrib/openzfs/lib/libzpool/util.c b/sys/contrib/openzfs/lib/libzpool/util.c
index 20cabe7c2e29..a2bdfec1d173 100644
--- a/sys/contrib/openzfs/lib/libzpool/util.c
+++ b/sys/contrib/openzfs/lib/libzpool/util.c
@@ -245,39 +245,96 @@ refresh_config(void *unused, nvlist_t *tryconfig)
return (spa_tryimport(tryconfig));
}
+#if defined(__FreeBSD__)
+
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <os/freebsd/zfs/sys/zfs_ioctl_compat.h>
+
static int
-pool_active(void *unused, const char *name, uint64_t guid,
- boolean_t *isactive)
+pool_active(void *unused, const char *name, uint64_t guid, boolean_t *isactive)
{
- zfs_cmd_t *zcp;
- nvlist_t *innvl;
- char *packed = NULL;
- size_t size = 0;
- int fd, ret;
+ zfs_iocparm_t zp;
+ zfs_cmd_t *zc = NULL;
+ zfs_cmd_legacy_t *zcl = NULL;
+ unsigned long request;
+ int ret;
+
+ int fd = open(ZFS_DEV, O_RDWR | O_CLOEXEC);
+ if (fd < 0)
+ return (-1);
/*
- * Use ZFS_IOC_POOL_SYNC to confirm if a pool is active
+ * Use ZFS_IOC_POOL_STATS to check if the pool is active. We want to
+ * avoid adding a dependency on libzfs_core solely for this ioctl(),
+ * therefore we manually craft the stats command. Note that the command
+ * ID is identical between the openzfs and legacy ioctl() formats.
*/
+ int ver = ZFS_IOCVER_NONE;
+ size_t ver_size = sizeof (ver);
- fd = open(ZFS_DEV, O_RDWR | O_CLOEXEC);
- if (fd < 0)
- return (-1);
+ sysctlbyname("vfs.zfs.version.ioctl", &ver, &ver_size, NULL, 0);
+
+ switch (ver) {
+ case ZFS_IOCVER_OZFS:
+ zc = umem_zalloc(sizeof (zfs_cmd_t), UMEM_NOFAIL);
+
+ (void) strlcpy(zc->zc_name, name, sizeof (zc->zc_name));
+ zp.zfs_cmd = (uint64_t)(uintptr_t)zc;
+ zp.zfs_cmd_size = sizeof (zfs_cmd_t);
+ zp.zfs_ioctl_version = ZFS_IOCVER_OZFS;
+
+ request = _IOWR('Z', ZFS_IOC_POOL_STATS, zfs_iocparm_t);
+ ret = ioctl(fd, request, &zp);
+
+ free((void *)(uintptr_t)zc->zc_nvlist_dst);
+ umem_free(zc, sizeof (zfs_cmd_t));
+
+ break;
+ case ZFS_IOCVER_LEGACY:
+ zcl = umem_zalloc(sizeof (zfs_cmd_legacy_t), UMEM_NOFAIL);
+
+ (void) strlcpy(zcl->zc_name, name, sizeof (zcl->zc_name));
+ zp.zfs_cmd = (uint64_t)(uintptr_t)zcl;
+ zp.zfs_cmd_size = sizeof (zfs_cmd_legacy_t);
+ zp.zfs_ioctl_version = ZFS_IOCVER_LEGACY;
+
+ request = _IOWR('Z', ZFS_IOC_POOL_STATS, zfs_iocparm_t);
+ ret = ioctl(fd, request, &zp);
- zcp = umem_zalloc(sizeof (zfs_cmd_t), UMEM_NOFAIL);
+ free((void *)(uintptr_t)zcl->zc_nvlist_dst);
+ umem_free(zcl, sizeof (zfs_cmd_legacy_t));
- innvl = fnvlist_alloc();
- fnvlist_add_boolean_value(innvl, "force", B_FALSE);
+ break;
+ default:
+ fprintf(stderr, "unrecognized zfs ioctl version %d", ver);
+ exit(1);
+ }
+
+ (void) close(fd);
+
+ *isactive = (ret == 0);
+ return (0);
+}
+#else
+static int
+pool_active(void *unused, const char *name, uint64_t guid,
+ boolean_t *isactive)
+{
+ int fd = open(ZFS_DEV, O_RDWR | O_CLOEXEC);
+ if (fd < 0)
+ return (-1);
+
+ /*
+ * Use ZFS_IOC_POOL_STATS to check if a pool is active.
+ */
+ zfs_cmd_t *zcp = umem_zalloc(sizeof (zfs_cmd_t), UMEM_NOFAIL);
(void) strlcpy(zcp->zc_name, name, sizeof (zcp->zc_name));
- packed = fnvlist_pack(innvl, &size);
- zcp->zc_nvlist_src = (uint64_t)(uintptr_t)packed;
- zcp->zc_nvlist_src_size = size;
- ret = zfs_ioctl_fd(fd, ZFS_IOC_POOL_SYNC, zcp);
+ int ret = ioctl(fd, ZFS_IOC_POOL_STATS, zcp);
- fnvlist_pack_free(packed, size);
free((void *)(uintptr_t)zcp->zc_nvlist_dst);
- nvlist_free(innvl);
umem_free(zcp, sizeof (zfs_cmd_t));
(void) close(fd);
@@ -286,6 +343,7 @@ pool_active(void *unused, const char *name, uint64_t guid,
return (0);
}
+#endif
const pool_config_ops_t libzpool_config_ops = {
.pco_refresh_config = refresh_config,
diff --git a/sys/contrib/openzfs/lib/libzutil/Makefile.am b/sys/contrib/openzfs/lib/libzutil/Makefile.am
index 0bc29f05e0fb..b163250619ba 100644
--- a/sys/contrib/openzfs/lib/libzutil/Makefile.am
+++ b/sys/contrib/openzfs/lib/libzutil/Makefile.am
@@ -19,21 +19,13 @@ USER_C = \
if BUILD_LINUX
USER_C += \
os/linux/zutil_device_path_os.c \
- os/linux/zutil_import_os.c \
- os/linux/zutil_compat.c
+ os/linux/zutil_import_os.c
endif
if BUILD_FREEBSD
-DEFAULT_INCLUDES += -I$(top_srcdir)/include/os/freebsd/zfs
-
USER_C += \
os/freebsd/zutil_device_path_os.c \
- os/freebsd/zutil_import_os.c \
- os/freebsd/zutil_compat.c
-
-VPATH += $(top_srcdir)/module/os/freebsd/zfs
-
-nodist_libzutil_la_SOURCES = zfs_ioctl_compat.c
+ os/freebsd/zutil_import_os.c
endif
libzutil_la_SOURCES = $(USER_C)
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 2d8900ce2483..3da661f4c557 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
@@ -247,3 +247,8 @@ zfs_dev_flush(int fd __unused)
{
return (0);
}
+
+void
+update_vdevs_config_dev_sysfs_path(nvlist_t *config)
+{
+}
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 5defb526f210..ab692401d88e 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
@@ -65,6 +65,7 @@
#include <thread_pool.h>
#include <libzutil.h>
#include <libnvpair.h>
+#include <libzfs.h>
#include "zutil_import.h"
@@ -758,6 +759,58 @@ 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'
+ */
+static void
+update_vdev_config_dev_sysfs_path(nvlist_t *nv, char *path)
+{
+ char *upath, *spath;
+
+ /* 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);
+ } else {
+ nvlist_remove_all(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH);
+ }
+
+ free(upath);
+ free(spath);
+}
+
+/*
+ * This will get called for each leaf vdev.
+ */
+static int
+sysfs_path_pool_vdev_iter_f(void *hdl_data, nvlist_t *nv, void *data)
+{
+ 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);
+ return (0);
+}
+
+/*
+ * Given an nvlist for our pool (with vdev tree), iterate over all the
+ * leaf vdevs and update their ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH.
+ */
+void
+update_vdevs_config_dev_sysfs_path(nvlist_t *config)
+{
+ nvlist_t *nvroot = NULL;
+ verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE,
+ &nvroot) == 0);
+ for_each_vdev_in_nvlist(nvroot, sysfs_path_pool_vdev_iter_f, NULL);
+}
+
+/*
* Update a leaf vdev's persistent device strings
*
* - only applies for a dedicated leaf vdev (aka whole disk)
@@ -783,7 +836,6 @@ update_vdev_config_dev_strs(nvlist_t *nv)
vdev_dev_strs_t vds;
char *env, *type, *path;
uint64_t wholedisk = 0;
- char *upath, *spath;
/*
* For the benefit of legacy ZFS implementations, allow
@@ -830,18 +882,7 @@ update_vdev_config_dev_strs(nvlist_t *nv)
(void) nvlist_add_string(nv, ZPOOL_CONFIG_PHYS_PATH,
vds.vds_devphys);
}
-
- /* 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);
- else
- nvlist_remove_all(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH);
-
- free(upath);
- free(spath);
+ update_vdev_config_dev_sysfs_path(nv, path);
} else {
/* Clear out any stale entries. */
(void) nvlist_remove_all(nv, ZPOOL_CONFIG_DEVID);
diff --git a/sys/contrib/openzfs/lib/libzutil/zutil_import.c b/sys/contrib/openzfs/lib/libzutil/zutil_import.c
index 04b9f26abb92..9eb55aaf77ce 100644
--- a/sys/contrib/openzfs/lib/libzutil/zutil_import.c
+++ b/sys/contrib/openzfs/lib/libzutil/zutil_import.c
@@ -1705,6 +1705,8 @@ zpool_find_import_cached(libpc_handle_t *hdl, importargs_t *iarg)
return (NULL);
}
+ update_vdevs_config_dev_sysfs_path(src);
+
if ((dst = zutil_refresh_config(hdl, src)) == NULL) {
nvlist_free(raw);
nvlist_free(pools);
@@ -1859,3 +1861,69 @@ zpool_find_config(void *hdl, const char *target, nvlist_t **configp,
return (0);
}
+
+/*
+ * Internal function for iterating over the vdevs.
+ *
+ * For each vdev, func() will be called and will be passed 'zhp' (which is
+ * typically the zpool_handle_t cast as a void pointer), the vdev's nvlist, and
+ * a user-defined data pointer).
+ *
+ * The return values from all the func() calls will be OR'd together and
+ * returned.
+ */
+int
+for_each_vdev_cb(void *zhp, nvlist_t *nv, pool_vdev_iter_f func,
+ void *data)
+{
+ nvlist_t **child;
+ uint_t c, children;
+ int ret = 0;
+ int i;
+ char *type;
+
+ const char *list[] = {
+ ZPOOL_CONFIG_SPARES,
+ ZPOOL_CONFIG_L2CACHE,
+ ZPOOL_CONFIG_CHILDREN
+ };
+
+ for (i = 0; i < ARRAY_SIZE(list); i++) {
+ if (nvlist_lookup_nvlist_array(nv, list[i], &child,
+ &children) == 0) {
+ for (c = 0; c < children; c++) {
+ uint64_t ishole = 0;
+
+ (void) nvlist_lookup_uint64(child[c],
+ ZPOOL_CONFIG_IS_HOLE, &ishole);
+
+ if (ishole)
+ continue;
+
+ ret |= for_each_vdev_cb(zhp, child[c],
+ func, data);
+ }
+ }
+ }
+
+ if (nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) != 0)
+ return (ret);
+
+ /* Don't run our function on root vdevs */
+ if (strcmp(type, VDEV_TYPE_ROOT) != 0) {
+ ret |= func(zhp, nv, data);
+ }
+
+ return (ret);
+}
+
+/*
+ * Given an ZPOOL_CONFIG_VDEV_TREE nvpair, iterate over all the vdevs, calling
+ * func() for each one. func() is passed the vdev's nvlist and an optional
+ * user-defined 'data' pointer.
+ */
+int
+for_each_vdev_in_nvlist(nvlist_t *nvroot, pool_vdev_iter_f func, void *data)
+{
+ return (for_each_vdev_cb(NULL, nvroot, func, data));
+}
diff --git a/sys/contrib/openzfs/man/man8/zfs-send.8 b/sys/contrib/openzfs/man/man8/zfs-send.8
index 688bd033979a..e83a92e4b341 100644
--- a/sys/contrib/openzfs/man/man8/zfs-send.8
+++ b/sys/contrib/openzfs/man/man8/zfs-send.8
@@ -198,6 +198,9 @@ will not have their data recompressed on the receiver side using
.Fl o Sy compress Ns = Ar value .
The data will stay compressed as it was from the sender.
The new compression property will be set for future data.
+Note that uncompressed data from the sender will still attempt to
+compress on the receiver, unless you specify
+.Fl o Sy compress Ns = Em off .
.It Fl w , -raw
For encrypted datasets, send data exactly as it exists on disk.
This allows backups to be taken even if encryption keys are not currently loaded.
diff --git a/sys/contrib/openzfs/man/man8/zfs.8 b/sys/contrib/openzfs/man/man8/zfs.8
index fca1ba00da7d..48453ef46c0d 100644
--- a/sys/contrib/openzfs/man/man8/zfs.8
+++ b/sys/contrib/openzfs/man/man8/zfs.8
@@ -545,7 +545,7 @@ access for a set of IP addresses and to enable root access for system
on the
.Ar tank/home
file system:
-.Dl # Nm zfs Cm set Sy sharenfs Ns = Ns ' Ns Ar rw Ns =@123.123.0.0/16,root= Ns Ar neo Ns ' tank/home
+.Dl # Nm zfs Cm set Sy sharenfs Ns = Ns ' Ns Ar rw Ns =@123.123.0.0/16:[::1],root= Ns Ar neo Ns ' tank/home
.Pp
If you are using DNS for host name resolution,
specify the fully-qualified hostname.
diff --git a/sys/contrib/openzfs/module/Makefile.in b/sys/contrib/openzfs/module/Makefile.in
index 089b3ff88490..8538dd9d6997 100644
--- a/sys/contrib/openzfs/module/Makefile.in
+++ b/sys/contrib/openzfs/module/Makefile.in
@@ -1,6 +1,7 @@
include Kbuild
INSTALL_MOD_DIR ?= extra
+INSTALL_MOD_PATH ?= $(DESTDIR)
SUBDIR_TARGETS = icp lua zstd
@@ -81,15 +82,15 @@ clean: clean-@ac_system@
modules_install-Linux:
@# Install the kernel modules
$(MAKE) -C @LINUX_OBJ@ M=`pwd` modules_install \
- INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \
+ INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) \
INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \
KERNELRELEASE=@LINUX_VERSION@
@# Remove extraneous build products when packaging
- kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
+ kmoddir=$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
if [ -n "$(DESTDIR)" ]; then \
find $$kmoddir -name 'modules.*' | xargs $(RM); \
fi
- sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \
+ sysmap=$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \
if [ -f $$sysmap ]; then \
depmod -ae -F $$sysmap @LINUX_VERSION@; \
fi
@@ -102,7 +103,7 @@ modules_install: modules_install-@ac_system@
modules_uninstall-Linux:
@# Uninstall the kernel modules
- kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
+ kmoddir=$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \
for objdir in $(ZFS_MODULES); do \
$(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$objdir; \
done
diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c
index 8bc1ef1325e9..fa1034ff88bc 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/abd_os.c
@@ -250,6 +250,7 @@ abd_alloc_zero_scatter(void)
n = abd_chunkcnt_for_bytes(SPA_MAXBLOCKSIZE);
abd_zero_buf = kmem_cache_alloc(abd_chunk_cache, KM_PUSHPAGE);
+ bzero(abd_zero_buf, PAGE_SIZE);
abd_zero_scatter = abd_alloc_struct(SPA_MAXBLOCKSIZE);
abd_zero_scatter->abd_flags |= ABD_FLAG_OWNER | ABD_FLAG_ZEROS;
diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/dmu_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/dmu_os.c
index 2cf54a3cef65..38488dbda6f4 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/dmu_os.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/dmu_os.c
@@ -78,25 +78,6 @@ __FBSDID("$FreeBSD$");
#define dmu_page_unlock(m)
#endif
-static int
-dmu_buf_hold_array(objset_t *os, uint64_t object, uint64_t offset,
- uint64_t length, int read, void *tag, int *numbufsp, dmu_buf_t ***dbpp)
-{
- dnode_t *dn;
- int err;
-
- err = dnode_hold(os, object, FTAG, &dn);
- if (err)
- return (err);
-
- err = dmu_buf_hold_array_by_dnode(dn, offset, length, read, tag,
- numbufsp, dbpp, DMU_READ_PREFETCH);
-
- dnode_rele(dn, FTAG);
-
- return (err);
-}
-
int
dmu_write_pages(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
vm_page_t *ma, dmu_tx_t *tx)
diff --git a/sys/contrib/openzfs/module/zfs/arc.c b/sys/contrib/openzfs/module/zfs/arc.c
index 6acd3631348e..f0330150f986 100644
--- a/sys/contrib/openzfs/module/zfs/arc.c
+++ b/sys/contrib/openzfs/module/zfs/arc.c
@@ -3775,8 +3775,13 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr)
* to acquire the l2ad_mtx. If that happens, we don't
* want to re-destroy the header's L2 portion.
*/
- if (HDR_HAS_L2HDR(hdr))
+ if (HDR_HAS_L2HDR(hdr)) {
+
+ if (!HDR_EMPTY(hdr))
+ buf_discard_identity(hdr);
+
arc_hdr_l2hdr_destroy(hdr);
+ }
if (!buflist_held)
mutex_exit(&dev->l2ad_mtx);
diff --git a/sys/contrib/openzfs/module/zfs/dmu.c b/sys/contrib/openzfs/module/zfs/dmu.c
index 1c47430953b1..b29d82fd793e 100644
--- a/sys/contrib/openzfs/module/zfs/dmu.c
+++ b/sys/contrib/openzfs/module/zfs/dmu.c
@@ -613,7 +613,7 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset, uint64_t length,
return (0);
}
-static int
+int
dmu_buf_hold_array(objset_t *os, uint64_t object, uint64_t offset,
uint64_t length, int read, void *tag, int *numbufsp, dmu_buf_t ***dbpp)
{
@@ -968,9 +968,7 @@ dmu_free_long_object(objset_t *os, uint64_t object)
dmu_tx_mark_netfree(tx);
err = dmu_tx_assign(tx, TXG_WAIT);
if (err == 0) {
- if (err == 0)
- err = dmu_object_free(os, object, tx);
-
+ err = dmu_object_free(os, object, tx);
dmu_tx_commit(tx);
} else {
dmu_tx_abort(tx);
diff --git a/sys/contrib/openzfs/module/zfs/dmu_zfetch.c b/sys/contrib/openzfs/module/zfs/dmu_zfetch.c
index a26b0d739921..043344a1375f 100644
--- a/sys/contrib/openzfs/module/zfs/dmu_zfetch.c
+++ b/sys/contrib/openzfs/module/zfs/dmu_zfetch.c
@@ -488,7 +488,8 @@ dmu_zfetch_run(zstream_t *zs, boolean_t missed, boolean_t have_lock)
issued = pf_end - pf_start + ipf_end - ipf_start;
if (issued > 1) {
/* More references on top of taken in dmu_zfetch_prepare(). */
- zfs_refcount_add_many(&zs->zs_refs, issued - 1, NULL);
+ for (int i = 0; i < issued - 1; i++)
+ zfs_refcount_add(&zs->zs_refs, NULL);
} else if (issued == 0) {
/* Some other thread has done our work, so drop the ref. */
if (zfs_refcount_remove(&zs->zs_refs, NULL) == 0)
diff --git a/sys/contrib/openzfs/module/zfs/dnode.c b/sys/contrib/openzfs/module/zfs/dnode.c
index 7f741542ce02..900240479c70 100644
--- a/sys/contrib/openzfs/module/zfs/dnode.c
+++ b/sys/contrib/openzfs/module/zfs/dnode.c
@@ -2037,10 +2037,40 @@ dnode_set_dirtyctx(dnode_t *dn, dmu_tx_t *tx, void *tag)
}
}
+static void
+dnode_partial_zero(dnode_t *dn, uint64_t off, uint64_t blkoff, uint64_t len,
+ dmu_tx_t *tx)
+{
+ dmu_buf_impl_t *db;
+ int res;
+
+ rw_enter(&dn->dn_struct_rwlock, RW_READER);
+ res = dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off), TRUE, FALSE,
+ FTAG, &db);
+ rw_exit(&dn->dn_struct_rwlock);
+ if (res == 0) {
+ db_lock_type_t dblt;
+ boolean_t dirty;
+
+ dblt = dmu_buf_lock_parent(db, RW_READER, FTAG);
+ /* don't dirty if not on disk and not dirty */
+ dirty = !list_is_empty(&db->db_dirty_records) ||
+ (db->db_blkptr && !BP_IS_HOLE(db->db_blkptr));
+ dmu_buf_unlock_parent(db, dblt, FTAG);
+ if (dirty) {
+ caddr_t data;
+
+ dmu_buf_will_dirty(&db->db, tx);
+ data = db->db.db_data;
+ bzero(data + blkoff, len);
+ }
+ dbuf_rele(db, FTAG);
+ }
+}
+
void
dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx)
{
- dmu_buf_impl_t *db;
uint64_t blkoff, blkid, nblks;
int blksz, blkshift, head, tail;
int trunc = FALSE;
@@ -2089,31 +2119,10 @@ dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx)
}
/* zero out any partial block data at the start of the range */
if (head) {
- int res;
ASSERT3U(blkoff + head, ==, blksz);
if (len < head)
head = len;
- rw_enter(&dn->dn_struct_rwlock, RW_READER);
- res = dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off),
- TRUE, FALSE, FTAG, &db);
- rw_exit(&dn->dn_struct_rwlock);
- if (res == 0) {
- caddr_t data;
- boolean_t dirty;
-
- db_lock_type_t dblt = dmu_buf_lock_parent(db, RW_READER,
- FTAG);
- /* don't dirty if it isn't on disk and isn't dirty */
- dirty = !list_is_empty(&db->db_dirty_records) ||
- (db->db_blkptr && !BP_IS_HOLE(db->db_blkptr));
- dmu_buf_unlock_parent(db, dblt, FTAG);
- if (dirty) {
- dmu_buf_will_dirty(&db->db, tx);
- data = db->db.db_data;
- bzero(data + blkoff, head);
- }
- dbuf_rele(db, FTAG);
- }
+ dnode_partial_zero(dn, off, blkoff, head, tx);
off += head;
len -= head;
}
@@ -2135,27 +2144,9 @@ dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx)
ASSERT0(P2PHASE(off, blksz));
/* zero out any partial block data at the end of the range */
if (tail) {
- int res;
if (len < tail)
tail = len;
- rw_enter(&dn->dn_struct_rwlock, RW_READER);
- res = dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off+len),
- TRUE, FALSE, FTAG, &db);
- rw_exit(&dn->dn_struct_rwlock);
- if (res == 0) {
- boolean_t dirty;
- /* don't dirty if not on disk and not dirty */
- db_lock_type_t type = dmu_buf_lock_parent(db, RW_READER,
- FTAG);
- dirty = !list_is_empty(&db->db_dirty_records) ||
- (db->db_blkptr && !BP_IS_HOLE(db->db_blkptr));
- dmu_buf_unlock_parent(db, type, FTAG);
- if (dirty) {
- dmu_buf_will_dirty(&db->db, tx);
- bzero(db->db.db_data, tail);
- }
- dbuf_rele(db, FTAG);
- }
+ dnode_partial_zero(dn, off + len, 0, tail, tx);
len -= tail;
}
diff --git a/sys/contrib/openzfs/module/zfs/refcount.c b/sys/contrib/openzfs/module/zfs/refcount.c
index 354e021d9d26..35a379dded69 100644
--- a/sys/contrib/openzfs/module/zfs/refcount.c
+++ b/sys/contrib/openzfs/module/zfs/refcount.c
@@ -318,6 +318,14 @@ zfs_refcount_not_held(zfs_refcount_t *rc, const void *holder)
return (B_TRUE);
}
+EXPORT_SYMBOL(zfs_refcount_create);
+EXPORT_SYMBOL(zfs_refcount_destroy);
+EXPORT_SYMBOL(zfs_refcount_is_zero);
+EXPORT_SYMBOL(zfs_refcount_count);
+EXPORT_SYMBOL(zfs_refcount_add);
+EXPORT_SYMBOL(zfs_refcount_remove);
+EXPORT_SYMBOL(zfs_refcount_held);
+
/* BEGIN CSTYLED */
ZFS_MODULE_PARAM(zfs, ,reference_tracking_enable, INT, ZMOD_RW,
"Track reference holders to refcount_t objects");
diff --git a/sys/contrib/openzfs/module/zfs/vdev.c b/sys/contrib/openzfs/module/zfs/vdev.c
index 2763bd8de1c4..0ba76f6b88d9 100644
--- a/sys/contrib/openzfs/module/zfs/vdev.c
+++ b/sys/contrib/openzfs/module/zfs/vdev.c
@@ -2373,6 +2373,7 @@ vdev_validate(vdev_t *vd)
static void
vdev_copy_path_impl(vdev_t *svd, vdev_t *dvd)
{
+ char *old, *new;
if (svd->vdev_path != NULL && dvd->vdev_path != NULL) {
if (strcmp(svd->vdev_path, dvd->vdev_path) != 0) {
zfs_dbgmsg("vdev_copy_path: vdev %llu: path changed "
@@ -2386,6 +2387,29 @@ vdev_copy_path_impl(vdev_t *svd, vdev_t *dvd)
zfs_dbgmsg("vdev_copy_path: vdev %llu: path set to '%s'",
(u_longlong_t)dvd->vdev_guid, dvd->vdev_path);
}
+
+ /*
+ * Our enclosure sysfs path may have changed between imports
+ */
+ old = dvd->vdev_enc_sysfs_path;
+ new = svd->vdev_enc_sysfs_path;
+ if ((old != NULL && new == NULL) ||
+ (old == NULL && new != NULL) ||
+ ((old != NULL && new != NULL) && strcmp(new, old) != 0)) {
+ zfs_dbgmsg("vdev_copy_path: vdev %llu: vdev_enc_sysfs_path "
+ "changed from '%s' to '%s'", (u_longlong_t)dvd->vdev_guid,
+ old, new);
+
+ if (dvd->vdev_enc_sysfs_path)
+ spa_strfree(dvd->vdev_enc_sysfs_path);
+
+ if (svd->vdev_enc_sysfs_path) {
+ dvd->vdev_enc_sysfs_path = spa_strdup(
+ svd->vdev_enc_sysfs_path);
+ } else {
+ dvd->vdev_enc_sysfs_path = NULL;
+ }
+ }
}
/*
diff --git a/sys/contrib/openzfs/module/zfs/zfs_vnops.c b/sys/contrib/openzfs/module/zfs/zfs_vnops.c
index 8229bc9a93e5..9bd75c011ef9 100644
--- a/sys/contrib/openzfs/module/zfs/zfs_vnops.c
+++ b/sys/contrib/openzfs/module/zfs/zfs_vnops.c
@@ -254,6 +254,7 @@ zfs_read(struct znode *zp, zfs_uio_t *uio, int ioflag, cred_t *cr)
}
ASSERT(zfs_uio_offset(uio) < zp->z_size);
+ ssize_t start_offset = zfs_uio_offset(uio);
ssize_t n = MIN(zfs_uio_resid(uio), zp->z_size - zfs_uio_offset(uio));
ssize_t start_resid = n;
@@ -276,6 +277,13 @@ zfs_read(struct znode *zp, zfs_uio_t *uio, int ioflag, cred_t *cr)
/* convert checksum errors into IO errors */
if (error == ECKSUM)
error = SET_ERROR(EIO);
+ /*
+ * if we actually read some bytes, bubbling EFAULT
+ * up to become EAGAIN isn't what we want here.
+ */
+ if (error == EFAULT &&
+ (zfs_uio_offset(uio) - start_offset) != 0)
+ error = 0;
break;
}
diff --git a/sys/contrib/openzfs/tests/runfiles/linux.run b/sys/contrib/openzfs/tests/runfiles/linux.run
index b7831c3acfd1..01e1f79e5852 100644
--- a/sys/contrib/openzfs/tests/runfiles/linux.run
+++ b/sys/contrib/openzfs/tests/runfiles/linux.run
@@ -53,7 +53,7 @@ tags = ['functional', 'cli_root', 'zfs_mount']
[tests/functional/cli_root/zfs_share:Linux]
tests = ['zfs_share_005_pos', 'zfs_share_007_neg', 'zfs_share_009_neg',
- 'zfs_share_012_pos']
+ 'zfs_share_012_pos', 'zfs_share_013_pos']
tags = ['functional', 'cli_root', 'zfs_share']
[tests/functional/cli_root/zfs_sysfs:Linux]
diff --git a/sys/contrib/openzfs/tests/runfiles/sanity.run b/sys/contrib/openzfs/tests/runfiles/sanity.run
index ad4495144cda..2a9b4adf5fb9 100644
--- a/sys/contrib/openzfs/tests/runfiles/sanity.run
+++ b/sys/contrib/openzfs/tests/runfiles/sanity.run
@@ -414,7 +414,7 @@ user =
tags = ['functional', 'cli_user', 'zpool_list']
[tests/functional/compression]
-tests = ['compress_003_pos']
+tests = ['compress_003_pos','compress_zstd_bswap']
tags = ['functional', 'compression']
[tests/functional/exec]
diff --git a/sys/contrib/openzfs/tests/test-runner/bin/zts-report.py.in b/sys/contrib/openzfs/tests/test-runner/bin/zts-report.py.in
index 1acb8b9c1be2..e9f3ab1728d6 100755
--- a/sys/contrib/openzfs/tests/test-runner/bin/zts-report.py.in
+++ b/sys/contrib/openzfs/tests/test-runner/bin/zts-report.py.in
@@ -283,7 +283,8 @@ if sys.platform.startswith('freebsd'):
'delegate/zfs_allow_003_pos': ['FAIL', known_reason],
'inheritance/inherit_001_pos': ['FAIL', '11829'],
'resilver/resilver_restart_001': ['FAIL', known_reason],
- 'zvol/zvol_misc/zvol_misc_volmode': ['FAIL', known_reason],
+ 'pool_checkpoint/checkpoint_big_rewind': ['FAIL', '12622'],
+ 'pool_checkpoint/checkpoint_indirect': ['FAIL', '12623'],
})
elif sys.platform.startswith('linux'):
maybe.update({
@@ -308,6 +309,7 @@ elif sys.platform.startswith('linux'):
'rsend/rsend_010_pos': ['FAIL', known_reason],
'rsend/rsend_011_pos': ['FAIL', known_reason],
'snapshot/rollback_003_pos': ['FAIL', known_reason],
+ 'zvol/zvol_misc/zvol_misc_snapdev': ['FAIL', '12621'],
})
diff --git a/sys/contrib/openzfs/tests/test-runner/include/logapi.shlib b/sys/contrib/openzfs/tests/test-runner/include/logapi.shlib
index 5a7e76c0ddbf..c9c01ab752ea 100644
--- a/sys/contrib/openzfs/tests/test-runner/include/logapi.shlib
+++ b/sys/contrib/openzfs/tests/test-runner/include/logapi.shlib
@@ -68,6 +68,16 @@ function log_must
(( $? != 0 )) && log_fail
}
+# Execute a positive test (expecting no stderr) and exit $STF_FAIL
+# if test fails
+# $@ - command to execute
+
+function log_must_nostderr
+{
+ log_pos_nostderr "$@"
+ (( $? != 0 )) && log_fail
+}
+
# Execute a positive test but retry the command on failure if the output
# matches an expected pattern. Otherwise behave like log_must and exit
# $STF_FAIL is test fails.
@@ -292,6 +302,46 @@ function log_pos
return $status
}
+# Execute and print command with status where success equals zero result
+# and no stderr output
+#
+# $@ command to execute
+#
+# return 0 if command succeeds and no stderr output
+# return 1 othersie
+
+function log_pos_nostderr
+{
+ typeset out=""
+ typeset logfile="/tmp/log.$$"
+
+ while [[ -e $logfile ]]; do
+ logfile="$logfile.$$"
+ done
+
+ "$@" 2>$logfile
+ typeset status=$?
+ out="cat $logfile"
+ typeset out_msg=$($out)
+
+ if (( $status != 0 )) ; then
+ print -u2 $out_msg
+ _printerror "$@" "exited $status"
+ else
+ if [[ ! -z "$out_msg" ]]; then
+ print -u2 $out_msg
+ _printerror "$@" "message in stderr" \
+ " exited $status"
+ status=1
+ else
+ [[ -n $LOGAPI_DEBUG ]] && cat $logfile
+ _printsuccess "$@"
+ fi
+ fi
+ _recursive_output $logfile "false"
+ return $status
+}
+
# Set an exit handler
#
# $@ - function(s) to perform on exit
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
index b671af7d8f42..0e552c2680a0 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/libzfs_input_check/libzfs_input_check.c
@@ -159,7 +159,7 @@ lzc_ioctl_run(zfs_ioc_t ioc, const char *name, nvlist_t *innvl, int expected)
zc.zc_nvlist_dst_size = MAX(size * 2, 128 * 1024);
zc.zc_nvlist_dst = (uint64_t)(uintptr_t)malloc(zc.zc_nvlist_dst_size);
- if (zfs_ioctl_fd(zfs_fd, ioc, &zc) != 0)
+ if (lzc_ioctl_fd(zfs_fd, ioc, &zc) != 0)
error = errno;
if (error != expected) {
@@ -692,7 +692,7 @@ zfs_destroy(const char *dataset)
(void) strlcpy(zc.zc_name, dataset, sizeof (zc.zc_name));
zc.zc_name[sizeof (zc.zc_name) - 1] = '\0';
- err = zfs_ioctl_fd(zfs_fd, ZFS_IOC_DESTROY, &zc);
+ err = lzc_ioctl_fd(zfs_fd, ZFS_IOC_DESTROY, &zc);
return (err == 0 ? 0 : errno);
}
@@ -900,7 +900,7 @@ zfs_ioc_input_tests(const char *pool)
if (ioc_tested[cmd])
continue;
- if (zfs_ioctl_fd(zfs_fd, ioc, &zc) != 0 &&
+ if (lzc_ioctl_fd(zfs_fd, ioc, &zc) != 0 &&
errno != ZFS_ERR_IOC_CMD_UNAVAIL) {
(void) fprintf(stderr, "cmd %d is missing a test case "
"(%d)\n", cmd, errno);
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/Makefile.am
index 8d5885e08447..abae69dea8c7 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/Makefile.am
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/Makefile.am
@@ -4,5 +4,3 @@ pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/bin
pkgexec_PROGRAMS = mkbusy
mkbusy_SOURCES = mkbusy.c
-
-mkbusy_LDADD = $(abs_top_builddir)/lib/libzfs_core/libzfs_core.la
diff --git a/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/mkbusy.c b/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/mkbusy.c
index 58ea1d07a40b..e1cbd95cd118 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/mkbusy.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/cmd/mkbusy/mkbusy.c
@@ -29,7 +29,6 @@
#include <unistd.h>
#include <errno.h>
#include <string.h>
-#include <libzutil.h>
static __attribute__((noreturn)) void
@@ -64,6 +63,21 @@ daemonize(void)
(void) close(2);
}
+
+static const char *
+get_basename(const char *path)
+{
+ const char *bn = strrchr(path, '/');
+ return (bn ? bn + 1 : path);
+}
+
+static ssize_t
+get_dirnamelen(const char *path)
+{
+ const char *end = strrchr(path, '/');
+ return (end ? end - path : -1);
+}
+
int
main(int argc, char *argv[])
{
@@ -103,9 +117,9 @@ main(int argc, char *argv[])
arg[arglen - 1] = '\0';
/* Get the directory and file names. */
- fname = zfs_basename(arg);
+ fname = get_basename(arg);
dname = arg;
- if ((dnamelen = zfs_dirnamelen(arg)) != -1)
+ if ((dnamelen = get_dirnamelen(arg)) != -1)
arg[dnamelen] = '\0';
else
dname = ".";
diff --git a/sys/contrib/openzfs/tests/zfs-tests/include/blkdev.shlib b/sys/contrib/openzfs/tests/zfs-tests/include/blkdev.shlib
index bcba8ee759c9..bf70952904bb 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/include/blkdev.shlib
+++ b/sys/contrib/openzfs/tests/zfs-tests/include/blkdev.shlib
@@ -73,7 +73,7 @@ function scan_scsi_hosts
function block_device_wait
{
if is_linux; then
- udevadm trigger $*
+ udevadm trigger $* 2>/dev/null
typeset start=$SECONDS
udevadm settle
typeset elapsed=$((SECONDS - start))
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/Makefile.am
index bf33ed038d78..35332f822e6c 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/Makefile.am
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/Makefile.am
@@ -14,6 +14,7 @@ dist_pkgdata_SCRIPTS = \
zfs_share_010_neg.ksh \
zfs_share_011_pos.ksh \
zfs_share_012_pos.ksh \
+ zfs_share_013_pos.ksh \
zfs_share_concurrent_shares.ksh
dist_pkgdata_DATA = \
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_007_neg.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_007_neg.ksh
index 29ca9a143a27..c64157cee601 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_007_neg.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_007_neg.ksh
@@ -51,7 +51,7 @@ function cleanup {
set -A badopts \
"r0" "r0=machine1" "r0=machine1:machine2" \
- "-g" "-b" "-c" "-d" "--invalid" \
+ "-g" "-b" "-c" "-d" "--invalid" "rw=[::1]a:[::2]" "rw=[::1" \
"$TESTPOOL" "$TESTPOOL/$TESTFS" "$TESTPOOL\$TESTCTR\$TESTFS1"
log_assert "Verify that invalid share parameters and options are caught."
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_013_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_013_pos.ksh
new file mode 100755
index 000000000000..150eddac0ebb
--- /dev/null
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_013_pos.ksh
@@ -0,0 +1,80 @@
+#!/bin/ksh -p
+#
+# 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 (c) 2020, Felix Dörre
+#
+
+. $STF_SUITE/include/libtest.shlib
+
+#
+# DESCRIPTION:
+# Verify that NFS share options including ipv6 literals are parsed and propagated correctly.
+#
+
+verify_runnable "global"
+
+function cleanup
+{
+ log_must zfs set sharenfs=off $TESTPOOL/$TESTFS
+ is_shared $TESTPOOL/$TESTFS && \
+ log_must unshare_fs $TESTPOOL/$TESTFS
+}
+
+log_onexit cleanup
+
+cleanup
+
+log_must zfs set sharenfs="rw=[::1]" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "::1(" <<< "$output" > /dev/null
+
+log_must zfs set sharenfs="rw=[2::3]" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "2::3(" <<< "$output" > /dev/null
+
+log_must zfs set sharenfs="rw=[::1]:[2::3]" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "::1(" <<< "$output" > /dev/null
+log_must grep "2::3(" <<< "$output" > /dev/null
+
+log_must zfs set sharenfs="rw=[::1]/64" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "::1/64(" <<< "$output" > /dev/null
+
+log_must zfs set sharenfs="rw=[2::3]/128" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "2::3/128(" <<< "$output" > /dev/null
+
+log_must zfs set sharenfs="rw=[::1]/32:[2::3]/128" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "::1/32(" <<< "$output" > /dev/null
+log_must grep "2::3/128(" <<< "$output" > /dev/null
+
+log_must zfs set sharenfs="rw=[::1]:[2::3]/64:[2a01:1234:1234:1234:aa34:234:1234:1234]:1.2.3.4/24" $TESTPOOL/$TESTFS
+output=$(showshares_nfs 2>&1)
+log_must grep "::1(" <<< "$output" > /dev/null
+log_must grep "2::3/64(" <<< "$output" > /dev/null
+log_must grep "2a01:1234:1234:1234:aa34:234:1234:1234(" <<< "$output" > /dev/null
+log_must grep "1\\.2\\.3\\.4/24(" <<< "$output" > /dev/null
+
+log_pass "NFS share ip address propagated correctly."
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_unmount/zfs_unmount_nested.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_unmount/zfs_unmount_nested.ksh
index 987ecca31396..7da8be3d17eb 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_unmount/zfs_unmount_nested.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_unmount/zfs_unmount_nested.ksh
@@ -83,7 +83,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
- log_must zfs unmount $TESTPOOL/$ds
+ log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$ds_pre is not mounted"
@@ -113,7 +113,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
- log_must zfs unmount $TESTPOOL/$ds
+ log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$TESTPOOL/$ds_pre (pre) not mounted"
@@ -143,7 +143,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
- log_must zfs unmount $TESTPOOL/$ds
+ log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$TESTPOOL/$ds_pre (pre) not mounted"
@@ -173,7 +173,7 @@ for d in ${test_depths[@]}; do
log_must zfs snapshot $TESTPOOL/$ds@snap
# force snapshot mount in .zfs
log_must ls /$TESTPOOL/$ds/.zfs/snapshot/snap
- log_must zfs unmount $TESTPOOL/$ds
+ log_must_nostderr zfs unmount $TESTPOOL/$ds
if ! ismounted $TESTPOOL/$ds_pre; then
log_fail "$ds_pre is not mounted"
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/Makefile.am
index 92a973258d65..817bd41e8075 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/Makefile.am
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/Makefile.am
@@ -6,10 +6,12 @@ dist_pkgdata_SCRIPTS = \
compress_002_pos.ksh \
compress_003_pos.ksh \
compress_004_pos.ksh \
+ compress_zstd_bswap.ksh \
l2arc_compressed_arc.ksh \
l2arc_compressed_arc_disabled.ksh \
l2arc_encrypted.ksh \
l2arc_encrypted_no_compressed_arc.ksh
dist_pkgdata_DATA = \
- compress.cfg
+ compress.cfg \
+ testpool_zstd.tar.gz
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/compress_zstd_bswap.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/compress_zstd_bswap.ksh
new file mode 100755
index 000000000000..9726cf0dd5a6
--- /dev/null
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/compress_zstd_bswap.ksh
@@ -0,0 +1,55 @@
+#!/bin/ksh -p
+#
+# 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 (c) 2007, Sun Microsystems Inc. All rights reserved.
+# Copyright (c) 2021, Rich Ercolani.
+# Use is subject to license terms.
+#
+
+. $STF_SUITE/include/properties.shlib
+. $STF_SUITE/include/libtest.shlib
+
+#
+# DESCRIPTION:
+# Import a pool containing variously-permuted zstd-compressed files,
+# then try to copy them out.
+
+typeset TESTPOOL_ZSTD_FILE=$STF_SUITE/tests/functional/compression/testpool_zstd.tar.gz
+verify_runnable "both"
+
+function cleanup
+{
+ destroy_pool testpool_zstd
+ rm -f $TEST_BASE_DIR/testpool_zstd
+
+}
+
+log_assert "Trying to read data from variously mangled zstd datasets"
+log_onexit cleanup
+
+log_must tar --directory $TEST_BASE_DIR -xzSf $TESTPOOL_ZSTD_FILE
+log_must zpool import -d $TEST_BASE_DIR testpool_zstd
+log_must dd if=/testpool_zstd/x86_64/zstd of=/dev/null
+log_must dd if=/testpool_zstd/ppc64_fbsd/zstd of=/dev/null
+
+log_pass "Reading from mangled zstd datasets works as expected."
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/testpool_zstd.tar.gz b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/testpool_zstd.tar.gz
new file mode 100644
index 000000000000..4096f7fcbe44
--- /dev/null
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/compression/testpool_zstd.tar.gz
Binary files differ
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/Makefile.am b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/Makefile.am
index 3174f78c6249..e7479ae81056 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/Makefile.am
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/Makefile.am
@@ -11,5 +11,3 @@ pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/ctime
pkgexec_PROGRAMS = ctime
ctime_SOURCES = ctime.c
-
-ctime_LDADD = $(abs_top_builddir)/lib/libzfs_core/libzfs_core.la
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/ctime.c b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/ctime.c
index 2d515d957a90..b755be2feb29 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/ctime.c
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/ctime/ctime.c
@@ -37,7 +37,6 @@
#include <utime.h>
#include <stdio.h>
#include <stdlib.h>
-#include <libzutil.h>
#include <unistd.h>
#include <strings.h>
#include <errno.h>
@@ -98,6 +97,13 @@ get_file_time(const char *pfile, int what, time_t *ptr)
}
}
+static ssize_t
+get_dirnamelen(const char *path)
+{
+ const char *end = strrchr(path, '/');
+ return (end ? end - path : -1);
+}
+
static int
do_read(const char *pfile)
{
@@ -161,7 +167,7 @@ do_link(const char *pfile)
* the link file in the same directory.
*/
(void) snprintf(link_file, sizeof (link_file),
- "%.*s/%s", (int)zfs_dirnamelen(pfile), pfile, "link_file");
+ "%.*s/%s", (int)get_dirnamelen(pfile), pfile, "link_file");
if (link(pfile, link_file) == -1) {
(void) fprintf(stderr, "link(%s, %s) failed with errno %d\n",
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/deadman/deadman_sync.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/deadman/deadman_sync.ksh
index b0b03f5d523e..fd6e8c858edd 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/deadman/deadman_sync.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/deadman/deadman_sync.ksh
@@ -80,10 +80,10 @@ else
fi
log_must zpool events
-# Verify at least 5 deadman events were logged. The first after 5 seconds,
+# Verify at least 4 deadman events were logged. The first after 5 seconds,
# and another each second thereafter until the delay is clearer.
events=$(zpool events | grep -c ereport.fs.zfs.deadman)
-if [ "$events" -lt 5 ]; then
+if [ "$events" -lt 4 ]; then
log_fail "Expect >=5 deadman events, $events found"
fi
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_016_neg.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_016_neg.ksh
index 6dfb3423fdf9..26573bfb594d 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_016_neg.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/rsend/rsend_016_neg.ksh
@@ -24,10 +24,22 @@
#
# Strategy:
# 1. Perform a zfs incremental send from a bookmark that doesn't exist
+# 2. Perform a zfs incremental replication send with incremental source
+# same as target (#11121)
#
verify_runnable "both"
-log_neg eval "zfs send -i \#bla $POOl/$FS@final > /dev/null"
+function cleanup
+{
+ rm -f $TEST_BASE_DIR/devnull
+}
+
+log_onexit cleanup
+
+log_mustnot eval "zfs send -i \#bla $POOl/$FS@final > $TEST_BASE_DIR/devnull"
+
+log_must eval "zfs send -R -i snapA $POOL/vol@snapA 2>&1 " \
+ "> $TEST_BASE_DIR/devnull | grep -q WARNING"
log_pass "Ensure that error conditions cause appropriate failures."
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib
index 3ee09a151b12..b69d2ce02913 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib
@@ -37,8 +37,6 @@
#
function udev_wait
{
- sleep 1
- is_linux || return 0
udevadm trigger --action=change
udevadm settle
for i in {1..3}; do
@@ -58,7 +56,6 @@ function udev_wait
#
function udev_cleanup
{
- is_linux || return 0
log_note "Pruning broken ZVOL symlinks ..."
udevadm settle
@@ -79,7 +76,8 @@ function blockdev_exists # device
# because there are other commands (zfs snap, zfs inherit, zfs destroy)
# that can affect device nodes
for i in {1..3}; do
- udev_wait
+ is_linux && udev_wait
+ block_device_wait "$device"
is_disk_device "$device" && return 0
done
log_fail "$device does not exist as a block device"
@@ -96,8 +94,9 @@ function blockdev_missing # device
# because there are other commands (zfs snap, zfs inherit, zfs destroy)
# that can affect device nodes
for i in {1..3}; do
- udev_wait
- [[ ! -e "$device" ]] && return 0
+ is_linux && udev_wait
+ block_device_wait
+ is_disk_device "$device" || return 0
done
log_fail "$device exists when not expected"
}
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_rename_inuse.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_rename_inuse.ksh
index c4ea23c48d16..e9b7bbc4c4a5 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_rename_inuse.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_rename_inuse.ksh
@@ -39,7 +39,7 @@ function cleanup
for ds in "$SENDFS" "$ZVOL" "$ZVOL-renamed"; do
destroy_dataset "$ds" '-rf'
done
- udev_wait
+ block_device_wait
}
log_assert "Verify 'zfs rename' works on a ZVOL already in use as block device"
@@ -54,7 +54,7 @@ SENDFS="$TESTPOOL/sendfs.$$"
log_must zfs create -V $VOLSIZE "$ZVOL"
# 2. Create a filesystem on the ZVOL device and mount it
-udev_wait
+block_device_wait "$ZDEV"
log_must eval "new_fs $ZDEV >/dev/null 2>&1"
log_must mkdir "$MNTPFS"
log_must mount "$ZDEV" "$MNTPFS"
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_snapdev.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_snapdev.ksh
index 8d95bfa39374..bbe40734f99c 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_snapdev.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_snapdev.ksh
@@ -47,7 +47,7 @@ function cleanup
datasetexists $ZVOL && log_must zfs destroy -r $ZVOL
log_must zfs inherit snapdev $TESTPOOL
block_device_wait
- udev_cleanup
+ is_linux && udev_cleanup
}
log_assert "Verify that ZFS volume property 'snapdev' works as expected."
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh
index 322a31e07d89..264ec131ad6b 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_volmode.ksh
@@ -44,19 +44,18 @@
# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev (Linux only)
#
# NOTE: changing volmode may need to remove minors, which could be open, so call
-# udev_wait() before we "zfs set volmode=<value>".
+# block_device_wait() before we "zfs set volmode=<value>".
verify_runnable "global"
function cleanup
{
- datasetexists $VOLFS && log_must_busy zfs destroy -r $VOLFS
- datasetexists $ZVOL && log_must_busy zfs destroy -r $ZVOL
- log_must zfs inherit volmode $TESTPOOL
- udev_wait
+ datasetexists $VOLFS && destroy_dataset $VOLFS -r
+ datasetexists $ZVOL && destroy_dataset $ZVOL -r
+ zfs inherit volmode $TESTPOOL
sysctl_inhibit_dev 0
sysctl_volmode 1
- udev_cleanup
+ is_linux && udev_cleanup
}
#
@@ -90,8 +89,8 @@ function test_io # dev
{
typeset dev=$1
- log_must dd if=/dev/zero of=$dev count=1
log_must dd if=$dev of=/dev/null count=1
+ log_must dd if=/dev/zero of=$dev count=1
}
log_assert "Verify that ZFS volume property 'volmode' works as intended"
@@ -99,14 +98,14 @@ log_onexit cleanup
VOLFS="$TESTPOOL/volfs"
ZVOL="$TESTPOOL/vol"
-ZDEV="${ZVOL_DEVDIR}/$ZVOL"
+ZDEV="$ZVOL_DEVDIR/$ZVOL"
SUBZVOL="$VOLFS/subvol"
-SUBZDEV="${ZVOL_DEVDIR}/$SUBZVOL"
+SUBZDEV="$ZVOL_DEVDIR/$SUBZVOL"
+# 0. Verify basic ZVOL functionality
log_must zfs create -o mountpoint=none $VOLFS
log_must zfs create -V $VOLSIZE -s $SUBZVOL
log_must zfs create -V $VOLSIZE -s $ZVOL
-udev_wait
blockdev_exists $ZDEV
blockdev_exists $SUBZDEV
test_io $ZDEV
@@ -123,62 +122,63 @@ done
log_must zfs set volmode=none $ZVOL
blockdev_missing $ZDEV
log_must_busy zfs destroy $ZVOL
+blockdev_missing $ZDEV
# 3. Verify "volmode=full" exposes a fully functional device
log_must zfs create -V $VOLSIZE -s $ZVOL
-udev_wait
+blockdev_exists $ZDEV
log_must zfs set volmode=full $ZVOL
blockdev_exists $ZDEV
test_io $ZDEV
log_must verify_partition $ZDEV
-udev_wait
# 3.1 Verify "volmode=geom" is an alias for "volmode=full"
log_must zfs set volmode=geom $ZVOL
blockdev_exists $ZDEV
if [[ "$(get_prop 'volmode' $ZVOL)" != "full" ]]; then
log_fail " Volmode value 'geom' is not an alias for 'full'"
fi
-udev_wait
log_must_busy zfs destroy $ZVOL
+blockdev_missing $ZDEV
# 4. Verify "volmode=dev" hides partition info on the device
log_must zfs create -V $VOLSIZE -s $ZVOL
-udev_wait
+blockdev_exists $ZDEV
log_must zfs set volmode=dev $ZVOL
blockdev_exists $ZDEV
test_io $ZDEV
log_mustnot verify_partition $ZDEV
-udev_wait
log_must_busy zfs destroy $ZVOL
+blockdev_missing $ZDEV
# 5. Verify "volmode=default" behaves accordingly to "volmode" module parameter
# 5.1 Verify sysctl "volmode=full"
sysctl_volmode 1
log_must zfs create -V $VOLSIZE -s $ZVOL
-udev_wait
+blockdev_exists $ZDEV
log_must zfs set volmode=default $ZVOL
blockdev_exists $ZDEV
log_must verify_partition $ZDEV
-udev_wait
log_must_busy zfs destroy $ZVOL
+blockdev_missing $ZDEV
# 5.2 Verify sysctl "volmode=dev"
sysctl_volmode 2
log_must zfs create -V $VOLSIZE -s $ZVOL
-udev_wait
+blockdev_exists $ZDEV
log_must zfs set volmode=default $ZVOL
blockdev_exists $ZDEV
log_mustnot verify_partition $ZDEV
-udev_wait
log_must_busy zfs destroy $ZVOL
+blockdev_missing $ZDEV
# 5.2 Verify sysctl "volmode=none"
sysctl_volmode 3
log_must zfs create -V $VOLSIZE -s $ZVOL
-udev_wait
+blockdev_missing $ZDEV
log_must zfs set volmode=default $ZVOL
blockdev_missing $ZDEV
# 6. Verify "volmode" property is inherited correctly
log_must zfs inherit volmode $ZVOL
+blockdev_missing $ZDEV
# 6.1 Check volmode=full case
log_must zfs set volmode=full $TESTPOOL
verify_inherited 'volmode' 'full' $ZVOL $TESTPOOL
@@ -198,9 +198,7 @@ verify_inherited 'volmode' 'default' $ZVOL $TESTPOOL
blockdev_exists $ZDEV
# 6.5 Check inheritance on multiple levels
log_must zfs inherit volmode $SUBZVOL
-udev_wait
log_must zfs set volmode=none $VOLFS
-udev_wait
log_must zfs set volmode=full $TESTPOOL
verify_inherited 'volmode' 'none' $SUBZVOL $VOLFS
blockdev_missing $SUBZDEV
@@ -215,6 +213,8 @@ blockdev_exists $ZDEV
blockdev_missing $SUBZDEV
log_must_busy zfs destroy $ZVOL
log_must_busy zfs destroy $SUBZVOL
+blockdev_missing $ZDEV
+blockdev_missing $SUBZDEV
# 8. Verify "volmode" behaves accordingly to zvol_inhibit_dev (Linux only)
if is_linux; then
@@ -226,6 +226,7 @@ if is_linux; then
log_must zfs set volmode=full $ZVOL
blockdev_missing $ZDEV
log_must_busy zfs destroy $ZVOL
+ blockdev_missing $ZDEV
# 7.1 Verify device nodes not are not created with "volmode=dev"
sysctl_volmode 2
log_must zfs create -V $VOLSIZE -s $ZVOL
@@ -233,6 +234,7 @@ if is_linux; then
log_must zfs set volmode=dev $ZVOL
blockdev_missing $ZDEV
log_must_busy zfs destroy $ZVOL
+ blockdev_missing $ZDEV
# 7.1 Verify device nodes not are not created with "volmode=none"
sysctl_volmode 3
log_must zfs create -V $VOLSIZE -s $ZVOL
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_zil.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_zil.ksh
index b8989f478727..a393606d0fa9 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_zil.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_zil.ksh
@@ -42,8 +42,8 @@ verify_runnable "global"
function cleanup
{
- datasetexists $ZVOL && log_must_busy zfs destroy $ZVOL
- udev_wait
+ datasetexists $ZVOL && destroy_dataset $ZVOL
+ block_device_wait
}
log_assert "Verify ZIL functionality on ZVOLs"
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/perf.shlib b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/perf.shlib
index 6f4fdc94348f..5a404df083e4 100644
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/perf.shlib
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/perf.shlib
@@ -21,7 +21,6 @@ export PERF_RUNTIME=${PERF_RUNTIME:-'180'}
export PERF_RANDSEED=${PERF_RANDSEED:-'1234'}
export PERF_COMPPERCENT=${PERF_COMPPERCENT:-'66'}
export PERF_COMPCHUNK=${PERF_COMPCHUNK:-'4096'}
-export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Default to JSON for fio output
export PERF_FIO_FORMAT=${PERF_FIO_FORMAT:-'json'}
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_reads.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_reads.ksh
index 5c8066d17549..70e273166161 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_reads.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_reads.ksh
@@ -59,6 +59,7 @@ export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
export PERF_NTHREADS=${PERF_NTHREADS:-'16 32'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Layout the files to be used by the read tests. Create as many files as the
# largest number of threads. An fio run with fewer threads will use a subset
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite.ksh
index 33d7d8c8d945..4dc1e3ddba9a 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite.ksh
@@ -59,6 +59,7 @@ export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
export PERF_NTHREADS=${PERF_NTHREADS:-'32 64'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
export PERF_IOSIZES='' # bssplit used instead
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Layout the files to be used by the readwrite tests. Create as many files
# as the largest number of threads. An fio run with fewer threads will use
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite_fixed.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite_fixed.ksh
index bb4014563f1f..cdf15c701277 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite_fixed.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_readwrite_fixed.ksh
@@ -49,6 +49,7 @@ export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
# Layout the files to be used by the readwrite tests. Create as many files
# as the largest number of threads. An fio run with fewer threads will use
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes.ksh
index 4b826835efbf..30db7564c2dc 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes.ksh
@@ -58,6 +58,7 @@ export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
export PERF_NTHREADS=${PERF_NTHREADS:-'32 128'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
# Set up the scripts and output files that will log performance data.
lun_list=$(pool_to_lun_list $PERFPOOL)
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh
index 522ee4526828..ff6d465bb722 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/random_writes_zil.ksh
@@ -44,9 +44,10 @@ recreate_perf_pool
export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
# Variables specific to this test for use by fio.
-export PERF_NTHREADS=${PERF_NTHREADS:-'1 4 16 64'}
+export PERF_NTHREADS=${PERF_NTHREADS:-'1 16 64'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0 1'}
export PERF_IOSIZES=${PERF_IOSIZES:-'8k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Until the performance tests over NFS can deal with multiple file systems,
# force the use of only one file system when testing over NFS.
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads.ksh
index 2bdfff736f4e..cc6d17245239 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads.ksh
@@ -59,6 +59,7 @@ export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
export PERF_NTHREADS=${PERF_NTHREADS:-'8 16'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
export PERF_IOSIZES=${PERF_IOSIZES:-'128k 1m'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Layout the files to be used by the read tests. Create as many files as the
# largest number of threads. An fio run with fewer threads will use a subset
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached.ksh
index 8127786361ba..d885d0b7f992 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached.ksh
@@ -48,7 +48,8 @@ export TOTAL_SIZE=$(($(get_max_arc_size) / 2))
# Variables specific to this test for use by fio.
export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
-export PERF_IOSIZES=${PERF_IOSIZES:-'128k 1m'}
+export PERF_IOSIZES=${PERF_IOSIZES:-'128k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Layout the files to be used by the read tests. Create as many files as the
# largest number of threads. An fio run with fewer threads will use a subset
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached_clone.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached_clone.ksh
index 8ce1273c2869..80081a098e8f 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached_clone.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_arc_cached_clone.ksh
@@ -54,7 +54,8 @@ export TOTAL_SIZE=$(($(get_max_arc_size) / 2))
# Variables specific to this test for use by fio.
export PERF_NTHREADS=${PERF_NTHREADS:-'64 128'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
-export PERF_IOSIZES=${PERF_IOSIZES:-'128k 1m'}
+export PERF_IOSIZES=${PERF_IOSIZES:-'128k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Layout the files to be used by the read tests. Create as many files as the
# largest number of threads. An fio run with fewer threads will use a subset
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_dbuf_cached.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_dbuf_cached.ksh
index adacdc29799c..0402b48a3e9c 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_dbuf_cached.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_reads_dbuf_cached.ksh
@@ -53,6 +53,7 @@ export TOTAL_SIZE=$(($(get_dbuf_cache_size) * 3 / 4))
export PERF_NTHREADS=${PERF_NTHREADS:-'64'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
export PERF_IOSIZES=${PERF_IOSIZES:-'64k'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'1'}
# Layout the files to be used by the read tests. Create as many files as the
# largest number of threads. An fio run with fewer threads will use a subset
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_writes.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_writes.ksh
index d32690a0542e..7850bc0375df 100755
--- a/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_writes.ksh
+++ b/sys/contrib/openzfs/tests/zfs-tests/tests/perf/regression/sequential_writes.ksh
@@ -57,7 +57,8 @@ export TOTAL_SIZE=$(($(get_prop avail $PERFPOOL) * 3 / 2))
# Variables specific to this test for use by fio.
export PERF_NTHREADS=${PERF_NTHREADS:-'16 32'}
export PERF_NTHREADS_PER_FS=${PERF_NTHREADS_PER_FS:-'0'}
-export PERF_IOSIZES=${PERF_IOSIZES:-'8k 128k 1m'}
+export PERF_IOSIZES=${PERF_IOSIZES:-'8k 1m'}
+export PERF_SYNC_TYPES=${PERF_SYNC_TYPES:-'0 1'}
# Set up the scripts and output files that will log performance data.
lun_list=$(pool_to_lun_list $PERFPOOL)
diff --git a/sys/modules/zfs/zfs_config.h b/sys/modules/zfs/zfs_config.h
index 82f6d415f966..8bbe141827db 100644
--- a/sys/modules/zfs/zfs_config.h
+++ b/sys/modules/zfs/zfs_config.h
@@ -154,6 +154,9 @@
/* blk_queue_secure_erase() is available */
/* #undef HAVE_BLK_QUEUE_SECURE_ERASE */
+/* blk_queue_update_readahead() exists */
+/* #undef HAVE_BLK_QUEUE_UPDATE_READAHEAD */
+
/* blk_queue_write_cache() exists */
/* #undef HAVE_BLK_QUEUE_WRITE_CACHE */
@@ -212,6 +215,9 @@
/* disk_*_io_acct() available */
/* #undef HAVE_DISK_IO_ACCT */
+/* disk_update_readahead() exists */
+/* #undef HAVE_DISK_UPDATE_READAHEAD */
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
@@ -272,6 +278,12 @@
/* Define if the GNU gettext() function is already present or preinstalled. */
/* #undef HAVE_GETTEXT */
+/* iops->get_acl() exists */
+/* #undef HAVE_GET_ACL */
+
+/* iops->get_acl() takes rcu */
+/* #undef HAVE_GET_ACL_RCU */
+
/* iops->get_link() cookie */
/* #undef HAVE_GET_LINK_COOKIE */
@@ -589,6 +601,9 @@
/* STACK_FRAME_NON_STANDARD is defined */
/* #undef HAVE_STACK_FRAME_NON_STANDARD */
+/* standalone <linux/stdarg.h> exists */
+/* #undef HAVE_STANDALONE_LINUX_STDARG */
+
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
@@ -809,7 +824,7 @@
/* #undef ZFS_IS_GPL_COMPATIBLE */
/* Define the project alias string. */
-#define ZFS_META_ALIAS "zfs-2.1.99-FreeBSD_g4a1195ca5"
+#define ZFS_META_ALIAS "zfs-2.1.99-FreeBSD_gec64fdb93"
/* Define the project author. */
#define ZFS_META_AUTHOR "OpenZFS"
@@ -818,7 +833,7 @@
/* #undef ZFS_META_DATA */
/* Define the maximum compatible kernel version. */
-#define ZFS_META_KVER_MAX "5.13"
+#define ZFS_META_KVER_MAX "5.14"
/* Define the minimum compatible kernel version. */
#define ZFS_META_KVER_MIN "3.10"
@@ -839,7 +854,7 @@
#define ZFS_META_NAME "zfs"
/* Define the project release. */
-#define ZFS_META_RELEASE "FreeBSD_g4a1195ca5"
+#define ZFS_META_RELEASE "FreeBSD_gec64fdb93"
/* Define the project version. */
#define ZFS_META_VERSION "2.1.99"
diff --git a/sys/modules/zfs/zfs_gitrev.h b/sys/modules/zfs/zfs_gitrev.h
index 1af08380dca4..00aa4282082e 100644
--- a/sys/modules/zfs/zfs_gitrev.h
+++ b/sys/modules/zfs/zfs_gitrev.h
@@ -2,4 +2,4 @@
* $FreeBSD$
*/
-#define ZFS_META_GITREV "zfs-2.1.99-453-g4a1195ca50"
+#define ZFS_META_GITREV "zfs-2.1.99-485-gec64fdb93"