aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys
diff options
context:
space:
mode:
authorMatt Macy <mmacy@FreeBSD.org>2020-08-25 02:21:27 +0000
committerMatt Macy <mmacy@FreeBSD.org>2020-08-25 02:21:27 +0000
commit9e5787d2284e187abb5b654d924394a65772e004 (patch)
tree2ebf833af6b1953d4a683e2da830fe87bf3435e1 /sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys
parent22df1ffd812f0395cdb7c0b1edae1f67b991562a (diff)
downloadsrc-9e5787d2284e187abb5b654d924394a65772e004.tar.gz
src-9e5787d2284e187abb5b654d924394a65772e004.zip
Merge OpenZFS support in to HEAD.
The primary benefit is maintaining a completely shared code base with the community allowing FreeBSD to receive new features sooner and with less effort. I would advise against doing 'zpool upgrade' or creating indispensable pools using new features until this change has had a month+ to soak. Work on merging FreeBSD support in to what was at the time "ZFS on Linux" began in August 2018. I first publicly proposed transitioning FreeBSD to (new) OpenZFS on December 18th, 2018. FreeBSD support in OpenZFS was finally completed in December 2019. A CFT for downstreaming OpenZFS support in to FreeBSD was first issued on July 8th. All issues that were reported have been addressed or, for a couple of less critical matters there are pull requests in progress with OpenZFS. iXsystems has tested and dogfooded extensively internally. The TrueNAS 12 release is based on OpenZFS with some additional features that have not yet made it upstream. Improvements include: project quotas, encrypted datasets, allocation classes, vectorized raidz, vectorized checksums, various command line improvements, zstd compression. Thanks to those who have helped along the way: Ryan Moeller, Allan Jude, Zack Welch, and many others. Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D25872
Notes
Notes: svn path=/head/; revision=364746
Diffstat (limited to 'sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/abd.h154
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/aggsum.h58
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h290
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/blkptr.h39
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bplist.h57
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h95
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h65
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bqueue.h54
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/cityhash.h41
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h417
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h248
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h1028
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h315
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h221
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h93
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h69
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h152
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_zfetch.h76
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h599
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_bookmark.h52
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h457
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deadlist.h89
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h81
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h68
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h209
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h191
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h115
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h188
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h127
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h57
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h127
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h501
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/mmp.h74
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h107
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/range_tree.h124
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h125
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h112
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa.h170
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa_impl.h291
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h969
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_boot.h48
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_checkpoint.h44
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h435
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h230
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_reftree.h57
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/trim_map.h51
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h136
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg_impl.h125
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock.h50
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock_impl.h145
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/unique.h57
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h196
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_disk.h67
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_file.h49
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h571
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_births.h80
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_mapping.h141
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_initialize.h46
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_raidz.h50
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_removal.h96
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h514
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h242
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h248
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp.h185
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_global.h35
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_iter.h41
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_prop.h34
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h73
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h248
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h146
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h65
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h99
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_dir.h74
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_fuid.h132
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h466
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_onexit.h66
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_rlock.h90
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_sa.h142
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_stat.h55
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h192
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h374
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h464
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h229
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h675
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h119
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_compress.h128
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h256
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_priority.h43
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zrlock.h63
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zthr.h39
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zvol.h85
91 files changed, 0 insertions, 16601 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/abd.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/abd.h
deleted file mode 100644
index 9689f931fb29..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/abd.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- */
-
-/*
- * Copyright (c) 2014 by Chunwei Chen. All rights reserved.
- * Copyright (c) 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _ABD_H
-#define _ABD_H
-
-#include <sys/isa_defs.h>
-#ifdef illumos
-#include <sys/int_types.h>
-#else
-#include <sys/stdint.h>
-#endif
-#include <sys/debug.h>
-#include <sys/refcount.h>
-#ifdef _KERNEL
-#include <sys/uio.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum abd_flags {
- ABD_FLAG_LINEAR = 1 << 0, /* is buffer linear (or scattered)? */
- ABD_FLAG_OWNER = 1 << 1, /* does it own its data buffers? */
- ABD_FLAG_META = 1 << 2 /* does this represent FS metadata? */
-} abd_flags_t;
-
-typedef struct abd {
- abd_flags_t abd_flags;
- uint_t abd_size; /* excludes scattered abd_offset */
- struct abd *abd_parent;
- zfs_refcount_t abd_children;
- union {
- struct abd_scatter {
- uint_t abd_offset;
- uint_t abd_chunk_size;
- void *abd_chunks[];
- } abd_scatter;
- struct abd_linear {
- void *abd_buf;
- } abd_linear;
- } abd_u;
-} abd_t;
-
-typedef int abd_iter_func_t(void *, size_t, void *);
-typedef int abd_iter_func2_t(void *, void *, size_t, void *);
-
-extern boolean_t zfs_abd_scatter_enabled;
-
-inline boolean_t
-abd_is_linear(abd_t *abd)
-{
- return ((abd->abd_flags & ABD_FLAG_LINEAR) != 0 ? B_TRUE : B_FALSE);
-}
-
-/*
- * Allocations and deallocations
- */
-
-abd_t *abd_alloc(size_t, boolean_t);
-abd_t *abd_alloc_linear(size_t, boolean_t);
-abd_t *abd_alloc_for_io(size_t, boolean_t);
-abd_t *abd_alloc_sametype(abd_t *, size_t);
-void abd_free(abd_t *);
-abd_t *abd_get_offset(abd_t *, size_t);
-abd_t *abd_get_from_buf(void *, size_t);
-void abd_put(abd_t *);
-
-/*
- * Conversion to and from a normal buffer
- */
-
-void *abd_to_buf(abd_t *);
-void *abd_borrow_buf(abd_t *, size_t);
-void *abd_borrow_buf_copy(abd_t *, size_t);
-void abd_return_buf(abd_t *, void *, size_t);
-void abd_return_buf_copy(abd_t *, void *, size_t);
-void abd_take_ownership_of_buf(abd_t *, boolean_t);
-void abd_release_ownership_of_buf(abd_t *);
-
-/*
- * ABD operations
- */
-
-int abd_iterate_func(abd_t *, size_t, size_t, abd_iter_func_t *, void *);
-int abd_iterate_func2(abd_t *, abd_t *, size_t, size_t, size_t,
- abd_iter_func2_t *, void *);
-void abd_copy_off(abd_t *, abd_t *, size_t, size_t, size_t);
-void abd_copy_from_buf_off(abd_t *, const void *, size_t, size_t);
-void abd_copy_to_buf_off(void *, abd_t *, size_t, size_t);
-int abd_cmp(abd_t *, abd_t *, size_t);
-int abd_cmp_buf_off(abd_t *, const void *, size_t, size_t);
-void abd_zero_off(abd_t *, size_t, size_t);
-
-/*
- * Wrappers for calls with offsets of 0
- */
-
-inline void
-abd_copy(abd_t *dabd, abd_t *sabd, size_t size)
-{
- abd_copy_off(dabd, sabd, 0, 0, size);
-}
-
-inline void
-abd_copy_from_buf(abd_t *abd, const void *buf, size_t size)
-{
- abd_copy_from_buf_off(abd, buf, 0, size);
-}
-
-inline void
-abd_copy_to_buf(void* buf, abd_t *abd, size_t size)
-{
- abd_copy_to_buf_off(buf, abd, 0, size);
-}
-
-inline int
-abd_cmp_buf(abd_t *abd, const void *buf, size_t size)
-{
- return (abd_cmp_buf_off(abd, buf, 0, size));
-}
-
-inline void
-abd_zero(abd_t *abd, size_t size)
-{
- abd_zero_off(abd, 0, size);
-}
-
-/*
- * Module lifecycle
- */
-
-void abd_init(void);
-void abd_fini(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ABD_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/aggsum.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/aggsum.h
deleted file mode 100644
index 2ae0835e55a2..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/aggsum.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_AGGSUM_H
-#define _SYS_AGGSUM_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct aggsum_bucket {
- kmutex_t asc_lock;
- int64_t asc_delta;
- uint64_t asc_borrowed;
- uint64_t asc_pad[2]; /* pad out to cache line (64 bytes) */
-} aggsum_bucket_t __aligned(CACHE_LINE_SIZE);
-
-/*
- * Fan out over FANOUT cpus.
- */
-typedef struct aggsum {
- kmutex_t as_lock;
- int64_t as_lower_bound;
- int64_t as_upper_bound;
- uint_t as_numbuckets;
- aggsum_bucket_t *as_buckets;
-} aggsum_t;
-
-void aggsum_init(aggsum_t *, uint64_t);
-void aggsum_fini(aggsum_t *);
-int64_t aggsum_lower_bound(aggsum_t *);
-int64_t aggsum_upper_bound(aggsum_t *);
-int aggsum_compare(aggsum_t *, uint64_t);
-uint64_t aggsum_value(aggsum_t *);
-void aggsum_add(aggsum_t *, int64_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_AGGSUM_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h
deleted file mode 100644
index 95513f0cba21..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h
+++ /dev/null
@@ -1,290 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
- */
-
-#ifndef _SYS_ARC_H
-#define _SYS_ARC_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/zio.h>
-#include <sys/dmu.h>
-#include <sys/spa.h>
-
-/*
- * Used by arc_flush() to inform arc_evict_state() that it should evict
- * all available buffers from the arc state being passed in.
- */
-#define ARC_EVICT_ALL -1ULL
-
-#define HDR_SET_LSIZE(hdr, x) do { \
- ASSERT(IS_P2ALIGNED(x, 1U << SPA_MINBLOCKSHIFT)); \
- (hdr)->b_lsize = ((x) >> SPA_MINBLOCKSHIFT); \
-_NOTE(CONSTCOND) } while (0)
-
-#define HDR_SET_PSIZE(hdr, x) do { \
- ASSERT(IS_P2ALIGNED((x), 1U << SPA_MINBLOCKSHIFT)); \
- (hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \
-_NOTE(CONSTCOND) } while (0)
-
-#define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT)
-#define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT)
-
-typedef struct arc_buf_hdr arc_buf_hdr_t;
-typedef struct arc_buf arc_buf_t;
-typedef struct arc_prune arc_prune_t;
-
-/*
- * Because the ARC can store encrypted data, errors (not due to bugs) may arise
- * while transforming data into its desired format - specifically, when
- * decrypting, the key may not be present, or the HMAC may not be correct
- * which signifies deliberate tampering with the on-disk state
- * (assuming that the checksum was correct). If any error occurs, the "buf"
- * parameter will be NULL.
- */
-typedef void arc_read_done_func_t(zio_t *zio, const zbookmark_phys_t *zb,
- const blkptr_t *bp, arc_buf_t *buf, void *priv);
-typedef void arc_write_done_func_t(zio_t *zio, arc_buf_t *buf, void *priv);
-typedef void arc_prune_func_t(int64_t bytes, void *priv);
-
-/* Shared module parameters */
-extern uint64_t zfs_arc_average_blocksize;
-
-/* generic arc_done_func_t's which you can use */
-arc_read_done_func_t arc_bcopy_func;
-arc_read_done_func_t arc_getbuf_func;
-
-/* generic arc_prune_func_t wrapper for callbacks */
-struct arc_prune {
- arc_prune_func_t *p_pfunc;
- void *p_private;
- uint64_t p_adjust;
- list_node_t p_node;
- zfs_refcount_t p_refcnt;
-};
-
-typedef enum arc_strategy {
- ARC_STRATEGY_META_ONLY = 0, /* Evict only meta data buffers */
- ARC_STRATEGY_META_BALANCED = 1, /* Evict data buffers if needed */
-} arc_strategy_t;
-
-typedef enum arc_flags
-{
- /*
- * Public flags that can be passed into the ARC by external consumers.
- */
- ARC_FLAG_WAIT = 1 << 0, /* perform sync I/O */
- ARC_FLAG_NOWAIT = 1 << 1, /* perform async I/O */
- ARC_FLAG_PREFETCH = 1 << 2, /* I/O is a prefetch */
- ARC_FLAG_CACHED = 1 << 3, /* I/O was in cache */
- ARC_FLAG_L2CACHE = 1 << 4, /* cache in L2ARC */
- ARC_FLAG_PREDICTIVE_PREFETCH = 1 << 5, /* I/O from zfetch */
- ARC_FLAG_PRESCIENT_PREFETCH = 1 << 6, /* long min lifespan */
-
- /*
- * Private ARC flags. These flags are private ARC only flags that
- * will show up in b_flags in the arc_hdr_buf_t. These flags should
- * only be set by ARC code.
- */
- ARC_FLAG_IN_HASH_TABLE = 1 << 7, /* buffer is hashed */
- ARC_FLAG_IO_IN_PROGRESS = 1 << 8, /* I/O in progress */
- ARC_FLAG_IO_ERROR = 1 << 9, /* I/O failed for buf */
- ARC_FLAG_INDIRECT = 1 << 10, /* indirect block */
- /* Indicates that block was read with ASYNC priority. */
- ARC_FLAG_PRIO_ASYNC_READ = 1 << 11,
- ARC_FLAG_L2_WRITING = 1 << 12, /* write in progress */
- ARC_FLAG_L2_EVICTED = 1 << 13, /* evicted during I/O */
- ARC_FLAG_L2_WRITE_HEAD = 1 << 14, /* head of write list */
- /* indicates that the buffer contains metadata (otherwise, data) */
- ARC_FLAG_BUFC_METADATA = 1 << 15,
-
- /* Flags specifying whether optional hdr struct fields are defined */
- ARC_FLAG_HAS_L1HDR = 1 << 16,
- ARC_FLAG_HAS_L2HDR = 1 << 17,
-
- /*
- * Indicates the arc_buf_hdr_t's b_pdata matches the on-disk data.
- * This allows the l2arc to use the blkptr's checksum to verify
- * the data without having to store the checksum in the hdr.
- */
- ARC_FLAG_COMPRESSED_ARC = 1 << 18,
- ARC_FLAG_SHARED_DATA = 1 << 19,
-
- /*
- * The arc buffer's compression mode is stored in the top 7 bits of the
- * flags field, so these dummy flags are included so that MDB can
- * interpret the enum properly.
- */
- ARC_FLAG_COMPRESS_0 = 1 << 24,
- ARC_FLAG_COMPRESS_1 = 1 << 25,
- ARC_FLAG_COMPRESS_2 = 1 << 26,
- ARC_FLAG_COMPRESS_3 = 1 << 27,
- ARC_FLAG_COMPRESS_4 = 1 << 28,
- ARC_FLAG_COMPRESS_5 = 1 << 29,
- ARC_FLAG_COMPRESS_6 = 1 << 30
-
-} arc_flags_t;
-
-typedef enum arc_buf_flags {
- ARC_BUF_FLAG_SHARED = 1 << 0,
- ARC_BUF_FLAG_COMPRESSED = 1 << 1
-} arc_buf_flags_t;
-
-struct arc_buf {
- arc_buf_hdr_t *b_hdr;
- arc_buf_t *b_next;
- kmutex_t b_evict_lock;
- void *b_data;
- arc_buf_flags_t b_flags;
-};
-
-typedef enum arc_buf_contents {
- ARC_BUFC_INVALID, /* invalid type */
- ARC_BUFC_DATA, /* buffer contains data */
- ARC_BUFC_METADATA, /* buffer contains metadata */
- ARC_BUFC_NUMTYPES
-} arc_buf_contents_t;
-
-/*
- * The following breakdows of arc_size exist for kstat only.
- */
-typedef enum arc_space_type {
- ARC_SPACE_DATA,
- ARC_SPACE_META,
- ARC_SPACE_HDRS,
- ARC_SPACE_L2HDRS,
- ARC_SPACE_DBUF,
- ARC_SPACE_DNODE,
- ARC_SPACE_BONUS,
- ARC_SPACE_NUMTYPES
-} arc_space_type_t;
-
-typedef enum arc_state_type {
- ARC_STATE_ANON,
- ARC_STATE_MRU,
- ARC_STATE_MRU_GHOST,
- ARC_STATE_MFU,
- ARC_STATE_MFU_GHOST,
- ARC_STATE_L2C_ONLY,
- ARC_STATE_NUMTYPES
-} arc_state_type_t;
-
-typedef struct arc_buf_info {
- arc_state_type_t abi_state_type;
- arc_buf_contents_t abi_state_contents;
- uint64_t abi_state_index;
- uint32_t abi_flags;
- uint32_t abi_bufcnt;
- uint64_t abi_size;
- uint64_t abi_spa;
- uint64_t abi_access;
- uint32_t abi_mru_hits;
- uint32_t abi_mru_ghost_hits;
- uint32_t abi_mfu_hits;
- uint32_t abi_mfu_ghost_hits;
- uint32_t abi_l2arc_hits;
- uint32_t abi_holds;
- uint64_t abi_l2arc_dattr;
- uint64_t abi_l2arc_asize;
- enum zio_compress abi_l2arc_compress;
-} arc_buf_info_t;
-
-void arc_space_consume(uint64_t space, arc_space_type_t type);
-void arc_space_return(uint64_t space, arc_space_type_t type);
-boolean_t arc_is_metadata(arc_buf_t *buf);
-enum zio_compress arc_get_compression(arc_buf_t *buf);
-int arc_decompress(arc_buf_t *buf);
-arc_buf_t *arc_alloc_buf(spa_t *spa, void *tag, arc_buf_contents_t type,
- int32_t size);
-arc_buf_t *arc_alloc_compressed_buf(spa_t *spa, void *tag,
- uint64_t psize, uint64_t lsize, enum zio_compress compression_type);
-arc_buf_t *arc_loan_buf(spa_t *spa, boolean_t is_metadata, int size);
-arc_buf_t *arc_loan_compressed_buf(spa_t *spa, uint64_t psize, uint64_t lsize,
- enum zio_compress compression_type);
-void arc_return_buf(arc_buf_t *buf, void *tag);
-void arc_loan_inuse_buf(arc_buf_t *buf, void *tag);
-void arc_buf_destroy(arc_buf_t *buf, void *tag);
-void arc_buf_info(arc_buf_t *buf, arc_buf_info_t *abi, int state_index);
-int arc_buf_size(arc_buf_t *buf);
-int arc_buf_lsize(arc_buf_t *buf);
-void arc_buf_access(arc_buf_t *buf);
-void arc_release(arc_buf_t *buf, void *tag);
-int arc_released(arc_buf_t *buf);
-void arc_buf_freeze(arc_buf_t *buf);
-void arc_buf_thaw(arc_buf_t *buf);
-#ifdef ZFS_DEBUG
-int arc_referenced(arc_buf_t *buf);
-#endif
-
-int arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp,
- arc_read_done_func_t *done, void *priv, zio_priority_t priority,
- int flags, arc_flags_t *arc_flags, const zbookmark_phys_t *zb);
-zio_t *arc_write(zio_t *pio, spa_t *spa, uint64_t txg,
- blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc, const zio_prop_t *zp,
- arc_write_done_func_t *ready, arc_write_done_func_t *child_ready,
- arc_write_done_func_t *physdone, arc_write_done_func_t *done,
- void *priv, zio_priority_t priority, int zio_flags,
- const zbookmark_phys_t *zb);
-
-arc_prune_t *arc_add_prune_callback(arc_prune_func_t *func, void *priv);
-void arc_remove_prune_callback(arc_prune_t *p);
-void arc_freed(spa_t *spa, const blkptr_t *bp);
-
-void arc_flush(spa_t *spa, boolean_t retry);
-void arc_tempreserve_clear(uint64_t reserve);
-int arc_tempreserve_space(spa_t *spa, uint64_t reserve, uint64_t txg);
-
-uint64_t arc_max_bytes(void);
-void arc_init(void);
-void arc_fini(void);
-
-/*
- * Level 2 ARC
- */
-
-void l2arc_add_vdev(spa_t *spa, vdev_t *vd);
-void l2arc_remove_vdev(vdev_t *vd);
-boolean_t l2arc_vdev_present(vdev_t *vd);
-void l2arc_init(void);
-void l2arc_fini(void);
-void l2arc_start(void);
-void l2arc_stop(void);
-
-#ifdef illumos
-#ifndef _KERNEL
-extern boolean_t arc_watch;
-extern int arc_procfd;
-#endif
-#endif /* illumos */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ARC_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/blkptr.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/blkptr.h
deleted file mode 100644
index 77b1b827ac37..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/blkptr.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2013 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_BLKPTR_H
-#define _SYS_BLKPTR_H
-
-#include <sys/spa.h>
-#include <sys/zio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void encode_embedded_bp_compressed(blkptr_t *, void *,
- enum zio_compress, int, int);
-void decode_embedded_bp_compressed(const blkptr_t *, void *);
-int decode_embedded_bp(const blkptr_t *, void *, int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_BLKPTR_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bplist.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bplist.h
deleted file mode 100644
index 471be9047ec2..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bplist.h
+++ /dev/null
@@ -1,57 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _SYS_BPLIST_H
-#define _SYS_BPLIST_H
-
-#include <sys/zfs_context.h>
-#include <sys/spa.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct bplist_entry {
- blkptr_t bpe_blk;
- list_node_t bpe_node;
-} bplist_entry_t;
-
-typedef struct bplist {
- kmutex_t bpl_lock;
- list_t bpl_list;
-} bplist_t;
-
-typedef int bplist_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx);
-
-void bplist_create(bplist_t *bpl);
-void bplist_destroy(bplist_t *bpl);
-void bplist_append(bplist_t *bpl, const blkptr_t *bp);
-void bplist_iterate(bplist_t *bpl, bplist_itor_t *func,
- void *arg, dmu_tx_t *tx);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_BPLIST_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h
deleted file mode 100644
index d425e239f6a6..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bpobj.h
+++ /dev/null
@@ -1,95 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_BPOBJ_H
-#define _SYS_BPOBJ_H
-
-#include <sys/dmu.h>
-#include <sys/spa.h>
-#include <sys/txg.h>
-#include <sys/zio.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct bpobj_phys {
- /*
- * This is the bonus buffer for the dead lists. The object's
- * contents is an array of bpo_entries blkptr_t's, representing
- * a total of bpo_bytes physical space.
- */
- uint64_t bpo_num_blkptrs;
- uint64_t bpo_bytes;
- uint64_t bpo_comp;
- uint64_t bpo_uncomp;
- uint64_t bpo_subobjs;
- uint64_t bpo_num_subobjs;
-} bpobj_phys_t;
-
-#define BPOBJ_SIZE_V0 (2 * sizeof (uint64_t))
-#define BPOBJ_SIZE_V1 (4 * sizeof (uint64_t))
-
-typedef struct bpobj {
- kmutex_t bpo_lock;
- objset_t *bpo_os;
- uint64_t bpo_object;
- int bpo_epb;
- uint8_t bpo_havecomp;
- uint8_t bpo_havesubobj;
- bpobj_phys_t *bpo_phys;
- dmu_buf_t *bpo_dbuf;
- dmu_buf_t *bpo_cached_dbuf;
-} bpobj_t;
-
-typedef int bpobj_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx);
-
-uint64_t bpobj_alloc(objset_t *mos, int blocksize, dmu_tx_t *tx);
-uint64_t bpobj_alloc_empty(objset_t *os, int blocksize, dmu_tx_t *tx);
-void bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx);
-void bpobj_decr_empty(objset_t *os, dmu_tx_t *tx);
-
-int bpobj_open(bpobj_t *bpo, objset_t *mos, uint64_t object);
-void bpobj_close(bpobj_t *bpo);
-boolean_t bpobj_is_open(const bpobj_t *bpo);
-
-int bpobj_iterate(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx);
-int bpobj_iterate_nofree(bpobj_t *bpo, bpobj_itor_t func, void *, dmu_tx_t *);
-
-void bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx);
-void bpobj_enqueue(bpobj_t *bpo, const blkptr_t *bp, dmu_tx_t *tx);
-
-int bpobj_space(bpobj_t *bpo,
- uint64_t *usedp, uint64_t *compp, uint64_t *uncompp);
-int bpobj_space_range(bpobj_t *bpo, uint64_t mintxg, uint64_t maxtxg,
- uint64_t *usedp, uint64_t *compp, uint64_t *uncompp);
-boolean_t bpobj_is_empty(bpobj_t *bpo);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_BPOBJ_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h
deleted file mode 100644
index 327c128bf493..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bptree.h
+++ /dev/null
@@ -1,65 +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 (c) 2012, 2014 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_BPTREE_H
-#define _SYS_BPTREE_H
-
-#include <sys/spa.h>
-#include <sys/zio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct bptree_phys {
- uint64_t bt_begin;
- uint64_t bt_end;
- uint64_t bt_bytes;
- uint64_t bt_comp;
- uint64_t bt_uncomp;
-} bptree_phys_t;
-
-typedef struct bptree_entry_phys {
- blkptr_t be_bp;
- uint64_t be_birth_txg; /* only delete blocks born after this txg */
- zbookmark_phys_t be_zb; /* holds traversal resume point if needed */
-} bptree_entry_phys_t;
-
-typedef int bptree_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx);
-
-uint64_t bptree_alloc(objset_t *os, dmu_tx_t *tx);
-int bptree_free(objset_t *os, uint64_t obj, dmu_tx_t *tx);
-boolean_t bptree_is_empty(objset_t *os, uint64_t obj);
-
-void bptree_add(objset_t *os, uint64_t obj, blkptr_t *bp, uint64_t birth_txg,
- uint64_t bytes, uint64_t comp, uint64_t uncomp, dmu_tx_t *tx);
-
-int bptree_iterate(objset_t *os, uint64_t obj, boolean_t free,
- bptree_itor_t func, void *arg, dmu_tx_t *tx);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_BPTREE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bqueue.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bqueue.h
deleted file mode 100644
index 63722df1bbf3..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bqueue.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2014 by Delphix. All rights reserved.
- */
-
-#ifndef _BQUEUE_H
-#define _BQUEUE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/zfs_context.h>
-
-typedef struct bqueue {
- list_t bq_list;
- kmutex_t bq_lock;
- kcondvar_t bq_add_cv;
- kcondvar_t bq_pop_cv;
- uint64_t bq_size;
- uint64_t bq_maxsize;
- size_t bq_node_offset;
-} bqueue_t;
-
-typedef struct bqueue_node {
- list_node_t bqn_node;
- uint64_t bqn_size;
-} bqueue_node_t;
-
-
-int bqueue_init(bqueue_t *, uint64_t, size_t);
-void bqueue_destroy(bqueue_t *);
-void bqueue_enqueue(bqueue_t *, void *, uint64_t);
-void *bqueue_dequeue(bqueue_t *);
-boolean_t bqueue_empty(bqueue_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _BQUEUE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/cityhash.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/cityhash.h
deleted file mode 100644
index 33c3b7bc2532..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/cityhash.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2011 Google, Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-
-/*
- * Copyright (c) 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_CITYHASH_H
-#define _SYS_CITYHASH_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-uint64_t cityhash4(uint64_t, uint64_t, uint64_t, uint64_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_CITYHASH_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h
deleted file mode 100644
index 4b1a9e11b165..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h
+++ /dev/null
@@ -1,417 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- */
-
-#ifndef _SYS_DBUF_H
-#define _SYS_DBUF_H
-
-#include <sys/dmu.h>
-#include <sys/spa.h>
-#include <sys/txg.h>
-#include <sys/zio.h>
-#include <sys/arc.h>
-#include <sys/zfs_context.h>
-#include <sys/refcount.h>
-#include <sys/zrlock.h>
-#include <sys/multilist.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define IN_DMU_SYNC 2
-
-/*
- * define flags for dbuf_read
- */
-
-#define DB_RF_MUST_SUCCEED (1 << 0)
-#define DB_RF_CANFAIL (1 << 1)
-#define DB_RF_HAVESTRUCT (1 << 2)
-#define DB_RF_NOPREFETCH (1 << 3)
-#define DB_RF_NEVERWAIT (1 << 4)
-#define DB_RF_CACHED (1 << 5)
-
-/*
- * The simplified state transition diagram for dbufs looks like:
- *
- * +----> READ ----+
- * | |
- * | V
- * (alloc)-->UNCACHED CACHED-->EVICTING-->(free)
- * | ^ ^
- * | | |
- * +----> FILL ----+ |
- * | |
- * | |
- * +--------> NOFILL -------+
- *
- * DB_SEARCH is an invalid state for a dbuf. It is used by dbuf_free_range
- * to find all dbufs in a range of a dnode and must be less than any other
- * dbuf_states_t (see comment on dn_dbufs in dnode.h).
- */
-typedef enum dbuf_states {
- DB_SEARCH = -1,
- DB_UNCACHED,
- DB_FILL,
- DB_NOFILL,
- DB_READ,
- DB_CACHED,
- DB_EVICTING
-} dbuf_states_t;
-
-typedef enum dbuf_cached_state {
- DB_NO_CACHE = -1,
- DB_DBUF_CACHE,
- DB_DBUF_METADATA_CACHE,
- DB_CACHE_MAX
-} dbuf_cached_state_t;
-
-struct dnode;
-struct dmu_tx;
-
-/*
- * level = 0 means the user data
- * level = 1 means the single indirect block
- * etc.
- */
-
-struct dmu_buf_impl;
-
-typedef enum override_states {
- DR_NOT_OVERRIDDEN,
- DR_IN_DMU_SYNC,
- DR_OVERRIDDEN
-} override_states_t;
-
-typedef struct dbuf_dirty_record {
- /* link on our parents dirty list */
- list_node_t dr_dirty_node;
-
- /* transaction group this data will sync in */
- uint64_t dr_txg;
-
- /* zio of outstanding write IO */
- zio_t *dr_zio;
-
- /* pointer back to our dbuf */
- struct dmu_buf_impl *dr_dbuf;
-
- /* pointer to next dirty record */
- struct dbuf_dirty_record *dr_next;
-
- /* pointer to parent dirty record */
- struct dbuf_dirty_record *dr_parent;
-
- /* How much space was changed to dsl_pool_dirty_space() for this? */
- unsigned int dr_accounted;
-
- /* A copy of the bp that points to us */
- blkptr_t dr_bp_copy;
-
- union dirty_types {
- struct dirty_indirect {
-
- /* protect access to list */
- kmutex_t dr_mtx;
-
- /* Our list of dirty children */
- list_t dr_children;
- } di;
- struct dirty_leaf {
-
- /*
- * dr_data is set when we dirty the buffer
- * so that we can retain the pointer even if it
- * gets COW'd in a subsequent transaction group.
- */
- arc_buf_t *dr_data;
- blkptr_t dr_overridden_by;
- override_states_t dr_override_state;
- uint8_t dr_copies;
- boolean_t dr_nopwrite;
- } dl;
- } dt;
-} dbuf_dirty_record_t;
-
-typedef struct dmu_buf_impl {
- /*
- * The following members are immutable, with the exception of
- * db.db_data, which is protected by db_mtx.
- */
-
- /* the publicly visible structure */
- dmu_buf_t db;
-
- /* the objset we belong to */
- struct objset *db_objset;
-
- /*
- * handle to safely access the dnode we belong to (NULL when evicted)
- */
- struct dnode_handle *db_dnode_handle;
-
- /*
- * our parent buffer; if the dnode points to us directly,
- * db_parent == db_dnode_handle->dnh_dnode->dn_dbuf
- * only accessed by sync thread ???
- * (NULL when evicted)
- * May change from NULL to non-NULL under the protection of db_mtx
- * (see dbuf_check_blkptr())
- */
- struct dmu_buf_impl *db_parent;
-
- /*
- * link for hash table of all dmu_buf_impl_t's
- */
- struct dmu_buf_impl *db_hash_next;
-
- /*
- * Our link on the owner dnodes's dn_dbufs list.
- * Protected by its dn_dbufs_mtx. Should be on the same cache line
- * as db_level and db_blkid for the best avl_add() performance.
- */
- avl_node_t db_link;
-
- /* our block number */
- uint64_t db_blkid;
-
- /*
- * Pointer to the blkptr_t which points to us. May be NULL if we
- * don't have one yet. (NULL when evicted)
- */
- blkptr_t *db_blkptr;
-
- /*
- * Our indirection level. Data buffers have db_level==0.
- * Indirect buffers which point to data buffers have
- * db_level==1. etc. Buffers which contain dnodes have
- * db_level==0, since the dnodes are stored in a file.
- */
- uint8_t db_level;
-
- /* db_mtx protects the members below */
- kmutex_t db_mtx;
-
- /*
- * Current state of the buffer
- */
- dbuf_states_t db_state;
-
- /*
- * Refcount accessed by dmu_buf_{hold,rele}.
- * If nonzero, the buffer can't be destroyed.
- * Protected by db_mtx.
- */
- zfs_refcount_t db_holds;
-
- /* buffer holding our data */
- arc_buf_t *db_buf;
-
- kcondvar_t db_changed;
- dbuf_dirty_record_t *db_data_pending;
-
- /* pointer to most recent dirty record for this buffer */
- dbuf_dirty_record_t *db_last_dirty;
-
- /* Link in dbuf_cache or dbuf_metadata_cache */
- multilist_node_t db_cache_link;
-
- /* Tells us which dbuf cache this dbuf is in, if any */
- dbuf_cached_state_t db_caching_status;
-
- /* Data which is unique to data (leaf) blocks: */
-
- /* User callback information. */
- dmu_buf_user_t *db_user;
-
- /*
- * Evict user data as soon as the dirty and reference
- * counts are equal.
- */
- uint8_t db_user_immediate_evict;
-
- /*
- * This block was freed while a read or write was
- * active.
- */
- uint8_t db_freed_in_flight;
-
- /*
- * dnode_evict_dbufs() or dnode_evict_bonus() tried to
- * evict this dbuf, but couldn't due to outstanding
- * references. Evict once the refcount drops to 0.
- */
- uint8_t db_pending_evict;
-
- uint8_t db_dirtycnt;
-} dmu_buf_impl_t;
-
-/* Note: the dbuf hash table is exposed only for the mdb module */
-#define DBUF_MUTEXES 256
-#define DBUF_HASH_MUTEX(h, idx) (&(h)->hash_mutexes[(idx) & (DBUF_MUTEXES-1)])
-typedef struct dbuf_hash_table {
- uint64_t hash_table_mask;
- dmu_buf_impl_t **hash_table;
- kmutex_t hash_mutexes[DBUF_MUTEXES];
-} dbuf_hash_table_t;
-
-uint64_t dbuf_whichblock(struct dnode *di, int64_t level, uint64_t offset);
-
-dmu_buf_impl_t *dbuf_create_tlib(struct dnode *dn, char *data);
-void dbuf_create_bonus(struct dnode *dn);
-int dbuf_spill_set_blksz(dmu_buf_t *db, uint64_t blksz, dmu_tx_t *tx);
-void dbuf_spill_hold(struct dnode *dn, dmu_buf_impl_t **dbp, void *tag);
-
-void dbuf_rm_spill(struct dnode *dn, dmu_tx_t *tx);
-
-dmu_buf_impl_t *dbuf_hold(struct dnode *dn, uint64_t blkid, void *tag);
-dmu_buf_impl_t *dbuf_hold_level(struct dnode *dn, int level, uint64_t blkid,
- void *tag);
-int dbuf_hold_impl(struct dnode *dn, uint8_t level, uint64_t blkid,
- boolean_t fail_sparse, boolean_t fail_uncached,
- void *tag, dmu_buf_impl_t **dbp);
-
-void dbuf_prefetch(struct dnode *dn, int64_t level, uint64_t blkid,
- zio_priority_t prio, arc_flags_t aflags);
-
-void dbuf_add_ref(dmu_buf_impl_t *db, void *tag);
-boolean_t dbuf_try_add_ref(dmu_buf_t *db, objset_t *os, uint64_t obj,
- uint64_t blkid, void *tag);
-uint64_t dbuf_refcount(dmu_buf_impl_t *db);
-
-void dbuf_rele(dmu_buf_impl_t *db, void *tag);
-void dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag, boolean_t evicting);
-
-dmu_buf_impl_t *dbuf_find(struct objset *os, uint64_t object, uint8_t level,
- uint64_t blkid);
-
-int dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags);
-void dmu_buf_will_not_fill(dmu_buf_t *db, dmu_tx_t *tx);
-void dmu_buf_will_fill(dmu_buf_t *db, dmu_tx_t *tx);
-void dmu_buf_fill_done(dmu_buf_t *db, dmu_tx_t *tx);
-void dbuf_assign_arcbuf(dmu_buf_impl_t *db, arc_buf_t *buf, dmu_tx_t *tx);
-dbuf_dirty_record_t *dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
-arc_buf_t *dbuf_loan_arcbuf(dmu_buf_impl_t *db);
-void dmu_buf_write_embedded(dmu_buf_t *dbuf, void *data,
- bp_embedded_type_t etype, enum zio_compress comp,
- int uncompressed_size, int compressed_size, int byteorder, dmu_tx_t *tx);
-
-void dbuf_destroy(dmu_buf_impl_t *db);
-
-void dbuf_setdirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
-void dbuf_unoverride(dbuf_dirty_record_t *dr);
-void dbuf_sync_list(list_t *list, int level, dmu_tx_t *tx);
-void dbuf_release_bp(dmu_buf_impl_t *db);
-
-boolean_t dbuf_can_remap(const dmu_buf_impl_t *buf);
-
-void dbuf_free_range(struct dnode *dn, uint64_t start, uint64_t end,
- struct dmu_tx *);
-
-void dbuf_new_size(dmu_buf_impl_t *db, int size, dmu_tx_t *tx);
-
-void dbuf_stats_init(dbuf_hash_table_t *hash);
-void dbuf_stats_destroy(void);
-
-#define DB_DNODE(_db) ((_db)->db_dnode_handle->dnh_dnode)
-#define DB_DNODE_LOCK(_db) ((_db)->db_dnode_handle->dnh_zrlock)
-#define DB_DNODE_ENTER(_db) (zrl_add(&DB_DNODE_LOCK(_db)))
-#define DB_DNODE_EXIT(_db) (zrl_remove(&DB_DNODE_LOCK(_db)))
-#define DB_DNODE_HELD(_db) (!zrl_is_zero(&DB_DNODE_LOCK(_db)))
-
-void dbuf_init(void);
-void dbuf_fini(void);
-
-boolean_t dbuf_is_metadata(dmu_buf_impl_t *db);
-
-#define DBUF_GET_BUFC_TYPE(_db) \
- (dbuf_is_metadata(_db) ? ARC_BUFC_METADATA : ARC_BUFC_DATA)
-
-#define DBUF_IS_CACHEABLE(_db) \
- ((_db)->db_objset->os_primary_cache == ZFS_CACHE_ALL || \
- (dbuf_is_metadata(_db) && \
- ((_db)->db_objset->os_primary_cache == ZFS_CACHE_METADATA)))
-
-#define DBUF_IS_L2CACHEABLE(_db) \
- ((_db)->db_objset->os_secondary_cache == ZFS_CACHE_ALL || \
- (dbuf_is_metadata(_db) && \
- ((_db)->db_objset->os_secondary_cache == ZFS_CACHE_METADATA)))
-
-#define DNODE_LEVEL_IS_L2CACHEABLE(_dn, _level) \
- ((_dn)->dn_objset->os_secondary_cache == ZFS_CACHE_ALL || \
- (((_level) > 0 || \
- DMU_OT_IS_METADATA((_dn)->dn_handle->dnh_dnode->dn_type)) && \
- ((_dn)->dn_objset->os_secondary_cache == ZFS_CACHE_METADATA)))
-
-#ifdef ZFS_DEBUG
-
-/*
- * There should be a ## between the string literal and fmt, to make it
- * clear that we're joining two strings together, but gcc does not
- * support that preprocessor token.
- */
-#define dprintf_dbuf(dbuf, fmt, ...) do { \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) { \
- char __db_buf[32]; \
- uint64_t __db_obj = (dbuf)->db.db_object; \
- if (__db_obj == DMU_META_DNODE_OBJECT) \
- (void) strcpy(__db_buf, "mdn"); \
- else \
- (void) snprintf(__db_buf, sizeof (__db_buf), "%lld", \
- (u_longlong_t)__db_obj); \
- dprintf_ds((dbuf)->db_objset->os_dsl_dataset, \
- "obj=%s lvl=%u blkid=%lld " fmt, \
- __db_buf, (dbuf)->db_level, \
- (u_longlong_t)(dbuf)->db_blkid, __VA_ARGS__); \
- } \
-_NOTE(CONSTCOND) } while (0)
-
-#define dprintf_dbuf_bp(db, bp, fmt, ...) do { \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) { \
- char *__blkbuf = kmem_alloc(BP_SPRINTF_LEN, KM_SLEEP); \
- snprintf_blkptr(__blkbuf, BP_SPRINTF_LEN, bp); \
- dprintf_dbuf(db, fmt " %s\n", __VA_ARGS__, __blkbuf); \
- kmem_free(__blkbuf, BP_SPRINTF_LEN); \
- } \
-_NOTE(CONSTCOND) } while (0)
-
-#define DBUF_VERIFY(db) dbuf_verify(db)
-
-#else
-
-#define dprintf_dbuf(db, fmt, ...)
-#define dprintf_dbuf_bp(db, bp, fmt, ...)
-#define DBUF_VERIFY(db)
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DBUF_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h
deleted file mode 100644
index 2468a1485fd3..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h
+++ /dev/null
@@ -1,248 +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 (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DDT_H
-#define _SYS_DDT_H
-
-#include <sys/sysmacros.h>
-#include <sys/types.h>
-#include <sys/fs/zfs.h>
-#include <sys/zio.h>
-#include <sys/dmu.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct abd;
-
-/*
- * On-disk DDT formats, in the desired search order (newest version first).
- */
-enum ddt_type {
- DDT_TYPE_ZAP = 0,
- DDT_TYPES
-};
-
-/*
- * DDT classes, in the desired search order (highest replication level first).
- */
-enum ddt_class {
- DDT_CLASS_DITTO = 0,
- DDT_CLASS_DUPLICATE,
- DDT_CLASS_UNIQUE,
- DDT_CLASSES
-};
-
-#define DDT_TYPE_CURRENT 0
-
-#define DDT_COMPRESS_BYTEORDER_MASK 0x80
-#define DDT_COMPRESS_FUNCTION_MASK 0x7f
-
-/*
- * On-disk ddt entry: key (name) and physical storage (value).
- */
-typedef struct ddt_key {
- zio_cksum_t ddk_cksum; /* 256-bit block checksum */
- /*
- * Encoded with logical & physical size, and compression, as follows:
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * | 0 | 0 | 0 | comp | PSIZE | LSIZE |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- */
- uint64_t ddk_prop;
-} ddt_key_t;
-
-#define DDK_GET_LSIZE(ddk) \
- BF64_GET_SB((ddk)->ddk_prop, 0, 16, SPA_MINBLOCKSHIFT, 1)
-#define DDK_SET_LSIZE(ddk, x) \
- BF64_SET_SB((ddk)->ddk_prop, 0, 16, SPA_MINBLOCKSHIFT, 1, x)
-
-#define DDK_GET_PSIZE(ddk) \
- BF64_GET_SB((ddk)->ddk_prop, 16, 16, SPA_MINBLOCKSHIFT, 1)
-#define DDK_SET_PSIZE(ddk, x) \
- BF64_SET_SB((ddk)->ddk_prop, 16, 16, SPA_MINBLOCKSHIFT, 1, x)
-
-#define DDK_GET_COMPRESS(ddk) BF64_GET((ddk)->ddk_prop, 32, 8)
-#define DDK_SET_COMPRESS(ddk, x) BF64_SET((ddk)->ddk_prop, 32, 8, x)
-
-#define DDT_KEY_WORDS (sizeof (ddt_key_t) / sizeof (uint64_t))
-
-typedef struct ddt_phys {
- dva_t ddp_dva[SPA_DVAS_PER_BP];
- uint64_t ddp_refcnt;
- uint64_t ddp_phys_birth;
-} ddt_phys_t;
-
-enum ddt_phys_type {
- DDT_PHYS_DITTO = 0,
- DDT_PHYS_SINGLE = 1,
- DDT_PHYS_DOUBLE = 2,
- DDT_PHYS_TRIPLE = 3,
- DDT_PHYS_TYPES
-};
-
-/*
- * In-core ddt entry
- */
-struct ddt_entry {
- ddt_key_t dde_key;
- ddt_phys_t dde_phys[DDT_PHYS_TYPES];
- zio_t *dde_lead_zio[DDT_PHYS_TYPES];
- struct abd *dde_repair_abd;
- enum ddt_type dde_type;
- enum ddt_class dde_class;
- uint8_t dde_loading;
- uint8_t dde_loaded;
- kcondvar_t dde_cv;
- avl_node_t dde_node;
-};
-
-/*
- * In-core ddt
- */
-struct ddt {
- kmutex_t ddt_lock;
- avl_tree_t ddt_tree;
- avl_tree_t ddt_repair_tree;
- enum zio_checksum ddt_checksum;
- spa_t *ddt_spa;
- objset_t *ddt_os;
- uint64_t ddt_stat_object;
- uint64_t ddt_object[DDT_TYPES][DDT_CLASSES];
- ddt_histogram_t ddt_histogram[DDT_TYPES][DDT_CLASSES];
- ddt_histogram_t ddt_histogram_cache[DDT_TYPES][DDT_CLASSES];
- ddt_object_t ddt_object_stats[DDT_TYPES][DDT_CLASSES];
- avl_node_t ddt_node;
-};
-
-/*
- * In-core and on-disk bookmark for DDT walks
- */
-typedef struct ddt_bookmark {
- uint64_t ddb_class;
- uint64_t ddb_type;
- uint64_t ddb_checksum;
- uint64_t ddb_cursor;
-} ddt_bookmark_t;
-
-/*
- * Ops vector to access a specific DDT object type.
- */
-typedef struct ddt_ops {
- char ddt_op_name[32];
- int (*ddt_op_create)(objset_t *os, uint64_t *object, dmu_tx_t *tx,
- boolean_t prehash);
- int (*ddt_op_destroy)(objset_t *os, uint64_t object, dmu_tx_t *tx);
- int (*ddt_op_lookup)(objset_t *os, uint64_t object, ddt_entry_t *dde);
- void (*ddt_op_prefetch)(objset_t *os, uint64_t object,
- ddt_entry_t *dde);
- int (*ddt_op_update)(objset_t *os, uint64_t object, ddt_entry_t *dde,
- dmu_tx_t *tx);
- int (*ddt_op_remove)(objset_t *os, uint64_t object, ddt_entry_t *dde,
- dmu_tx_t *tx);
- int (*ddt_op_walk)(objset_t *os, uint64_t object, ddt_entry_t *dde,
- uint64_t *walk);
- int (*ddt_op_count)(objset_t *os, uint64_t object, uint64_t *count);
-} ddt_ops_t;
-
-#define DDT_NAMELEN 80
-
-extern void ddt_object_name(ddt_t *ddt, enum ddt_type type,
- enum ddt_class cls, char *name);
-extern int ddt_object_walk(ddt_t *ddt, enum ddt_type type,
- enum ddt_class cls, uint64_t *walk, ddt_entry_t *dde);
-extern int ddt_object_count(ddt_t *ddt, enum ddt_type type,
- enum ddt_class cls, uint64_t *count);
-extern int ddt_object_info(ddt_t *ddt, enum ddt_type type,
- enum ddt_class cls, dmu_object_info_t *);
-extern boolean_t ddt_object_exists(ddt_t *ddt, enum ddt_type type,
- enum ddt_class cls);
-
-extern void ddt_bp_fill(const ddt_phys_t *ddp, blkptr_t *bp,
- uint64_t txg);
-extern void ddt_bp_create(enum zio_checksum checksum, const ddt_key_t *ddk,
- const ddt_phys_t *ddp, blkptr_t *bp);
-
-extern void ddt_key_fill(ddt_key_t *ddk, const blkptr_t *bp);
-
-extern void ddt_phys_fill(ddt_phys_t *ddp, const blkptr_t *bp);
-extern void ddt_phys_clear(ddt_phys_t *ddp);
-extern void ddt_phys_addref(ddt_phys_t *ddp);
-extern void ddt_phys_decref(ddt_phys_t *ddp);
-extern void ddt_phys_free(ddt_t *ddt, ddt_key_t *ddk, ddt_phys_t *ddp,
- uint64_t txg);
-extern ddt_phys_t *ddt_phys_select(const ddt_entry_t *dde, const blkptr_t *bp);
-extern uint64_t ddt_phys_total_refcnt(const ddt_entry_t *dde);
-
-extern void ddt_stat_add(ddt_stat_t *dst, const ddt_stat_t *src, uint64_t neg);
-
-extern void ddt_histogram_add(ddt_histogram_t *dst, const ddt_histogram_t *src);
-extern void ddt_histogram_stat(ddt_stat_t *dds, const ddt_histogram_t *ddh);
-extern boolean_t ddt_histogram_empty(const ddt_histogram_t *ddh);
-extern void ddt_get_dedup_object_stats(spa_t *spa, ddt_object_t *ddo);
-extern void ddt_get_dedup_histogram(spa_t *spa, ddt_histogram_t *ddh);
-extern void ddt_get_dedup_stats(spa_t *spa, ddt_stat_t *dds_total);
-
-extern uint64_t ddt_get_dedup_dspace(spa_t *spa);
-extern uint64_t ddt_get_pool_dedup_ratio(spa_t *spa);
-
-extern int ddt_ditto_copies_needed(ddt_t *ddt, ddt_entry_t *dde,
- ddt_phys_t *ddp_willref);
-extern int ddt_ditto_copies_present(ddt_entry_t *dde);
-
-extern size_t ddt_compress(void *src, uchar_t *dst, size_t s_len, size_t d_len);
-extern void ddt_decompress(uchar_t *src, void *dst, size_t s_len, size_t d_len);
-
-extern ddt_t *ddt_select(spa_t *spa, const blkptr_t *bp);
-extern void ddt_enter(ddt_t *ddt);
-extern void ddt_exit(ddt_t *ddt);
-extern ddt_entry_t *ddt_lookup(ddt_t *ddt, const blkptr_t *bp, boolean_t add);
-extern void ddt_prefetch(spa_t *spa, const blkptr_t *bp);
-extern void ddt_remove(ddt_t *ddt, ddt_entry_t *dde);
-
-extern boolean_t ddt_class_contains(spa_t *spa, enum ddt_class max_class,
- const blkptr_t *bp);
-
-extern ddt_entry_t *ddt_repair_start(ddt_t *ddt, const blkptr_t *bp);
-extern void ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde);
-
-extern int ddt_entry_compare(const void *x1, const void *x2);
-
-extern void ddt_create(spa_t *spa);
-extern int ddt_load(spa_t *spa);
-extern void ddt_unload(spa_t *spa);
-extern void ddt_sync(spa_t *spa, uint64_t txg);
-extern int ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde);
-extern int ddt_object_update(ddt_t *ddt, enum ddt_type type,
- enum ddt_class cls, ddt_entry_t *dde, dmu_tx_t *tx);
-
-extern const ddt_ops_t ddt_zap_ops;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DDT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
deleted file mode 100644
index 1f5a837cc717..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
+++ /dev/null
@@ -1,1028 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2012, Joyent, Inc. All rights reserved.
- * Copyright 2013 DEY Storage Systems, Inc.
- * Copyright 2014 HybridCluster. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- * Copyright 2013 Saso Kiselkov. All rights reserved.
- * Copyright (c) 2017, Intel Corporation.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-/* Portions Copyright 2010 Robert Milkowski */
-
-#ifndef _SYS_DMU_H
-#define _SYS_DMU_H
-
-/*
- * This file describes the interface that the DMU provides for its
- * consumers.
- *
- * The DMU also interacts with the SPA. That interface is described in
- * dmu_spa.h.
- */
-
-#include <sys/zfs_context.h>
-#include <sys/cred.h>
-#include <sys/fs/zfs.h>
-#include <sys/zio_compress.h>
-#include <sys/zio_priority.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct uio;
-struct xuio;
-struct page;
-struct vnode;
-struct spa;
-struct zilog;
-struct zio;
-struct blkptr;
-struct zap_cursor;
-struct dsl_dataset;
-struct dsl_pool;
-struct dnode;
-struct drr_begin;
-struct drr_end;
-struct zbookmark_phys;
-struct spa;
-struct nvlist;
-struct arc_buf;
-struct zio_prop;
-struct sa_handle;
-struct file;
-struct locked_range;
-
-typedef struct objset objset_t;
-typedef struct dmu_tx dmu_tx_t;
-typedef struct dsl_dir dsl_dir_t;
-typedef struct dnode dnode_t;
-
-typedef enum dmu_object_byteswap {
- DMU_BSWAP_UINT8,
- DMU_BSWAP_UINT16,
- DMU_BSWAP_UINT32,
- DMU_BSWAP_UINT64,
- DMU_BSWAP_ZAP,
- DMU_BSWAP_DNODE,
- DMU_BSWAP_OBJSET,
- DMU_BSWAP_ZNODE,
- DMU_BSWAP_OLDACL,
- DMU_BSWAP_ACL,
- /*
- * Allocating a new byteswap type number makes the on-disk format
- * incompatible with any other format that uses the same number.
- *
- * Data can usually be structured to work with one of the
- * DMU_BSWAP_UINT* or DMU_BSWAP_ZAP types.
- */
- DMU_BSWAP_NUMFUNCS
-} dmu_object_byteswap_t;
-
-#define DMU_OT_NEWTYPE 0x80
-#define DMU_OT_METADATA 0x40
-#define DMU_OT_BYTESWAP_MASK 0x3f
-
-/*
- * Defines a uint8_t object type. Object types specify if the data
- * in the object is metadata (boolean) and how to byteswap the data
- * (dmu_object_byteswap_t). All of the types created by this method
- * are cached in the dbuf metadata cache.
- */
-#define DMU_OT(byteswap, metadata) \
- (DMU_OT_NEWTYPE | \
- ((metadata) ? DMU_OT_METADATA : 0) | \
- ((byteswap) & DMU_OT_BYTESWAP_MASK))
-
-#define DMU_OT_IS_VALID(ot) (((ot) & DMU_OT_NEWTYPE) ? \
- ((ot) & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS : \
- (ot) < DMU_OT_NUMTYPES)
-
-#define DMU_OT_IS_METADATA(ot) (((ot) & DMU_OT_NEWTYPE) ? \
- ((ot) & DMU_OT_METADATA) : \
- dmu_ot[(ot)].ot_metadata)
-
-#define DMU_OT_IS_DDT(ot) \
- ((ot) == DMU_OT_DDT_ZAP)
-
-#define DMU_OT_IS_ZIL(ot) \
- ((ot) == DMU_OT_INTENT_LOG)
-
-/* Note: ztest uses DMU_OT_UINT64_OTHER as a proxy for file blocks */
-#define DMU_OT_IS_FILE(ot) \
- ((ot) == DMU_OT_PLAIN_FILE_CONTENTS || (ot) == DMU_OT_UINT64_OTHER)
-
-#define DMU_OT_IS_METADATA_CACHED(ot) (((ot) & DMU_OT_NEWTYPE) ? \
- B_TRUE : dmu_ot[(ot)].ot_dbuf_metadata_cache)
-
-/*
- * These object types use bp_fill != 1 for their L0 bp's. Therefore they can't
- * have their data embedded (i.e. use a BP_IS_EMBEDDED() bp), because bp_fill
- * is repurposed for embedded BPs.
- */
-#define DMU_OT_HAS_FILL(ot) \
- ((ot) == DMU_OT_DNODE || (ot) == DMU_OT_OBJSET)
-
-#define DMU_OT_BYTESWAP(ot) (((ot) & DMU_OT_NEWTYPE) ? \
- ((ot) & DMU_OT_BYTESWAP_MASK) : \
- dmu_ot[(ot)].ot_byteswap)
-
-typedef enum dmu_object_type {
- DMU_OT_NONE,
- /* general: */
- DMU_OT_OBJECT_DIRECTORY, /* ZAP */
- DMU_OT_OBJECT_ARRAY, /* UINT64 */
- DMU_OT_PACKED_NVLIST, /* UINT8 (XDR by nvlist_pack/unpack) */
- DMU_OT_PACKED_NVLIST_SIZE, /* UINT64 */
- DMU_OT_BPOBJ, /* UINT64 */
- DMU_OT_BPOBJ_HDR, /* UINT64 */
- /* spa: */
- DMU_OT_SPACE_MAP_HEADER, /* UINT64 */
- DMU_OT_SPACE_MAP, /* UINT64 */
- /* zil: */
- DMU_OT_INTENT_LOG, /* UINT64 */
- /* dmu: */
- DMU_OT_DNODE, /* DNODE */
- DMU_OT_OBJSET, /* OBJSET */
- /* dsl: */
- DMU_OT_DSL_DIR, /* UINT64 */
- DMU_OT_DSL_DIR_CHILD_MAP, /* ZAP */
- DMU_OT_DSL_DS_SNAP_MAP, /* ZAP */
- DMU_OT_DSL_PROPS, /* ZAP */
- DMU_OT_DSL_DATASET, /* UINT64 */
- /* zpl: */
- DMU_OT_ZNODE, /* ZNODE */
- DMU_OT_OLDACL, /* Old ACL */
- DMU_OT_PLAIN_FILE_CONTENTS, /* UINT8 */
- DMU_OT_DIRECTORY_CONTENTS, /* ZAP */
- DMU_OT_MASTER_NODE, /* ZAP */
- DMU_OT_UNLINKED_SET, /* ZAP */
- /* zvol: */
- DMU_OT_ZVOL, /* UINT8 */
- DMU_OT_ZVOL_PROP, /* ZAP */
- /* other; for testing only! */
- DMU_OT_PLAIN_OTHER, /* UINT8 */
- DMU_OT_UINT64_OTHER, /* UINT64 */
- DMU_OT_ZAP_OTHER, /* ZAP */
- /* new object types: */
- DMU_OT_ERROR_LOG, /* ZAP */
- DMU_OT_SPA_HISTORY, /* UINT8 */
- DMU_OT_SPA_HISTORY_OFFSETS, /* spa_his_phys_t */
- DMU_OT_POOL_PROPS, /* ZAP */
- DMU_OT_DSL_PERMS, /* ZAP */
- DMU_OT_ACL, /* ACL */
- DMU_OT_SYSACL, /* SYSACL */
- DMU_OT_FUID, /* FUID table (Packed NVLIST UINT8) */
- DMU_OT_FUID_SIZE, /* FUID table size UINT64 */
- DMU_OT_NEXT_CLONES, /* ZAP */
- DMU_OT_SCAN_QUEUE, /* ZAP */
- DMU_OT_USERGROUP_USED, /* ZAP */
- DMU_OT_USERGROUP_QUOTA, /* ZAP */
- DMU_OT_USERREFS, /* ZAP */
- DMU_OT_DDT_ZAP, /* ZAP */
- DMU_OT_DDT_STATS, /* ZAP */
- DMU_OT_SA, /* System attr */
- DMU_OT_SA_MASTER_NODE, /* ZAP */
- DMU_OT_SA_ATTR_REGISTRATION, /* ZAP */
- DMU_OT_SA_ATTR_LAYOUTS, /* ZAP */
- DMU_OT_SCAN_XLATE, /* ZAP */
- DMU_OT_DEDUP, /* fake dedup BP from ddt_bp_create() */
- DMU_OT_DEADLIST, /* ZAP */
- DMU_OT_DEADLIST_HDR, /* UINT64 */
- DMU_OT_DSL_CLONES, /* ZAP */
- DMU_OT_BPOBJ_SUBOBJ, /* UINT64 */
- /*
- * Do not allocate new object types here. Doing so makes the on-disk
- * format incompatible with any other format that uses the same object
- * type number.
- *
- * When creating an object which does not have one of the above types
- * use the DMU_OTN_* type with the correct byteswap and metadata
- * values.
- *
- * The DMU_OTN_* types do not have entries in the dmu_ot table,
- * use the DMU_OT_IS_METDATA() and DMU_OT_BYTESWAP() macros instead
- * use the DMU_OT_IS_METADATA() and DMU_OT_BYTESWAP() macros instead
- * of indexing into dmu_ot directly (this works for both DMU_OT_* types
- * and DMU_OTN_* types).
- */
- DMU_OT_NUMTYPES,
-
- /*
- * Names for valid types declared with DMU_OT().
- */
- DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE),
- DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE),
- DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE),
- DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE),
- DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE),
- DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE),
- DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE),
- DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE),
- DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE),
- DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE),
-} dmu_object_type_t;
-
-/*
- * These flags are intended to be used to specify the "txg_how"
- * parameter when calling the dmu_tx_assign() function. See the comment
- * above dmu_tx_assign() for more details on the meaning of these flags.
- */
-#define TXG_NOWAIT (0ULL)
-#define TXG_WAIT (1ULL<<0)
-#define TXG_NOTHROTTLE (1ULL<<1)
-
-void byteswap_uint64_array(void *buf, size_t size);
-void byteswap_uint32_array(void *buf, size_t size);
-void byteswap_uint16_array(void *buf, size_t size);
-void byteswap_uint8_array(void *buf, size_t size);
-void zap_byteswap(void *buf, size_t size);
-void zfs_oldacl_byteswap(void *buf, size_t size);
-void zfs_acl_byteswap(void *buf, size_t size);
-void zfs_znode_byteswap(void *buf, size_t size);
-
-#define DS_FIND_SNAPSHOTS (1<<0)
-#define DS_FIND_CHILDREN (1<<1)
-#define DS_FIND_SERIALIZE (1<<2)
-
-/*
- * The maximum number of bytes that can be accessed as part of one
- * operation, including metadata.
- */
-#define DMU_MAX_ACCESS (32 * 1024 * 1024) /* 32MB */
-#define DMU_MAX_DELETEBLKCNT (20480) /* ~5MB of indirect blocks */
-
-#define DMU_USERUSED_OBJECT (-1ULL)
-#define DMU_GROUPUSED_OBJECT (-2ULL)
-
-/*
- * artificial blkids for bonus buffer and spill blocks
- */
-#define DMU_BONUS_BLKID (-1ULL)
-#define DMU_SPILL_BLKID (-2ULL)
-/*
- * Public routines to create, destroy, open, and close objsets.
- */
-int dmu_objset_hold(const char *name, void *tag, objset_t **osp);
-int dmu_objset_own(const char *name, dmu_objset_type_t type,
- boolean_t readonly, void *tag, objset_t **osp);
-void dmu_objset_rele(objset_t *os, void *tag);
-void dmu_objset_disown(objset_t *os, void *tag);
-int dmu_objset_open_ds(struct dsl_dataset *ds, objset_t **osp);
-
-void dmu_objset_evict_dbufs(objset_t *os);
-int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
- void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg);
-int dmu_get_recursive_snaps_nvl(char *fsname, const char *snapname,
- struct nvlist *snaps);
-int dmu_objset_clone(const char *name, const char *origin);
-int dsl_destroy_snapshots_nvl(struct nvlist *snaps, boolean_t defer,
- struct nvlist *errlist);
-int dmu_objset_snapshot_one(const char *fsname, const char *snapname);
-int dmu_objset_snapshot_tmp(const char *, const char *, int);
-int dmu_objset_find(char *name, int func(const char *, void *), void *arg,
- int flags);
-void dmu_objset_byteswap(void *buf, size_t size);
-int dsl_dataset_rename_snapshot(const char *fsname,
- const char *oldsnapname, const char *newsnapname, boolean_t recursive);
-int dmu_objset_remap_indirects(const char *fsname);
-
-typedef struct dmu_buf {
- uint64_t db_object; /* object that this buffer is part of */
- uint64_t db_offset; /* byte offset in this object */
- uint64_t db_size; /* size of buffer in bytes */
- void *db_data; /* data in buffer */
-} dmu_buf_t;
-
-/*
- * The names of zap entries in the DIRECTORY_OBJECT of the MOS.
- */
-#define DMU_POOL_DIRECTORY_OBJECT 1
-#define DMU_POOL_CONFIG "config"
-#define DMU_POOL_FEATURES_FOR_WRITE "features_for_write"
-#define DMU_POOL_FEATURES_FOR_READ "features_for_read"
-#define DMU_POOL_FEATURE_DESCRIPTIONS "feature_descriptions"
-#define DMU_POOL_FEATURE_ENABLED_TXG "feature_enabled_txg"
-#define DMU_POOL_ROOT_DATASET "root_dataset"
-#define DMU_POOL_SYNC_BPOBJ "sync_bplist"
-#define DMU_POOL_ERRLOG_SCRUB "errlog_scrub"
-#define DMU_POOL_ERRLOG_LAST "errlog_last"
-#define DMU_POOL_SPARES "spares"
-#define DMU_POOL_DEFLATE "deflate"
-#define DMU_POOL_HISTORY "history"
-#define DMU_POOL_PROPS "pool_props"
-#define DMU_POOL_L2CACHE "l2cache"
-#define DMU_POOL_TMP_USERREFS "tmp_userrefs"
-#define DMU_POOL_DDT "DDT-%s-%s-%s"
-#define DMU_POOL_DDT_STATS "DDT-statistics"
-#define DMU_POOL_CREATION_VERSION "creation_version"
-#define DMU_POOL_SCAN "scan"
-#define DMU_POOL_FREE_BPOBJ "free_bpobj"
-#define DMU_POOL_BPTREE_OBJ "bptree_obj"
-#define DMU_POOL_EMPTY_BPOBJ "empty_bpobj"
-#define DMU_POOL_CHECKSUM_SALT "org.illumos:checksum_salt"
-#define DMU_POOL_VDEV_ZAP_MAP "com.delphix:vdev_zap_map"
-#define DMU_POOL_REMOVING "com.delphix:removing"
-#define DMU_POOL_OBSOLETE_BPOBJ "com.delphix:obsolete_bpobj"
-#define DMU_POOL_CONDENSING_INDIRECT "com.delphix:condensing_indirect"
-#define DMU_POOL_ZPOOL_CHECKPOINT "com.delphix:zpool_checkpoint"
-
-/*
- * Allocate an object from this objset. The range of object numbers
- * available is (0, DN_MAX_OBJECT). Object 0 is the meta-dnode.
- *
- * The transaction must be assigned to a txg. The newly allocated
- * object will be "held" in the transaction (ie. you can modify the
- * newly allocated object in this transaction).
- *
- * dmu_object_alloc() chooses an object and returns it in *objectp.
- *
- * dmu_object_claim() allocates a specific object number. If that
- * number is already allocated, it fails and returns EEXIST.
- *
- * Return 0 on success, or ENOSPC or EEXIST as specified above.
- */
-uint64_t dmu_object_alloc(objset_t *os, dmu_object_type_t ot,
- int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx);
-uint64_t dmu_object_alloc_ibs(objset_t *os, dmu_object_type_t ot, int blocksize,
- int indirect_blockshift,
- dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
-uint64_t dmu_object_alloc_dnsize(objset_t *os, dmu_object_type_t ot,
- int blocksize, dmu_object_type_t bonus_type, int bonus_len,
- int dnodesize, dmu_tx_t *tx);
-int dmu_object_claim_dnsize(objset_t *os, uint64_t object, dmu_object_type_t ot,
- int blocksize, dmu_object_type_t bonus_type, int bonus_len,
- int dnodesize, dmu_tx_t *tx);
-int dmu_object_reclaim_dnsize(objset_t *os, uint64_t object,
- dmu_object_type_t ot, int blocksize, dmu_object_type_t bonustype,
- int bonuslen, int dnodesize, dmu_tx_t *txp);
-int dmu_object_claim(objset_t *os, uint64_t object, dmu_object_type_t ot,
- int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx);
-int dmu_object_reclaim(objset_t *os, uint64_t object, dmu_object_type_t ot,
- int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *txp);
-
-/*
- * Free an object from this objset.
- *
- * The object's data will be freed as well (ie. you don't need to call
- * dmu_free(object, 0, -1, tx)).
- *
- * The object need not be held in the transaction.
- *
- * If there are any holds on this object's buffers (via dmu_buf_hold()),
- * or tx holds on the object (via dmu_tx_hold_object()), you can not
- * free it; it fails and returns EBUSY.
- *
- * If the object is not allocated, it fails and returns ENOENT.
- *
- * Return 0 on success, or EBUSY or ENOENT as specified above.
- */
-int dmu_object_free(objset_t *os, uint64_t object, dmu_tx_t *tx);
-
-/*
- * Find the next allocated or free object.
- *
- * The objectp parameter is in-out. It will be updated to be the next
- * object which is allocated. Ignore objects which have not been
- * modified since txg.
- *
- * XXX Can only be called on a objset with no dirty data.
- *
- * Returns 0 on success, or ENOENT if there are no more objects.
- */
-int dmu_object_next(objset_t *os, uint64_t *objectp,
- boolean_t hole, uint64_t txg);
-
-/*
- * Set the data blocksize for an object.
- *
- * The object cannot have any blocks allcated beyond the first. If
- * the first block is allocated already, the new size must be greater
- * than the current block size. If these conditions are not met,
- * ENOTSUP will be returned.
- *
- * Returns 0 on success, or EBUSY if there are any holds on the object
- * contents, or ENOTSUP as described above.
- */
-int dmu_object_set_blocksize(objset_t *os, uint64_t object, uint64_t size,
- int ibs, dmu_tx_t *tx);
-
-/*
- * Set the checksum property on a dnode. The new checksum algorithm will
- * apply to all newly written blocks; existing blocks will not be affected.
- */
-void dmu_object_set_checksum(objset_t *os, uint64_t object, uint8_t checksum,
- dmu_tx_t *tx);
-
-/*
- * Set the compress property on a dnode. The new compression algorithm will
- * apply to all newly written blocks; existing blocks will not be affected.
- */
-void dmu_object_set_compress(objset_t *os, uint64_t object, uint8_t compress,
- dmu_tx_t *tx);
-
-int dmu_object_remap_indirects(objset_t *os, uint64_t object, uint64_t txg);
-
-void
-dmu_write_embedded(objset_t *os, uint64_t object, uint64_t offset,
- void *data, uint8_t etype, uint8_t comp, int uncompressed_size,
- int compressed_size, int byteorder, dmu_tx_t *tx);
-
-/*
- * Decide how to write a block: checksum, compression, number of copies, etc.
- */
-#define WP_NOFILL 0x1
-#define WP_DMU_SYNC 0x2
-#define WP_SPILL 0x4
-
-void dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp,
- struct zio_prop *zp);
-/*
- * The bonus data is accessed more or less like a regular buffer.
- * You must dmu_bonus_hold() to get the buffer, which will give you a
- * dmu_buf_t with db_offset==-1ULL, and db_size = the size of the bonus
- * data. As with any normal buffer, you must call dmu_buf_will_dirty()
- * before modifying it, and the
- * object must be held in an assigned transaction before calling
- * dmu_buf_will_dirty. You may use dmu_buf_set_user() on the bonus
- * buffer as well. You must release your hold with dmu_buf_rele().
- *
- * Returns ENOENT, EIO, or 0.
- */
-int dmu_bonus_hold(objset_t *os, uint64_t object, void *tag, dmu_buf_t **);
-int dmu_bonus_max(void);
-int dmu_set_bonus(dmu_buf_t *, int, dmu_tx_t *);
-int dmu_set_bonustype(dmu_buf_t *, dmu_object_type_t, dmu_tx_t *);
-dmu_object_type_t dmu_get_bonustype(dmu_buf_t *);
-int dmu_rm_spill(objset_t *, uint64_t, dmu_tx_t *);
-
-/*
- * Special spill buffer support used by "SA" framework
- */
-
-int dmu_spill_hold_by_bonus(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp);
-int dmu_spill_hold_by_dnode(dnode_t *dn, uint32_t flags,
- void *tag, dmu_buf_t **dbp);
-int dmu_spill_hold_existing(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp);
-
-/*
- * Obtain the DMU buffer from the specified object which contains the
- * specified offset. dmu_buf_hold() puts a "hold" on the buffer, so
- * that it will remain in memory. You must release the hold with
- * dmu_buf_rele(). You musn't access the dmu_buf_t after releasing your
- * hold. You must have a hold on any dmu_buf_t* you pass to the DMU.
- *
- * You must call dmu_buf_read, dmu_buf_will_dirty, or dmu_buf_will_fill
- * on the returned buffer before reading or writing the buffer's
- * db_data. The comments for those routines describe what particular
- * operations are valid after calling them.
- *
- * The object number must be a valid, allocated object number.
- */
-int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset,
- void *tag, dmu_buf_t **, int flags);
-int dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset,
- void *tag, dmu_buf_t **dbp, int flags);
-
-/*
- * Add a reference to a dmu buffer that has already been held via
- * dmu_buf_hold() in the current context.
- */
-void dmu_buf_add_ref(dmu_buf_t *db, void* tag);
-
-/*
- * Attempt to add a reference to a dmu buffer that is in an unknown state,
- * using a pointer that may have been invalidated by eviction processing.
- * The request will succeed if the passed in dbuf still represents the
- * same os/object/blkid, is ineligible for eviction, and has at least
- * one hold by a user other than the syncer.
- */
-boolean_t dmu_buf_try_add_ref(dmu_buf_t *, objset_t *os, uint64_t object,
- uint64_t blkid, void *tag);
-
-void dmu_buf_rele(dmu_buf_t *db, void *tag);
-uint64_t dmu_buf_refcount(dmu_buf_t *db);
-
-/*
- * dmu_buf_hold_array holds the DMU buffers which contain all bytes in a
- * range of an object. A pointer to an array of dmu_buf_t*'s is
- * returned (in *dbpp).
- *
- * dmu_buf_rele_array releases the hold on an array of dmu_buf_t*'s, and
- * frees the array. The hold on the array of buffers MUST be released
- * with dmu_buf_rele_array. You can NOT release the hold on each buffer
- * individually with dmu_buf_rele.
- */
-int dmu_buf_hold_array_by_bonus(dmu_buf_t *db, uint64_t offset,
- uint64_t length, boolean_t read, void *tag,
- int *numbufsp, dmu_buf_t ***dbpp);
-int dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset, uint64_t length,
- boolean_t read, void *tag, int *numbufsp, dmu_buf_t ***dbpp,
- uint32_t flags);
-void dmu_buf_rele_array(dmu_buf_t **, int numbufs, void *tag);
-
-typedef void dmu_buf_evict_func_t(void *user_ptr);
-
-/*
- * A DMU buffer user object may be associated with a dbuf for the
- * duration of its lifetime. This allows the user of a dbuf (client)
- * to attach private data to a dbuf (e.g. in-core only data such as a
- * dnode_children_t, zap_t, or zap_leaf_t) and be optionally notified
- * when that dbuf has been evicted. Clients typically respond to the
- * eviction notification by freeing their private data, thus ensuring
- * the same lifetime for both dbuf and private data.
- *
- * The mapping from a dmu_buf_user_t to any client private data is the
- * client's responsibility. All current consumers of the API with private
- * data embed a dmu_buf_user_t as the first member of the structure for
- * their private data. This allows conversions between the two types
- * with a simple cast. Since the DMU buf user API never needs access
- * to the private data, other strategies can be employed if necessary
- * or convenient for the client (e.g. using container_of() to do the
- * conversion for private data that cannot have the dmu_buf_user_t as
- * its first member).
- *
- * Eviction callbacks are executed without the dbuf mutex held or any
- * other type of mechanism to guarantee that the dbuf is still available.
- * For this reason, users must assume the dbuf has already been freed
- * and not reference the dbuf from the callback context.
- *
- * Users requesting "immediate eviction" are notified as soon as the dbuf
- * is only referenced by dirty records (dirties == holds). Otherwise the
- * notification occurs after eviction processing for the dbuf begins.
- */
-typedef struct dmu_buf_user {
- /*
- * Asynchronous user eviction callback state.
- */
- taskq_ent_t dbu_tqent;
-
- /*
- * This instance's eviction function pointers.
- *
- * dbu_evict_func_sync is called synchronously and then
- * dbu_evict_func_async is executed asynchronously on a taskq.
- */
- dmu_buf_evict_func_t *dbu_evict_func_sync;
- dmu_buf_evict_func_t *dbu_evict_func_async;
-#ifdef ZFS_DEBUG
- /*
- * Pointer to user's dbuf pointer. NULL for clients that do
- * not associate a dbuf with their user data.
- *
- * The dbuf pointer is cleared upon eviction so as to catch
- * use-after-evict bugs in clients.
- */
- dmu_buf_t **dbu_clear_on_evict_dbufp;
-#endif
-} dmu_buf_user_t;
-
-/*
- * Initialize the given dmu_buf_user_t instance with the eviction function
- * evict_func, to be called when the user is evicted.
- *
- * NOTE: This function should only be called once on a given dmu_buf_user_t.
- * To allow enforcement of this, dbu must already be zeroed on entry.
- */
-/*ARGSUSED*/
-static inline void
-dmu_buf_init_user(dmu_buf_user_t *dbu, dmu_buf_evict_func_t *evict_func_sync,
- dmu_buf_evict_func_t *evict_func_async, dmu_buf_t **clear_on_evict_dbufp)
-{
- ASSERT(dbu->dbu_evict_func_sync == NULL);
- ASSERT(dbu->dbu_evict_func_async == NULL);
-
- /* must have at least one evict func */
- IMPLY(evict_func_sync == NULL, evict_func_async != NULL);
- dbu->dbu_evict_func_sync = evict_func_sync;
- dbu->dbu_evict_func_async = evict_func_async;
-#ifdef ZFS_DEBUG
- dbu->dbu_clear_on_evict_dbufp = clear_on_evict_dbufp;
-#endif
-}
-
-/*
- * Attach user data to a dbuf and mark it for normal (when the dbuf's
- * data is cleared or its reference count goes to zero) eviction processing.
- *
- * Returns NULL on success, or the existing user if another user currently
- * owns the buffer.
- */
-void *dmu_buf_set_user(dmu_buf_t *db, dmu_buf_user_t *user);
-
-/*
- * Attach user data to a dbuf and mark it for immediate (its dirty and
- * reference counts are equal) eviction processing.
- *
- * Returns NULL on success, or the existing user if another user currently
- * owns the buffer.
- */
-void *dmu_buf_set_user_ie(dmu_buf_t *db, dmu_buf_user_t *user);
-
-/*
- * Replace the current user of a dbuf.
- *
- * If given the current user of a dbuf, replaces the dbuf's user with
- * "new_user" and returns the user data pointer that was replaced.
- * Otherwise returns the current, and unmodified, dbuf user pointer.
- */
-void *dmu_buf_replace_user(dmu_buf_t *db,
- dmu_buf_user_t *old_user, dmu_buf_user_t *new_user);
-
-/*
- * Remove the specified user data for a DMU buffer.
- *
- * Returns the user that was removed on success, or the current user if
- * another user currently owns the buffer.
- */
-void *dmu_buf_remove_user(dmu_buf_t *db, dmu_buf_user_t *user);
-
-/*
- * Returns the user data (dmu_buf_user_t *) associated with this dbuf.
- */
-void *dmu_buf_get_user(dmu_buf_t *db);
-
-objset_t *dmu_buf_get_objset(dmu_buf_t *db);
-dnode_t *dmu_buf_dnode_enter(dmu_buf_t *db);
-void dmu_buf_dnode_exit(dmu_buf_t *db);
-
-/* Block until any in-progress dmu buf user evictions complete. */
-void dmu_buf_user_evict_wait(void);
-
-/*
- * Returns the blkptr associated with this dbuf, or NULL if not set.
- */
-struct blkptr *dmu_buf_get_blkptr(dmu_buf_t *db);
-
-/*
- * Indicate that you are going to modify the buffer's data (db_data).
- *
- * The transaction (tx) must be assigned to a txg (ie. you've called
- * dmu_tx_assign()). The buffer's object must be held in the tx
- * (ie. you've called dmu_tx_hold_object(tx, db->db_object)).
- */
-void dmu_buf_will_dirty(dmu_buf_t *db, dmu_tx_t *tx);
-
-/*
- * You must create a transaction, then hold the objects which you will
- * (or might) modify as part of this transaction. Then you must assign
- * the transaction to a transaction group. Once the transaction has
- * been assigned, you can modify buffers which belong to held objects as
- * part of this transaction. You can't modify buffers before the
- * transaction has been assigned; you can't modify buffers which don't
- * belong to objects which this transaction holds; you can't hold
- * objects once the transaction has been assigned. You may hold an
- * object which you are going to free (with dmu_object_free()), but you
- * don't have to.
- *
- * You can abort the transaction before it has been assigned.
- *
- * Note that you may hold buffers (with dmu_buf_hold) at any time,
- * regardless of transaction state.
- */
-
-#define DMU_NEW_OBJECT (-1ULL)
-#define DMU_OBJECT_END (-1ULL)
-
-dmu_tx_t *dmu_tx_create(objset_t *os);
-void dmu_tx_hold_write(dmu_tx_t *tx, uint64_t object, uint64_t off, int len);
-void dmu_tx_hold_write_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
- int len);
-void dmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off,
- uint64_t len);
-void dmu_tx_hold_free_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
- uint64_t len);
-void dmu_tx_hold_remap_l1indirect(dmu_tx_t *tx, uint64_t object);
-void dmu_tx_hold_zap(dmu_tx_t *tx, uint64_t object, int add, const char *name);
-void dmu_tx_hold_zap_by_dnode(dmu_tx_t *tx, dnode_t *dn, int add,
- const char *name);
-void dmu_tx_hold_bonus(dmu_tx_t *tx, uint64_t object);
-void dmu_tx_hold_bonus_by_dnode(dmu_tx_t *tx, dnode_t *dn);
-void dmu_tx_hold_spill(dmu_tx_t *tx, uint64_t object);
-void dmu_tx_hold_sa(dmu_tx_t *tx, struct sa_handle *hdl, boolean_t may_grow);
-void dmu_tx_hold_sa_create(dmu_tx_t *tx, int total_size);
-void dmu_tx_abort(dmu_tx_t *tx);
-int dmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how);
-void dmu_tx_wait(dmu_tx_t *tx);
-void dmu_tx_commit(dmu_tx_t *tx);
-void dmu_tx_mark_netfree(dmu_tx_t *tx);
-
-/*
- * To register a commit callback, dmu_tx_callback_register() must be called.
- *
- * dcb_data is a pointer to caller private data that is passed on as a
- * callback parameter. The caller is responsible for properly allocating and
- * freeing it.
- *
- * When registering a callback, the transaction must be already created, but
- * it cannot be committed or aborted. It can be assigned to a txg or not.
- *
- * The callback will be called after the transaction has been safely written
- * to stable storage and will also be called if the dmu_tx is aborted.
- * If there is any error which prevents the transaction from being committed to
- * disk, the callback will be called with a value of error != 0.
- */
-typedef void dmu_tx_callback_func_t(void *dcb_data, int error);
-
-void dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *dcb_func,
- void *dcb_data);
-
-/*
- * Free up the data blocks for a defined range of a file. If size is
- * -1, the range from offset to end-of-file is freed.
- */
-int dmu_free_range(objset_t *os, uint64_t object, uint64_t offset,
- uint64_t size, dmu_tx_t *tx);
-int dmu_free_long_range(objset_t *os, uint64_t object, uint64_t offset,
- uint64_t size);
-int dmu_free_long_object(objset_t *os, uint64_t object);
-
-/*
- * Convenience functions.
- *
- * Canfail routines will return 0 on success, or an errno if there is a
- * nonrecoverable I/O error.
- */
-#define DMU_READ_PREFETCH 0 /* prefetch */
-#define DMU_READ_NO_PREFETCH 1 /* don't prefetch */
-int dmu_read(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
- void *buf, uint32_t flags);
-int dmu_read_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, void *buf,
- uint32_t flags);
-void dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
- const void *buf, dmu_tx_t *tx);
-void dmu_write_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size,
- const void *buf, dmu_tx_t *tx);
-void dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
- dmu_tx_t *tx);
-int dmu_read_uio(objset_t *os, uint64_t object, struct uio *uio, uint64_t size);
-int dmu_read_uio_dbuf(dmu_buf_t *zdb, struct uio *uio, uint64_t size);
-int dmu_read_uio_dnode(dnode_t *dn, struct uio *uio, uint64_t size);
-int dmu_write_uio(objset_t *os, uint64_t object, struct uio *uio, uint64_t size,
- dmu_tx_t *tx);
-int dmu_write_uio_dbuf(dmu_buf_t *zdb, struct uio *uio, uint64_t size,
- dmu_tx_t *tx);
-int dmu_write_uio_dnode(dnode_t *dn, struct uio *uio, uint64_t size,
- dmu_tx_t *tx);
-#ifdef _KERNEL
-#ifdef illumos
-int dmu_write_pages(objset_t *os, uint64_t object, uint64_t offset,
- uint64_t size, struct page *pp, dmu_tx_t *tx);
-#else
-int dmu_write_pages(objset_t *os, uint64_t object, uint64_t offset,
- uint64_t size, struct vm_page **ppa, dmu_tx_t *tx);
-int dmu_read_pages(objset_t *os, uint64_t object, vm_page_t *ma, int count,
- int *rbehind, int *rahead, int last_size);
-#endif
-#endif
-struct arc_buf *dmu_request_arcbuf(dmu_buf_t *handle, int size);
-void dmu_return_arcbuf(struct arc_buf *buf);
-void dmu_assign_arcbuf_dnode(dnode_t *handle, uint64_t offset,
- struct arc_buf *buf, dmu_tx_t *tx);
-void dmu_assign_arcbuf(dmu_buf_t *handle, uint64_t offset, struct arc_buf *buf,
- dmu_tx_t *tx);
-int dmu_xuio_init(struct xuio *uio, int niov);
-void dmu_xuio_fini(struct xuio *uio);
-int dmu_xuio_add(struct xuio *uio, struct arc_buf *abuf, offset_t off,
- size_t n);
-int dmu_xuio_cnt(struct xuio *uio);
-struct arc_buf *dmu_xuio_arcbuf(struct xuio *uio, int i);
-void dmu_xuio_clear(struct xuio *uio, int i);
-void xuio_stat_wbuf_copied(void);
-void xuio_stat_wbuf_nocopy(void);
-
-extern boolean_t zfs_prefetch_disable;
-extern int zfs_max_recordsize;
-
-/*
- * Asynchronously try to read in the data.
- */
-void dmu_prefetch(objset_t *os, uint64_t object, int64_t level, uint64_t offset,
- uint64_t len, enum zio_priority pri);
-
-typedef struct dmu_object_info {
- /* All sizes are in bytes unless otherwise indicated. */
- uint32_t doi_data_block_size;
- uint32_t doi_metadata_block_size;
- dmu_object_type_t doi_type;
- dmu_object_type_t doi_bonus_type;
- uint64_t doi_bonus_size;
- uint8_t doi_indirection; /* 2 = dnode->indirect->data */
- uint8_t doi_checksum;
- uint8_t doi_compress;
- uint8_t doi_nblkptr;
- int8_t doi_pad[4];
- uint64_t doi_dnodesize;
- uint64_t doi_physical_blocks_512; /* data + metadata, 512b blks */
- uint64_t doi_max_offset;
- uint64_t doi_fill_count; /* number of non-empty blocks */
-} dmu_object_info_t;
-
-typedef void arc_byteswap_func_t(void *buf, size_t size);
-
-typedef struct dmu_object_type_info {
- dmu_object_byteswap_t ot_byteswap;
- boolean_t ot_metadata;
- boolean_t ot_dbuf_metadata_cache;
- char *ot_name;
-} dmu_object_type_info_t;
-
-typedef struct dmu_object_byteswap_info {
- arc_byteswap_func_t *ob_func;
- char *ob_name;
-} dmu_object_byteswap_info_t;
-
-extern const dmu_object_type_info_t dmu_ot[DMU_OT_NUMTYPES];
-extern const dmu_object_byteswap_info_t dmu_ot_byteswap[DMU_BSWAP_NUMFUNCS];
-
-/*
- * Get information on a DMU object.
- *
- * Return 0 on success or ENOENT if object is not allocated.
- *
- * If doi is NULL, just indicates whether the object exists.
- */
-int dmu_object_info(objset_t *os, uint64_t object, dmu_object_info_t *doi);
-void __dmu_object_info_from_dnode(struct dnode *dn, dmu_object_info_t *doi);
-/* Like dmu_object_info, but faster if you have a held dnode in hand. */
-void dmu_object_info_from_dnode(dnode_t *dn, dmu_object_info_t *doi);
-/* Like dmu_object_info, but faster if you have a held dbuf in hand. */
-void dmu_object_info_from_db(dmu_buf_t *db, dmu_object_info_t *doi);
-/*
- * Like dmu_object_info_from_db, but faster still when you only care about
- * the size. This is specifically optimized for zfs_getattr().
- */
-void dmu_object_size_from_db(dmu_buf_t *db, uint32_t *blksize,
- u_longlong_t *nblk512);
-
-void dmu_object_dnsize_from_db(dmu_buf_t *db, int *dnsize);
-
-typedef struct dmu_objset_stats {
- uint64_t dds_num_clones; /* number of clones of this */
- uint64_t dds_creation_txg;
- uint64_t dds_guid;
- dmu_objset_type_t dds_type;
- uint8_t dds_is_snapshot;
- uint8_t dds_inconsistent;
- char dds_origin[ZFS_MAX_DATASET_NAME_LEN];
-} dmu_objset_stats_t;
-
-/*
- * Get stats on a dataset.
- */
-void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat);
-
-/*
- * Add entries to the nvlist for all the objset's properties. See
- * zfs_prop_table[] and zfs(1m) for details on the properties.
- */
-void dmu_objset_stats(objset_t *os, struct nvlist *nv);
-
-/*
- * Get the space usage statistics for statvfs().
- *
- * refdbytes is the amount of space "referenced" by this objset.
- * availbytes is the amount of space available to this objset, taking
- * into account quotas & reservations, assuming that no other objsets
- * use the space first. These values correspond to the 'referenced' and
- * 'available' properties, described in the zfs(1m) manpage.
- *
- * usedobjs and availobjs are the number of objects currently allocated,
- * and available.
- */
-void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp,
- uint64_t *usedobjsp, uint64_t *availobjsp);
-
-/*
- * The fsid_guid is a 56-bit ID that can change to avoid collisions.
- * (Contrast with the ds_guid which is a 64-bit ID that will never
- * change, so there is a small probability that it will collide.)
- */
-uint64_t dmu_objset_fsid_guid(objset_t *os);
-
-/*
- * Get the [cm]time for an objset's snapshot dir
- */
-timestruc_t dmu_objset_snap_cmtime(objset_t *os);
-
-int dmu_objset_is_snapshot(objset_t *os);
-
-extern struct spa *dmu_objset_spa(objset_t *os);
-extern struct zilog *dmu_objset_zil(objset_t *os);
-extern struct dsl_pool *dmu_objset_pool(objset_t *os);
-extern struct dsl_dataset *dmu_objset_ds(objset_t *os);
-extern void dmu_objset_name(objset_t *os, char *buf);
-extern dmu_objset_type_t dmu_objset_type(objset_t *os);
-extern uint64_t dmu_objset_id(objset_t *os);
-extern uint64_t dmu_objset_dnodesize(objset_t *os);
-extern zfs_sync_type_t dmu_objset_syncprop(objset_t *os);
-extern zfs_logbias_op_t dmu_objset_logbias(objset_t *os);
-extern int dmu_snapshot_list_next(objset_t *os, int namelen, char *name,
- uint64_t *id, uint64_t *offp, boolean_t *case_conflict);
-extern int dmu_snapshot_realname(objset_t *os, char *name, char *real,
- int maxlen, boolean_t *conflict);
-extern int dmu_dir_list_next(objset_t *os, int namelen, char *name,
- uint64_t *idp, uint64_t *offp);
-
-typedef int objset_used_cb_t(dmu_object_type_t bonustype,
- void *bonus, uint64_t *userp, uint64_t *groupp);
-extern void dmu_objset_register_type(dmu_objset_type_t ost,
- objset_used_cb_t *cb);
-extern void dmu_objset_set_user(objset_t *os, void *user_ptr);
-extern void *dmu_objset_get_user(objset_t *os);
-
-/*
- * Return the txg number for the given assigned transaction.
- */
-uint64_t dmu_tx_get_txg(dmu_tx_t *tx);
-
-/*
- * Synchronous write.
- * If a parent zio is provided this function initiates a write on the
- * provided buffer as a child of the parent zio.
- * In the absence of a parent zio, the write is completed synchronously.
- * At write completion, blk is filled with the bp of the written block.
- * Note that while the data covered by this function will be on stable
- * storage when the write completes this new data does not become a
- * permanent part of the file until the associated transaction commits.
- */
-
-/*
- * {zfs,zvol,ztest}_get_done() args
- */
-typedef struct zgd {
- struct lwb *zgd_lwb;
- struct blkptr *zgd_bp;
- dmu_buf_t *zgd_db;
- struct locked_range *zgd_lr;
- void *zgd_private;
-} zgd_t;
-
-typedef void dmu_sync_cb_t(zgd_t *arg, int error);
-int dmu_sync(struct zio *zio, uint64_t txg, dmu_sync_cb_t *done, zgd_t *zgd);
-
-/*
- * Find the next hole or data block in file starting at *off
- * Return found offset in *off. Return ESRCH for end of file.
- */
-int dmu_offset_next(objset_t *os, uint64_t object, boolean_t hole,
- uint64_t *off);
-
-/*
- * Check if a DMU object has any dirty blocks. If so, sync out
- * all pending transaction groups. Otherwise, this function
- * does not alter DMU state. This could be improved to only sync
- * out the necessary transaction groups for this particular
- * object.
- */
-int dmu_object_wait_synced(objset_t *os, uint64_t object);
-
-/*
- * Initial setup and final teardown.
- */
-extern void dmu_init(void);
-extern void dmu_fini(void);
-
-typedef void (*dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp,
- uint64_t object, uint64_t offset, int len);
-void dmu_traverse_objset(objset_t *os, uint64_t txg_start,
- dmu_traverse_cb_t cb, void *arg);
-int dmu_diff(const char *tosnap_name, const char *fromsnap_name,
- struct file *fp, offset_t *offp);
-
-/* CRC64 table */
-#define ZFS_CRC64_POLY 0xC96C5795D7870F42ULL /* ECMA-182, reflected form */
-extern uint64_t zfs_crc64_table[256];
-
-extern int zfs_mdcomp_disable;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DMU_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h
deleted file mode 100644
index 5cf7aea4711f..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2012, Joyent, Inc. All rights reserved.
- * Copyright (c) 2012, Martin Matuska <mm@FreeBSD.org>. All rights reserved.
- * Copyright (c) 2013, 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DMU_IMPL_H
-#define _SYS_DMU_IMPL_H
-
-#include <sys/txg_impl.h>
-#include <sys/zio.h>
-#include <sys/dnode.h>
-#include <sys/kstat.h>
-#include <sys/zfs_context.h>
-#include <sys/zfs_ioctl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * This is the locking strategy for the DMU. Numbers in parenthesis are
- * cases that use that lock order, referenced below:
- *
- * ARC is self-contained
- * bplist is self-contained
- * refcount is self-contained
- * txg is self-contained (hopefully!)
- * zst_lock
- * zf_rwlock
- *
- * XXX try to improve evicting path?
- *
- * dp_config_rwlock > os_obj_lock > dn_struct_rwlock >
- * dn_dbufs_mtx > hash_mutexes > db_mtx > dd_lock > leafs
- *
- * dp_config_rwlock
- * must be held before: everything
- * protects dd namespace changes
- * protects property changes globally
- * held from:
- * dsl_dir_open/r:
- * dsl_dir_create_sync/w:
- * dsl_dir_sync_destroy/w:
- * dsl_dir_rename_sync/w:
- * dsl_prop_changed_notify/r:
- *
- * os_obj_lock
- * must be held before:
- * everything except dp_config_rwlock
- * protects os_obj_next
- * held from:
- * dmu_object_alloc: dn_dbufs_mtx, db_mtx, hash_mutexes, dn_struct_rwlock
- *
- * dn_struct_rwlock
- * must be held before:
- * everything except dp_config_rwlock and os_obj_lock
- * protects structure of dnode (eg. nlevels)
- * db_blkptr can change when syncing out change to nlevels
- * dn_maxblkid
- * dn_nlevels
- * dn_*blksz*
- * phys nlevels, maxblkid, physical blkptr_t's (?)
- * held from:
- * callers of dbuf_read_impl, dbuf_hold[_impl], dbuf_prefetch
- * dmu_object_info_from_dnode: dn_dirty_mtx (dn_datablksz)
- * dbuf_read_impl: db_mtx, dmu_zfetch()
- * dmu_zfetch: zf_rwlock/r, zst_lock, dbuf_prefetch()
- * dbuf_new_size: db_mtx
- * dbuf_dirty: db_mtx
- * dbuf_findbp: (callers, phys? - the real need)
- * dbuf_create: dn_dbufs_mtx, hash_mutexes, db_mtx (phys?)
- * dbuf_prefetch: dn_dirty_mtx, hash_mutexes, db_mtx, dn_dbufs_mtx
- * dbuf_hold_impl: hash_mutexes, db_mtx, dn_dbufs_mtx, dbuf_findbp()
- * dnode_sync/w (increase_indirection): db_mtx (phys)
- * dnode_set_blksz/w: dn_dbufs_mtx (dn_*blksz*)
- * dnode_new_blkid/w: (dn_maxblkid)
- * dnode_free_range/w: dn_dirty_mtx (dn_maxblkid)
- * dnode_next_offset: (phys)
- *
- * dn_dbufs_mtx
- * must be held before:
- * db_mtx, hash_mutexes
- * protects:
- * dn_dbufs
- * dn_evicted
- * held from:
- * dmu_evict_user: db_mtx (dn_dbufs)
- * dbuf_free_range: db_mtx (dn_dbufs)
- * dbuf_remove_ref: db_mtx, callees:
- * dbuf_hash_remove: hash_mutexes, db_mtx
- * dbuf_create: hash_mutexes, db_mtx (dn_dbufs)
- * dnode_set_blksz: (dn_dbufs)
- *
- * hash_mutexes (global)
- * must be held before:
- * db_mtx
- * protects dbuf_hash_table (global) and db_hash_next
- * held from:
- * dbuf_find: db_mtx
- * dbuf_hash_insert: db_mtx
- * dbuf_hash_remove: db_mtx
- *
- * db_mtx (meta-leaf)
- * must be held before:
- * dn_mtx, dn_dirty_mtx, dd_lock (leaf mutexes)
- * protects:
- * db_state
- * db_holds
- * db_buf
- * db_changed
- * db_data_pending
- * db_dirtied
- * db_link
- * db_dirty_node (??)
- * db_dirtycnt
- * db_d.*
- * db.*
- * held from:
- * dbuf_dirty: dn_mtx, dn_dirty_mtx
- * dbuf_dirty->dsl_dir_willuse_space: dd_lock
- * dbuf_dirty->dbuf_new_block->dsl_dataset_block_freeable: dd_lock
- * dbuf_undirty: dn_dirty_mtx (db_d)
- * dbuf_write_done: dn_dirty_mtx (db_state)
- * dbuf_*
- * dmu_buf_update_user: none (db_d)
- * dmu_evict_user: none (db_d) (maybe can eliminate)
- * dbuf_find: none (db_holds)
- * dbuf_hash_insert: none (db_holds)
- * dmu_buf_read_array_impl: none (db_state, db_changed)
- * dmu_sync: none (db_dirty_node, db_d)
- * dnode_reallocate: none (db)
- *
- * dn_mtx (leaf)
- * protects:
- * dn_dirty_dbufs
- * dn_ranges
- * phys accounting
- * dn_allocated_txg
- * dn_free_txg
- * dn_assigned_txg
- * dn_dirty_txg
- * dn_notxholds
- * dn_dirtyctx
- * dn_dirtyctx_firstset
- * (dn_phys copy fields?)
- * (dn_phys contents?)
- * held from:
- * dnode_*
- * dbuf_dirty: none
- * dbuf_sync: none (phys accounting)
- * dbuf_undirty: none (dn_ranges, dn_dirty_dbufs)
- * dbuf_write_done: none (phys accounting)
- * dmu_object_info_from_dnode: none (accounting)
- * dmu_tx_commit: none
- * dmu_tx_hold_object_impl: none
- * dmu_tx_try_assign: dn_notxholds(cv)
- * dmu_tx_unassign: none
- *
- * dd_lock
- * must be held before:
- * ds_lock
- * ancestors' dd_lock
- * protects:
- * dd_prop_cbs
- * dd_sync_*
- * dd_used_bytes
- * dd_tempreserved
- * dd_space_towrite
- * dd_myname
- * dd_phys accounting?
- * held from:
- * dsl_dir_*
- * dsl_prop_changed_notify: none (dd_prop_cbs)
- * dsl_prop_register: none (dd_prop_cbs)
- * dsl_prop_unregister: none (dd_prop_cbs)
- *
- * os_lock (leaf)
- * protects:
- * os_dirty_dnodes
- * os_free_dnodes
- * os_dnodes
- * os_downgraded_dbufs
- * dn_dirtyblksz
- * dn_dirty_link
- * held from:
- * dnode_create: none (os_dnodes)
- * dnode_destroy: none (os_dnodes)
- * dnode_setdirty: none (dn_dirtyblksz, os_*_dnodes)
- * dnode_free: none (dn_dirtyblksz, os_*_dnodes)
- *
- * ds_lock
- * protects:
- * ds_objset
- * ds_open_refcount
- * ds_snapname
- * ds_phys accounting
- * ds_phys userrefs zapobj
- * ds_reserved
- * held from:
- * dsl_dataset_*
- *
- * dr_mtx (leaf)
- * protects:
- * dr_children
- * held from:
- * dbuf_dirty
- * dbuf_undirty
- * dbuf_sync_indirect
- * dnode_new_blkid
- */
-
-struct objset;
-struct dmu_pool;
-
-typedef struct dmu_xuio {
- int next;
- int cnt;
- struct arc_buf **bufs;
- iovec_t *iovp;
-} dmu_xuio_t;
-
-typedef struct xuio_stats {
- /* loaned yet not returned arc_buf */
- kstat_named_t xuiostat_onloan_rbuf;
- kstat_named_t xuiostat_onloan_wbuf;
- /* whether a copy is made when loaning out a read buffer */
- kstat_named_t xuiostat_rbuf_copied;
- kstat_named_t xuiostat_rbuf_nocopy;
- /* whether a copy is made when assigning a write buffer */
- kstat_named_t xuiostat_wbuf_copied;
- kstat_named_t xuiostat_wbuf_nocopy;
-} xuio_stats_t;
-
-static xuio_stats_t xuio_stats = {
- { "onloan_read_buf", KSTAT_DATA_UINT64 },
- { "onloan_write_buf", KSTAT_DATA_UINT64 },
- { "read_buf_copied", KSTAT_DATA_UINT64 },
- { "read_buf_nocopy", KSTAT_DATA_UINT64 },
- { "write_buf_copied", KSTAT_DATA_UINT64 },
- { "write_buf_nocopy", KSTAT_DATA_UINT64 }
-};
-
-#define XUIOSTAT_INCR(stat, val) \
- atomic_add_64(&xuio_stats.stat.value.ui64, (val))
-#define XUIOSTAT_BUMP(stat) XUIOSTAT_INCR(stat, 1)
-
-/*
- * The list of data whose inclusion in a send stream can be pending from
- * one call to backup_cb to another. Multiple calls to dump_free() and
- * dump_freeobjects() can be aggregated into a single DRR_FREE or
- * DRR_FREEOBJECTS replay record.
- */
-typedef enum {
- PENDING_NONE,
- PENDING_FREE,
- PENDING_FREEOBJECTS
-} dmu_pendop_t;
-
-typedef struct dmu_sendarg {
- list_node_t dsa_link;
- dmu_replay_record_t *dsa_drr;
- kthread_t *dsa_td;
- struct file *dsa_fp;
- int dsa_outfd;
- struct proc *dsa_proc;
- offset_t *dsa_off;
- objset_t *dsa_os;
- zio_cksum_t dsa_zc;
- uint64_t dsa_toguid;
- int dsa_err;
- dmu_pendop_t dsa_pending_op;
- uint64_t dsa_featureflags;
- uint64_t dsa_last_data_object;
- uint64_t dsa_last_data_offset;
- uint64_t dsa_resume_object;
- uint64_t dsa_resume_offset;
- boolean_t dsa_sent_begin;
- boolean_t dsa_sent_end;
-} dmu_sendarg_t;
-
-void dmu_object_zapify(objset_t *, uint64_t, dmu_object_type_t, dmu_tx_t *);
-void dmu_object_free_zapified(objset_t *, uint64_t, dmu_tx_t *);
-int dmu_buf_hold_noread(objset_t *, uint64_t, uint64_t,
- void *, dmu_buf_t **);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DMU_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h
deleted file mode 100644
index cae1c7719a83..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h
+++ /dev/null
@@ -1,221 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-/* Portions Copyright 2010 Robert Milkowski */
-
-#ifndef _SYS_DMU_OBJSET_H
-#define _SYS_DMU_OBJSET_H
-
-#include <sys/spa.h>
-#include <sys/arc.h>
-#include <sys/txg.h>
-#include <sys/zfs_context.h>
-#include <sys/dnode.h>
-#include <sys/zio.h>
-#include <sys/zil.h>
-#include <sys/sa.h>
-#include <sys/zfs_ioctl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern krwlock_t os_lock;
-
-struct dsl_pool;
-struct dsl_dataset;
-struct dmu_tx;
-
-#define OBJSET_PHYS_SIZE 2048
-#define OBJSET_OLD_PHYS_SIZE 1024
-
-#define OBJSET_BUF_HAS_USERUSED(buf) \
- (arc_buf_size(buf) > OBJSET_OLD_PHYS_SIZE)
-
-#define OBJSET_FLAG_USERACCOUNTING_COMPLETE (1ULL<<0)
-
-typedef struct objset_phys {
- dnode_phys_t os_meta_dnode;
- zil_header_t os_zil_header;
- uint64_t os_type;
- uint64_t os_flags;
- char os_pad[OBJSET_PHYS_SIZE - sizeof (dnode_phys_t)*3 -
- sizeof (zil_header_t) - sizeof (uint64_t)*2];
- dnode_phys_t os_userused_dnode;
- dnode_phys_t os_groupused_dnode;
-} objset_phys_t;
-
-#define OBJSET_PROP_UNINITIALIZED ((uint64_t)-1)
-struct objset {
- /* Immutable: */
- struct dsl_dataset *os_dsl_dataset;
- spa_t *os_spa;
- arc_buf_t *os_phys_buf;
- objset_phys_t *os_phys;
- /*
- * The following "special" dnodes have no parent, are exempt
- * from dnode_move(), and are not recorded in os_dnodes, but they
- * root their descendents in this objset using handles anyway, so
- * that all access to dnodes from dbufs consistently uses handles.
- */
- dnode_handle_t os_meta_dnode;
- dnode_handle_t os_userused_dnode;
- dnode_handle_t os_groupused_dnode;
- zilog_t *os_zil;
-
- list_node_t os_evicting_node;
-
- /* can change, under dsl_dir's locks: */
- uint64_t os_dnodesize; /* default dnode size for new objects */
- enum zio_checksum os_checksum;
- enum zio_compress os_compress;
- uint8_t os_copies;
- enum zio_checksum os_dedup_checksum;
- boolean_t os_dedup_verify;
- zfs_logbias_op_t os_logbias;
- zfs_cache_type_t os_primary_cache;
- zfs_cache_type_t os_secondary_cache;
- zfs_sync_type_t os_sync;
- zfs_redundant_metadata_type_t os_redundant_metadata;
- int os_recordsize;
- /*
- * The next four values are used as a cache of whatever's on disk, and
- * are initialized the first time these properties are queried. Before
- * being initialized with their real values, their values are
- * OBJSET_PROP_UNINITIALIZED.
- */
- uint64_t os_version;
- uint64_t os_normalization;
- uint64_t os_utf8only;
- uint64_t os_casesensitivity;
- /*
- * The largest zpl file block allowed in special class.
- * cached here instead of zfsvfs for easier access.
- */
- int os_zpl_special_smallblock;
-
- /*
- * Pointer is constant; the blkptr it points to is protected by
- * os_dsl_dataset->ds_bp_rwlock
- */
- blkptr_t *os_rootbp;
-
- /* no lock needed: */
- struct dmu_tx *os_synctx; /* XXX sketchy */
- zil_header_t os_zil_header;
- multilist_t *os_synced_dnodes;
- uint64_t os_flags;
- uint64_t os_freed_dnodes;
- boolean_t os_rescan_dnodes;
-
- /* Protected by os_obj_lock */
- kmutex_t os_obj_lock;
- uint64_t os_obj_next_chunk;
-
- /* Per-CPU next object to allocate, protected by atomic ops. */
- uint64_t *os_obj_next_percpu;
- int os_obj_next_percpu_len;
-
- /* Protected by os_lock */
- kmutex_t os_lock;
- multilist_t *os_dirty_dnodes[TXG_SIZE];
- list_t os_dnodes;
- list_t os_downgraded_dbufs;
-
- /* Protects changes to DMU_{USER,GROUP}USED_OBJECT */
- kmutex_t os_userused_lock;
-
- /* stuff we store for the user */
- kmutex_t os_user_ptr_lock;
- void *os_user_ptr;
- sa_os_t *os_sa;
-};
-
-#define DMU_META_OBJSET 0
-#define DMU_META_DNODE_OBJECT 0
-#define DMU_OBJECT_IS_SPECIAL(obj) ((int64_t)(obj) <= 0)
-#define DMU_META_DNODE(os) ((os)->os_meta_dnode.dnh_dnode)
-#define DMU_USERUSED_DNODE(os) ((os)->os_userused_dnode.dnh_dnode)
-#define DMU_GROUPUSED_DNODE(os) ((os)->os_groupused_dnode.dnh_dnode)
-
-#define DMU_OS_IS_L2CACHEABLE(os) \
- ((os)->os_secondary_cache == ZFS_CACHE_ALL || \
- (os)->os_secondary_cache == ZFS_CACHE_METADATA)
-
-#define DMU_OS_IS_L2COMPRESSIBLE(os) (zfs_mdcomp_disable == B_FALSE)
-
-/* called from zpl */
-int dmu_objset_hold(const char *name, void *tag, objset_t **osp);
-int dmu_objset_own(const char *name, dmu_objset_type_t type,
- boolean_t readonly, void *tag, objset_t **osp);
-int dmu_objset_own_obj(struct dsl_pool *dp, uint64_t obj,
- dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp);
-void dmu_objset_refresh_ownership(struct dsl_dataset *ds,
- struct dsl_dataset **newds, void *tag);
-void dmu_objset_rele(objset_t *os, void *tag);
-void dmu_objset_disown(objset_t *os, void *tag);
-int dmu_objset_from_ds(struct dsl_dataset *ds, objset_t **osp);
-
-void dmu_objset_stats(objset_t *os, nvlist_t *nv);
-void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat);
-void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp,
- uint64_t *usedobjsp, uint64_t *availobjsp);
-uint64_t dmu_objset_fsid_guid(objset_t *os);
-int dmu_objset_find_dp(struct dsl_pool *dp, uint64_t ddobj,
- int func(struct dsl_pool *, struct dsl_dataset *, void *),
- void *arg, int flags);
-int dmu_objset_prefetch(const char *name, void *arg);
-void dmu_objset_evict_dbufs(objset_t *os);
-timestruc_t dmu_objset_snap_cmtime(objset_t *os);
-
-/* called from dsl */
-void dmu_objset_sync(objset_t *os, zio_t *zio, dmu_tx_t *tx);
-boolean_t dmu_objset_is_dirty(objset_t *os, uint64_t txg);
-objset_t *dmu_objset_create_impl(spa_t *spa, struct dsl_dataset *ds,
- blkptr_t *bp, dmu_objset_type_t type, dmu_tx_t *tx);
-int dmu_objset_open_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp,
- objset_t **osp);
-void dmu_objset_evict(objset_t *os);
-void dmu_objset_do_userquota_updates(objset_t *os, dmu_tx_t *tx);
-void dmu_objset_userquota_get_ids(dnode_t *dn, boolean_t before, dmu_tx_t *tx);
-boolean_t dmu_objset_userused_enabled(objset_t *os);
-int dmu_objset_userspace_upgrade(objset_t *os);
-boolean_t dmu_objset_userspace_present(objset_t *os);
-int dmu_fsname(const char *snapname, char *buf);
-
-void dmu_objset_evict_done(objset_t *os);
-void dmu_objset_willuse_space(objset_t *os, int64_t space, dmu_tx_t *tx);
-
-void dmu_objset_init(void);
-void dmu_objset_fini(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DMU_OBJSET_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h
deleted file mode 100644
index 1f4b1f2cde9f..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h
+++ /dev/null
@@ -1,93 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2013, Joyent, Inc. All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-#ifndef _DMU_SEND_H
-#define _DMU_SEND_H
-
-#include <sys/spa.h>
-
-struct vnode;
-struct dsl_dataset;
-struct drr_begin;
-struct avl_tree;
-struct dmu_replay_record;
-
-extern const char *recv_clone_name;
-
-int dmu_send(const char *tosnap, const char *fromsnap, boolean_t embedok,
- boolean_t large_block_ok, boolean_t compressok, int outfd,
- uint64_t resumeobj, uint64_t resumeoff,
-#ifdef illumos
- struct vnode *vp, offset_t *off);
-#else
- struct file *fp, offset_t *off);
-#endif
-int dmu_send_estimate(struct dsl_dataset *ds, struct dsl_dataset *fromds,
- boolean_t stream_compressed, uint64_t *sizep);
-int dmu_send_estimate_from_txg(struct dsl_dataset *ds, uint64_t fromtxg,
- boolean_t stream_compressed, uint64_t *sizep);
-int dmu_send_obj(const char *pool, uint64_t tosnap, uint64_t fromsnap,
- boolean_t embedok, boolean_t large_block_ok, boolean_t compressok,
-#ifdef illumos
- int outfd, struct vnode *vp, offset_t *off);
-#else
- int outfd, struct file *fp, offset_t *off);
-#endif
-
-typedef struct dmu_recv_cookie {
- struct dsl_dataset *drc_ds;
- struct dmu_replay_record *drc_drr_begin;
- struct drr_begin *drc_drrb;
- const char *drc_tofs;
- const char *drc_tosnap;
- boolean_t drc_newfs;
- boolean_t drc_byteswap;
- boolean_t drc_force;
- boolean_t drc_resumable;
- boolean_t drc_clone;
- struct avl_tree *drc_guid_to_ds_map;
- zio_cksum_t drc_cksum;
- uint64_t drc_newsnapobj;
- void *drc_owner;
- cred_t *drc_cred;
-} dmu_recv_cookie_t;
-
-int dmu_recv_begin(char *tofs, char *tosnap,
- struct dmu_replay_record *drr_begin,
- boolean_t force, boolean_t resumable, char *origin, dmu_recv_cookie_t *drc);
-#ifdef illumos
-int dmu_recv_stream(dmu_recv_cookie_t *drc, struct vnode *vp, offset_t *voffp,
-#else
-int dmu_recv_stream(dmu_recv_cookie_t *drc, struct file *fp, offset_t *voffp,
-#endif
- int cleanup_fd, uint64_t *action_handlep);
-int dmu_recv_end(dmu_recv_cookie_t *drc, void *owner);
-boolean_t dmu_objset_is_receiving(objset_t *os);
-
-#endif /* _DMU_SEND_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h
deleted file mode 100644
index c010edd440d9..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h
+++ /dev/null
@@ -1,69 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DMU_TRAVERSE_H
-#define _SYS_DMU_TRAVERSE_H
-
-#include <sys/zfs_context.h>
-#include <sys/spa.h>
-#include <sys/zio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dnode_phys;
-struct dsl_dataset;
-struct zilog;
-struct arc_buf;
-
-typedef int (blkptr_cb_t)(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
- const zbookmark_phys_t *zb, const struct dnode_phys *dnp, void *arg);
-
-#define TRAVERSE_PRE (1<<0)
-#define TRAVERSE_POST (1<<1)
-#define TRAVERSE_PREFETCH_METADATA (1<<2)
-#define TRAVERSE_PREFETCH_DATA (1<<3)
-#define TRAVERSE_PREFETCH (TRAVERSE_PREFETCH_METADATA | TRAVERSE_PREFETCH_DATA)
-#define TRAVERSE_HARD (1<<4)
-
-/* Special traverse error return value to indicate skipping of children */
-#define TRAVERSE_VISIT_NO_CHILDREN -1
-
-int traverse_dataset(struct dsl_dataset *ds,
- uint64_t txg_start, int flags, blkptr_cb_t func, void *arg);
-int traverse_dataset_resume(struct dsl_dataset *ds, uint64_t txg_start,
- zbookmark_phys_t *resume, int flags, blkptr_cb_t func, void *arg);
-int traverse_dataset_destroyed(spa_t *spa, blkptr_t *blkptr,
- uint64_t txg_start, zbookmark_phys_t *resume, int flags,
- blkptr_cb_t func, void *arg);
-int traverse_pool(spa_t *spa,
- uint64_t txg_start, int flags, blkptr_cb_t func, void *arg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DMU_TRAVERSE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h
deleted file mode 100644
index 82b8946e5f6d..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2012, 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DMU_TX_H
-#define _SYS_DMU_TX_H
-
-#include <sys/dmu.h>
-#include <sys/txg.h>
-#include <sys/refcount.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dmu_buf_impl;
-struct dmu_tx_hold;
-struct dnode_link;
-struct dsl_pool;
-struct dnode;
-struct dsl_dir;
-
-struct dmu_tx {
- /*
- * No synchronization is needed because a tx can only be handled
- * by one thread.
- */
- list_t tx_holds; /* list of dmu_tx_hold_t */
- objset_t *tx_objset;
- struct dsl_dir *tx_dir;
- struct dsl_pool *tx_pool;
- uint64_t tx_txg;
- uint64_t tx_lastsnap_txg;
- uint64_t tx_lasttried_txg;
- txg_handle_t tx_txgh;
- void *tx_tempreserve_cookie;
- struct dmu_tx_hold *tx_needassign_txh;
-
- /* list of dmu_tx_callback_t on this dmu_tx */
- list_t tx_callbacks;
-
- /* placeholder for syncing context, doesn't need specific holds */
- boolean_t tx_anyobj;
-
- /* transaction is marked as being a "net free" of space */
- boolean_t tx_netfree;
-
- /* time this transaction was created */
- hrtime_t tx_start;
-
- /* need to wait for sufficient dirty space */
- boolean_t tx_wait_dirty;
-
- /* has this transaction already been delayed? */
- boolean_t tx_dirty_delayed;
-
- int tx_err;
-};
-
-enum dmu_tx_hold_type {
- THT_NEWOBJECT,
- THT_WRITE,
- THT_BONUS,
- THT_FREE,
- THT_ZAP,
- THT_SPACE,
- THT_SPILL,
- THT_NUMTYPES
-};
-
-typedef struct dmu_tx_hold {
- dmu_tx_t *txh_tx;
- list_node_t txh_node;
- struct dnode *txh_dnode;
- zfs_refcount_t txh_space_towrite;
- zfs_refcount_t txh_memory_tohold;
- enum dmu_tx_hold_type txh_type;
- uint64_t txh_arg1;
- uint64_t txh_arg2;
-} dmu_tx_hold_t;
-
-typedef struct dmu_tx_callback {
- list_node_t dcb_node; /* linked to tx_callbacks list */
- dmu_tx_callback_func_t *dcb_func; /* caller function pointer */
- void *dcb_data; /* caller private data */
-} dmu_tx_callback_t;
-
-/*
- * These routines are defined in dmu.h, and are called by the user.
- */
-dmu_tx_t *dmu_tx_create(objset_t *dd);
-int dmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how);
-void dmu_tx_commit(dmu_tx_t *tx);
-void dmu_tx_abort(dmu_tx_t *tx);
-uint64_t dmu_tx_get_txg(dmu_tx_t *tx);
-struct dsl_pool *dmu_tx_pool(dmu_tx_t *tx);
-void dmu_tx_wait(dmu_tx_t *tx);
-
-void dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *dcb_func,
- void *dcb_data);
-void dmu_tx_do_callbacks(list_t *cb_list, int error);
-
-/*
- * These routines are defined in dmu_spa.h, and are called by the SPA.
- */
-extern dmu_tx_t *dmu_tx_create_assigned(struct dsl_pool *dp, uint64_t txg);
-
-/*
- * These routines are only called by the DMU.
- */
-dmu_tx_t *dmu_tx_create_dd(dsl_dir_t *dd);
-int dmu_tx_is_syncing(dmu_tx_t *tx);
-int dmu_tx_private_ok(dmu_tx_t *tx);
-void dmu_tx_add_new_object(dmu_tx_t *tx, dnode_t *dn);
-void dmu_tx_dirty_buf(dmu_tx_t *tx, struct dmu_buf_impl *db);
-void dmu_tx_hold_space(dmu_tx_t *tx, uint64_t space);
-
-#ifdef ZFS_DEBUG
-#define DMU_TX_DIRTY_BUF(tx, db) dmu_tx_dirty_buf(tx, db)
-#else
-#define DMU_TX_DIRTY_BUF(tx, db)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DMU_TX_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_zfetch.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_zfetch.h
deleted file mode 100644
index 21a3ff3a2032..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_zfetch.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2014 by Delphix. All rights reserved.
- */
-
-#ifndef _DMU_ZFETCH_H
-#define _DMU_ZFETCH_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern uint64_t zfetch_array_rd_sz;
-
-struct dnode; /* so we can reference dnode */
-
-typedef struct zstream {
- uint64_t zs_blkid; /* expect next access at this blkid */
- uint64_t zs_pf_blkid; /* next block to prefetch */
-
- /*
- * We will next prefetch the L1 indirect block of this level-0
- * block id.
- */
- uint64_t zs_ipf_blkid;
-
- kmutex_t zs_lock; /* protects stream */
- hrtime_t zs_atime; /* time last prefetch issued */
- list_node_t zs_node; /* link for zf_stream */
-} zstream_t;
-
-typedef struct zfetch {
- krwlock_t zf_rwlock; /* protects zfetch structure */
- list_t zf_stream; /* list of zstream_t's */
- struct dnode *zf_dnode; /* dnode that owns this zfetch */
-} zfetch_t;
-
-void zfetch_init(void);
-void zfetch_fini(void);
-
-void dmu_zfetch_init(zfetch_t *, struct dnode *);
-void dmu_zfetch_fini(zfetch_t *);
-void dmu_zfetch(zfetch_t *, uint64_t, uint64_t, boolean_t);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _DMU_ZFETCH_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h
deleted file mode 100644
index b1a8547013c5..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h
+++ /dev/null
@@ -1,599 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- */
-
-#ifndef _SYS_DNODE_H
-#define _SYS_DNODE_H
-
-#include <sys/zfs_context.h>
-#include <sys/avl.h>
-#include <sys/spa.h>
-#include <sys/txg.h>
-#include <sys/zio.h>
-#include <sys/refcount.h>
-#include <sys/dmu_zfetch.h>
-#include <sys/zrlock.h>
-#include <sys/multilist.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * dnode_hold() flags.
- */
-#define DNODE_MUST_BE_ALLOCATED 1
-#define DNODE_MUST_BE_FREE 2
-
-/*
- * dnode_next_offset() flags.
- */
-#define DNODE_FIND_HOLE 1
-#define DNODE_FIND_BACKWARDS 2
-#define DNODE_FIND_HAVELOCK 4
-
-/*
- * Fixed constants.
- */
-#define DNODE_SHIFT 9 /* 512 bytes */
-#define DN_MIN_INDBLKSHIFT 12 /* 4k */
-/*
- * If we ever increase this value beyond 20, we need to revisit all logic that
- * does x << level * ebps to handle overflow. With a 1M indirect block size,
- * 4 levels of indirect blocks would not be able to guarantee addressing an
- * entire object, so 5 levels will be used, but 5 * (20 - 7) = 65.
- */
-#define DN_MAX_INDBLKSHIFT 17 /* 128k */
-#define DNODE_BLOCK_SHIFT 14 /* 16k */
-#define DNODE_CORE_SIZE 64 /* 64 bytes for dnode sans blkptrs */
-#define DN_MAX_OBJECT_SHIFT 48 /* 256 trillion (zfs_fid_t limit) */
-#define DN_MAX_OFFSET_SHIFT 64 /* 2^64 bytes in a dnode */
-
-/*
- * dnode id flags
- *
- * Note: a file will never ever have its
- * ids moved from bonus->spill
- * and only in a crypto environment would it be on spill
- */
-#define DN_ID_CHKED_BONUS 0x1
-#define DN_ID_CHKED_SPILL 0x2
-#define DN_ID_OLD_EXIST 0x4
-#define DN_ID_NEW_EXIST 0x8
-
-/*
- * Derived constants.
- */
-#define DNODE_MIN_SIZE (1 << DNODE_SHIFT)
-#define DNODE_MAX_SIZE (1 << DNODE_BLOCK_SHIFT)
-#define DNODE_BLOCK_SIZE (1 << DNODE_BLOCK_SHIFT)
-#define DNODE_MIN_SLOTS (DNODE_MIN_SIZE >> DNODE_SHIFT)
-#define DNODE_MAX_SLOTS (DNODE_MAX_SIZE >> DNODE_SHIFT)
-#define DN_BONUS_SIZE(dnsize) ((dnsize) - DNODE_CORE_SIZE - \
- (1 << SPA_BLKPTRSHIFT))
-#define DN_SLOTS_TO_BONUSLEN(slots) DN_BONUS_SIZE((slots) << DNODE_SHIFT)
-#define DN_OLD_MAX_BONUSLEN (DN_BONUS_SIZE(DNODE_MIN_SIZE))
-#define DN_MAX_NBLKPTR ((DNODE_MIN_SIZE - DNODE_CORE_SIZE) >> SPA_BLKPTRSHIFT)
-#define DN_MAX_OBJECT (1ULL << DN_MAX_OBJECT_SHIFT)
-#define DN_ZERO_BONUSLEN (DN_BONUS_SIZE(DNODE_MAX_SIZE) + 1)
-#define DN_KILL_SPILLBLK (1)
-
-#define DN_SLOT_UNINIT ((void *)NULL) /* Uninitialized */
-#define DN_SLOT_FREE ((void *)1UL) /* Free slot */
-#define DN_SLOT_ALLOCATED ((void *)2UL) /* Allocated slot */
-#define DN_SLOT_INTERIOR ((void *)3UL) /* Interior allocated slot */
-#define DN_SLOT_IS_PTR(dn) ((void *)dn > DN_SLOT_INTERIOR)
-#define DN_SLOT_IS_VALID(dn) ((void *)dn != NULL)
-
-#define DNODES_PER_BLOCK_SHIFT (DNODE_BLOCK_SHIFT - DNODE_SHIFT)
-#define DNODES_PER_BLOCK (1ULL << DNODES_PER_BLOCK_SHIFT)
-
-/*
- * This is inaccurate if the indblkshift of the particular object is not the
- * max. But it's only used by userland to calculate the zvol reservation.
- */
-#define DNODES_PER_LEVEL_SHIFT (DN_MAX_INDBLKSHIFT - SPA_BLKPTRSHIFT)
-#define DNODES_PER_LEVEL (1ULL << DNODES_PER_LEVEL_SHIFT)
-
-/* The +2 here is a cheesy way to round up */
-#define DN_MAX_LEVELS (2 + ((DN_MAX_OFFSET_SHIFT - SPA_MINBLOCKSHIFT) / \
- (DN_MIN_INDBLKSHIFT - SPA_BLKPTRSHIFT)))
-
-#define DN_BONUS(dnp) ((void*)((dnp)->dn_bonus + \
- (((dnp)->dn_nblkptr - 1) * sizeof (blkptr_t))))
-#define DN_MAX_BONUS_LEN(dnp) \
- ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) ? \
- (uint8_t *)DN_SPILL_BLKPTR(dnp) - (uint8_t *)DN_BONUS(dnp) : \
- (uint8_t *)(dnp + (dnp->dn_extra_slots + 1)) - (uint8_t *)DN_BONUS(dnp))
-
-#define DN_USED_BYTES(dnp) (((dnp)->dn_flags & DNODE_FLAG_USED_BYTES) ? \
- (dnp)->dn_used : (dnp)->dn_used << SPA_MINBLOCKSHIFT)
-
-#define EPB(blkshift, typeshift) (1 << (blkshift - typeshift))
-
-struct dmu_buf_impl;
-struct objset;
-struct zio;
-
-enum dnode_dirtycontext {
- DN_UNDIRTIED,
- DN_DIRTY_OPEN,
- DN_DIRTY_SYNC
-};
-
-/* Is dn_used in bytes? if not, it's in multiples of SPA_MINBLOCKSIZE */
-#define DNODE_FLAG_USED_BYTES (1<<0)
-#define DNODE_FLAG_USERUSED_ACCOUNTED (1<<1)
-
-/* Does dnode have a SA spill blkptr in bonus? */
-#define DNODE_FLAG_SPILL_BLKPTR (1<<2)
-
-/*
- * VARIABLE-LENGTH (LARGE) DNODES
- *
- * The motivation for variable-length dnodes is to eliminate the overhead
- * associated with using spill blocks. Spill blocks are used to store
- * system attribute data (i.e. file metadata) that does not fit in the
- * dnode's bonus buffer. By allowing a larger bonus buffer area the use of
- * a spill block can be avoided. Spill blocks potentially incur an
- * additional read I/O for every dnode in a dnode block. As a worst case
- * example, reading 32 dnodes from a 16k dnode block and all of the spill
- * blocks could issue 33 separate reads. Now suppose those dnodes have size
- * 1024 and therefore don't need spill blocks. Then the worst case number
- * of blocks read is reduced to from 33 to two--one per dnode block.
- *
- * ZFS-on-Linux systems that make heavy use of extended attributes benefit
- * from this feature. In particular, ZFS-on-Linux supports the xattr=sa
- * dataset property which allows file extended attribute data to be stored
- * in the dnode bonus buffer as an alternative to the traditional
- * directory-based format. Workloads such as SELinux and the Lustre
- * distributed filesystem often store enough xattr data to force spill
- * blocks when xattr=sa is in effect. Large dnodes may therefore provide a
- * performance benefit to such systems. Other use cases that benefit from
- * this feature include files with large ACLs and symbolic links with long
- * target names.
- *
- * The size of a dnode may be a multiple of 512 bytes up to the size of a
- * dnode block (currently 16384 bytes). The dn_extra_slots field of the
- * on-disk dnode_phys_t structure describes the size of the physical dnode
- * on disk. The field represents how many "extra" dnode_phys_t slots a
- * dnode consumes in its dnode block. This convention results in a value of
- * 0 for 512 byte dnodes which preserves on-disk format compatibility with
- * older software which doesn't support large dnodes.
- *
- * Similarly, the in-memory dnode_t structure has a dn_num_slots field
- * to represent the total number of dnode_phys_t slots consumed on disk.
- * Thus dn->dn_num_slots is 1 greater than the corresponding
- * dnp->dn_extra_slots. This difference in convention was adopted
- * because, unlike on-disk structures, backward compatibility is not a
- * concern for in-memory objects, so we used a more natural way to
- * represent size for a dnode_t.
- *
- * The default size for newly created dnodes is determined by the value of
- * the "dnodesize" dataset property. By default the property is set to
- * "legacy" which is compatible with older software. Setting the property
- * to "auto" will allow the filesystem to choose the most suitable dnode
- * size. Currently this just sets the default dnode size to 1k, but future
- * code improvements could dynamically choose a size based on observed
- * workload patterns. Dnodes of varying sizes can coexist within the same
- * dataset and even within the same dnode block.
- */
-
-typedef struct dnode_phys {
- uint8_t dn_type; /* dmu_object_type_t */
- uint8_t dn_indblkshift; /* ln2(indirect block size) */
- uint8_t dn_nlevels; /* 1=dn_blkptr->data blocks */
- uint8_t dn_nblkptr; /* length of dn_blkptr */
- uint8_t dn_bonustype; /* type of data in bonus buffer */
- uint8_t dn_checksum; /* ZIO_CHECKSUM type */
- uint8_t dn_compress; /* ZIO_COMPRESS type */
- uint8_t dn_flags; /* DNODE_FLAG_* */
- uint16_t dn_datablkszsec; /* data block size in 512b sectors */
- uint16_t dn_bonuslen; /* length of dn_bonus */
- uint8_t dn_extra_slots; /* # of subsequent slots consumed */
- uint8_t dn_pad2[3];
-
- /* accounting is protected by dn_dirty_mtx */
- uint64_t dn_maxblkid; /* largest allocated block ID */
- uint64_t dn_used; /* bytes (or sectors) of disk space */
-
- /*
- * Both dn_pad2 and dn_pad3 are protected by the block's MAC. This
- * allows us to protect any fields that might be added here in the
- * future. In either case, developers will want to check
- * zio_crypt_init_uios_dnode() to ensure the new field is being
- * protected properly.
- */
- uint64_t dn_pad3[4];
- union {
- blkptr_t dn_blkptr[1+DN_OLD_MAX_BONUSLEN/sizeof (blkptr_t)];
- struct {
- blkptr_t __dn_ignore1;
- uint8_t dn_bonus[DN_OLD_MAX_BONUSLEN];
- };
- struct {
- blkptr_t __dn_ignore2;
- uint8_t __dn_ignore3[DN_OLD_MAX_BONUSLEN -
- sizeof (blkptr_t)];
- blkptr_t dn_spill;
- };
- };
-} dnode_phys_t;
-
-#define DN_SPILL_BLKPTR(dnp) (blkptr_t *)((char *)(dnp) + \
- (((dnp)->dn_extra_slots + 1) << DNODE_SHIFT) - (1 << SPA_BLKPTRSHIFT))
-
-struct dnode {
- /*
- * Protects the structure of the dnode, including the number of levels
- * of indirection (dn_nlevels), dn_maxblkid, and dn_next_*
- */
- krwlock_t dn_struct_rwlock;
-
- /* Our link on dn_objset->os_dnodes list; protected by os_lock. */
- list_node_t dn_link;
-
- /* immutable: */
- struct objset *dn_objset;
- uint64_t dn_object;
- struct dmu_buf_impl *dn_dbuf;
- struct dnode_handle *dn_handle;
- dnode_phys_t *dn_phys; /* pointer into dn->dn_dbuf->db.db_data */
-
- /*
- * Copies of stuff in dn_phys. They're valid in the open
- * context (eg. even before the dnode is first synced).
- * Where necessary, these are protected by dn_struct_rwlock.
- */
- dmu_object_type_t dn_type; /* object type */
- uint16_t dn_bonuslen; /* bonus length */
- uint8_t dn_bonustype; /* bonus type */
- uint8_t dn_nblkptr; /* number of blkptrs (immutable) */
- uint8_t dn_checksum; /* ZIO_CHECKSUM type */
- uint8_t dn_compress; /* ZIO_COMPRESS type */
- uint8_t dn_nlevels;
- uint8_t dn_indblkshift;
- uint8_t dn_datablkshift; /* zero if blksz not power of 2! */
- uint8_t dn_moved; /* Has this dnode been moved? */
- uint16_t dn_datablkszsec; /* in 512b sectors */
- uint32_t dn_datablksz; /* in bytes */
- uint64_t dn_maxblkid;
- uint8_t dn_next_type[TXG_SIZE];
- uint8_t dn_num_slots; /* metadnode slots consumed on disk */
- uint8_t dn_next_nblkptr[TXG_SIZE];
- uint8_t dn_next_nlevels[TXG_SIZE];
- uint8_t dn_next_indblkshift[TXG_SIZE];
- uint8_t dn_next_bonustype[TXG_SIZE];
- uint8_t dn_rm_spillblk[TXG_SIZE]; /* for removing spill blk */
- uint16_t dn_next_bonuslen[TXG_SIZE];
- uint32_t dn_next_blksz[TXG_SIZE]; /* next block size in bytes */
-
- /* protected by dn_dbufs_mtx; declared here to fill 32-bit hole */
- uint32_t dn_dbufs_count; /* count of dn_dbufs */
-
- /* protected by os_lock: */
- multilist_node_t dn_dirty_link[TXG_SIZE]; /* next on dataset's dirty */
-
- /* protected by dn_mtx: */
- kmutex_t dn_mtx;
- list_t dn_dirty_records[TXG_SIZE];
- struct range_tree *dn_free_ranges[TXG_SIZE];
- uint64_t dn_allocated_txg;
- uint64_t dn_free_txg;
- uint64_t dn_assigned_txg;
- uint64_t dn_dirty_txg; /* txg dnode was last dirtied */
- kcondvar_t dn_notxholds;
- enum dnode_dirtycontext dn_dirtyctx;
- uint8_t *dn_dirtyctx_firstset; /* dbg: contents meaningless */
-
- /* protected by own devices */
- zfs_refcount_t dn_tx_holds;
- zfs_refcount_t dn_holds;
-
- kmutex_t dn_dbufs_mtx;
- /*
- * Descendent dbufs, ordered by dbuf_compare. Note that dn_dbufs
- * can contain multiple dbufs of the same (level, blkid) when a
- * dbuf is marked DB_EVICTING without being removed from
- * dn_dbufs. To maintain the avl invariant that there cannot be
- * duplicate entries, we order the dbufs by an arbitrary value -
- * their address in memory. This means that dn_dbufs cannot be used to
- * directly look up a dbuf. Instead, callers must use avl_walk, have
- * a reference to the dbuf, or look up a non-existant node with
- * db_state = DB_SEARCH (see dbuf_free_range for an example).
- */
- avl_tree_t dn_dbufs;
-
- /* protected by dn_struct_rwlock */
- struct dmu_buf_impl *dn_bonus; /* bonus buffer dbuf */
-
- boolean_t dn_have_spill; /* have spill or are spilling */
-
- /* parent IO for current sync write */
- zio_t *dn_zio;
-
- /* used in syncing context */
- uint64_t dn_oldused; /* old phys used bytes */
- uint64_t dn_oldflags; /* old phys dn_flags */
- uint64_t dn_olduid, dn_oldgid;
- uint64_t dn_newuid, dn_newgid;
- int dn_id_flags;
-
- /* holds prefetch structure */
- struct zfetch dn_zfetch;
-};
-
-/*
- * Since AVL already has embedded element counter, use dn_dbufs_count
- * only for dbufs not counted there (bonus buffers) and just add them.
- */
-#define DN_DBUFS_COUNT(dn) ((dn)->dn_dbufs_count + \
- avl_numnodes(&(dn)->dn_dbufs))
-
-/*
- * Adds a level of indirection between the dbuf and the dnode to avoid
- * iterating descendent dbufs in dnode_move(). Handles are not allocated
- * individually, but as an array of child dnodes in dnode_hold_impl().
- */
-typedef struct dnode_handle {
- /* Protects dnh_dnode from modification by dnode_move(). */
- zrlock_t dnh_zrlock;
- dnode_t *dnh_dnode;
-} dnode_handle_t;
-
-typedef struct dnode_children {
- dmu_buf_user_t dnc_dbu; /* User evict data */
- size_t dnc_count; /* number of children */
- dnode_handle_t dnc_children[]; /* sized dynamically */
-} dnode_children_t;
-
-typedef struct free_range {
- avl_node_t fr_node;
- uint64_t fr_blkid;
- uint64_t fr_nblks;
-} free_range_t;
-
-void dnode_special_open(struct objset *dd, dnode_phys_t *dnp,
- uint64_t object, dnode_handle_t *dnh);
-void dnode_special_close(dnode_handle_t *dnh);
-
-void dnode_setbonuslen(dnode_t *dn, int newsize, dmu_tx_t *tx);
-void dnode_setbonus_type(dnode_t *dn, dmu_object_type_t, dmu_tx_t *tx);
-void dnode_rm_spill(dnode_t *dn, dmu_tx_t *tx);
-
-int dnode_hold(struct objset *dd, uint64_t object,
- void *ref, dnode_t **dnp);
-int dnode_hold_impl(struct objset *dd, uint64_t object, int flag, int dn_slots,
- void *ref, dnode_t **dnp);
-boolean_t dnode_add_ref(dnode_t *dn, void *ref);
-void dnode_rele(dnode_t *dn, void *ref);
-void dnode_rele_and_unlock(dnode_t *dn, void *tag, boolean_t evicting);
-void dnode_setdirty(dnode_t *dn, dmu_tx_t *tx);
-void dnode_sync(dnode_t *dn, dmu_tx_t *tx);
-void dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs,
- dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx);
-void dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize,
- dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx);
-void dnode_free(dnode_t *dn, dmu_tx_t *tx);
-void dnode_byteswap(dnode_phys_t *dnp);
-void dnode_buf_byteswap(void *buf, size_t size);
-void dnode_verify(dnode_t *dn);
-int dnode_set_blksz(dnode_t *dn, uint64_t size, int ibs, dmu_tx_t *tx);
-void dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx);
-void dnode_diduse_space(dnode_t *dn, int64_t space);
-void dnode_new_blkid(dnode_t *dn, uint64_t blkid, dmu_tx_t *tx, boolean_t);
-uint64_t dnode_block_freed(dnode_t *dn, uint64_t blkid);
-void dnode_init(void);
-void dnode_fini(void);
-int dnode_next_offset(dnode_t *dn, int flags, uint64_t *off,
- int minlvl, uint64_t blkfill, uint64_t txg);
-void dnode_evict_dbufs(dnode_t *dn);
-void dnode_evict_bonus(dnode_t *dn);
-void dnode_free_interior_slots(dnode_t *dn);
-boolean_t dnode_needs_remap(const dnode_t *dn);
-
-#define DNODE_IS_DIRTY(_dn) \
- ((_dn)->dn_dirty_txg >= spa_syncing_txg((_dn)->dn_objset->os_spa))
-
-#define DNODE_IS_CACHEABLE(_dn) \
- ((_dn)->dn_objset->os_primary_cache == ZFS_CACHE_ALL || \
- (DMU_OT_IS_METADATA((_dn)->dn_type) && \
- (_dn)->dn_objset->os_primary_cache == ZFS_CACHE_METADATA))
-
-#define DNODE_META_IS_CACHEABLE(_dn) \
- ((_dn)->dn_objset->os_primary_cache == ZFS_CACHE_ALL || \
- (_dn)->dn_objset->os_primary_cache == ZFS_CACHE_METADATA)
-
-/*
- * Used for dnodestats kstat.
- */
-typedef struct dnode_stats {
- /*
- * Number of failed attempts to hold a meta dnode dbuf.
- */
- kstat_named_t dnode_hold_dbuf_hold;
- /*
- * Number of failed attempts to read a meta dnode dbuf.
- */
- kstat_named_t dnode_hold_dbuf_read;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) was able
- * to hold the requested object number which was allocated. This is
- * the common case when looking up any allocated object number.
- */
- kstat_named_t dnode_hold_alloc_hits;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) was not
- * able to hold the request object number because it was not allocated.
- */
- kstat_named_t dnode_hold_alloc_misses;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) was not
- * able to hold the request object number because the object number
- * refers to an interior large dnode slot.
- */
- kstat_named_t dnode_hold_alloc_interior;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) needed
- * to retry acquiring slot zrl locks due to contention.
- */
- kstat_named_t dnode_hold_alloc_lock_retry;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) did not
- * need to create the dnode because another thread did so after
- * dropping the read lock but before acquiring the write lock.
- */
- kstat_named_t dnode_hold_alloc_lock_misses;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) found
- * a free dnode instantiated by dnode_create() but not yet allocated
- * by dnode_allocate().
- */
- kstat_named_t dnode_hold_alloc_type_none;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) was able
- * to hold the requested range of free dnode slots.
- */
- kstat_named_t dnode_hold_free_hits;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) was not
- * able to hold the requested range of free dnode slots because
- * at least one slot was allocated.
- */
- kstat_named_t dnode_hold_free_misses;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) was not
- * able to hold the requested range of free dnode slots because
- * after acquiring the zrl lock at least one slot was allocated.
- */
- kstat_named_t dnode_hold_free_lock_misses;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) needed
- * to retry acquiring slot zrl locks due to contention.
- */
- kstat_named_t dnode_hold_free_lock_retry;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) requested
- * a range of dnode slots which were held by another thread.
- */
- kstat_named_t dnode_hold_free_refcount;
- /*
- * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) requested
- * a range of dnode slots which would overflow the dnode_phys_t.
- */
- kstat_named_t dnode_hold_free_overflow;
- /*
- * Number of times a dnode_hold(...) was attempted on a dnode
- * which had already been unlinked in an earlier txg.
- */
- kstat_named_t dnode_hold_free_txg;
- /*
- * Number of times dnode_free_interior_slots() needed to retry
- * acquiring a slot zrl lock due to contention.
- */
- kstat_named_t dnode_free_interior_lock_retry;
- /*
- * Number of new dnodes allocated by dnode_allocate().
- */
- kstat_named_t dnode_allocate;
- /*
- * Number of dnodes re-allocated by dnode_reallocate().
- */
- kstat_named_t dnode_reallocate;
- /*
- * Number of meta dnode dbufs evicted.
- */
- kstat_named_t dnode_buf_evict;
- /*
- * Number of times dmu_object_alloc*() reached the end of the existing
- * object ID chunk and advanced to a new one.
- */
- kstat_named_t dnode_alloc_next_chunk;
- /*
- * Number of times multiple threads attempted to allocate a dnode
- * from the same block of free dnodes.
- */
- kstat_named_t dnode_alloc_race;
- /*
- * Number of times dmu_object_alloc*() was forced to advance to the
- * next meta dnode dbuf due to an error from dmu_object_next().
- */
- kstat_named_t dnode_alloc_next_block;
- /*
- * Statistics for tracking dnodes which have been moved.
- */
- kstat_named_t dnode_move_invalid;
- kstat_named_t dnode_move_recheck1;
- kstat_named_t dnode_move_recheck2;
- kstat_named_t dnode_move_special;
- kstat_named_t dnode_move_handle;
- kstat_named_t dnode_move_rwlock;
- kstat_named_t dnode_move_active;
-} dnode_stats_t;
-
-extern dnode_stats_t dnode_stats;
-
-#define DNODE_STAT_INCR(stat, val) \
- atomic_add_64(&dnode_stats.stat.value.ui64, (val));
-#define DNODE_STAT_BUMP(stat) \
- DNODE_STAT_INCR(stat, 1);
-
-#ifdef ZFS_DEBUG
-
-/*
- * There should be a ## between the string literal and fmt, to make it
- * clear that we're joining two strings together, but that piece of shit
- * gcc doesn't support that preprocessor token.
- */
-#define dprintf_dnode(dn, fmt, ...) do { \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) { \
- char __db_buf[32]; \
- uint64_t __db_obj = (dn)->dn_object; \
- if (__db_obj == DMU_META_DNODE_OBJECT) \
- (void) strcpy(__db_buf, "mdn"); \
- else \
- (void) snprintf(__db_buf, sizeof (__db_buf), "%lld", \
- (u_longlong_t)__db_obj);\
- dprintf_ds((dn)->dn_objset->os_dsl_dataset, "obj=%s " fmt, \
- __db_buf, __VA_ARGS__); \
- } \
-_NOTE(CONSTCOND) } while (0)
-
-#define DNODE_VERIFY(dn) dnode_verify(dn)
-#define FREE_VERIFY(db, start, end, tx) free_verify(db, start, end, tx)
-
-#else
-
-#define dprintf_dnode(db, fmt, ...)
-#define DNODE_VERIFY(dn)
-#define FREE_VERIFY(db, start, end, tx)
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DNODE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_bookmark.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_bookmark.h
deleted file mode 100644
index e4d9ec2be033..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_bookmark.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2013 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DSL_BOOKMARK_H
-#define _SYS_DSL_BOOKMARK_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_pool;
-struct dsl_dataset;
-
-/*
- * On disk zap object.
- */
-typedef struct zfs_bookmark_phys {
- uint64_t zbm_guid; /* guid of bookmarked dataset */
- uint64_t zbm_creation_txg; /* birth transaction group */
- uint64_t zbm_creation_time; /* bookmark creation time */
-} zfs_bookmark_phys_t;
-
-int dsl_bookmark_create(nvlist_t *, nvlist_t *);
-int dsl_get_bookmarks(const char *, nvlist_t *, nvlist_t *);
-int dsl_get_bookmarks_impl(dsl_dataset_t *, nvlist_t *, nvlist_t *);
-int dsl_bookmark_destroy(nvlist_t *, nvlist_t *);
-int dsl_bookmark_rename(const char *fs, const char *from, const char *to);
-int dsl_bookmark_lookup(struct dsl_pool *, const char *,
- struct dsl_dataset *, zfs_bookmark_phys_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_BOOKMARK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h
deleted file mode 100644
index 064ff617fd2e..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h
+++ /dev/null
@@ -1,457 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2017 by Delphix. All rights reserved.
- * Copyright (c) 2013, Joyent, Inc. All rights reserved.
- * Copyright (c) 2013 Steven Hartland. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-#ifndef _SYS_DSL_DATASET_H
-#define _SYS_DSL_DATASET_H
-
-#include <sys/dmu.h>
-#include <sys/spa.h>
-#include <sys/txg.h>
-#include <sys/zio.h>
-#include <sys/bplist.h>
-#include <sys/dsl_synctask.h>
-#include <sys/zfs_context.h>
-#include <sys/dsl_deadlist.h>
-#include <sys/refcount.h>
-#include <sys/rrwlock.h>
-#include <zfeature_common.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_dataset;
-struct dsl_dir;
-struct dsl_pool;
-
-#define DS_FLAG_INCONSISTENT (1ULL<<0)
-#define DS_IS_INCONSISTENT(ds) \
- (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_INCONSISTENT)
-
-/*
- * Do not allow this dataset to be promoted.
- */
-#define DS_FLAG_NOPROMOTE (1ULL<<1)
-
-/*
- * DS_FLAG_UNIQUE_ACCURATE is set if ds_unique_bytes has been correctly
- * calculated for head datasets (starting with SPA_VERSION_UNIQUE_ACCURATE,
- * refquota/refreservations).
- */
-#define DS_FLAG_UNIQUE_ACCURATE (1ULL<<2)
-
-/*
- * DS_FLAG_DEFER_DESTROY is set after 'zfs destroy -d' has been called
- * on a dataset. This allows the dataset to be destroyed using 'zfs release'.
- */
-#define DS_FLAG_DEFER_DESTROY (1ULL<<3)
-#define DS_IS_DEFER_DESTROY(ds) \
- (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_DEFER_DESTROY)
-
-/*
- * DS_FIELD_* are strings that are used in the "extensified" dataset zap object.
- * They should be of the format <reverse-dns>:<field>.
- */
-
-/*
- * This field's value is the object ID of a zap object which contains the
- * bookmarks of this dataset. If it is present, then this dataset is counted
- * in the refcount of the SPA_FEATURES_BOOKMARKS feature.
- */
-#define DS_FIELD_BOOKMARK_NAMES "com.delphix:bookmarks"
-
-/*
- * This field is present (with value=0) if this dataset may contain large
- * dnodes (>512B). If it is present, then this dataset is counted in the
- * refcount of the SPA_FEATURE_LARGE_DNODE feature.
- */
-#define DS_FIELD_LARGE_DNODE "org.zfsonlinux:large_dnode"
-
-/*
- * These fields are set on datasets that are in the middle of a resumable
- * receive, and allow the sender to resume the send if it is interrupted.
- */
-#define DS_FIELD_RESUME_FROMGUID "com.delphix:resume_fromguid"
-#define DS_FIELD_RESUME_TONAME "com.delphix:resume_toname"
-#define DS_FIELD_RESUME_TOGUID "com.delphix:resume_toguid"
-#define DS_FIELD_RESUME_OBJECT "com.delphix:resume_object"
-#define DS_FIELD_RESUME_OFFSET "com.delphix:resume_offset"
-#define DS_FIELD_RESUME_BYTES "com.delphix:resume_bytes"
-#define DS_FIELD_RESUME_LARGEBLOCK "com.delphix:resume_largeblockok"
-#define DS_FIELD_RESUME_EMBEDOK "com.delphix:resume_embedok"
-#define DS_FIELD_RESUME_COMPRESSOK "com.delphix:resume_compressok"
-
-/*
- * This field is set to the object number of the remap deadlist if one exists.
- */
-#define DS_FIELD_REMAP_DEADLIST "com.delphix:remap_deadlist"
-
-/*
- * DS_FLAG_CI_DATASET is set if the dataset contains a file system whose
- * name lookups should be performed case-insensitively.
- */
-#define DS_FLAG_CI_DATASET (1ULL<<16)
-
-#define DS_CREATE_FLAG_NODIRTY (1ULL<<24)
-
-typedef struct dsl_dataset_phys {
- uint64_t ds_dir_obj; /* DMU_OT_DSL_DIR */
- uint64_t ds_prev_snap_obj; /* DMU_OT_DSL_DATASET */
- uint64_t ds_prev_snap_txg;
- uint64_t ds_next_snap_obj; /* DMU_OT_DSL_DATASET */
- uint64_t ds_snapnames_zapobj; /* DMU_OT_DSL_DS_SNAP_MAP 0 for snaps */
- uint64_t ds_num_children; /* clone/snap children; ==0 for head */
- uint64_t ds_creation_time; /* seconds since 1970 */
- uint64_t ds_creation_txg;
- uint64_t ds_deadlist_obj; /* DMU_OT_DEADLIST */
- /*
- * ds_referenced_bytes, ds_compressed_bytes, and ds_uncompressed_bytes
- * include all blocks referenced by this dataset, including those
- * shared with any other datasets.
- */
- uint64_t ds_referenced_bytes;
- uint64_t ds_compressed_bytes;
- uint64_t ds_uncompressed_bytes;
- uint64_t ds_unique_bytes; /* only relevant to snapshots */
- /*
- * The ds_fsid_guid is a 56-bit ID that can change to avoid
- * collisions. The ds_guid is a 64-bit ID that will never
- * change, so there is a small probability that it will collide.
- */
- uint64_t ds_fsid_guid;
- uint64_t ds_guid;
- uint64_t ds_flags; /* DS_FLAG_* */
- blkptr_t ds_bp;
- uint64_t ds_next_clones_obj; /* DMU_OT_DSL_CLONES */
- uint64_t ds_props_obj; /* DMU_OT_DSL_PROPS for snaps */
- uint64_t ds_userrefs_obj; /* DMU_OT_USERREFS */
- uint64_t ds_pad[5]; /* pad out to 320 bytes for good measure */
-} dsl_dataset_phys_t;
-
-typedef struct dsl_dataset {
- dmu_buf_user_t ds_dbu;
- rrwlock_t ds_bp_rwlock; /* Protects ds_phys->ds_bp */
-
- /* Immutable: */
- struct dsl_dir *ds_dir;
- dmu_buf_t *ds_dbuf;
- uint64_t ds_object;
- uint64_t ds_fsid_guid;
- boolean_t ds_is_snapshot;
-
- /* only used in syncing context, only valid for non-snapshots: */
- struct dsl_dataset *ds_prev;
- uint64_t ds_bookmarks; /* DMU_OTN_ZAP_METADATA */
-
- /* has internal locking: */
- dsl_deadlist_t ds_deadlist;
- bplist_t ds_pending_deadlist;
-
- /*
- * The remap deadlist contains blocks (DVA's, really) that are
- * referenced by the previous snapshot and point to indirect vdevs,
- * but in this dataset they have been remapped to point to concrete
- * (or at least, less-indirect) vdevs. In other words, the
- * physical DVA is referenced by the previous snapshot but not by
- * this dataset. Logically, the DVA continues to be referenced,
- * but we are using a different (less indirect) physical DVA.
- * This deadlist is used to determine when physical DVAs that
- * point to indirect vdevs are no longer referenced anywhere,
- * and thus should be marked obsolete.
- *
- * This is only used if SPA_FEATURE_OBSOLETE_COUNTS is enabled.
- */
- dsl_deadlist_t ds_remap_deadlist;
- /* protects creation of the ds_remap_deadlist */
- kmutex_t ds_remap_deadlist_lock;
-
- /* protected by lock on pool's dp_dirty_datasets list */
- txg_node_t ds_dirty_link;
- list_node_t ds_synced_link;
-
- /*
- * ds_phys->ds_<accounting> is also protected by ds_lock.
- * Protected by ds_lock:
- */
- kmutex_t ds_lock;
- objset_t *ds_objset;
- uint64_t ds_userrefs;
- void *ds_owner;
-
- /*
- * Long holds prevent the ds from being destroyed; they allow the
- * ds to remain held even after dropping the dp_config_rwlock.
- * Owning counts as a long hold. See the comments above
- * dsl_pool_hold() for details.
- */
- zfs_refcount_t ds_longholds;
-
- /* no locking; only for making guesses */
- uint64_t ds_trysnap_txg;
-
- /* for objset_open() */
- kmutex_t ds_opening_lock;
-
- uint64_t ds_reserved; /* cached refreservation */
- uint64_t ds_quota; /* cached refquota */
-
- kmutex_t ds_sendstream_lock;
- list_t ds_sendstreams;
-
- /*
- * When in the middle of a resumable receive, tracks how much
- * progress we have made.
- */
- uint64_t ds_resume_object[TXG_SIZE];
- uint64_t ds_resume_offset[TXG_SIZE];
- uint64_t ds_resume_bytes[TXG_SIZE];
-
- /* Protected by our dsl_dir's dd_lock */
- list_t ds_prop_cbs;
-
- /*
- * For ZFEATURE_FLAG_PER_DATASET features, set if this dataset
- * uses this feature.
- */
- uint8_t ds_feature_inuse[SPA_FEATURES];
-
- /*
- * Set if we need to activate the feature on this dataset this txg
- * (used only in syncing context).
- */
- uint8_t ds_feature_activation_needed[SPA_FEATURES];
-
- /* Protected by ds_lock; keep at end of struct for better locality */
- char ds_snapname[ZFS_MAX_DATASET_NAME_LEN];
-} dsl_dataset_t;
-
-inline dsl_dataset_phys_t *
-dsl_dataset_phys(dsl_dataset_t *ds)
-{
- return (ds->ds_dbuf->db_data);
-}
-
-typedef struct dsl_dataset_promote_arg {
- const char *ddpa_clonename;
- dsl_dataset_t *ddpa_clone;
- list_t shared_snaps, origin_snaps, clone_snaps;
- dsl_dataset_t *origin_origin; /* origin of the origin */
- uint64_t used, comp, uncomp, unique, cloneusedsnap, originusedsnap;
- nvlist_t *err_ds;
- cred_t *cr;
-} dsl_dataset_promote_arg_t;
-
-typedef struct dsl_dataset_rollback_arg {
- const char *ddra_fsname;
- const char *ddra_tosnap;
- void *ddra_owner;
- nvlist_t *ddra_result;
-} dsl_dataset_rollback_arg_t;
-
-typedef struct dsl_dataset_snapshot_arg {
- nvlist_t *ddsa_snaps;
- nvlist_t *ddsa_props;
- nvlist_t *ddsa_errors;
- cred_t *ddsa_cr;
-} dsl_dataset_snapshot_arg_t;
-
-/*
- * The max length of a temporary tag prefix is the number of hex digits
- * required to express UINT64_MAX plus one for the hyphen.
- */
-#define MAX_TAG_PREFIX_LEN 17
-
-#define dsl_dataset_is_snapshot(ds) \
- (dsl_dataset_phys(ds)->ds_num_children != 0)
-
-#define DS_UNIQUE_IS_ACCURATE(ds) \
- ((dsl_dataset_phys(ds)->ds_flags & DS_FLAG_UNIQUE_ACCURATE) != 0)
-
-int dsl_dataset_hold(struct dsl_pool *dp, const char *name, void *tag,
- dsl_dataset_t **dsp);
-boolean_t dsl_dataset_try_add_ref(struct dsl_pool *dp, dsl_dataset_t *ds,
- void *tag);
-int dsl_dataset_hold_obj(struct dsl_pool *dp, uint64_t dsobj, void *tag,
- dsl_dataset_t **);
-void dsl_dataset_rele(dsl_dataset_t *ds, void *tag);
-int dsl_dataset_own(struct dsl_pool *dp, const char *name,
- void *tag, dsl_dataset_t **dsp);
-int dsl_dataset_own_obj(struct dsl_pool *dp, uint64_t dsobj,
- void *tag, dsl_dataset_t **dsp);
-void dsl_dataset_disown(dsl_dataset_t *ds, void *tag);
-void dsl_dataset_name(dsl_dataset_t *ds, char *name);
-boolean_t dsl_dataset_tryown(dsl_dataset_t *ds, void *tag);
-int dsl_dataset_namelen(dsl_dataset_t *ds);
-boolean_t dsl_dataset_has_owner(dsl_dataset_t *ds);
-uint64_t dsl_dataset_create_sync(dsl_dir_t *pds, const char *lastname,
- dsl_dataset_t *origin, uint64_t flags, cred_t *, dmu_tx_t *);
-uint64_t dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin,
- uint64_t flags, dmu_tx_t *tx);
-void dsl_dataset_snapshot_sync(void *arg, dmu_tx_t *tx);
-int dsl_dataset_snapshot_check(void *arg, dmu_tx_t *tx);
-int dsl_dataset_snapshot(nvlist_t *snaps, nvlist_t *props, nvlist_t *errors);
-void dsl_dataset_promote_sync(void *arg, dmu_tx_t *tx);
-int dsl_dataset_promote_check(void *arg, dmu_tx_t *tx);
-int dsl_dataset_promote(const char *name, char *conflsnap);
-int dsl_dataset_clone_swap(dsl_dataset_t *clone, dsl_dataset_t *origin_head,
- boolean_t force);
-int dsl_dataset_rename_snapshot(const char *fsname,
- const char *oldsnapname, const char *newsnapname, boolean_t recursive);
-int dsl_dataset_snapshot_tmp(const char *fsname, const char *snapname,
- minor_t cleanup_minor, const char *htag);
-
-blkptr_t *dsl_dataset_get_blkptr(dsl_dataset_t *ds);
-
-spa_t *dsl_dataset_get_spa(dsl_dataset_t *ds);
-
-boolean_t dsl_dataset_modified_since_snap(dsl_dataset_t *ds,
- dsl_dataset_t *snap);
-
-void dsl_dataset_sync(dsl_dataset_t *os, zio_t *zio, dmu_tx_t *tx);
-void dsl_dataset_sync_done(dsl_dataset_t *os, dmu_tx_t *tx);
-
-void dsl_dataset_block_born(dsl_dataset_t *ds, const blkptr_t *bp,
- dmu_tx_t *tx);
-int dsl_dataset_block_kill(dsl_dataset_t *ds, const blkptr_t *bp,
- dmu_tx_t *tx, boolean_t async);
-void dsl_dataset_block_remapped(dsl_dataset_t *ds, uint64_t vdev,
- uint64_t offset, uint64_t size, uint64_t birth, dmu_tx_t *tx);
-
-void dsl_dataset_dirty(dsl_dataset_t *ds, dmu_tx_t *tx);
-
-int get_clones_stat_impl(dsl_dataset_t *ds, nvlist_t *val);
-char *get_receive_resume_stats_impl(dsl_dataset_t *ds);
-char *get_child_receive_stats(dsl_dataset_t *ds);
-uint64_t dsl_get_refratio(dsl_dataset_t *ds);
-uint64_t dsl_get_logicalreferenced(dsl_dataset_t *ds);
-uint64_t dsl_get_compressratio(dsl_dataset_t *ds);
-uint64_t dsl_get_used(dsl_dataset_t *ds);
-uint64_t dsl_get_creation(dsl_dataset_t *ds);
-uint64_t dsl_get_creationtxg(dsl_dataset_t *ds);
-uint64_t dsl_get_refquota(dsl_dataset_t *ds);
-uint64_t dsl_get_refreservation(dsl_dataset_t *ds);
-uint64_t dsl_get_guid(dsl_dataset_t *ds);
-uint64_t dsl_get_unique(dsl_dataset_t *ds);
-uint64_t dsl_get_objsetid(dsl_dataset_t *ds);
-uint64_t dsl_get_userrefs(dsl_dataset_t *ds);
-uint64_t dsl_get_defer_destroy(dsl_dataset_t *ds);
-uint64_t dsl_get_referenced(dsl_dataset_t *ds);
-uint64_t dsl_get_numclones(dsl_dataset_t *ds);
-uint64_t dsl_get_inconsistent(dsl_dataset_t *ds);
-uint64_t dsl_get_available(dsl_dataset_t *ds);
-int dsl_get_written(dsl_dataset_t *ds, uint64_t *written);
-int dsl_get_prev_snap(dsl_dataset_t *ds, char *snap);
-int dsl_get_mountpoint(dsl_dataset_t *ds, const char *dsname, char *value,
- char *source);
-
-void get_clones_stat(dsl_dataset_t *ds, nvlist_t *nv);
-
-void dsl_dataset_stats(dsl_dataset_t *os, nvlist_t *nv);
-
-void dsl_dataset_fast_stat(dsl_dataset_t *ds, dmu_objset_stats_t *stat);
-void dsl_dataset_space(dsl_dataset_t *ds,
- uint64_t *refdbytesp, uint64_t *availbytesp,
- uint64_t *usedobjsp, uint64_t *availobjsp);
-uint64_t dsl_dataset_fsid_guid(dsl_dataset_t *ds);
-int dsl_dataset_space_written(dsl_dataset_t *oldsnap, dsl_dataset_t *new,
- uint64_t *usedp, uint64_t *compp, uint64_t *uncompp);
-int dsl_dataset_space_wouldfree(dsl_dataset_t *firstsnap, dsl_dataset_t *last,
- uint64_t *usedp, uint64_t *compp, uint64_t *uncompp);
-boolean_t dsl_dataset_is_dirty(dsl_dataset_t *ds);
-
-int dsl_dsobj_to_dsname(char *pname, uint64_t obj, char *buf);
-
-int dsl_dataset_check_quota(dsl_dataset_t *ds, boolean_t check_quota,
- uint64_t asize, uint64_t inflight, uint64_t *used,
- uint64_t *ref_rsrv);
-int dsl_dataset_set_refquota(const char *dsname, zprop_source_t source,
- uint64_t quota);
-int dsl_dataset_set_refreservation(const char *dsname, zprop_source_t source,
- uint64_t reservation);
-
-boolean_t dsl_dataset_is_before(dsl_dataset_t *later, dsl_dataset_t *earlier,
- uint64_t earlier_txg);
-void dsl_dataset_long_hold(dsl_dataset_t *ds, void *tag);
-void dsl_dataset_long_rele(dsl_dataset_t *ds, void *tag);
-boolean_t dsl_dataset_long_held(dsl_dataset_t *ds);
-
-int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone,
- dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx);
-void dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone,
- dsl_dataset_t *origin_head, dmu_tx_t *tx);
-int dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname,
- dmu_tx_t *tx, boolean_t recv, uint64_t cnt, cred_t *cr);
-void dsl_dataset_snapshot_sync_impl(dsl_dataset_t *ds, const char *snapname,
- dmu_tx_t *tx);
-
-void dsl_dataset_remove_from_next_clones(dsl_dataset_t *ds, uint64_t obj,
- dmu_tx_t *tx);
-void dsl_dataset_recalc_head_uniq(dsl_dataset_t *ds);
-int dsl_dataset_get_snapname(dsl_dataset_t *ds);
-int dsl_dataset_snap_lookup(dsl_dataset_t *ds, const char *name,
- uint64_t *value);
-int dsl_dataset_snap_remove(dsl_dataset_t *ds, const char *name, dmu_tx_t *tx,
- boolean_t adj_cnt);
-void dsl_dataset_set_refreservation_sync_impl(dsl_dataset_t *ds,
- zprop_source_t source, uint64_t value, dmu_tx_t *tx);
-void dsl_dataset_zapify(dsl_dataset_t *ds, dmu_tx_t *tx);
-boolean_t dsl_dataset_is_zapified(dsl_dataset_t *ds);
-boolean_t dsl_dataset_has_resume_receive_state(dsl_dataset_t *ds);
-
-int dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx);
-void dsl_dataset_rollback_sync(void *arg, dmu_tx_t *tx);
-int dsl_dataset_rollback(const char *fsname, const char *tosnap, void *owner,
- nvlist_t *result);
-
-uint64_t dsl_dataset_get_remap_deadlist_object(dsl_dataset_t *ds);
-void dsl_dataset_create_remap_deadlist(dsl_dataset_t *ds, dmu_tx_t *tx);
-boolean_t dsl_dataset_remap_deadlist_exists(dsl_dataset_t *ds);
-void dsl_dataset_destroy_remap_deadlist(dsl_dataset_t *ds, dmu_tx_t *tx);
-
-void dsl_dataset_deactivate_feature(uint64_t dsobj,
- spa_feature_t f, dmu_tx_t *tx);
-
-#ifdef ZFS_DEBUG
-#define dprintf_ds(ds, fmt, ...) do { \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) { \
- char *__ds_name = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); \
- dsl_dataset_name(ds, __ds_name); \
- dprintf("ds=%s " fmt, __ds_name, __VA_ARGS__); \
- kmem_free(__ds_name, ZFS_MAX_DATASET_NAME_LEN); \
- } \
-_NOTE(CONSTCOND) } while (0)
-#else
-#define dprintf_ds(dd, fmt, ...)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_DATASET_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deadlist.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deadlist.h
deleted file mode 100644
index 08f38233d7ab..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deadlist.h
+++ /dev/null
@@ -1,89 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DSL_DEADLIST_H
-#define _SYS_DSL_DEADLIST_H
-
-#include <sys/bpobj.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dmu_buf;
-struct dsl_dataset;
-
-typedef struct dsl_deadlist_phys {
- uint64_t dl_used;
- uint64_t dl_comp;
- uint64_t dl_uncomp;
- uint64_t dl_pad[37]; /* pad out to 320b for future expansion */
-} dsl_deadlist_phys_t;
-
-typedef struct dsl_deadlist {
- objset_t *dl_os;
- uint64_t dl_object;
- avl_tree_t dl_tree;
- boolean_t dl_havetree;
- struct dmu_buf *dl_dbuf;
- dsl_deadlist_phys_t *dl_phys;
- kmutex_t dl_lock;
-
- /* if it's the old on-disk format: */
- bpobj_t dl_bpobj;
- boolean_t dl_oldfmt;
-} dsl_deadlist_t;
-
-typedef struct dsl_deadlist_entry {
- avl_node_t dle_node;
- uint64_t dle_mintxg;
- bpobj_t dle_bpobj;
-} dsl_deadlist_entry_t;
-
-void dsl_deadlist_open(dsl_deadlist_t *dl, objset_t *os, uint64_t object);
-void dsl_deadlist_close(dsl_deadlist_t *dl);
-uint64_t dsl_deadlist_alloc(objset_t *os, dmu_tx_t *tx);
-void dsl_deadlist_free(objset_t *os, uint64_t dlobj, dmu_tx_t *tx);
-void dsl_deadlist_insert(dsl_deadlist_t *dl, const blkptr_t *bp, dmu_tx_t *tx);
-void dsl_deadlist_add_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx);
-void dsl_deadlist_remove_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx);
-uint64_t dsl_deadlist_clone(dsl_deadlist_t *dl, uint64_t maxtxg,
- uint64_t mrs_obj, dmu_tx_t *tx);
-void dsl_deadlist_space(dsl_deadlist_t *dl,
- uint64_t *usedp, uint64_t *compp, uint64_t *uncompp);
-void dsl_deadlist_space_range(dsl_deadlist_t *dl,
- uint64_t mintxg, uint64_t maxtxg,
- uint64_t *usedp, uint64_t *compp, uint64_t *uncompp);
-void dsl_deadlist_merge(dsl_deadlist_t *dl, uint64_t obj, dmu_tx_t *tx);
-void dsl_deadlist_move_bpobj(dsl_deadlist_t *dl, bpobj_t *bpo, uint64_t mintxg,
- dmu_tx_t *tx);
-boolean_t dsl_deadlist_is_open(dsl_deadlist_t *dl);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_DEADLIST_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h
deleted file mode 100644
index 6fb6a121ade6..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h
+++ /dev/null
@@ -1,81 +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 (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013, 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DSL_DELEG_H
-#define _SYS_DSL_DELEG_H
-
-#include <sys/dmu.h>
-#include <sys/dsl_pool.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZFS_DELEG_PERM_NONE ""
-#define ZFS_DELEG_PERM_CREATE "create"
-#define ZFS_DELEG_PERM_DESTROY "destroy"
-#define ZFS_DELEG_PERM_SNAPSHOT "snapshot"
-#define ZFS_DELEG_PERM_ROLLBACK "rollback"
-#define ZFS_DELEG_PERM_CLONE "clone"
-#define ZFS_DELEG_PERM_PROMOTE "promote"
-#define ZFS_DELEG_PERM_RENAME "rename"
-#define ZFS_DELEG_PERM_MOUNT "mount"
-#define ZFS_DELEG_PERM_SHARE "share"
-#define ZFS_DELEG_PERM_SEND "send"
-#define ZFS_DELEG_PERM_RECEIVE "receive"
-#define ZFS_DELEG_PERM_ALLOW "allow"
-#define ZFS_DELEG_PERM_USERPROP "userprop"
-#define ZFS_DELEG_PERM_VSCAN "vscan"
-#define ZFS_DELEG_PERM_USERQUOTA "userquota"
-#define ZFS_DELEG_PERM_GROUPQUOTA "groupquota"
-#define ZFS_DELEG_PERM_USERUSED "userused"
-#define ZFS_DELEG_PERM_GROUPUSED "groupused"
-#define ZFS_DELEG_PERM_HOLD "hold"
-#define ZFS_DELEG_PERM_RELEASE "release"
-#define ZFS_DELEG_PERM_DIFF "diff"
-#define ZFS_DELEG_PERM_BOOKMARK "bookmark"
-#define ZFS_DELEG_PERM_REMAP "remap"
-
-/*
- * Note: the names of properties that are marked delegatable are also
- * valid delegated permissions
- */
-
-int dsl_deleg_get(const char *ddname, nvlist_t **nvp);
-int dsl_deleg_set(const char *ddname, nvlist_t *nvp, boolean_t unset);
-int dsl_deleg_access(const char *ddname, const char *perm, cred_t *cr);
-int dsl_deleg_access_impl(struct dsl_dataset *ds, const char *perm, cred_t *cr);
-void dsl_deleg_set_create_perms(dsl_dir_t *dd, dmu_tx_t *tx, cred_t *cr);
-int dsl_deleg_can_allow(char *ddname, nvlist_t *nvp, cred_t *cr);
-int dsl_deleg_can_unallow(char *ddname, nvlist_t *nvp, cred_t *cr);
-int dsl_deleg_destroy(objset_t *os, uint64_t zapobj, dmu_tx_t *tx);
-boolean_t dsl_delegation_on(objset_t *os);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_DELEG_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h
deleted file mode 100644
index ae3ca0cfbd5e..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h
+++ /dev/null
@@ -1,68 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2016 by Delphix. All rights reserved.
- * Copyright (c) 2012, Joyent, Inc. All rights reserved.
- */
-
-#ifndef _SYS_DSL_DESTROY_H
-#define _SYS_DSL_DESTROY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nvlist;
-struct dsl_dataset;
-struct dmu_tx;
-
-int dsl_destroy_snapshots_nvl(struct nvlist *, boolean_t,
- struct nvlist *);
-int dsl_destroy_snapshot(const char *, boolean_t);
-int dsl_destroy_head(const char *);
-int dsl_destroy_head_check_impl(struct dsl_dataset *, int);
-void dsl_destroy_head_sync_impl(struct dsl_dataset *, struct dmu_tx *);
-int dsl_destroy_inconsistent(const char *, void *);
-int dsl_destroy_snapshot_check_impl(struct dsl_dataset *, boolean_t);
-void dsl_destroy_snapshot_sync_impl(struct dsl_dataset *,
- boolean_t, struct dmu_tx *);
-
-typedef struct dsl_destroy_snapshot_arg {
- const char *ddsa_name;
- boolean_t ddsa_defer;
-} dsl_destroy_snapshot_arg_t;
-
-int dsl_destroy_snapshot_check(void *, dmu_tx_t *);
-void dsl_destroy_snapshot_sync(void *, dmu_tx_t *);
-
-typedef struct dsl_destroy_head_arg {
- const char *ddha_name;
-} dsl_destroy_head_arg_t;
-
-int dsl_destroy_head_check(void *, dmu_tx_t *);
-void dsl_destroy_head_sync(void *, dmu_tx_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_DESTROY_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h
deleted file mode 100644
index 21d953cb6013..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h
+++ /dev/null
@@ -1,209 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- * Copyright (c) 2014, Joyent, Inc. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- */
-
-#ifndef _SYS_DSL_DIR_H
-#define _SYS_DSL_DIR_H
-
-#include <sys/dmu.h>
-#include <sys/dsl_pool.h>
-#include <sys/dsl_synctask.h>
-#include <sys/refcount.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_dataset;
-
-/*
- * DD_FIELD_* are strings that are used in the "extensified" dsl_dir zap object.
- * They should be of the format <reverse-dns>:<field>.
- */
-
-#define DD_FIELD_FILESYSTEM_COUNT "com.joyent:filesystem_count"
-#define DD_FIELD_SNAPSHOT_COUNT "com.joyent:snapshot_count"
-#define DD_FIELD_LAST_REMAP_TXG "com.delphix:last_remap_txg"
-
-typedef enum dd_used {
- DD_USED_HEAD,
- DD_USED_SNAP,
- DD_USED_CHILD,
- DD_USED_CHILD_RSRV,
- DD_USED_REFRSRV,
- DD_USED_NUM
-} dd_used_t;
-
-#define DD_FLAG_USED_BREAKDOWN (1<<0)
-
-typedef struct dsl_dir_phys {
- uint64_t dd_creation_time; /* not actually used */
- uint64_t dd_head_dataset_obj;
- uint64_t dd_parent_obj;
- uint64_t dd_origin_obj;
- uint64_t dd_child_dir_zapobj;
- /*
- * how much space our children are accounting for; for leaf
- * datasets, == physical space used by fs + snaps
- */
- uint64_t dd_used_bytes;
- uint64_t dd_compressed_bytes;
- uint64_t dd_uncompressed_bytes;
- /* Administrative quota setting */
- uint64_t dd_quota;
- /* Administrative reservation setting */
- uint64_t dd_reserved;
- uint64_t dd_props_zapobj;
- uint64_t dd_deleg_zapobj; /* dataset delegation permissions */
- uint64_t dd_flags;
- uint64_t dd_used_breakdown[DD_USED_NUM];
- uint64_t dd_clones; /* dsl_dir objects */
- uint64_t dd_pad[13]; /* pad out to 256 bytes for good measure */
-} dsl_dir_phys_t;
-
-struct dsl_dir {
- dmu_buf_user_t dd_dbu;
-
- /* These are immutable; no lock needed: */
- uint64_t dd_object;
- dsl_pool_t *dd_pool;
-
- /* Stable until user eviction; no lock needed: */
- dmu_buf_t *dd_dbuf;
-
- /* protected by lock on pool's dp_dirty_dirs list */
- txg_node_t dd_dirty_link;
-
- /* protected by dp_config_rwlock */
- dsl_dir_t *dd_parent;
-
- /* Protected by dd_lock */
- kmutex_t dd_lock;
- list_t dd_props; /* list of dsl_prop_record_t's */
- timestruc_t dd_snap_cmtime; /* last time snapshot namespace changed */
- uint64_t dd_origin_txg;
-
- /* gross estimate of space used by in-flight tx's */
- uint64_t dd_tempreserved[TXG_SIZE];
- /* amount of space we expect to write; == amount of dirty data */
- int64_t dd_space_towrite[TXG_SIZE];
-
- /* protected by dd_lock; keep at end of struct for better locality */
- char dd_myname[ZFS_MAX_DATASET_NAME_LEN];
-};
-
-inline dsl_dir_phys_t *
-dsl_dir_phys(dsl_dir_t *dd)
-{
- return (dd->dd_dbuf->db_data);
-}
-
-void dsl_dir_rele(dsl_dir_t *dd, void *tag);
-void dsl_dir_async_rele(dsl_dir_t *dd, void *tag);
-int dsl_dir_hold(dsl_pool_t *dp, const char *name, void *tag,
- dsl_dir_t **, const char **tail);
-int dsl_dir_hold_obj(dsl_pool_t *dp, uint64_t ddobj,
- const char *tail, void *tag, dsl_dir_t **);
-void dsl_dir_name(dsl_dir_t *dd, char *buf);
-int dsl_dir_namelen(dsl_dir_t *dd);
-uint64_t dsl_dir_create_sync(dsl_pool_t *dp, dsl_dir_t *pds,
- const char *name, dmu_tx_t *tx);
-
-uint64_t dsl_dir_get_used(dsl_dir_t *dd);
-uint64_t dsl_dir_get_compressed(dsl_dir_t *dd);
-uint64_t dsl_dir_get_quota(dsl_dir_t *dd);
-uint64_t dsl_dir_get_reservation(dsl_dir_t *dd);
-uint64_t dsl_dir_get_compressratio(dsl_dir_t *dd);
-uint64_t dsl_dir_get_logicalused(dsl_dir_t *dd);
-uint64_t dsl_dir_get_usedsnap(dsl_dir_t *dd);
-uint64_t dsl_dir_get_usedds(dsl_dir_t *dd);
-uint64_t dsl_dir_get_usedrefreserv(dsl_dir_t *dd);
-uint64_t dsl_dir_get_usedchild(dsl_dir_t *dd);
-void dsl_dir_get_origin(dsl_dir_t *dd, char *buf);
-int dsl_dir_get_filesystem_count(dsl_dir_t *dd, uint64_t *count);
-int dsl_dir_get_snapshot_count(dsl_dir_t *dd, uint64_t *count);
-int dsl_dir_get_remaptxg(dsl_dir_t *dd, uint64_t *count);
-
-void dsl_dir_stats(dsl_dir_t *dd, nvlist_t *nv);
-uint64_t dsl_dir_space_available(dsl_dir_t *dd,
- dsl_dir_t *ancestor, int64_t delta, int ondiskonly);
-void dsl_dir_dirty(dsl_dir_t *dd, dmu_tx_t *tx);
-void dsl_dir_sync(dsl_dir_t *dd, dmu_tx_t *tx);
-int dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t mem,
- uint64_t asize, boolean_t netfree, void **tr_cookiep, dmu_tx_t *tx);
-void dsl_dir_tempreserve_clear(void *tr_cookie, dmu_tx_t *tx);
-void dsl_dir_willuse_space(dsl_dir_t *dd, int64_t space, dmu_tx_t *tx);
-void dsl_dir_diduse_space(dsl_dir_t *dd, dd_used_t type,
- int64_t used, int64_t compressed, int64_t uncompressed, dmu_tx_t *tx);
-void dsl_dir_transfer_space(dsl_dir_t *dd, int64_t delta,
- dd_used_t oldtype, dd_used_t newtype, dmu_tx_t *tx);
-int dsl_dir_set_quota(const char *ddname, zprop_source_t source,
- uint64_t quota);
-int dsl_dir_set_reservation(const char *ddname, zprop_source_t source,
- uint64_t reservation);
-int dsl_dir_activate_fs_ss_limit(const char *);
-int dsl_fs_ss_limit_check(dsl_dir_t *, uint64_t, zfs_prop_t, dsl_dir_t *,
- cred_t *);
-void dsl_fs_ss_count_adjust(dsl_dir_t *, int64_t, const char *, dmu_tx_t *);
-int dsl_dir_update_last_remap_txg(dsl_dir_t *, uint64_t);
-int dsl_dir_rename(const char *oldname, const char *newname);
-int dsl_dir_transfer_possible(dsl_dir_t *sdd, dsl_dir_t *tdd,
- uint64_t fs_cnt, uint64_t ss_cnt, uint64_t space, cred_t *);
-boolean_t dsl_dir_is_clone(dsl_dir_t *dd);
-void dsl_dir_new_refreservation(dsl_dir_t *dd, struct dsl_dataset *ds,
- uint64_t reservation, cred_t *cr, dmu_tx_t *tx);
-void dsl_dir_snap_cmtime_update(dsl_dir_t *dd);
-timestruc_t dsl_dir_snap_cmtime(dsl_dir_t *dd);
-void dsl_dir_set_reservation_sync_impl(dsl_dir_t *dd, uint64_t value,
- dmu_tx_t *tx);
-void dsl_dir_zapify(dsl_dir_t *dd, dmu_tx_t *tx);
-boolean_t dsl_dir_is_zapified(dsl_dir_t *dd);
-
-/* internal reserved dir name */
-#define MOS_DIR_NAME "$MOS"
-#define ORIGIN_DIR_NAME "$ORIGIN"
-#define FREE_DIR_NAME "$FREE"
-#define LEAK_DIR_NAME "$LEAK"
-
-#ifdef ZFS_DEBUG
-#define dprintf_dd(dd, fmt, ...) do { \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) { \
- char *__ds_name = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); \
- dsl_dir_name(dd, __ds_name); \
- dprintf("dd=%s " fmt, __ds_name, __VA_ARGS__); \
- kmem_free(__ds_name, ZFS_MAX_DATASET_NAME_LEN); \
- } \
-_NOTE(CONSTCOND) } while (0)
-#else
-#define dprintf_dd(dd, fmt, ...)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_DIR_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h
deleted file mode 100644
index 7dce64bfd40b..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h
+++ /dev/null
@@ -1,191 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013, 2017 by Delphix. All rights reserved.
- * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
- */
-
-#ifndef _SYS_DSL_POOL_H
-#define _SYS_DSL_POOL_H
-
-#include <sys/spa.h>
-#include <sys/txg.h>
-#include <sys/txg_impl.h>
-#include <sys/zfs_context.h>
-#include <sys/zio.h>
-#include <sys/dnode.h>
-#include <sys/ddt.h>
-#include <sys/arc.h>
-#include <sys/bpobj.h>
-#include <sys/bptree.h>
-#include <sys/rrwlock.h>
-#include <sys/dsl_synctask.h>
-#include <sys/mmp.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct objset;
-struct dsl_dir;
-struct dsl_dataset;
-struct dsl_pool;
-struct dmu_tx;
-struct dsl_scan;
-
-extern uint64_t zfs_dirty_data_max;
-extern uint64_t zfs_dirty_data_max_max;
-extern uint64_t zfs_dirty_data_sync_pct;
-extern int zfs_dirty_data_max_percent;
-extern int zfs_delay_min_dirty_percent;
-extern uint64_t zfs_delay_scale;
-
-/* These macros are for indexing into the zfs_all_blkstats_t. */
-#define DMU_OT_DEFERRED DMU_OT_NONE
-#define DMU_OT_OTHER DMU_OT_NUMTYPES /* place holder for DMU_OT() types */
-#define DMU_OT_TOTAL (DMU_OT_NUMTYPES + 1)
-
-typedef struct zfs_blkstat {
- uint64_t zb_count;
- uint64_t zb_asize;
- uint64_t zb_lsize;
- uint64_t zb_psize;
- uint64_t zb_gangs;
- uint64_t zb_ditto_2_of_2_samevdev;
- uint64_t zb_ditto_2_of_3_samevdev;
- uint64_t zb_ditto_3_of_3_samevdev;
-} zfs_blkstat_t;
-
-typedef struct zfs_all_blkstats {
- zfs_blkstat_t zab_type[DN_MAX_LEVELS + 1][DMU_OT_TOTAL + 1];
- kmutex_t zab_lock;
-} zfs_all_blkstats_t;
-
-
-typedef struct dsl_pool {
- /* Immutable */
- spa_t *dp_spa;
- struct objset *dp_meta_objset;
- struct dsl_dir *dp_root_dir;
- struct dsl_dir *dp_mos_dir;
- struct dsl_dir *dp_free_dir;
- struct dsl_dir *dp_leak_dir;
- struct dsl_dataset *dp_origin_snap;
- uint64_t dp_root_dir_obj;
- struct taskq *dp_vnrele_taskq;
-
- /* No lock needed - sync context only */
- blkptr_t dp_meta_rootbp;
- uint64_t dp_tmp_userrefs_obj;
- bpobj_t dp_free_bpobj;
- uint64_t dp_bptree_obj;
- uint64_t dp_empty_bpobj;
- bpobj_t dp_obsolete_bpobj;
-
- struct dsl_scan *dp_scan;
-
- /* Uses dp_lock */
- kmutex_t dp_lock;
- kcondvar_t dp_spaceavail_cv;
- uint64_t dp_dirty_pertxg[TXG_SIZE];
- uint64_t dp_dirty_total;
- uint64_t dp_long_free_dirty_pertxg[TXG_SIZE];
- uint64_t dp_mos_used_delta;
- uint64_t dp_mos_compressed_delta;
- uint64_t dp_mos_uncompressed_delta;
-
- /*
- * Time of most recently scheduled (furthest in the future)
- * wakeup for delayed transactions.
- */
- hrtime_t dp_last_wakeup;
-
- /* Has its own locking */
- tx_state_t dp_tx;
- txg_list_t dp_dirty_datasets;
- txg_list_t dp_dirty_zilogs;
- txg_list_t dp_dirty_dirs;
- txg_list_t dp_sync_tasks;
- txg_list_t dp_early_sync_tasks;
- taskq_t *dp_sync_taskq;
- taskq_t *dp_zil_clean_taskq;
-
- /*
- * Protects administrative changes (properties, namespace)
- *
- * It is only held for write in syncing context. Therefore
- * syncing context does not need to ever have it for read, since
- * nobody else could possibly have it for write.
- */
- rrwlock_t dp_config_rwlock;
-
- zfs_all_blkstats_t *dp_blkstats;
-} dsl_pool_t;
-
-int dsl_pool_init(spa_t *spa, uint64_t txg, dsl_pool_t **dpp);
-int dsl_pool_open(dsl_pool_t *dp);
-void dsl_pool_close(dsl_pool_t *dp);
-dsl_pool_t *dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg);
-void dsl_pool_sync(dsl_pool_t *dp, uint64_t txg);
-void dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg);
-int dsl_pool_sync_context(dsl_pool_t *dp);
-uint64_t dsl_pool_adjustedsize(dsl_pool_t *dp, zfs_space_check_t slop_policy);
-uint64_t dsl_pool_unreserved_space(dsl_pool_t *dp,
- zfs_space_check_t slop_policy);
-void dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx);
-void dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg);
-void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp);
-void dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg,
- const blkptr_t *bpp);
-void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx);
-void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx);
-void dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx);
-void dsl_pool_mos_diduse_space(dsl_pool_t *dp,
- int64_t used, int64_t comp, int64_t uncomp);
-void dsl_pool_ckpoint_diduse_space(dsl_pool_t *dp,
- int64_t used, int64_t comp, int64_t uncomp);
-void dsl_pool_config_enter(dsl_pool_t *dp, void *tag);
-void dsl_pool_config_enter_prio(dsl_pool_t *dp, void *tag);
-void dsl_pool_config_exit(dsl_pool_t *dp, void *tag);
-boolean_t dsl_pool_config_held(dsl_pool_t *dp);
-boolean_t dsl_pool_config_held_writer(dsl_pool_t *dp);
-boolean_t dsl_pool_need_dirty_delay(dsl_pool_t *dp);
-
-taskq_t *dsl_pool_vnrele_taskq(dsl_pool_t *dp);
-
-int dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj,
- const char *tag, uint64_t now, dmu_tx_t *tx);
-int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj,
- const char *tag, dmu_tx_t *tx);
-void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp);
-int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **);
-int dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp);
-void dsl_pool_rele(dsl_pool_t *dp, void *tag);
-
-void dsl_pool_create_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx);
-void dsl_pool_destroy_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_POOL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h
deleted file mode 100644
index 21e6f4674be9..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h
+++ /dev/null
@@ -1,115 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DSL_PROP_H
-#define _SYS_DSL_PROP_H
-
-#include <sys/dmu.h>
-#include <sys/dsl_pool.h>
-#include <sys/zfs_context.h>
-#include <sys/dsl_synctask.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_dataset;
-struct dsl_dir;
-
-/* The callback func may not call into the DMU or DSL! */
-typedef void (dsl_prop_changed_cb_t)(void *arg, uint64_t newval);
-
-typedef struct dsl_prop_record {
- list_node_t pr_node; /* link on dd_props */
- const char *pr_propname;
- list_t pr_cbs;
-} dsl_prop_record_t;
-
-typedef struct dsl_prop_cb_record {
- list_node_t cbr_pr_node; /* link on pr_cbs */
- list_node_t cbr_ds_node; /* link on ds_prop_cbs */
- dsl_prop_record_t *cbr_pr;
- struct dsl_dataset *cbr_ds;
- dsl_prop_changed_cb_t *cbr_func;
- void *cbr_arg;
-} dsl_prop_cb_record_t;
-
-typedef struct dsl_props_arg {
- nvlist_t *pa_props;
- zprop_source_t pa_source;
-} dsl_props_arg_t;
-
-void dsl_prop_init(dsl_dir_t *dd);
-void dsl_prop_fini(dsl_dir_t *dd);
-int dsl_prop_register(struct dsl_dataset *ds, const char *propname,
- dsl_prop_changed_cb_t *callback, void *cbarg);
-void dsl_prop_unregister_all(struct dsl_dataset *ds, void *cbarg);
-void dsl_prop_notify_all(struct dsl_dir *dd);
-boolean_t dsl_prop_hascb(struct dsl_dataset *ds);
-
-int dsl_prop_get(const char *ddname, const char *propname,
- int intsz, int numints, void *buf, char *setpoint);
-int dsl_prop_get_integer(const char *ddname, const char *propname,
- uint64_t *valuep, char *setpoint);
-int dsl_prop_get_all(objset_t *os, nvlist_t **nvp);
-int dsl_prop_get_received(const char *dsname, nvlist_t **nvp);
-int dsl_prop_get_ds(struct dsl_dataset *ds, const char *propname,
- int intsz, int numints, void *buf, char *setpoint);
-int dsl_prop_get_int_ds(struct dsl_dataset *ds, const char *propname,
- uint64_t *valuep);
-int dsl_prop_get_dd(struct dsl_dir *dd, const char *propname,
- int intsz, int numints, void *buf, char *setpoint,
- boolean_t snapshot);
-
-void dsl_props_set_sync_impl(struct dsl_dataset *ds, zprop_source_t source,
- nvlist_t *props, dmu_tx_t *tx);
-void dsl_prop_set_sync_impl(struct dsl_dataset *ds, const char *propname,
- zprop_source_t source, int intsz, int numints, const void *value,
- dmu_tx_t *tx);
-int dsl_props_set(const char *dsname, zprop_source_t source, nvlist_t *nvl);
-int dsl_prop_set_int(const char *dsname, const char *propname,
- zprop_source_t source, uint64_t value);
-int dsl_prop_set_string(const char *dsname, const char *propname,
- zprop_source_t source, const char *value);
-int dsl_prop_inherit(const char *dsname, const char *propname,
- zprop_source_t source);
-
-int dsl_prop_predict(dsl_dir_t *dd, const char *propname,
- zprop_source_t source, uint64_t value, uint64_t *newvalp);
-
-/* flag first receive on or after SPA_VERSION_RECVD_PROPS */
-boolean_t dsl_prop_get_hasrecvd(const char *dsname);
-int dsl_prop_set_hasrecvd(const char *dsname);
-void dsl_prop_unset_hasrecvd(const char *dsname);
-
-void dsl_prop_nvlist_add_uint64(nvlist_t *nv, zfs_prop_t prop, uint64_t value);
-void dsl_prop_nvlist_add_string(nvlist_t *nv,
- zfs_prop_t prop, const char *value);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_PROP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h
deleted file mode 100644
index 5ddffe57bf97..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_scan.h
+++ /dev/null
@@ -1,188 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- * Copyright (c) 2017 Datto Inc.
- */
-
-#ifndef _SYS_DSL_SCAN_H
-#define _SYS_DSL_SCAN_H
-
-#include <sys/zfs_context.h>
-#include <sys/zio.h>
-#include <sys/ddt.h>
-#include <sys/bplist.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct objset;
-struct dsl_dir;
-struct dsl_dataset;
-struct dsl_pool;
-struct dmu_tx;
-
-/*
- * All members of this structure must be uint64_t, for byteswap
- * purposes.
- */
-typedef struct dsl_scan_phys {
- uint64_t scn_func; /* pool_scan_func_t */
- uint64_t scn_state; /* dsl_scan_state_t */
- uint64_t scn_queue_obj;
- uint64_t scn_min_txg;
- uint64_t scn_max_txg;
- uint64_t scn_cur_min_txg;
- uint64_t scn_cur_max_txg;
- uint64_t scn_start_time;
- uint64_t scn_end_time;
- uint64_t scn_to_examine; /* total bytes to be scanned */
- uint64_t scn_examined; /* bytes scanned so far */
- uint64_t scn_to_process;
- uint64_t scn_processed;
- uint64_t scn_errors; /* scan I/O error count */
- uint64_t scn_ddt_class_max;
- ddt_bookmark_t scn_ddt_bookmark;
- zbookmark_phys_t scn_bookmark;
- uint64_t scn_flags; /* dsl_scan_flags_t */
-} dsl_scan_phys_t;
-
-#define SCAN_PHYS_NUMINTS (sizeof (dsl_scan_phys_t) / sizeof (uint64_t))
-
-typedef enum dsl_scan_flags {
- DSF_VISIT_DS_AGAIN = 1<<0,
- DSF_SCRUB_PAUSED = 1<<1,
-} dsl_scan_flags_t;
-
-/*
- * Every pool will have one dsl_scan_t and this structure will contain
- * in-memory information about the scan and a pointer to the on-disk
- * representation (i.e. dsl_scan_phys_t). Most of the state of the scan
- * is contained on-disk to allow the scan to resume in the event of a reboot
- * or panic. This structure maintains information about the behavior of a
- * running scan, some caching information, and how it should traverse the pool.
- *
- * The following members of this structure direct the behavior of the scan:
- *
- * scn_suspending - a scan that cannot be completed in a single txg or
- * has exceeded its allotted time will need to suspend.
- * When this flag is set the scanner will stop traversing
- * the pool and write out the current state to disk.
- *
- * scn_restart_txg - directs the scanner to either restart or start a
- * a scan at the specified txg value.
- *
- * scn_done_txg - when a scan completes its traversal it will set
- * the completion txg to the next txg. This is necessary
- * to ensure that any blocks that were freed during
- * the scan but have not yet been processed (i.e deferred
- * frees) are accounted for.
- *
- * This structure also maintains information about deferred frees which are
- * a special kind of traversal. Deferred free can exist in either a bptree or
- * a bpobj structure. The scn_is_bptree flag will indicate the type of
- * deferred free that is in progress. If the deferred free is part of an
- * asynchronous destroy then the scn_async_destroying flag will be set.
- */
-typedef struct dsl_scan {
- struct dsl_pool *scn_dp;
-
- uint64_t scn_restart_txg;
- uint64_t scn_done_txg;
- uint64_t scn_sync_start_time;
- uint64_t scn_issued_before_pass;
-
- /* for freeing blocks */
- boolean_t scn_is_bptree;
- boolean_t scn_async_destroying;
- boolean_t scn_async_stalled;
- uint64_t scn_async_block_min_time_ms;
- /* flags and stats for controlling scan state */
- boolean_t scn_is_sorted; /* doing sequential scan */
- boolean_t scn_clearing; /* scan is issuing sequential extents */
- boolean_t scn_checkpointing; /* scan is issuing all queued extents */
- boolean_t scn_suspending; /* scan is suspending until next txg */
- uint64_t scn_last_checkpoint; /* time of last checkpoint */
-
- /* members for thread synchronization */
- zio_t *scn_zio_root; /* root zio for waiting on IO */
- taskq_t *scn_taskq; /* task queue for issuing extents */
-
- /* for controlling scan prefetch, protected by spa_scrub_lock */
- boolean_t scn_prefetch_stop; /* prefetch should stop */
- zbookmark_phys_t scn_prefetch_bookmark; /* prefetch start bookmark */
- avl_tree_t scn_prefetch_queue; /* priority queue of prefetch IOs */
- uint64_t scn_maxinflight_bytes; /* max bytes in flight for poool */
-
- /* per txg statistics */
- uint64_t scn_visited_this_txg; /* total bps visited this txg */
- uint64_t scn_holes_this_txg;
- uint64_t scn_lt_min_this_txg;
- uint64_t scn_gt_max_this_txg;
- uint64_t scn_ddt_contained_this_txg;
- uint64_t scn_objsets_visited_this_txg;
- uint64_t scn_avg_seg_size_this_txg;
- uint64_t scn_segs_this_txg;
- uint64_t scn_avg_zio_size_this_txg;
- uint64_t scn_zios_this_txg;
-
- /* members needed for syncing scan status to disk */
- dsl_scan_phys_t scn_phys; /* on disk representation of scan */
- dsl_scan_phys_t scn_phys_cached;
- avl_tree_t scn_queue; /* queue of datasets to scan */
- uint64_t scn_bytes_pending; /* outstanding data to issue */
-} dsl_scan_t;
-
-typedef struct dsl_scan_io_queue dsl_scan_io_queue_t;
-
-void dsl_scan_global_init(void);
-
-void scan_init(void);
-void scan_fini(void);
-int dsl_scan_init(struct dsl_pool *dp, uint64_t txg);
-void dsl_scan_fini(struct dsl_pool *dp);
-void dsl_scan_sync(struct dsl_pool *, dmu_tx_t *);
-int dsl_scan_cancel(struct dsl_pool *);
-int dsl_scan(struct dsl_pool *, pool_scan_func_t);
-boolean_t dsl_scan_scrubbing(const struct dsl_pool *dp);
-int dsl_scrub_set_pause_resume(const struct dsl_pool *dp, pool_scrub_cmd_t cmd);
-void dsl_resilver_restart(struct dsl_pool *, uint64_t txg);
-boolean_t dsl_scan_resilvering(struct dsl_pool *dp);
-boolean_t dsl_dataset_unstable(struct dsl_dataset *ds);
-void dsl_scan_ddt_entry(dsl_scan_t *scn, enum zio_checksum checksum,
- ddt_entry_t *dde, dmu_tx_t *tx);
-void dsl_scan_ds_destroyed(struct dsl_dataset *ds, struct dmu_tx *tx);
-void dsl_scan_ds_snapshotted(struct dsl_dataset *ds, struct dmu_tx *tx);
-void dsl_scan_ds_clone_swapped(struct dsl_dataset *ds1, struct dsl_dataset *ds2,
- struct dmu_tx *tx);
-boolean_t dsl_scan_active(dsl_scan_t *scn);
-boolean_t dsl_scan_is_paused_scrub(const dsl_scan_t *scn);
-void dsl_scan_freed(spa_t *spa, const blkptr_t *bp);
-void dsl_scan_io_queue_destroy(dsl_scan_io_queue_t *queue);
-void dsl_scan_io_queue_vdev_xfer(vdev_t *svd, vdev_t *tvd);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_SCAN_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h
deleted file mode 100644
index 957963ffe553..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h
+++ /dev/null
@@ -1,127 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_DSL_SYNCTASK_H
-#define _SYS_DSL_SYNCTASK_H
-
-#include <sys/txg.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_pool;
-
-typedef int (dsl_checkfunc_t)(void *, dmu_tx_t *);
-typedef void (dsl_syncfunc_t)(void *, dmu_tx_t *);
-typedef void (dsl_sigfunc_t)(void *, dmu_tx_t *);
-
-typedef enum zfs_space_check {
- /*
- * Normal space check: if there is less than 3.2% free space,
- * the operation will fail. Operations which are logically
- * creating things should use this (e.g. "zfs create", "zfs snapshot").
- * User writes (via the ZPL / ZVOL) also fail at this point.
- */
- ZFS_SPACE_CHECK_NORMAL,
-
- /*
- * Space check allows use of half the slop space. If there
- * is less than 1.6% free space, the operation will fail. Most
- * operations should use this (e.g. "zfs set", "zfs rename"),
- * because we want them to succeed even after user writes are failing,
- * so that they can be used as part of the space recovery process.
- */
- ZFS_SPACE_CHECK_RESERVED,
-
- /*
- * Space check allows use of three quarters of the slop space.
- * If there is less than 0.8% free space, the operation will
- * fail.
- */
- ZFS_SPACE_CHECK_EXTRA_RESERVED,
-
- /*
- * In all cases "zfs destroy" is expected to result in an net
- * reduction of space, except one. When the pool has a
- * checkpoint, space freed by "zfs destroy" will not actually
- * free anything internally. Thus, it starts failing after
- * three quarters of the slop space is exceeded.
- */
- ZFS_SPACE_CHECK_DESTROY = ZFS_SPACE_CHECK_EXTRA_RESERVED,
-
- /*
- * A channel program can run a "zfs destroy" as part of its
- * script and therefore has the same space_check policy when
- * being evaluated.
- */
- ZFS_SPACE_CHECK_ZCP_EVAL = ZFS_SPACE_CHECK_DESTROY,
-
- /*
- * No space check is performed. This level of space check should
- * be used cautiously as operations that use it can even run when
- * 0.8% capacity is left for use. In this scenario, if there is a
- * checkpoint, async destroys are suspended and any kind of freeing
- * can potentially add space instead of freeing it.
- *
- * See also the comments above spa_slop_shift.
- */
- ZFS_SPACE_CHECK_NONE,
-
- ZFS_SPACE_CHECK_DISCARD_CHECKPOINT = ZFS_SPACE_CHECK_NONE,
-
-} zfs_space_check_t;
-
-typedef struct dsl_sync_task {
- txg_node_t dst_node;
- struct dsl_pool *dst_pool;
- uint64_t dst_txg;
- int dst_space;
- zfs_space_check_t dst_space_check;
- dsl_checkfunc_t *dst_checkfunc;
- dsl_syncfunc_t *dst_syncfunc;
- void *dst_arg;
- int dst_error;
- boolean_t dst_nowaiter;
-} dsl_sync_task_t;
-
-void dsl_sync_task_sync(dsl_sync_task_t *, dmu_tx_t *);
-int dsl_sync_task(const char *, dsl_checkfunc_t *,
- dsl_syncfunc_t *, void *, int, zfs_space_check_t);
-void dsl_sync_task_nowait(struct dsl_pool *, dsl_syncfunc_t *,
- void *, int, zfs_space_check_t, dmu_tx_t *);
-int dsl_early_sync_task(const char *, dsl_checkfunc_t *,
- dsl_syncfunc_t *, void *, int, zfs_space_check_t);
-void dsl_early_sync_task_nowait(struct dsl_pool *, dsl_syncfunc_t *,
- void *, int, zfs_space_check_t, dmu_tx_t *);
-int dsl_sync_task_sig(const char *, dsl_checkfunc_t *, dsl_syncfunc_t *,
- dsl_sigfunc_t *, void *, int, zfs_space_check_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_SYNCTASK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h
deleted file mode 100644
index 071aeb86d1f1..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_userhold.h
+++ /dev/null
@@ -1,57 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012 by Delphix. All rights reserved.
- * Copyright (c) 2012, Joyent, Inc. All rights reserved.
- * Copyright (c) 2013 Steven Hartland. All rights reserved.
- */
-
-#ifndef _SYS_DSL_USERHOLD_H
-#define _SYS_DSL_USERHOLD_H
-
-#include <sys/nvpair.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_pool;
-struct dsl_dataset;
-struct dmu_tx;
-
-int dsl_dataset_user_hold(nvlist_t *holds, minor_t cleanup_minor,
- nvlist_t *errlist);
-int dsl_dataset_user_release(nvlist_t *holds, nvlist_t *errlist);
-int dsl_dataset_get_holds(const char *dsname, nvlist_t *nvl);
-void dsl_dataset_user_release_tmp(struct dsl_pool *dp, nvlist_t *holds);
-int dsl_dataset_user_hold_check_one(struct dsl_dataset *ds, const char *htag,
- boolean_t temphold, struct dmu_tx *tx);
-void dsl_dataset_user_hold_sync_one(struct dsl_dataset *ds, const char *htag,
- minor_t minor, uint64_t now, struct dmu_tx *tx);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_DSL_USERHOLD_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h
deleted file mode 100644
index 7219dc967427..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h
+++ /dev/null
@@ -1,127 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2017, Intel Corporation.
- */
-
-#ifndef _SYS_METASLAB_H
-#define _SYS_METASLAB_H
-
-#include <sys/spa.h>
-#include <sys/space_map.h>
-#include <sys/txg.h>
-#include <sys/zio.h>
-#include <sys/avl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-typedef struct metaslab_ops {
- uint64_t (*msop_alloc)(metaslab_t *, uint64_t);
-} metaslab_ops_t;
-
-
-extern metaslab_ops_t *zfs_metaslab_ops;
-
-int metaslab_init(metaslab_group_t *, uint64_t, uint64_t, uint64_t,
- metaslab_t **);
-void metaslab_fini(metaslab_t *);
-
-int metaslab_load(metaslab_t *);
-void metaslab_unload(metaslab_t *);
-
-uint64_t metaslab_allocated_space(metaslab_t *);
-
-void metaslab_sync(metaslab_t *, uint64_t);
-void metaslab_sync_done(metaslab_t *, uint64_t);
-void metaslab_sync_reassess(metaslab_group_t *);
-uint64_t metaslab_block_maxsize(metaslab_t *);
-
-/*
- * metaslab alloc flags
- */
-#define METASLAB_HINTBP_FAVOR 0x0
-#define METASLAB_HINTBP_AVOID 0x1
-#define METASLAB_GANG_HEADER 0x2
-#define METASLAB_GANG_CHILD 0x4
-#define METASLAB_ASYNC_ALLOC 0x8
-#define METASLAB_DONT_THROTTLE 0x10
-#define METASLAB_MUST_RESERVE 0x20
-#define METASLAB_FASTWRITE 0x40
-
-int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
- blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *,
- int);
-int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
- dva_t *, int, dva_t *, uint64_t, int, zio_alloc_list_t *, int);
-void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);
-void metaslab_free_concrete(vdev_t *, uint64_t, uint64_t, boolean_t);
-void metaslab_free_dva(spa_t *, const dva_t *, boolean_t);
-void metaslab_free_impl_cb(uint64_t, vdev_t *, uint64_t, uint64_t, void *);
-void metaslab_unalloc_dva(spa_t *, const dva_t *, uint64_t);
-int metaslab_claim(spa_t *, const blkptr_t *, uint64_t);
-int metaslab_claim_impl(vdev_t *, uint64_t, uint64_t, uint64_t);
-void metaslab_check_free(spa_t *, const blkptr_t *);
-
-void metaslab_alloc_trace_init(void);
-void metaslab_alloc_trace_fini(void);
-void metaslab_trace_init(zio_alloc_list_t *);
-void metaslab_trace_fini(zio_alloc_list_t *);
-
-metaslab_class_t *metaslab_class_create(spa_t *, metaslab_ops_t *);
-void metaslab_class_destroy(metaslab_class_t *);
-int metaslab_class_validate(metaslab_class_t *);
-void metaslab_class_histogram_verify(metaslab_class_t *);
-uint64_t metaslab_class_fragmentation(metaslab_class_t *);
-uint64_t metaslab_class_expandable_space(metaslab_class_t *);
-boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int, int,
- zio_t *, int);
-void metaslab_class_throttle_unreserve(metaslab_class_t *, int, int, zio_t *);
-
-uint64_t metaslab_class_get_alloc(metaslab_class_t *);
-uint64_t metaslab_class_get_space(metaslab_class_t *);
-uint64_t metaslab_class_get_dspace(metaslab_class_t *);
-uint64_t metaslab_class_get_deferred(metaslab_class_t *);
-uint64_t metaslab_class_get_minblocksize(metaslab_class_t *mc);
-
-metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *, int);
-void metaslab_group_destroy(metaslab_group_t *);
-void metaslab_group_activate(metaslab_group_t *);
-void metaslab_group_passivate(metaslab_group_t *);
-boolean_t metaslab_group_initialized(metaslab_group_t *);
-uint64_t metaslab_group_get_space(metaslab_group_t *);
-void metaslab_group_histogram_verify(metaslab_group_t *);
-uint64_t metaslab_group_fragmentation(metaslab_group_t *);
-void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
-void metaslab_group_alloc_decrement(spa_t *, uint64_t, void *, int, int,
- boolean_t);
-void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, void *, int);
-void metaslab_recalculate_weight_and_sort(metaslab_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_METASLAB_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h
deleted file mode 100644
index ae49795fec1a..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab_impl.h
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_METASLAB_IMPL_H
-#define _SYS_METASLAB_IMPL_H
-
-#include <sys/metaslab.h>
-#include <sys/space_map.h>
-#include <sys/range_tree.h>
-#include <sys/vdev.h>
-#include <sys/txg.h>
-#include <sys/avl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Metaslab allocation tracing record.
- */
-typedef struct metaslab_alloc_trace {
- list_node_t mat_list_node;
- metaslab_group_t *mat_mg;
- metaslab_t *mat_msp;
- uint64_t mat_size;
- uint64_t mat_weight;
- uint32_t mat_dva_id;
- uint64_t mat_offset;
- int mat_allocator;
-} metaslab_alloc_trace_t;
-
-/*
- * Used by the metaslab allocation tracing facility to indicate
- * error conditions. These errors are stored to the offset member
- * of the metaslab_alloc_trace_t record and displayed by mdb.
- */
-typedef enum trace_alloc_type {
- TRACE_ALLOC_FAILURE = -1ULL,
- TRACE_TOO_SMALL = -2ULL,
- TRACE_FORCE_GANG = -3ULL,
- TRACE_NOT_ALLOCATABLE = -4ULL,
- TRACE_GROUP_FAILURE = -5ULL,
- TRACE_ENOSPC = -6ULL,
- TRACE_CONDENSING = -7ULL,
- TRACE_VDEV_ERROR = -8ULL,
- TRACE_INITIALIZING = -9ULL
-} trace_alloc_type_t;
-
-#define METASLAB_WEIGHT_PRIMARY (1ULL << 63)
-#define METASLAB_WEIGHT_SECONDARY (1ULL << 62)
-#define METASLAB_WEIGHT_CLAIM (1ULL << 61)
-#define METASLAB_WEIGHT_TYPE (1ULL << 60)
-#define METASLAB_ACTIVE_MASK \
- (METASLAB_WEIGHT_PRIMARY | METASLAB_WEIGHT_SECONDARY | \
- METASLAB_WEIGHT_CLAIM)
-
-/*
- * The metaslab weight is used to encode the amount of free space in a
- * metaslab, such that the "best" metaslab appears first when sorting the
- * metaslabs by weight. The weight (and therefore the "best" metaslab) can
- * be determined in two different ways: by computing a weighted sum of all
- * the free space in the metaslab (a space based weight) or by counting only
- * the free segments of the largest size (a segment based weight). We prefer
- * the segment based weight because it reflects how the free space is
- * comprised, but we cannot always use it -- legacy pools do not have the
- * space map histogram information necessary to determine the largest
- * contiguous regions. Pools that have the space map histogram determine
- * the segment weight by looking at each bucket in the histogram and
- * determining the free space whose size in bytes is in the range:
- * [2^i, 2^(i+1))
- * We then encode the largest index, i, that contains regions into the
- * segment-weighted value.
- *
- * Space-based weight:
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * |PSC1| weighted-free space |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * PS - indicates primary and secondary activation
- * C - indicates activation for claimed block zio
- * space - the fragmentation-weighted space
- *
- * Segment-based weight:
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * |PSC0| idx| count of segments in region |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * PS - indicates primary and secondary activation
- * C - indicates activation for claimed block zio
- * idx - index for the highest bucket in the histogram
- * count - number of segments in the specified bucket
- */
-#define WEIGHT_GET_ACTIVE(weight) BF64_GET((weight), 61, 3)
-#define WEIGHT_SET_ACTIVE(weight, x) BF64_SET((weight), 61, 3, x)
-
-#define WEIGHT_IS_SPACEBASED(weight) \
- ((weight) == 0 || BF64_GET((weight), 60, 1))
-#define WEIGHT_SET_SPACEBASED(weight) BF64_SET((weight), 60, 1, 1)
-
-/*
- * These macros are only applicable to segment-based weighting.
- */
-#define WEIGHT_GET_INDEX(weight) BF64_GET((weight), 54, 6)
-#define WEIGHT_SET_INDEX(weight, x) BF64_SET((weight), 54, 6, x)
-#define WEIGHT_GET_COUNT(weight) BF64_GET((weight), 0, 54)
-#define WEIGHT_SET_COUNT(weight, x) BF64_SET((weight), 0, 54, x)
-
-/*
- * A metaslab class encompasses a category of allocatable top-level vdevs.
- * Each top-level vdev is associated with a metaslab group which defines
- * the allocatable region for that vdev. Examples of these categories include
- * "normal" for data block allocations (i.e. main pool allocations) or "log"
- * for allocations designated for intent log devices (i.e. slog devices).
- * When a block allocation is requested from the SPA it is associated with a
- * metaslab_class_t, and only top-level vdevs (i.e. metaslab groups) belonging
- * to the class can be used to satisfy that request. Allocations are done
- * by traversing the metaslab groups that are linked off of the mc_rotor field.
- * This rotor points to the next metaslab group where allocations will be
- * attempted. Allocating a block is a 3 step process -- select the metaslab
- * group, select the metaslab, and then allocate the block. The metaslab
- * class defines the low-level block allocator that will be used as the
- * final step in allocation. These allocators are pluggable allowing each class
- * to use a block allocator that best suits that class.
- */
-struct metaslab_class {
- kmutex_t mc_lock;
- spa_t *mc_spa;
- metaslab_group_t *mc_rotor;
- metaslab_ops_t *mc_ops;
- uint64_t mc_aliquot;
-
- /*
- * Track the number of metaslab groups that have been initialized
- * and can accept allocations. An initialized metaslab group is
- * one has been completely added to the config (i.e. we have
- * updated the MOS config and the space has been added to the pool).
- */
- uint64_t mc_groups;
-
- /*
- * Toggle to enable/disable the allocation throttle.
- */
- boolean_t mc_alloc_throttle_enabled;
-
- /*
- * The allocation throttle works on a reservation system. Whenever
- * an asynchronous zio wants to perform an allocation it must
- * first reserve the number of blocks that it wants to allocate.
- * If there aren't sufficient slots available for the pending zio
- * then that I/O is throttled until more slots free up. The current
- * number of reserved allocations is maintained by the mc_alloc_slots
- * refcount. The mc_alloc_max_slots value determines the maximum
- * number of allocations that the system allows. Gang blocks are
- * allowed to reserve slots even if we've reached the maximum
- * number of allocations allowed.
- */
- uint64_t *mc_alloc_max_slots;
- zfs_refcount_t *mc_alloc_slots;
-
- uint64_t mc_alloc_groups; /* # of allocatable groups */
-
- uint64_t mc_alloc; /* total allocated space */
- uint64_t mc_deferred; /* total deferred frees */
- uint64_t mc_space; /* total space (alloc + free) */
- uint64_t mc_dspace; /* total deflated space */
- uint64_t mc_minblocksize;
- uint64_t mc_histogram[RANGE_TREE_HISTOGRAM_SIZE];
-};
-
-/*
- * Metaslab groups encapsulate all the allocatable regions (i.e. metaslabs)
- * of a top-level vdev. They are linked togther to form a circular linked
- * list and can belong to only one metaslab class. Metaslab groups may become
- * ineligible for allocations for a number of reasons such as limited free
- * space, fragmentation, or going offline. When this happens the allocator will
- * simply find the next metaslab group in the linked list and attempt
- * to allocate from that group instead.
- */
-struct metaslab_group {
- kmutex_t mg_lock;
- metaslab_t **mg_primaries;
- metaslab_t **mg_secondaries;
- avl_tree_t mg_metaslab_tree;
- uint64_t mg_aliquot;
- boolean_t mg_allocatable; /* can we allocate? */
- uint64_t mg_ms_ready;
-
- /*
- * A metaslab group is considered to be initialized only after
- * we have updated the MOS config and added the space to the pool.
- * We only allow allocation attempts to a metaslab group if it
- * has been initialized.
- */
- boolean_t mg_initialized;
-
- uint64_t mg_free_capacity; /* percentage free */
- int64_t mg_bias;
- int64_t mg_activation_count;
- metaslab_class_t *mg_class;
- vdev_t *mg_vd;
- taskq_t *mg_taskq;
- metaslab_group_t *mg_prev;
- metaslab_group_t *mg_next;
-
- /*
- * In order for the allocation throttle to function properly, we cannot
- * have too many IOs going to each disk by default; the throttle
- * operates by allocating more work to disks that finish quickly, so
- * allocating larger chunks to each disk reduces its effectiveness.
- * However, if the number of IOs going to each allocator is too small,
- * we will not perform proper aggregation at the vdev_queue layer,
- * also resulting in decreased performance. Therefore, we will use a
- * ramp-up strategy.
- *
- * Each allocator in each metaslab group has a current queue depth
- * (mg_alloc_queue_depth[allocator]) and a current max queue depth
- * (mg_cur_max_alloc_queue_depth[allocator]), and each metaslab group
- * has an absolute max queue depth (mg_max_alloc_queue_depth). We
- * add IOs to an allocator until the mg_alloc_queue_depth for that
- * allocator hits the cur_max. Every time an IO completes for a given
- * allocator on a given metaslab group, we increment its cur_max until
- * it reaches mg_max_alloc_queue_depth. The cur_max resets every txg to
- * help protect against disks that decrease in performance over time.
- *
- * It's possible for an allocator to handle more allocations than
- * its max. This can occur when gang blocks are required or when other
- * groups are unable to handle their share of allocations.
- */
- uint64_t mg_max_alloc_queue_depth;
- uint64_t *mg_cur_max_alloc_queue_depth;
- zfs_refcount_t *mg_alloc_queue_depth;
- int mg_allocators;
- /*
- * A metalab group that can no longer allocate the minimum block
- * size will set mg_no_free_space. Once a metaslab group is out
- * of space then its share of work must be distributed to other
- * groups.
- */
- boolean_t mg_no_free_space;
-
- uint64_t mg_allocations;
- uint64_t mg_failed_allocations;
- uint64_t mg_fragmentation;
- uint64_t mg_histogram[RANGE_TREE_HISTOGRAM_SIZE];
-
- int mg_ms_initializing;
- boolean_t mg_initialize_updating;
- kmutex_t mg_ms_initialize_lock;
- kcondvar_t mg_ms_initialize_cv;
-};
-
-/*
- * This value defines the number of elements in the ms_lbas array. The value
- * of 64 was chosen as it covers all power of 2 buckets up to UINT64_MAX.
- * This is the equivalent of highbit(UINT64_MAX).
- */
-#define MAX_LBAS 64
-
-/*
- * Each metaslab maintains a set of in-core trees to track metaslab
- * operations. The in-core free tree (ms_allocatable) contains the list of
- * free segments which are eligible for allocation. As blocks are
- * allocated, the allocated segment are removed from the ms_allocatable and
- * added to a per txg allocation tree (ms_allocating). As blocks are
- * freed, they are added to the free tree (ms_freeing). These trees
- * allow us to process all allocations and frees in syncing context
- * where it is safe to update the on-disk space maps. An additional set
- * of in-core trees is maintained to track deferred frees
- * (ms_defer). Once a block is freed it will move from the
- * ms_freed to the ms_defer tree. A deferred free means that a block
- * has been freed but cannot be used by the pool until TXG_DEFER_SIZE
- * transactions groups later. For example, a block that is freed in txg
- * 50 will not be available for reallocation until txg 52 (50 +
- * TXG_DEFER_SIZE). This provides a safety net for uberblock rollback.
- * A pool could be safely rolled back TXG_DEFERS_SIZE transactions
- * groups and ensure that no block has been reallocated.
- *
- * The simplified transition diagram looks like this:
- *
- *
- * ALLOCATE
- * |
- * V
- * free segment (ms_allocatable) -> ms_allocating[4] -> (write to space map)
- * ^
- * | ms_freeing <--- FREE
- * | |
- * | v
- * | ms_freed
- * | |
- * +-------- ms_defer[2] <-------+-------> (write to space map)
- *
- *
- * Each metaslab's space is tracked in a single space map in the MOS,
- * which is only updated in syncing context. Each time we sync a txg,
- * we append the allocs and frees from that txg to the space map. The
- * pool space is only updated once all metaslabs have finished syncing.
- *
- * To load the in-core free tree we read the space map from disk. This
- * object contains a series of alloc and free records that are combined
- * to make up the list of all free segments in this metaslab. These
- * segments are represented in-core by the ms_allocatable and are stored
- * in an AVL tree.
- *
- * As the space map grows (as a result of the appends) it will
- * eventually become space-inefficient. When the metaslab's in-core
- * free tree is zfs_condense_pct/100 times the size of the minimal
- * on-disk representation, we rewrite it in its minimized form. If a
- * metaslab needs to condense then we must set the ms_condensing flag to
- * ensure that allocations are not performed on the metaslab that is
- * being written.
- */
-struct metaslab {
- /*
- * This is the main lock of the metaslab and its purpose is to
- * coordinate our allocations and frees [e.g metaslab_block_alloc(),
- * metaslab_free_concrete(), ..etc] with our various syncing
- * procedures [e.g. metaslab_sync(), metaslab_sync_done(), ..etc].
- *
- * The lock is also used during some miscellaneous operations like
- * using the metaslab's histogram for the metaslab group's histogram
- * aggregation, or marking the metaslab for initialization.
- */
- kmutex_t ms_lock;
-
- /*
- * Acquired together with the ms_lock whenever we expect to
- * write to metaslab data on-disk (i.e flushing entries to
- * the metaslab's space map). It helps coordinate readers of
- * the metaslab's space map [see spa_vdev_remove_thread()]
- * with writers [see metaslab_sync()].
- *
- * Note that metaslab_load(), even though a reader, uses
- * a completely different mechanism to deal with the reading
- * of the metaslab's space map based on ms_synced_length. That
- * said, the function still uses the ms_sync_lock after it
- * has read the ms_sm [see relevant comment in metaslab_load()
- * as to why].
- */
- kmutex_t ms_sync_lock;
-
- kcondvar_t ms_load_cv;
- space_map_t *ms_sm;
- uint64_t ms_id;
- uint64_t ms_start;
- uint64_t ms_size;
- uint64_t ms_fragmentation;
-
- range_tree_t *ms_allocating[TXG_SIZE];
- range_tree_t *ms_allocatable;
- uint64_t ms_allocated_this_txg;
-
- /*
- * The following range trees are accessed only from syncing context.
- * ms_free*tree only have entries while syncing, and are empty
- * between syncs.
- */
- range_tree_t *ms_freeing; /* to free this syncing txg */
- range_tree_t *ms_freed; /* already freed this syncing txg */
- range_tree_t *ms_defer[TXG_DEFER_SIZE];
- range_tree_t *ms_checkpointing; /* to add to the checkpoint */
-
- boolean_t ms_condensing; /* condensing? */
- boolean_t ms_condense_wanted;
- uint64_t ms_condense_checked_txg;
-
- uint64_t ms_initializing; /* leaves initializing this ms */
-
- /*
- * We must always hold the ms_lock when modifying ms_loaded
- * and ms_loading.
- */
- boolean_t ms_loaded;
- boolean_t ms_loading;
-
- /*
- * The following histograms count entries that are in the
- * metaslab's space map (and its histogram) but are not in
- * ms_allocatable yet, because they are in ms_freed, ms_freeing,
- * or ms_defer[].
- *
- * When the metaslab is not loaded, its ms_weight needs to
- * reflect what is allocatable (i.e. what will be part of
- * ms_allocatable if it is loaded). The weight is computed from
- * the spacemap histogram, but that includes ranges that are
- * not yet allocatable (because they are in ms_freed,
- * ms_freeing, or ms_defer[]). Therefore, when calculating the
- * weight, we need to remove those ranges.
- *
- * The ranges in the ms_freed and ms_defer[] range trees are all
- * present in the spacemap. However, the spacemap may have
- * multiple entries to represent a contiguous range, because it
- * is written across multiple sync passes, but the changes of
- * all sync passes are consolidated into the range trees.
- * Adjacent ranges that are freed in different sync passes of
- * one txg will be represented separately (as 2 or more entries)
- * in the space map (and its histogram), but these adjacent
- * ranges will be consolidated (represented as one entry) in the
- * ms_freed/ms_defer[] range trees (and their histograms).
- *
- * When calculating the weight, we can not simply subtract the
- * range trees' histograms from the spacemap's histogram,
- * because the range trees' histograms may have entries in
- * higher buckets than the spacemap, due to consolidation.
- * Instead we must subtract the exact entries that were added to
- * the spacemap's histogram. ms_synchist and ms_deferhist[]
- * represent these exact entries, so we can subtract them from
- * the spacemap's histogram when calculating ms_weight.
- *
- * ms_synchist represents the same ranges as ms_freeing +
- * ms_freed, but without consolidation across sync passes.
- *
- * ms_deferhist[i] represents the same ranges as ms_defer[i],
- * but without consolidation across sync passes.
- */
- uint64_t ms_synchist[SPACE_MAP_HISTOGRAM_SIZE];
- uint64_t ms_deferhist[TXG_DEFER_SIZE][SPACE_MAP_HISTOGRAM_SIZE];
-
- /*
- * Tracks the exact amount of allocated space of this metaslab
- * (and specifically the metaslab's space map) up to the most
- * recently completed sync pass [see usage in metaslab_sync()].
- */
- uint64_t ms_allocated_space;
- int64_t ms_deferspace; /* sum of ms_defermap[] space */
- uint64_t ms_weight; /* weight vs. others in group */
- uint64_t ms_activation_weight; /* activation weight */
-
- /*
- * Track of whenever a metaslab is selected for loading or allocation.
- * We use this value to determine how long the metaslab should
- * stay cached.
- */
- uint64_t ms_selected_txg;
-
- uint64_t ms_alloc_txg; /* last successful alloc (debug only) */
- uint64_t ms_max_size; /* maximum allocatable size */
-
- /*
- * -1 if it's not active in an allocator, otherwise set to the allocator
- * this metaslab is active for.
- */
- int ms_allocator;
- boolean_t ms_primary; /* Only valid if ms_allocator is not -1 */
-
- /*
- * The metaslab block allocators can optionally use a size-ordered
- * range tree and/or an array of LBAs. Not all allocators use
- * this functionality. The ms_allocatable_by_size should always
- * contain the same number of segments as the ms_allocatable. The
- * only difference is that the ms_allocatable_by_size is ordered by
- * segment sizes.
- */
- avl_tree_t ms_allocatable_by_size;
- uint64_t ms_lbas[MAX_LBAS];
-
- metaslab_group_t *ms_group; /* metaslab group */
- avl_node_t ms_group_node; /* node in metaslab group tree */
- txg_node_t ms_txg_node; /* per-txg dirty metaslab links */
-
- /* updated every time we are done syncing the metaslab's space map */
- uint64_t ms_synced_length;
-
- boolean_t ms_new;
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_METASLAB_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/mmp.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/mmp.h
deleted file mode 100644
index 527e3323b4b9..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/mmp.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (C) 2017 by Lawrence Livermore National Security, LLC.
- */
-
-#ifndef _SYS_MMP_H
-#define _SYS_MMP_H
-
-#include <sys/spa.h>
-#include <sys/zfs_context.h>
-#include <sys/uberblock_impl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MMP_MIN_INTERVAL 100 /* ms */
-#define MMP_DEFAULT_INTERVAL 1000 /* ms */
-#define MMP_DEFAULT_IMPORT_INTERVALS 20
-#define MMP_DEFAULT_FAIL_INTERVALS 10
-#define MMP_MIN_FAIL_INTERVALS 2 /* min if != 0 */
-#define MMP_IMPORT_SAFETY_FACTOR 200 /* pct */
-#define MMP_INTERVAL_OK(interval) MAX(interval, MMP_MIN_INTERVAL)
-#define MMP_FAIL_INTVS_OK(fails) (fails == 0 ? 0 : MAX(fails, \
- MMP_MIN_FAIL_INTERVALS))
-
-typedef struct mmp_thread {
- kmutex_t mmp_thread_lock; /* protect thread mgmt fields */
- kcondvar_t mmp_thread_cv;
- kthread_t *mmp_thread;
- uint8_t mmp_thread_exiting;
- kmutex_t mmp_io_lock; /* protect below */
- hrtime_t mmp_last_write; /* last successful MMP write */
- uint64_t mmp_delay; /* decaying avg ns between MMP writes */
- uberblock_t mmp_ub; /* last ub written by sync */
- zio_t *mmp_zio_root; /* root of mmp write zios */
- uint64_t mmp_kstat_id; /* unique id for next MMP write kstat */
- int mmp_skip_error; /* reason for last skipped write */
- vdev_t *mmp_last_leaf; /* last mmp write sent here */
- uint64_t mmp_leaf_last_gen; /* last mmp write sent here */
- uint32_t mmp_seq; /* intra-second update counter */
-} mmp_thread_t;
-
-
-extern void mmp_init(struct spa *spa);
-extern void mmp_fini(struct spa *spa);
-extern void mmp_thread_start(struct spa *spa);
-extern void mmp_thread_stop(struct spa *spa);
-extern void mmp_update_uberblock(struct spa *spa, struct uberblock *ub);
-extern void mmp_signal_all_threads(void);
-
-/* Global tuning */
-extern ulong_t zfs_multihost_interval;
-extern uint_t zfs_multihost_fail_intervals;
-extern uint_t zfs_multihost_import_intervals;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_MMP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h
deleted file mode 100644
index a3b44e60eb97..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/multilist.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2013, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_MULTILIST_H
-#define _SYS_MULTILIST_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef list_node_t multilist_node_t;
-typedef struct multilist multilist_t;
-typedef struct multilist_sublist multilist_sublist_t;
-typedef unsigned int multilist_sublist_index_func_t(multilist_t *, void *);
-
-struct multilist_sublist {
- /*
- * The mutex used internally to implement thread safe insertions
- * and removals to this individual sublist. It can also be locked
- * by a consumer using multilist_sublist_{lock,unlock}, which is
- * useful if a consumer needs to traverse the list in a thread
- * safe manner.
- */
- kmutex_t mls_lock;
- /*
- * The actual list object containing all objects in this sublist.
- */
- list_t mls_list;
- /*
- * Pad to cache line, in an effort to try and prevent cache line
- * contention.
- */
-} __aligned(CACHE_LINE_SIZE);
-
-struct multilist {
- /*
- * This is used to get to the multilist_node_t structure given
- * the void *object contained on the list.
- */
- size_t ml_offset;
- /*
- * The number of sublists used internally by this multilist.
- */
- uint64_t ml_num_sublists;
- /*
- * The array of pointers to the actual sublists.
- */
- multilist_sublist_t *ml_sublists;
- /*
- * Pointer to function which determines the sublist to use
- * when inserting and removing objects from this multilist.
- * Please see the comment above multilist_create for details.
- */
- multilist_sublist_index_func_t *ml_index_func;
-};
-
-void multilist_destroy(multilist_t *);
-multilist_t *multilist_create(size_t, size_t, multilist_sublist_index_func_t *);
-
-void multilist_insert(multilist_t *, void *);
-void multilist_remove(multilist_t *, void *);
-int multilist_is_empty(multilist_t *);
-
-unsigned int multilist_get_num_sublists(multilist_t *);
-unsigned int multilist_get_random_index(multilist_t *);
-
-multilist_sublist_t *multilist_sublist_lock(multilist_t *, unsigned int);
-multilist_sublist_t *multilist_sublist_lock_obj(multilist_t *, void *);
-void multilist_sublist_unlock(multilist_sublist_t *);
-
-void multilist_sublist_insert_head(multilist_sublist_t *, void *);
-void multilist_sublist_insert_tail(multilist_sublist_t *, void *);
-void multilist_sublist_move_forward(multilist_sublist_t *mls, void *obj);
-void multilist_sublist_remove(multilist_sublist_t *, void *);
-int multilist_sublist_is_empty(multilist_sublist_t *);
-int multilist_sublist_is_empty_idx(multilist_t *, unsigned int);
-
-void *multilist_sublist_head(multilist_sublist_t *);
-void *multilist_sublist_tail(multilist_sublist_t *);
-void *multilist_sublist_next(multilist_sublist_t *, void *);
-void *multilist_sublist_prev(multilist_sublist_t *, void *);
-
-void multilist_link_init(multilist_node_t *);
-int multilist_link_active(multilist_node_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_MULTILIST_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/range_tree.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/range_tree.h
deleted file mode 100644
index bbdf66cade63..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/range_tree.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2013, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_RANGE_TREE_H
-#define _SYS_RANGE_TREE_H
-
-#include <sys/avl.h>
-#include <sys/dmu.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define RANGE_TREE_HISTOGRAM_SIZE 64
-
-typedef struct range_tree_ops range_tree_ops_t;
-
-/*
- * Note: the range_tree may not be accessed concurrently; consumers
- * must provide external locking if required.
- */
-typedef struct range_tree {
- avl_tree_t rt_root; /* offset-ordered segment AVL tree */
- uint64_t rt_space; /* sum of all segments in the map */
- range_tree_ops_t *rt_ops;
- void *rt_arg;
-
- /* rt_avl_compare should only be set it rt_arg is an AVL tree */
- uint64_t rt_gap; /* allowable inter-segment gap */
- int (*rt_avl_compare)(const void *, const void *);
- /*
- * The rt_histogram maintains a histogram of ranges. Each bucket,
- * rt_histogram[i], contains the number of ranges whose size is:
- * 2^i <= size of range in bytes < 2^(i+1)
- */
- uint64_t rt_histogram[RANGE_TREE_HISTOGRAM_SIZE];
-} range_tree_t;
-
-typedef struct range_seg {
- avl_node_t rs_node; /* AVL node */
- avl_node_t rs_pp_node; /* AVL picker-private node */
- uint64_t rs_start; /* starting offset of this segment */
- uint64_t rs_end; /* ending offset (non-inclusive) */
- uint64_t rs_fill; /* actual fill if gap mode is on */
-} range_seg_t;
-
-struct range_tree_ops {
- void (*rtop_create)(range_tree_t *rt, void *arg);
- void (*rtop_destroy)(range_tree_t *rt, void *arg);
- void (*rtop_add)(range_tree_t *rt, range_seg_t *rs, void *arg);
- void (*rtop_remove)(range_tree_t *rt, range_seg_t *rs, void *arg);
- void (*rtop_vacate)(range_tree_t *rt, void *arg);
-};
-
-typedef void range_tree_func_t(void *arg, uint64_t start, uint64_t size);
-
-void range_tree_init(void);
-void range_tree_fini(void);
-range_tree_t *range_tree_create_impl(range_tree_ops_t *ops, void *arg,
- int (*avl_compare)(const void*, const void*), uint64_t gap);
-range_tree_t *range_tree_create(range_tree_ops_t *ops, void *arg);
-void range_tree_destroy(range_tree_t *rt);
-boolean_t range_tree_contains(range_tree_t *rt, uint64_t start, uint64_t size);
-void range_tree_verify_not_present(range_tree_t *rt,
- uint64_t start, uint64_t size);
-range_seg_t *range_tree_find(range_tree_t *rt, uint64_t start, uint64_t size);
-void range_tree_resize_segment(range_tree_t *rt, range_seg_t *rs,
- uint64_t newstart, uint64_t newsize);
-uint64_t range_tree_space(range_tree_t *rt);
-boolean_t range_tree_is_empty(range_tree_t *rt);
-void range_tree_swap(range_tree_t **rtsrc, range_tree_t **rtdst);
-void range_tree_stat_verify(range_tree_t *rt);
-uint64_t range_tree_min(range_tree_t *rt);
-uint64_t range_tree_max(range_tree_t *rt);
-uint64_t range_tree_span(range_tree_t *rt);
-
-void range_tree_add(void *arg, uint64_t start, uint64_t size);
-void range_tree_remove(void *arg, uint64_t start, uint64_t size);
-void range_tree_remove_fill(range_tree_t *rt, uint64_t start, uint64_t size);
-void range_tree_adjust_fill(range_tree_t *rt, range_seg_t *rs, int64_t delta);
-void range_tree_clear(range_tree_t *rt, uint64_t start, uint64_t size);
-
-void range_tree_vacate(range_tree_t *rt, range_tree_func_t *func, void *arg);
-void range_tree_walk(range_tree_t *rt, range_tree_func_t *func, void *arg);
-range_seg_t *range_tree_first(range_tree_t *rt);
-
-void rt_avl_create(range_tree_t *rt, void *arg);
-void rt_avl_destroy(range_tree_t *rt, void *arg);
-void rt_avl_add(range_tree_t *rt, range_seg_t *rs, void *arg);
-void rt_avl_remove(range_tree_t *rt, range_seg_t *rs, void *arg);
-void rt_avl_vacate(range_tree_t *rt, void *arg);
-extern struct range_tree_ops rt_avl_ops;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_RANGE_TREE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h
deleted file mode 100644
index f1fd04792fef..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h
+++ /dev/null
@@ -1,125 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_REFCOUNT_H
-#define _SYS_REFCOUNT_H
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-/* For FreeBSD refcount(9). */
-#include_next <sys/refcount.h>
-#include <sys/list.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * If the reference is held only by the calling function and not any
- * particular object, use FTAG (which is a string) for the holder_tag.
- * Otherwise, use the object that holds the reference.
- */
-#define FTAG ((char *)(uintptr_t)__func__)
-
-#ifdef ZFS_DEBUG
-typedef struct reference {
- list_node_t ref_link;
- void *ref_holder;
- uint64_t ref_number;
- uint8_t *ref_removed;
-} reference_t;
-
-typedef struct refcount {
- kmutex_t rc_mtx;
- boolean_t rc_tracked;
- list_t rc_list;
- list_t rc_removed;
- uint64_t rc_count;
- uint64_t rc_removed_count;
-} zfs_refcount_t;
-
-/*
- * Note: zfs_refcount_t must be initialized with
- * refcount_create[_untracked]()
- */
-
-void zfs_refcount_create(zfs_refcount_t *);
-void zfs_refcount_create_untracked(zfs_refcount_t *);
-void zfs_refcount_create_tracked(zfs_refcount_t *);
-void zfs_refcount_destroy(zfs_refcount_t *);
-void zfs_refcount_destroy_many(zfs_refcount_t *, uint64_t);
-int zfs_refcount_is_zero(zfs_refcount_t *);
-int64_t zfs_refcount_count(zfs_refcount_t *);
-int64_t zfs_refcount_add(zfs_refcount_t *, void *);
-int64_t zfs_refcount_remove(zfs_refcount_t *, void *);
-int64_t zfs_refcount_add_many(zfs_refcount_t *, uint64_t, void *);
-int64_t zfs_refcount_remove_many(zfs_refcount_t *, uint64_t, void *);
-void zfs_refcount_transfer(zfs_refcount_t *, zfs_refcount_t *);
-void zfs_refcount_transfer_ownership(zfs_refcount_t *, void *, void *);
-boolean_t zfs_refcount_held(zfs_refcount_t *, void *);
-boolean_t zfs_refcount_not_held(zfs_refcount_t *, void *);
-
-void zfs_refcount_init(void);
-void zfs_refcount_fini(void);
-
-#else /* ZFS_DEBUG */
-
-typedef struct refcount {
- uint64_t rc_count;
-} zfs_refcount_t;
-
-#define zfs_refcount_create(rc) ((rc)->rc_count = 0)
-#define zfs_refcount_create_untracked(rc) ((rc)->rc_count = 0)
-#define zfs_refcount_create_tracked(rc) ((rc)->rc_count = 0)
-#define zfs_refcount_destroy(rc) ((rc)->rc_count = 0)
-#define zfs_refcount_destroy_many(rc, number) ((rc)->rc_count = 0)
-#define zfs_refcount_is_zero(rc) ((rc)->rc_count == 0)
-#define zfs_refcount_count(rc) ((rc)->rc_count)
-#define zfs_refcount_add(rc, holder) atomic_inc_64_nv(&(rc)->rc_count)
-#define zfs_refcount_remove(rc, holder) atomic_dec_64_nv(&(rc)->rc_count)
-#define zfs_refcount_add_many(rc, number, holder) \
- atomic_add_64_nv(&(rc)->rc_count, number)
-#define zfs_refcount_remove_many(rc, number, holder) \
- atomic_add_64_nv(&(rc)->rc_count, -number)
-#define zfs_refcount_transfer(dst, src) { \
- uint64_t __tmp = (src)->rc_count; \
- atomic_add_64(&(src)->rc_count, -__tmp); \
- atomic_add_64(&(dst)->rc_count, __tmp); \
-}
-#define zfs_refcount_transfer_ownership(rc, current_holder, new_holder) (void)0
-#define zfs_refcount_held(rc, holder) ((rc)->rc_count > 0)
-#define zfs_refcount_not_held(rc, holder) (B_TRUE)
-
-#define zfs_refcount_init()
-#define zfs_refcount_fini()
-
-#endif /* ZFS_DEBUG */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_REFCOUNT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h
deleted file mode 100644
index e0898dfe0ae8..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2012 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_RR_RW_LOCK_H
-#define _SYS_RR_RW_LOCK_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/zfs_context.h>
-#include <sys/refcount.h>
-
-/*
- * A reader-writer lock implementation that allows re-entrant reads, but
- * still gives writers priority on "new" reads.
- *
- * See rrwlock.c for more details about the implementation.
- *
- * Fields of the rrwlock_t structure:
- * - rr_lock: protects modification and reading of rrwlock_t fields
- * - rr_cv: cv for waking up readers or waiting writers
- * - rr_writer: thread id of the current writer
- * - rr_anon_rount: number of active anonymous readers
- * - rr_linked_rcount: total number of non-anonymous active readers
- * - rr_writer_wanted: a writer wants the lock
- */
-typedef struct rrwlock {
- kmutex_t rr_lock;
- kcondvar_t rr_cv;
- kthread_t *rr_writer;
- zfs_refcount_t rr_anon_rcount;
- zfs_refcount_t rr_linked_rcount;
- boolean_t rr_writer_wanted;
- boolean_t rr_track_all;
-} rrwlock_t;
-
-/*
- * 'tag' is used in reference counting tracking. The
- * 'tag' must be the same in a rrw_enter() as in its
- * corresponding rrw_exit().
- */
-void rrw_init(rrwlock_t *rrl, boolean_t track_all);
-void rrw_destroy(rrwlock_t *rrl);
-void rrw_enter(rrwlock_t *rrl, krw_t rw, void *tag);
-void rrw_enter_read(rrwlock_t *rrl, void *tag);
-void rrw_enter_read_prio(rrwlock_t *rrl, void *tag);
-void rrw_enter_write(rrwlock_t *rrl);
-void rrw_exit(rrwlock_t *rrl, void *tag);
-boolean_t rrw_held(rrwlock_t *rrl, krw_t rw);
-void rrw_tsd_destroy(void *arg);
-
-#define RRW_READ_HELD(x) rrw_held(x, RW_READER)
-#define RRW_WRITE_HELD(x) rrw_held(x, RW_WRITER)
-#define RRW_LOCK_HELD(x) \
- (rrw_held(x, RW_WRITER) || rrw_held(x, RW_READER))
-
-/*
- * A reader-mostly lock implementation, tuning above reader-writer locks
- * for hightly parallel read acquisitions, pessimizing write acquisitions.
- *
- * This should be a prime number. See comment in rrwlock.c near
- * RRM_TD_LOCK() for details.
- */
-#define RRM_NUM_LOCKS 17
-typedef struct rrmlock {
- rrwlock_t locks[RRM_NUM_LOCKS];
-} rrmlock_t;
-
-void rrm_init(rrmlock_t *rrl, boolean_t track_all);
-void rrm_destroy(rrmlock_t *rrl);
-void rrm_enter(rrmlock_t *rrl, krw_t rw, void *tag);
-void rrm_enter_read(rrmlock_t *rrl, void *tag);
-void rrm_enter_write(rrmlock_t *rrl);
-void rrm_exit(rrmlock_t *rrl, void *tag);
-boolean_t rrm_held(rrmlock_t *rrl, krw_t rw);
-
-#define RRM_READ_HELD(x) rrm_held(x, RW_READER)
-#define RRM_WRITE_HELD(x) rrm_held(x, RW_WRITER)
-#define RRM_LOCK_HELD(x) \
- (rrm_held(x, RW_WRITER) || rrm_held(x, RW_READER))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_RR_RW_LOCK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa.h
deleted file mode 100644
index 62332ea126a0..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa.h
+++ /dev/null
@@ -1,170 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _SYS_SA_H
-#define _SYS_SA_H
-
-#include <sys/dmu.h>
-#include <sys/uio.h>
-
-/*
- * Currently available byteswap functions.
- * If it all possible new attributes should used
- * one of the already defined byteswap functions.
- * If a new byteswap function is added then the
- * ZPL/Pool version will need to be bumped.
- */
-
-typedef enum sa_bswap_type {
- SA_UINT64_ARRAY,
- SA_UINT32_ARRAY,
- SA_UINT16_ARRAY,
- SA_UINT8_ARRAY,
- SA_ACL,
-} sa_bswap_type_t;
-
-typedef uint16_t sa_attr_type_t;
-
-/*
- * Attribute to register support for.
- */
-typedef struct sa_attr_reg {
- char *sa_name; /* attribute name */
- uint16_t sa_length;
- sa_bswap_type_t sa_byteswap; /* bswap functon enum */
- sa_attr_type_t sa_attr; /* filled in during registration */
-} sa_attr_reg_t;
-
-
-typedef void (sa_data_locator_t)(void **, uint32_t *, uint32_t,
- boolean_t, void *userptr);
-
-/*
- * array of attributes to store.
- *
- * This array should be treated as opaque/private data.
- * The SA_BULK_ADD_ATTR() macro should be used for manipulating
- * the array.
- *
- * When sa_replace_all_by_template() is used the attributes
- * will be stored in the order defined in the array, except that
- * the attributes may be split between the bonus and the spill buffer
- *
- */
-typedef struct sa_bulk_attr {
- void *sa_data;
- sa_data_locator_t *sa_data_func;
- uint16_t sa_length;
- sa_attr_type_t sa_attr;
- /* the following are private to the sa framework */
- void *sa_addr;
- uint16_t sa_buftype;
- uint16_t sa_size;
-} sa_bulk_attr_t;
-
-
-/*
- * special macro for adding entries for bulk attr support
- * bulk - sa_bulk_attr_t
- * count - integer that will be incremented during each add
- * attr - attribute to manipulate
- * func - function for accessing data.
- * data - pointer to data.
- * len - length of data
- */
-
-#define SA_ADD_BULK_ATTR(b, idx, attr, func, data, len) \
-{ \
- b[idx].sa_attr = attr;\
- b[idx].sa_data_func = func; \
- b[idx].sa_data = data; \
- b[idx++].sa_length = len; \
-}
-
-typedef struct sa_os sa_os_t;
-
-typedef enum sa_handle_type {
- SA_HDL_SHARED,
- SA_HDL_PRIVATE
-} sa_handle_type_t;
-
-struct sa_handle;
-typedef void *sa_lookup_tab_t;
-typedef struct sa_handle sa_handle_t;
-
-typedef void (sa_update_cb_t)(sa_handle_t *, dmu_tx_t *tx);
-
-int sa_handle_get(objset_t *, uint64_t, void *userp,
- sa_handle_type_t, sa_handle_t **);
-int sa_handle_get_from_db(objset_t *, dmu_buf_t *, void *userp,
- sa_handle_type_t, sa_handle_t **);
-void sa_handle_destroy(sa_handle_t *);
-int sa_buf_hold(objset_t *, uint64_t, void *, dmu_buf_t **);
-void sa_buf_rele(dmu_buf_t *, void *);
-int sa_lookup(sa_handle_t *, sa_attr_type_t, void *buf, uint32_t buflen);
-int sa_update(sa_handle_t *, sa_attr_type_t, void *buf,
- uint32_t buflen, dmu_tx_t *);
-int sa_remove(sa_handle_t *, sa_attr_type_t, dmu_tx_t *);
-int sa_bulk_lookup(sa_handle_t *, sa_bulk_attr_t *, int count);
-int sa_bulk_lookup_locked(sa_handle_t *, sa_bulk_attr_t *, int count);
-int sa_bulk_update(sa_handle_t *, sa_bulk_attr_t *, int count, dmu_tx_t *);
-int sa_size(sa_handle_t *, sa_attr_type_t, int *);
-int sa_update_from_cb(sa_handle_t *, sa_attr_type_t,
- uint32_t buflen, sa_data_locator_t *, void *userdata, dmu_tx_t *);
-void sa_object_info(sa_handle_t *, dmu_object_info_t *);
-void sa_object_size(sa_handle_t *, uint32_t *, u_longlong_t *);
-void *sa_get_userdata(sa_handle_t *);
-void sa_set_userp(sa_handle_t *, void *);
-dmu_buf_t *sa_get_db(sa_handle_t *);
-uint64_t sa_handle_object(sa_handle_t *);
-boolean_t sa_attr_would_spill(sa_handle_t *, sa_attr_type_t, int size);
-void sa_register_update_callback(objset_t *, sa_update_cb_t *);
-int sa_setup(objset_t *, uint64_t, sa_attr_reg_t *, int, sa_attr_type_t **);
-void sa_tear_down(objset_t *);
-int sa_replace_all_by_template(sa_handle_t *, sa_bulk_attr_t *,
- int, dmu_tx_t *);
-int sa_replace_all_by_template_locked(sa_handle_t *, sa_bulk_attr_t *,
- int, dmu_tx_t *);
-boolean_t sa_enabled(objset_t *);
-void sa_cache_init(void);
-void sa_cache_fini(void);
-int sa_set_sa_object(objset_t *, uint64_t);
-int sa_hdrsize(void *);
-void sa_handle_lock(sa_handle_t *);
-void sa_handle_unlock(sa_handle_t *);
-
-#ifdef _KERNEL
-int sa_lookup_uio(sa_handle_t *, sa_attr_type_t, uio_t *);
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SA_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa_impl.h
deleted file mode 100644
index 50430125b253..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/sa_impl.h
+++ /dev/null
@@ -1,291 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013 by Delphix. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- */
-
-#ifndef _SYS_SA_IMPL_H
-#define _SYS_SA_IMPL_H
-
-#include <sys/dmu.h>
-#include <sys/refcount.h>
-#include <sys/list.h>
-
-/*
- * Array of known attributes and their
- * various characteristics.
- */
-typedef struct sa_attr_table {
- sa_attr_type_t sa_attr;
- uint8_t sa_registered;
- uint16_t sa_length;
- sa_bswap_type_t sa_byteswap;
- char *sa_name;
-} sa_attr_table_t;
-
-/*
- * Zap attribute format for attribute registration
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * | unused | len | bswap | attr num |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * Zap attribute format for layout information.
- *
- * layout information is stored as an array of attribute numbers
- * The name of the attribute is the layout number (0, 1, 2, ...)
- *
- * 16 0
- * +---- ---+
- * | attr # |
- * +--------+
- * | attr # |
- * +--- ----+
- * ......
- *
- */
-
-#define ATTR_BSWAP(x) BF32_GET(x, 16, 8)
-#define ATTR_LENGTH(x) BF32_GET(x, 24, 16)
-#define ATTR_NUM(x) BF32_GET(x, 0, 16)
-#define ATTR_ENCODE(x, attr, length, bswap) \
-{ \
- BF64_SET(x, 24, 16, length); \
- BF64_SET(x, 16, 8, bswap); \
- BF64_SET(x, 0, 16, attr); \
-}
-
-#define TOC_OFF(x) BF32_GET(x, 0, 23)
-#define TOC_ATTR_PRESENT(x) BF32_GET(x, 31, 1)
-#define TOC_LEN_IDX(x) BF32_GET(x, 24, 4)
-#define TOC_ATTR_ENCODE(x, len_idx, offset) \
-{ \
- BF32_SET(x, 31, 1, 1); \
- BF32_SET(x, 24, 7, len_idx); \
- BF32_SET(x, 0, 24, offset); \
-}
-
-#define SA_LAYOUTS "LAYOUTS"
-#define SA_REGISTRY "REGISTRY"
-
-/*
- * Each unique layout will have their own table
- * sa_lot (layout_table)
- */
-typedef struct sa_lot {
- avl_node_t lot_num_node;
- avl_node_t lot_hash_node;
- uint64_t lot_num;
- uint64_t lot_hash;
- sa_attr_type_t *lot_attrs; /* array of attr #'s */
- uint32_t lot_var_sizes; /* how many aren't fixed size */
- uint32_t lot_attr_count; /* total attr count */
- list_t lot_idx_tab; /* should be only a couple of entries */
- int lot_instance; /* used with lot_hash to identify entry */
-} sa_lot_t;
-
-/* index table of offsets */
-typedef struct sa_idx_tab {
- list_node_t sa_next;
- sa_lot_t *sa_layout;
- uint16_t *sa_variable_lengths;
- zfs_refcount_t sa_refcount;
- uint32_t *sa_idx_tab; /* array of offsets */
-} sa_idx_tab_t;
-
-/*
- * Since the offset/index information into the actual data
- * will usually be identical we can share that information with
- * all handles that have the exact same offsets.
- *
- * You would typically only have a large number of different table of
- * contents if you had a several variable sized attributes.
- *
- * Two AVL trees are used to track the attribute layout numbers.
- * one is keyed by number and will be consulted when a DMU_OT_SA
- * object is first read. The second tree is keyed by the hash signature
- * of the attributes and will be consulted when an attribute is added
- * to determine if we already have an instance of that layout. Both
- * of these tree's are interconnected. The only difference is that
- * when an entry is found in the "hash" tree the list of attributes will
- * need to be compared against the list of attributes you have in hand.
- * The assumption is that typically attributes will just be updated and
- * adding a completely new attribute is a very rare operation.
- */
-struct sa_os {
- kmutex_t sa_lock;
- boolean_t sa_need_attr_registration;
- boolean_t sa_force_spill;
- uint64_t sa_master_obj;
- uint64_t sa_reg_attr_obj;
- uint64_t sa_layout_attr_obj;
- int sa_num_attrs;
- sa_attr_table_t *sa_attr_table; /* private attr table */
- sa_update_cb_t *sa_update_cb;
- avl_tree_t sa_layout_num_tree; /* keyed by layout number */
- avl_tree_t sa_layout_hash_tree; /* keyed by layout hash value */
- int sa_user_table_sz;
- sa_attr_type_t *sa_user_table; /* user name->attr mapping table */
-};
-
-/*
- * header for all bonus and spill buffers.
- *
- * The header has a fixed portion with a variable number
- * of "lengths" depending on the number of variable sized
- * attributes which are determined by the "layout number"
- */
-
-#define SA_MAGIC 0x2F505A /* ZFS SA */
-typedef struct sa_hdr_phys {
- uint32_t sa_magic;
- /* BEGIN CSTYLED */
- /*
- * Encoded with hdrsize and layout number as follows:
- * 16 10 0
- * +--------+-------+
- * | hdrsz |layout |
- * +--------+-------+
- *
- * Bits 0-10 are the layout number
- * Bits 11-16 are the size of the header.
- * The hdrsize is the number * 8
- *
- * For example.
- * hdrsz of 1 ==> 8 byte header
- * 2 ==> 16 byte header
- *
- */
- /* END CSTYLED */
- uint16_t sa_layout_info;
- uint16_t sa_lengths[1]; /* optional sizes for variable length attrs */
- /* ... Data follows the lengths. */
-} sa_hdr_phys_t;
-
-#define SA_HDR_LAYOUT_NUM(hdr) BF32_GET(hdr->sa_layout_info, 0, 10)
-#define SA_HDR_SIZE(hdr) BF32_GET_SB(hdr->sa_layout_info, 10, 6, 3, 0)
-#define SA_HDR_LAYOUT_INFO_ENCODE(x, num, size) \
-{ \
- BF32_SET_SB(x, 10, 6, 3, 0, size); \
- BF32_SET(x, 0, 10, num); \
-}
-
-typedef enum sa_buf_type {
- SA_BONUS = 1,
- SA_SPILL = 2
-} sa_buf_type_t;
-
-typedef enum sa_data_op {
- SA_LOOKUP,
- SA_UPDATE,
- SA_ADD,
- SA_REPLACE,
- SA_REMOVE
-} sa_data_op_t;
-
-/*
- * Opaque handle used for most sa functions
- *
- * This needs to be kept as small as possible.
- */
-
-struct sa_handle {
- dmu_buf_user_t sa_dbu;
- kmutex_t sa_lock;
- dmu_buf_t *sa_bonus;
- dmu_buf_t *sa_spill;
- objset_t *sa_os;
- void *sa_userp;
- sa_idx_tab_t *sa_bonus_tab; /* idx of bonus */
- sa_idx_tab_t *sa_spill_tab; /* only present if spill activated */
-};
-
-#define SA_GET_DB(hdl, type) \
- (dmu_buf_impl_t *)((type == SA_BONUS) ? hdl->sa_bonus : hdl->sa_spill)
-
-#define SA_GET_HDR(hdl, type) \
- ((sa_hdr_phys_t *)((dmu_buf_impl_t *)(SA_GET_DB(hdl, \
- type))->db.db_data))
-
-#define SA_IDX_TAB_GET(hdl, type) \
- (type == SA_BONUS ? hdl->sa_bonus_tab : hdl->sa_spill_tab)
-
-#define IS_SA_BONUSTYPE(a) \
- ((a == DMU_OT_SA) ? B_TRUE : B_FALSE)
-
-#define SA_BONUSTYPE_FROM_DB(db) \
- (dmu_get_bonustype((dmu_buf_t *)db))
-
-#define SA_BLKPTR_SPACE (DN_OLD_MAX_BONUSLEN - sizeof (blkptr_t))
-
-#define SA_LAYOUT_NUM(x, type) \
- ((!IS_SA_BONUSTYPE(type) ? 0 : (((IS_SA_BONUSTYPE(type)) && \
- ((SA_HDR_LAYOUT_NUM(x)) == 0)) ? 1 : SA_HDR_LAYOUT_NUM(x))))
-
-
-#define SA_REGISTERED_LEN(sa, attr) sa->sa_attr_table[attr].sa_length
-
-#define SA_ATTR_LEN(sa, idx, attr, hdr) ((SA_REGISTERED_LEN(sa, attr) == 0) ?\
- hdr->sa_lengths[TOC_LEN_IDX(idx->sa_idx_tab[attr])] : \
- SA_REGISTERED_LEN(sa, attr))
-
-#define SA_SET_HDR(hdr, num, size) \
- { \
- hdr->sa_magic = SA_MAGIC; \
- SA_HDR_LAYOUT_INFO_ENCODE(hdr->sa_layout_info, num, size); \
- }
-
-#define SA_ATTR_INFO(sa, idx, hdr, attr, bulk, type, hdl) \
- { \
- bulk.sa_size = SA_ATTR_LEN(sa, idx, attr, hdr); \
- bulk.sa_buftype = type; \
- bulk.sa_addr = \
- (void *)((uintptr_t)TOC_OFF(idx->sa_idx_tab[attr]) + \
- (uintptr_t)hdr); \
-}
-
-#define SA_HDR_SIZE_MATCH_LAYOUT(hdr, tb) \
- (SA_HDR_SIZE(hdr) == (sizeof (sa_hdr_phys_t) + \
- (tb->lot_var_sizes > 1 ? P2ROUNDUP((tb->lot_var_sizes - 1) * \
- sizeof (uint16_t), 8) : 0)))
-
-int sa_add_impl(sa_handle_t *, sa_attr_type_t,
- uint32_t, sa_data_locator_t, void *, dmu_tx_t *);
-
-void sa_register_update_callback_locked(objset_t *, sa_update_cb_t *);
-int sa_size_locked(sa_handle_t *, sa_attr_type_t, int *);
-
-void sa_default_locator(void **, uint32_t *, uint32_t, boolean_t, void *);
-int sa_attr_size(sa_os_t *, sa_idx_tab_t *, sa_attr_type_t,
- uint16_t *, sa_hdr_phys_t *);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SA_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
deleted file mode 100644
index 5bdc4feb3d5e..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h
+++ /dev/null
@@ -1,969 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- * Copyright 2013 Saso Kiselkov. All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- * Copyright 2017 Joyent, Inc.
- * Copyright (c) 2017 Datto Inc.
- * Copyright (c) 2017, Intel Corporation.
- */
-
-#ifndef _SYS_SPA_H
-#define _SYS_SPA_H
-
-#include <sys/avl.h>
-#include <sys/zfs_context.h>
-#include <sys/nvpair.h>
-#include <sys/sysevent.h>
-#include <sys/sysmacros.h>
-#include <sys/types.h>
-#include <sys/fs/zfs.h>
-#include <sys/dmu.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Forward references that lots of things need.
- */
-typedef struct spa spa_t;
-typedef struct vdev vdev_t;
-typedef struct metaslab metaslab_t;
-typedef struct metaslab_group metaslab_group_t;
-typedef struct metaslab_class metaslab_class_t;
-typedef struct zio zio_t;
-typedef struct zilog zilog_t;
-typedef struct spa_aux_vdev spa_aux_vdev_t;
-typedef struct ddt ddt_t;
-typedef struct ddt_entry ddt_entry_t;
-struct dsl_pool;
-struct dsl_dataset;
-
-/*
- * General-purpose 32-bit and 64-bit bitfield encodings.
- */
-#define BF32_DECODE(x, low, len) P2PHASE((x) >> (low), 1U << (len))
-#define BF64_DECODE(x, low, len) P2PHASE((x) >> (low), 1ULL << (len))
-#define BF32_ENCODE(x, low, len) (P2PHASE((x), 1U << (len)) << (low))
-#define BF64_ENCODE(x, low, len) (P2PHASE((x), 1ULL << (len)) << (low))
-
-#define BF32_GET(x, low, len) BF32_DECODE(x, low, len)
-#define BF64_GET(x, low, len) BF64_DECODE(x, low, len)
-
-#define BF32_SET(x, low, len, val) do { \
- ASSERT3U(val, <, 1U << (len)); \
- ASSERT3U(low + len, <=, 32); \
- (x) ^= BF32_ENCODE((x >> low) ^ (val), low, len); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BF64_SET(x, low, len, val) do { \
- ASSERT3U(val, <, 1ULL << (len)); \
- ASSERT3U(low + len, <=, 64); \
- ((x) ^= BF64_ENCODE((x >> low) ^ (val), low, len)); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BF32_GET_SB(x, low, len, shift, bias) \
- ((BF32_GET(x, low, len) + (bias)) << (shift))
-#define BF64_GET_SB(x, low, len, shift, bias) \
- ((BF64_GET(x, low, len) + (bias)) << (shift))
-
-#define BF32_SET_SB(x, low, len, shift, bias, val) do { \
- ASSERT(IS_P2ALIGNED(val, 1U << shift)); \
- ASSERT3S((val) >> (shift), >=, bias); \
- BF32_SET(x, low, len, ((val) >> (shift)) - (bias)); \
-_NOTE(CONSTCOND) } while (0)
-#define BF64_SET_SB(x, low, len, shift, bias, val) do { \
- ASSERT(IS_P2ALIGNED(val, 1ULL << shift)); \
- ASSERT3S((val) >> (shift), >=, bias); \
- BF64_SET(x, low, len, ((val) >> (shift)) - (bias)); \
-_NOTE(CONSTCOND) } while (0)
-
-/*
- * We currently support block sizes from 512 bytes to 16MB.
- * The benefits of larger blocks, and thus larger IO, need to be weighed
- * against the cost of COWing a giant block to modify one byte, and the
- * large latency of reading or writing a large block.
- *
- * Note that although blocks up to 16MB are supported, the recordsize
- * property can not be set larger than zfs_max_recordsize (default 1MB).
- * See the comment near zfs_max_recordsize in dsl_dataset.c for details.
- *
- * Note that although the LSIZE field of the blkptr_t can store sizes up
- * to 32MB, the dnode's dn_datablkszsec can only store sizes up to
- * 32MB - 512 bytes. Therefore, we limit SPA_MAXBLOCKSIZE to 16MB.
- */
-#define SPA_MINBLOCKSHIFT 9
-#define SPA_OLD_MAXBLOCKSHIFT 17
-#define SPA_MAXBLOCKSHIFT 24
-#define SPA_MINBLOCKSIZE (1ULL << SPA_MINBLOCKSHIFT)
-#define SPA_OLD_MAXBLOCKSIZE (1ULL << SPA_OLD_MAXBLOCKSHIFT)
-#define SPA_MAXBLOCKSIZE (1ULL << SPA_MAXBLOCKSHIFT)
-
-/*
- * Default maximum supported logical ashift.
- *
- * The current 8k allocation block size limit is due to the 8k
- * aligned/sized operations performed by vdev_probe() on
- * vdev_label->vl_pad2. Using another "safe region" for these tests
- * would allow the limit to be raised to 16k, at the expense of
- * only having 8 available uberblocks in the label area.
- */
-#define SPA_MAXASHIFT 13
-
-/*
- * Default minimum supported logical ashift.
- */
-#define SPA_MINASHIFT SPA_MINBLOCKSHIFT
-
-/*
- * Size of block to hold the configuration data (a packed nvlist)
- */
-#define SPA_CONFIG_BLOCKSIZE (1ULL << 14)
-
-/*
- * The DVA size encodings for LSIZE and PSIZE support blocks up to 32MB.
- * The ASIZE encoding should be at least 64 times larger (6 more bits)
- * to support up to 4-way RAID-Z mirror mode with worst-case gang block
- * overhead, three DVAs per bp, plus one more bit in case we do anything
- * else that expands the ASIZE.
- */
-#define SPA_LSIZEBITS 16 /* LSIZE up to 32M (2^16 * 512) */
-#define SPA_PSIZEBITS 16 /* PSIZE up to 32M (2^16 * 512) */
-#define SPA_ASIZEBITS 24 /* ASIZE up to 64 times larger */
-
-#define SPA_COMPRESSBITS 7
-#define SPA_VDEVBITS 24
-
-/*
- * All SPA data is represented by 128-bit data virtual addresses (DVAs).
- * The members of the dva_t should be considered opaque outside the SPA.
- */
-typedef struct dva {
- uint64_t dva_word[2];
-} dva_t;
-
-/*
- * Each block has a 256-bit checksum -- strong enough for cryptographic hashes.
- */
-typedef struct zio_cksum {
- uint64_t zc_word[4];
-} zio_cksum_t;
-
-/*
- * Some checksums/hashes need a 256-bit initialization salt. This salt is kept
- * secret and is suitable for use in MAC algorithms as the key.
- */
-typedef struct zio_cksum_salt {
- uint8_t zcs_bytes[32];
-} zio_cksum_salt_t;
-
-/*
- * Each block is described by its DVAs, time of birth, checksum, etc.
- * The word-by-word, bit-by-bit layout of the blkptr is as follows:
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 0 | pad | vdev1 | GRID | ASIZE |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 1 |G| offset1 |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 2 | pad | vdev2 | GRID | ASIZE |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 3 |G| offset2 |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 4 | pad | vdev3 | GRID | ASIZE |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 5 |G| offset3 |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 6 |BDX|lvl| type | cksum |E| comp| PSIZE | LSIZE |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 7 | padding |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 8 | padding |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 9 | physical birth txg |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * a | logical birth txg |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * b | fill count |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * c | checksum[0] |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * d | checksum[1] |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * e | checksum[2] |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * f | checksum[3] |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * Legend:
- *
- * vdev virtual device ID
- * offset offset into virtual device
- * LSIZE logical size
- * PSIZE physical size (after compression)
- * ASIZE allocated size (including RAID-Z parity and gang block headers)
- * GRID RAID-Z layout information (reserved for future use)
- * cksum checksum function
- * comp compression function
- * G gang block indicator
- * B byteorder (endianness)
- * D dedup
- * X encryption (on version 30, which is not supported)
- * E blkptr_t contains embedded data (see below)
- * lvl level of indirection
- * type DMU object type
- * phys birth txg when dva[0] was written; zero if same as logical birth txg
- * note that typically all the dva's would be written in this
- * txg, but they could be different if they were moved by
- * device removal.
- * log. birth transaction group in which the block was logically born
- * fill count number of non-zero blocks under this bp
- * checksum[4] 256-bit checksum of the data this bp describes
- */
-
-/*
- * "Embedded" blkptr_t's don't actually point to a block, instead they
- * have a data payload embedded in the blkptr_t itself. See the comment
- * in blkptr.c for more details.
- *
- * The blkptr_t is laid out as follows:
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 0 | payload |
- * 1 | payload |
- * 2 | payload |
- * 3 | payload |
- * 4 | payload |
- * 5 | payload |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 6 |BDX|lvl| type | etype |E| comp| PSIZE| LSIZE |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 7 | payload |
- * 8 | payload |
- * 9 | payload |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * a | logical birth txg |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * b | payload |
- * c | payload |
- * d | payload |
- * e | payload |
- * f | payload |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * Legend:
- *
- * payload contains the embedded data
- * B (byteorder) byteorder (endianness)
- * D (dedup) padding (set to zero)
- * X encryption (set to zero; see above)
- * E (embedded) set to one
- * lvl indirection level
- * type DMU object type
- * etype how to interpret embedded data (BP_EMBEDDED_TYPE_*)
- * comp compression function of payload
- * PSIZE size of payload after compression, in bytes
- * LSIZE logical size of payload, in bytes
- * note that 25 bits is enough to store the largest
- * "normal" BP's LSIZE (2^16 * 2^9) in bytes
- * log. birth transaction group in which the block was logically born
- *
- * Note that LSIZE and PSIZE are stored in bytes, whereas for non-embedded
- * bp's they are stored in units of SPA_MINBLOCKSHIFT.
- * Generally, the generic BP_GET_*() macros can be used on embedded BP's.
- * The B, D, X, lvl, type, and comp fields are stored the same as with normal
- * BP's so the BP_SET_* macros can be used with them. etype, PSIZE, LSIZE must
- * be set with the BPE_SET_* macros. BP_SET_EMBEDDED() should be called before
- * other macros, as they assert that they are only used on BP's of the correct
- * "embedded-ness".
- */
-
-#define BPE_GET_ETYPE(bp) \
- (ASSERT(BP_IS_EMBEDDED(bp)), \
- BF64_GET((bp)->blk_prop, 40, 8))
-#define BPE_SET_ETYPE(bp, t) do { \
- ASSERT(BP_IS_EMBEDDED(bp)); \
- BF64_SET((bp)->blk_prop, 40, 8, t); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BPE_GET_LSIZE(bp) \
- (ASSERT(BP_IS_EMBEDDED(bp)), \
- BF64_GET_SB((bp)->blk_prop, 0, 25, 0, 1))
-#define BPE_SET_LSIZE(bp, x) do { \
- ASSERT(BP_IS_EMBEDDED(bp)); \
- BF64_SET_SB((bp)->blk_prop, 0, 25, 0, 1, x); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BPE_GET_PSIZE(bp) \
- (ASSERT(BP_IS_EMBEDDED(bp)), \
- BF64_GET_SB((bp)->blk_prop, 25, 7, 0, 1))
-#define BPE_SET_PSIZE(bp, x) do { \
- ASSERT(BP_IS_EMBEDDED(bp)); \
- BF64_SET_SB((bp)->blk_prop, 25, 7, 0, 1, x); \
-_NOTE(CONSTCOND) } while (0)
-
-typedef enum bp_embedded_type {
- BP_EMBEDDED_TYPE_DATA,
- BP_EMBEDDED_TYPE_RESERVED, /* Reserved for an unintegrated feature. */
- NUM_BP_EMBEDDED_TYPES = BP_EMBEDDED_TYPE_RESERVED
-} bp_embedded_type_t;
-
-#define BPE_NUM_WORDS 14
-#define BPE_PAYLOAD_SIZE (BPE_NUM_WORDS * sizeof (uint64_t))
-#define BPE_IS_PAYLOADWORD(bp, wp) \
- ((wp) != &(bp)->blk_prop && (wp) != &(bp)->blk_birth)
-
-#define SPA_BLKPTRSHIFT 7 /* blkptr_t is 128 bytes */
-#define SPA_DVAS_PER_BP 3 /* Number of DVAs in a bp */
-#define SPA_SYNC_MIN_VDEVS 3 /* min vdevs to update during sync */
-
-/*
- * A block is a hole when it has either 1) never been written to, or
- * 2) is zero-filled. In both cases, ZFS can return all zeroes for all reads
- * without physically allocating disk space. Holes are represented in the
- * blkptr_t structure by zeroed blk_dva. Correct checking for holes is
- * done through the BP_IS_HOLE macro. For holes, the logical size, level,
- * DMU object type, and birth times are all also stored for holes that
- * were written to at some point (i.e. were punched after having been filled).
- */
-typedef struct blkptr {
- dva_t blk_dva[SPA_DVAS_PER_BP]; /* Data Virtual Addresses */
- uint64_t blk_prop; /* size, compression, type, etc */
- uint64_t blk_pad[2]; /* Extra space for the future */
- uint64_t blk_phys_birth; /* txg when block was allocated */
- uint64_t blk_birth; /* transaction group at birth */
- uint64_t blk_fill; /* fill count */
- zio_cksum_t blk_cksum; /* 256-bit checksum */
-} blkptr_t;
-
-/*
- * Macros to get and set fields in a bp or DVA.
- */
-#define DVA_GET_ASIZE(dva) \
- BF64_GET_SB((dva)->dva_word[0], 0, SPA_ASIZEBITS, SPA_MINBLOCKSHIFT, 0)
-#define DVA_SET_ASIZE(dva, x) \
- BF64_SET_SB((dva)->dva_word[0], 0, SPA_ASIZEBITS, \
- SPA_MINBLOCKSHIFT, 0, x)
-
-#define DVA_GET_GRID(dva) BF64_GET((dva)->dva_word[0], 24, 8)
-#define DVA_SET_GRID(dva, x) BF64_SET((dva)->dva_word[0], 24, 8, x)
-
-#define DVA_GET_VDEV(dva) BF64_GET((dva)->dva_word[0], 32, SPA_VDEVBITS)
-#define DVA_SET_VDEV(dva, x) \
- BF64_SET((dva)->dva_word[0], 32, SPA_VDEVBITS, x)
-
-#define DVA_GET_OFFSET(dva) \
- BF64_GET_SB((dva)->dva_word[1], 0, 63, SPA_MINBLOCKSHIFT, 0)
-#define DVA_SET_OFFSET(dva, x) \
- BF64_SET_SB((dva)->dva_word[1], 0, 63, SPA_MINBLOCKSHIFT, 0, x)
-
-#define DVA_GET_GANG(dva) BF64_GET((dva)->dva_word[1], 63, 1)
-#define DVA_SET_GANG(dva, x) BF64_SET((dva)->dva_word[1], 63, 1, x)
-
-#define BP_GET_LSIZE(bp) \
- (BP_IS_EMBEDDED(bp) ? \
- (BPE_GET_ETYPE(bp) == BP_EMBEDDED_TYPE_DATA ? BPE_GET_LSIZE(bp) : 0): \
- BF64_GET_SB((bp)->blk_prop, 0, SPA_LSIZEBITS, SPA_MINBLOCKSHIFT, 1))
-#define BP_SET_LSIZE(bp, x) do { \
- ASSERT(!BP_IS_EMBEDDED(bp)); \
- BF64_SET_SB((bp)->blk_prop, \
- 0, SPA_LSIZEBITS, SPA_MINBLOCKSHIFT, 1, x); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BP_GET_PSIZE(bp) \
- (BP_IS_EMBEDDED(bp) ? 0 : \
- BF64_GET_SB((bp)->blk_prop, 16, SPA_PSIZEBITS, SPA_MINBLOCKSHIFT, 1))
-#define BP_SET_PSIZE(bp, x) do { \
- ASSERT(!BP_IS_EMBEDDED(bp)); \
- BF64_SET_SB((bp)->blk_prop, \
- 16, SPA_PSIZEBITS, SPA_MINBLOCKSHIFT, 1, x); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BP_GET_COMPRESS(bp) \
- BF64_GET((bp)->blk_prop, 32, SPA_COMPRESSBITS)
-#define BP_SET_COMPRESS(bp, x) \
- BF64_SET((bp)->blk_prop, 32, SPA_COMPRESSBITS, x)
-
-#define BP_IS_EMBEDDED(bp) BF64_GET((bp)->blk_prop, 39, 1)
-#define BP_SET_EMBEDDED(bp, x) BF64_SET((bp)->blk_prop, 39, 1, x)
-
-#define BP_GET_CHECKSUM(bp) \
- (BP_IS_EMBEDDED(bp) ? ZIO_CHECKSUM_OFF : \
- BF64_GET((bp)->blk_prop, 40, 8))
-#define BP_SET_CHECKSUM(bp, x) do { \
- ASSERT(!BP_IS_EMBEDDED(bp)); \
- BF64_SET((bp)->blk_prop, 40, 8, x); \
-_NOTE(CONSTCOND) } while (0)
-
-#define BP_GET_TYPE(bp) BF64_GET((bp)->blk_prop, 48, 8)
-#define BP_SET_TYPE(bp, x) BF64_SET((bp)->blk_prop, 48, 8, x)
-
-#define BP_GET_LEVEL(bp) BF64_GET((bp)->blk_prop, 56, 5)
-#define BP_SET_LEVEL(bp, x) BF64_SET((bp)->blk_prop, 56, 5, x)
-
-#define BP_GET_DEDUP(bp) BF64_GET((bp)->blk_prop, 62, 1)
-#define BP_SET_DEDUP(bp, x) BF64_SET((bp)->blk_prop, 62, 1, x)
-
-#define BP_GET_BYTEORDER(bp) BF64_GET((bp)->blk_prop, 63, 1)
-#define BP_SET_BYTEORDER(bp, x) BF64_SET((bp)->blk_prop, 63, 1, x)
-
-#define BP_PHYSICAL_BIRTH(bp) \
- (BP_IS_EMBEDDED(bp) ? 0 : \
- (bp)->blk_phys_birth ? (bp)->blk_phys_birth : (bp)->blk_birth)
-
-#define BP_SET_BIRTH(bp, logical, physical) \
-{ \
- ASSERT(!BP_IS_EMBEDDED(bp)); \
- (bp)->blk_birth = (logical); \
- (bp)->blk_phys_birth = ((logical) == (physical) ? 0 : (physical)); \
-}
-
-#define BP_GET_FILL(bp) (BP_IS_EMBEDDED(bp) ? 1 : (bp)->blk_fill)
-
-#define BP_IS_METADATA(bp) \
- (BP_GET_LEVEL(bp) > 0 || DMU_OT_IS_METADATA(BP_GET_TYPE(bp)))
-
-#define BP_GET_ASIZE(bp) \
- (BP_IS_EMBEDDED(bp) ? 0 : \
- DVA_GET_ASIZE(&(bp)->blk_dva[0]) + \
- DVA_GET_ASIZE(&(bp)->blk_dva[1]) + \
- DVA_GET_ASIZE(&(bp)->blk_dva[2]))
-
-#define BP_GET_UCSIZE(bp) \
- (BP_IS_METADATA(bp) ? BP_GET_PSIZE(bp) : BP_GET_LSIZE(bp))
-
-#define BP_GET_NDVAS(bp) \
- (BP_IS_EMBEDDED(bp) ? 0 : \
- !!DVA_GET_ASIZE(&(bp)->blk_dva[0]) + \
- !!DVA_GET_ASIZE(&(bp)->blk_dva[1]) + \
- !!DVA_GET_ASIZE(&(bp)->blk_dva[2]))
-
-#define BP_COUNT_GANG(bp) \
- (BP_IS_EMBEDDED(bp) ? 0 : \
- (DVA_GET_GANG(&(bp)->blk_dva[0]) + \
- DVA_GET_GANG(&(bp)->blk_dva[1]) + \
- DVA_GET_GANG(&(bp)->blk_dva[2])))
-
-#define DVA_EQUAL(dva1, dva2) \
- ((dva1)->dva_word[1] == (dva2)->dva_word[1] && \
- (dva1)->dva_word[0] == (dva2)->dva_word[0])
-
-#define BP_EQUAL(bp1, bp2) \
- (BP_PHYSICAL_BIRTH(bp1) == BP_PHYSICAL_BIRTH(bp2) && \
- (bp1)->blk_birth == (bp2)->blk_birth && \
- DVA_EQUAL(&(bp1)->blk_dva[0], &(bp2)->blk_dva[0]) && \
- DVA_EQUAL(&(bp1)->blk_dva[1], &(bp2)->blk_dva[1]) && \
- DVA_EQUAL(&(bp1)->blk_dva[2], &(bp2)->blk_dva[2]))
-
-#define ZIO_CHECKSUM_EQUAL(zc1, zc2) \
- (0 == (((zc1).zc_word[0] - (zc2).zc_word[0]) | \
- ((zc1).zc_word[1] - (zc2).zc_word[1]) | \
- ((zc1).zc_word[2] - (zc2).zc_word[2]) | \
- ((zc1).zc_word[3] - (zc2).zc_word[3])))
-
-#define ZIO_CHECKSUM_IS_ZERO(zc) \
- (0 == ((zc)->zc_word[0] | (zc)->zc_word[1] | \
- (zc)->zc_word[2] | (zc)->zc_word[3]))
-
-#define ZIO_CHECKSUM_BSWAP(zcp) \
-{ \
- (zcp)->zc_word[0] = BSWAP_64((zcp)->zc_word[0]); \
- (zcp)->zc_word[1] = BSWAP_64((zcp)->zc_word[1]); \
- (zcp)->zc_word[2] = BSWAP_64((zcp)->zc_word[2]); \
- (zcp)->zc_word[3] = BSWAP_64((zcp)->zc_word[3]); \
-}
-
-
-#define DVA_IS_VALID(dva) (DVA_GET_ASIZE(dva) != 0)
-
-#define ZIO_SET_CHECKSUM(zcp, w0, w1, w2, w3) \
-{ \
- (zcp)->zc_word[0] = w0; \
- (zcp)->zc_word[1] = w1; \
- (zcp)->zc_word[2] = w2; \
- (zcp)->zc_word[3] = w3; \
-}
-
-#define BP_IDENTITY(bp) (ASSERT(!BP_IS_EMBEDDED(bp)), &(bp)->blk_dva[0])
-#define BP_IS_GANG(bp) \
- (BP_IS_EMBEDDED(bp) ? B_FALSE : DVA_GET_GANG(BP_IDENTITY(bp)))
-#define DVA_IS_EMPTY(dva) ((dva)->dva_word[0] == 0ULL && \
- (dva)->dva_word[1] == 0ULL)
-#define BP_IS_HOLE(bp) \
- (!BP_IS_EMBEDDED(bp) && DVA_IS_EMPTY(BP_IDENTITY(bp)))
-
-/* BP_IS_RAIDZ(bp) assumes no block compression */
-#define BP_IS_RAIDZ(bp) (DVA_GET_ASIZE(&(bp)->blk_dva[0]) > \
- BP_GET_PSIZE(bp))
-
-#define BP_ZERO(bp) \
-{ \
- (bp)->blk_dva[0].dva_word[0] = 0; \
- (bp)->blk_dva[0].dva_word[1] = 0; \
- (bp)->blk_dva[1].dva_word[0] = 0; \
- (bp)->blk_dva[1].dva_word[1] = 0; \
- (bp)->blk_dva[2].dva_word[0] = 0; \
- (bp)->blk_dva[2].dva_word[1] = 0; \
- (bp)->blk_prop = 0; \
- (bp)->blk_pad[0] = 0; \
- (bp)->blk_pad[1] = 0; \
- (bp)->blk_phys_birth = 0; \
- (bp)->blk_birth = 0; \
- (bp)->blk_fill = 0; \
- ZIO_SET_CHECKSUM(&(bp)->blk_cksum, 0, 0, 0, 0); \
-}
-
-#if BYTE_ORDER == _BIG_ENDIAN
-#define ZFS_HOST_BYTEORDER (0ULL)
-#else
-#define ZFS_HOST_BYTEORDER (1ULL)
-#endif
-
-#define BP_SHOULD_BYTESWAP(bp) (BP_GET_BYTEORDER(bp) != ZFS_HOST_BYTEORDER)
-
-#define BP_SPRINTF_LEN 320
-
-/*
- * This macro allows code sharing between zfs, libzpool, and mdb.
- * 'func' is either snprintf() or mdb_snprintf().
- * 'ws' (whitespace) can be ' ' for single-line format, '\n' for multi-line.
- */
-#define SNPRINTF_BLKPTR(func, ws, buf, size, bp, type, checksum, compress) \
-{ \
- static const char *copyname[] = \
- { "zero", "single", "double", "triple" }; \
- int len = 0; \
- int copies = 0; \
- \
- if (bp == NULL) { \
- len += func(buf + len, size - len, "<NULL>"); \
- } else if (BP_IS_HOLE(bp)) { \
- len += func(buf + len, size - len, \
- "HOLE [L%llu %s] " \
- "size=%llxL birth=%lluL", \
- (u_longlong_t)BP_GET_LEVEL(bp), \
- type, \
- (u_longlong_t)BP_GET_LSIZE(bp), \
- (u_longlong_t)bp->blk_birth); \
- } else if (BP_IS_EMBEDDED(bp)) { \
- len = func(buf + len, size - len, \
- "EMBEDDED [L%llu %s] et=%u %s " \
- "size=%llxL/%llxP birth=%lluL", \
- (u_longlong_t)BP_GET_LEVEL(bp), \
- type, \
- (int)BPE_GET_ETYPE(bp), \
- compress, \
- (u_longlong_t)BPE_GET_LSIZE(bp), \
- (u_longlong_t)BPE_GET_PSIZE(bp), \
- (u_longlong_t)bp->blk_birth); \
- } else { \
- for (int d = 0; d < BP_GET_NDVAS(bp); d++) { \
- const dva_t *dva = &bp->blk_dva[d]; \
- if (DVA_IS_VALID(dva)) \
- copies++; \
- len += func(buf + len, size - len, \
- "DVA[%d]=<%llu:%llx:%llx>%c", d, \
- (u_longlong_t)DVA_GET_VDEV(dva), \
- (u_longlong_t)DVA_GET_OFFSET(dva), \
- (u_longlong_t)DVA_GET_ASIZE(dva), \
- ws); \
- } \
- if (BP_IS_GANG(bp) && \
- DVA_GET_ASIZE(&bp->blk_dva[2]) <= \
- DVA_GET_ASIZE(&bp->blk_dva[1]) / 2) \
- copies--; \
- len += func(buf + len, size - len, \
- "[L%llu %s] %s %s %s %s %s %s%c" \
- "size=%llxL/%llxP birth=%lluL/%lluP fill=%llu%c" \
- "cksum=%llx:%llx:%llx:%llx", \
- (u_longlong_t)BP_GET_LEVEL(bp), \
- type, \
- checksum, \
- compress, \
- BP_GET_BYTEORDER(bp) == 0 ? "BE" : "LE", \
- BP_IS_GANG(bp) ? "gang" : "contiguous", \
- BP_GET_DEDUP(bp) ? "dedup" : "unique", \
- copyname[copies], \
- ws, \
- (u_longlong_t)BP_GET_LSIZE(bp), \
- (u_longlong_t)BP_GET_PSIZE(bp), \
- (u_longlong_t)bp->blk_birth, \
- (u_longlong_t)BP_PHYSICAL_BIRTH(bp), \
- (u_longlong_t)BP_GET_FILL(bp), \
- ws, \
- (u_longlong_t)bp->blk_cksum.zc_word[0], \
- (u_longlong_t)bp->blk_cksum.zc_word[1], \
- (u_longlong_t)bp->blk_cksum.zc_word[2], \
- (u_longlong_t)bp->blk_cksum.zc_word[3]); \
- } \
- ASSERT(len < size); \
-}
-
-#define BP_GET_BUFC_TYPE(bp) \
- (BP_IS_METADATA(bp) ? ARC_BUFC_METADATA : ARC_BUFC_DATA)
-
-typedef enum spa_import_type {
- SPA_IMPORT_EXISTING,
- SPA_IMPORT_ASSEMBLE
-} spa_import_type_t;
-
-/* state manipulation functions */
-extern int spa_open(const char *pool, spa_t **, void *tag);
-extern int spa_open_rewind(const char *pool, spa_t **, void *tag,
- nvlist_t *policy, nvlist_t **config);
-extern int spa_get_stats(const char *pool, nvlist_t **config, char *altroot,
- size_t buflen);
-extern int spa_create(const char *pool, nvlist_t *config, nvlist_t *props,
- nvlist_t *zplprops);
-#ifdef illumos
-extern int spa_import_rootpool(char *devpath, char *devid);
-#else
-extern int spa_import_rootpool(const char *name, bool checkpointrewind);
-#endif
-extern int spa_import(const char *pool, nvlist_t *config, nvlist_t *props,
- uint64_t flags);
-extern nvlist_t *spa_tryimport(nvlist_t *tryconfig);
-extern int spa_destroy(char *pool);
-extern int spa_checkpoint(const char *pool);
-extern int spa_checkpoint_discard(const char *pool);
-extern int spa_export(char *pool, nvlist_t **oldconfig, boolean_t force,
- boolean_t hardforce);
-extern int spa_reset(char *pool);
-extern void spa_async_request(spa_t *spa, int flag);
-extern void spa_async_unrequest(spa_t *spa, int flag);
-extern void spa_async_suspend(spa_t *spa);
-extern void spa_async_resume(spa_t *spa);
-extern spa_t *spa_inject_addref(char *pool);
-extern void spa_inject_delref(spa_t *spa);
-extern void spa_scan_stat_init(spa_t *spa);
-extern int spa_scan_get_stats(spa_t *spa, pool_scan_stat_t *ps);
-
-#define SPA_ASYNC_CONFIG_UPDATE 0x01
-#define SPA_ASYNC_REMOVE 0x02
-#define SPA_ASYNC_PROBE 0x04
-#define SPA_ASYNC_RESILVER_DONE 0x08
-#define SPA_ASYNC_RESILVER 0x10
-#define SPA_ASYNC_AUTOEXPAND 0x20
-#define SPA_ASYNC_REMOVE_DONE 0x40
-#define SPA_ASYNC_REMOVE_STOP 0x80
-#define SPA_ASYNC_INITIALIZE_RESTART 0x100
-
-/*
- * Controls the behavior of spa_vdev_remove().
- */
-#define SPA_REMOVE_UNSPARE 0x01
-#define SPA_REMOVE_DONE 0x02
-
-/* device manipulation */
-extern int spa_vdev_add(spa_t *spa, nvlist_t *nvroot);
-extern int spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot,
- int replacing);
-extern int spa_vdev_detach(spa_t *spa, uint64_t guid, uint64_t pguid,
- int replace_done);
-extern int spa_vdev_remove(spa_t *spa, uint64_t guid, boolean_t unspare);
-extern boolean_t spa_vdev_remove_active(spa_t *spa);
-extern int spa_vdev_initialize(spa_t *spa, uint64_t guid, uint64_t cmd_type);
-extern int spa_vdev_setpath(spa_t *spa, uint64_t guid, const char *newpath);
-extern int spa_vdev_setfru(spa_t *spa, uint64_t guid, const char *newfru);
-extern int spa_vdev_split_mirror(spa_t *spa, char *newname, nvlist_t *config,
- nvlist_t *props, boolean_t exp);
-
-/* spare state (which is global across all pools) */
-extern void spa_spare_add(vdev_t *vd);
-extern void spa_spare_remove(vdev_t *vd);
-extern boolean_t spa_spare_exists(uint64_t guid, uint64_t *pool, int *refcnt);
-extern void spa_spare_activate(vdev_t *vd);
-
-/* L2ARC state (which is global across all pools) */
-extern void spa_l2cache_add(vdev_t *vd);
-extern void spa_l2cache_remove(vdev_t *vd);
-extern boolean_t spa_l2cache_exists(uint64_t guid, uint64_t *pool);
-extern void spa_l2cache_activate(vdev_t *vd);
-extern void spa_l2cache_drop(spa_t *spa);
-
-/* scanning */
-extern int spa_scan(spa_t *spa, pool_scan_func_t func);
-extern int spa_scan_stop(spa_t *spa);
-extern int spa_scrub_pause_resume(spa_t *spa, pool_scrub_cmd_t flag);
-
-/* spa syncing */
-extern void spa_sync(spa_t *spa, uint64_t txg); /* only for DMU use */
-extern void spa_sync_allpools(void);
-
-/* spa namespace global mutex */
-extern kmutex_t spa_namespace_lock;
-
-/*
- * SPA configuration functions in spa_config.c
- */
-
-#define SPA_CONFIG_UPDATE_POOL 0
-#define SPA_CONFIG_UPDATE_VDEVS 1
-
-extern void spa_write_cachefile(spa_t *, boolean_t, boolean_t);
-extern void spa_config_load(void);
-extern nvlist_t *spa_all_configs(uint64_t *);
-extern void spa_config_set(spa_t *spa, nvlist_t *config);
-extern nvlist_t *spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg,
- int getstats);
-extern void spa_config_update(spa_t *spa, int what);
-
-/*
- * Miscellaneous SPA routines in spa_misc.c
- */
-
-/* Namespace manipulation */
-extern spa_t *spa_lookup(const char *name);
-extern spa_t *spa_add(const char *name, nvlist_t *config, const char *altroot);
-extern void spa_remove(spa_t *spa);
-extern spa_t *spa_next(spa_t *prev);
-
-/* Refcount functions */
-extern void spa_open_ref(spa_t *spa, void *tag);
-extern void spa_close(spa_t *spa, void *tag);
-extern void spa_async_close(spa_t *spa, void *tag);
-extern boolean_t spa_refcount_zero(spa_t *spa);
-
-#define SCL_NONE 0x00
-#define SCL_CONFIG 0x01
-#define SCL_STATE 0x02
-#define SCL_L2ARC 0x04 /* hack until L2ARC 2.0 */
-#define SCL_ALLOC 0x08
-#define SCL_ZIO 0x10
-#define SCL_FREE 0x20
-#define SCL_VDEV 0x40
-#define SCL_LOCKS 7
-#define SCL_ALL ((1 << SCL_LOCKS) - 1)
-#define SCL_STATE_ALL (SCL_STATE | SCL_L2ARC | SCL_ZIO)
-
-/* Pool configuration locks */
-extern int spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw);
-extern void spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw);
-extern void spa_config_exit(spa_t *spa, int locks, void *tag);
-extern int spa_config_held(spa_t *spa, int locks, krw_t rw);
-
-/* Pool vdev add/remove lock */
-extern uint64_t spa_vdev_enter(spa_t *spa);
-extern uint64_t spa_vdev_config_enter(spa_t *spa);
-extern void spa_vdev_config_exit(spa_t *spa, vdev_t *vd, uint64_t txg,
- int error, char *tag);
-extern int spa_vdev_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error);
-
-/* Pool vdev state change lock */
-extern void spa_vdev_state_enter(spa_t *spa, int oplock);
-extern int spa_vdev_state_exit(spa_t *spa, vdev_t *vd, int error);
-
-/* Log state */
-typedef enum spa_log_state {
- SPA_LOG_UNKNOWN = 0, /* unknown log state */
- SPA_LOG_MISSING, /* missing log(s) */
- SPA_LOG_CLEAR, /* clear the log(s) */
- SPA_LOG_GOOD, /* log(s) are good */
-} spa_log_state_t;
-
-extern spa_log_state_t spa_get_log_state(spa_t *spa);
-extern void spa_set_log_state(spa_t *spa, spa_log_state_t state);
-extern int spa_reset_logs(spa_t *spa);
-
-/* Log claim callback */
-extern void spa_claim_notify(zio_t *zio);
-
-/* Accessor functions */
-extern boolean_t spa_shutting_down(spa_t *spa);
-extern struct dsl_pool *spa_get_dsl(spa_t *spa);
-extern boolean_t spa_is_initializing(spa_t *spa);
-extern boolean_t spa_indirect_vdevs_loaded(spa_t *spa);
-extern blkptr_t *spa_get_rootblkptr(spa_t *spa);
-extern void spa_set_rootblkptr(spa_t *spa, const blkptr_t *bp);
-extern void spa_altroot(spa_t *, char *, size_t);
-extern int spa_sync_pass(spa_t *spa);
-extern char *spa_name(spa_t *spa);
-extern uint64_t spa_guid(spa_t *spa);
-extern uint64_t spa_load_guid(spa_t *spa);
-extern uint64_t spa_last_synced_txg(spa_t *spa);
-extern uint64_t spa_first_txg(spa_t *spa);
-extern uint64_t spa_syncing_txg(spa_t *spa);
-extern uint64_t spa_final_dirty_txg(spa_t *spa);
-extern uint64_t spa_version(spa_t *spa);
-extern pool_state_t spa_state(spa_t *spa);
-extern spa_load_state_t spa_load_state(spa_t *spa);
-extern uint64_t spa_freeze_txg(spa_t *spa);
-extern uint64_t spa_get_worst_case_asize(spa_t *spa, uint64_t lsize);
-extern uint64_t spa_get_dspace(spa_t *spa);
-extern uint64_t spa_get_checkpoint_space(spa_t *spa);
-extern uint64_t spa_get_slop_space(spa_t *spa);
-extern void spa_update_dspace(spa_t *spa);
-extern uint64_t spa_version(spa_t *spa);
-extern boolean_t spa_deflate(spa_t *spa);
-extern metaslab_class_t *spa_normal_class(spa_t *spa);
-extern metaslab_class_t *spa_log_class(spa_t *spa);
-extern metaslab_class_t *spa_special_class(spa_t *spa);
-extern metaslab_class_t *spa_dedup_class(spa_t *spa);
-extern metaslab_class_t *spa_preferred_class(spa_t *spa, uint64_t size,
- dmu_object_type_t objtype, uint_t level, uint_t special_smallblk);
-
-extern void spa_evicting_os_register(spa_t *, objset_t *os);
-extern void spa_evicting_os_deregister(spa_t *, objset_t *os);
-extern void spa_evicting_os_wait(spa_t *spa);
-extern int spa_max_replication(spa_t *spa);
-extern int spa_prev_software_version(spa_t *spa);
-extern int spa_busy(void);
-extern uint8_t spa_get_failmode(spa_t *spa);
-extern boolean_t spa_suspended(spa_t *spa);
-extern uint64_t spa_bootfs(spa_t *spa);
-extern uint64_t spa_delegation(spa_t *spa);
-extern objset_t *spa_meta_objset(spa_t *spa);
-extern uint64_t spa_deadman_synctime(spa_t *spa);
-extern struct proc *spa_proc(spa_t *spa);
-extern uint64_t spa_dirty_data(spa_t *spa);
-
-/* Miscellaneous support routines */
-extern void spa_load_failed(spa_t *spa, const char *fmt, ...);
-extern void spa_load_note(spa_t *spa, const char *fmt, ...);
-extern void spa_activate_mos_feature(spa_t *spa, const char *feature,
- dmu_tx_t *tx);
-extern void spa_deactivate_mos_feature(spa_t *spa, const char *feature);
-extern spa_t *spa_by_guid(uint64_t pool_guid, uint64_t device_guid);
-extern boolean_t spa_guid_exists(uint64_t pool_guid, uint64_t device_guid);
-extern char *spa_strdup(const char *);
-extern void spa_strfree(char *);
-extern uint64_t spa_get_random(uint64_t range);
-extern uint64_t spa_generate_guid(spa_t *spa);
-extern void snprintf_blkptr(char *buf, size_t buflen, const blkptr_t *bp);
-extern void spa_freeze(spa_t *spa);
-extern int spa_change_guid(spa_t *spa);
-extern void spa_upgrade(spa_t *spa, uint64_t version);
-extern void spa_evict_all(void);
-extern vdev_t *spa_lookup_by_guid(spa_t *spa, uint64_t guid,
- boolean_t l2cache);
-extern boolean_t spa_has_spare(spa_t *, uint64_t guid);
-extern uint64_t dva_get_dsize_sync(spa_t *spa, const dva_t *dva);
-extern uint64_t bp_get_dsize_sync(spa_t *spa, const blkptr_t *bp);
-extern uint64_t bp_get_dsize(spa_t *spa, const blkptr_t *bp);
-extern boolean_t spa_has_slogs(spa_t *spa);
-extern boolean_t spa_is_root(spa_t *spa);
-extern boolean_t spa_writeable(spa_t *spa);
-extern boolean_t spa_has_pending_synctask(spa_t *spa);
-extern int spa_maxblocksize(spa_t *spa);
-extern int spa_maxdnodesize(spa_t *spa);
-extern boolean_t spa_multihost(spa_t *spa);
-extern unsigned long spa_get_hostid(void);
-extern boolean_t spa_has_checkpoint(spa_t *spa);
-extern boolean_t spa_importing_readonly_checkpoint(spa_t *spa);
-extern boolean_t spa_suspend_async_destroy(spa_t *spa);
-extern uint64_t spa_min_claim_txg(spa_t *spa);
-extern void zfs_blkptr_verify(spa_t *spa, const blkptr_t *bp);
-extern boolean_t zfs_dva_valid(spa_t *spa, const dva_t *dva,
- const blkptr_t *bp);
-typedef void (*spa_remap_cb_t)(uint64_t vdev, uint64_t offset, uint64_t size,
- void *arg);
-extern boolean_t spa_remap_blkptr(spa_t *spa, blkptr_t *bp,
- spa_remap_cb_t callback, void *arg);
-extern uint64_t spa_get_last_removal_txg(spa_t *spa);
-extern boolean_t spa_trust_config(spa_t *spa);
-extern uint64_t spa_missing_tvds_allowed(spa_t *spa);
-extern void spa_set_missing_tvds(spa_t *spa, uint64_t missing);
-extern boolean_t spa_top_vdevs_spacemap_addressable(spa_t *spa);
-extern void spa_activate_allocation_classes(spa_t *, dmu_tx_t *);
-
-extern int spa_mode(spa_t *spa);
-extern uint64_t zfs_strtonum(const char *str, char **nptr);
-
-extern char *spa_his_ievent_table[];
-
-extern void spa_history_create_obj(spa_t *spa, dmu_tx_t *tx);
-extern int spa_history_get(spa_t *spa, uint64_t *offset, uint64_t *len_read,
- char *his_buf);
-extern int spa_history_log(spa_t *spa, const char *his_buf);
-extern int spa_history_log_nvl(spa_t *spa, nvlist_t *nvl);
-extern void spa_history_log_version(spa_t *spa, const char *operation);
-extern void spa_history_log_internal(spa_t *spa, const char *operation,
- dmu_tx_t *tx, const char *fmt, ...);
-extern void spa_history_log_internal_ds(struct dsl_dataset *ds, const char *op,
- dmu_tx_t *tx, const char *fmt, ...);
-extern void spa_history_log_internal_dd(dsl_dir_t *dd, const char *operation,
- dmu_tx_t *tx, const char *fmt, ...);
-
-/* error handling */
-struct zbookmark_phys;
-extern void spa_log_error(spa_t *spa, zio_t *zio);
-extern void zfs_ereport_post(const char *cls, spa_t *spa, vdev_t *vd,
- zio_t *zio, uint64_t stateoroffset, uint64_t length);
-extern void zfs_post_remove(spa_t *spa, vdev_t *vd);
-extern void zfs_post_state_change(spa_t *spa, vdev_t *vd);
-extern void zfs_post_autoreplace(spa_t *spa, vdev_t *vd);
-extern uint64_t spa_get_errlog_size(spa_t *spa);
-extern int spa_get_errlog(spa_t *spa, void *uaddr, size_t *count);
-extern void spa_errlog_rotate(spa_t *spa);
-extern void spa_errlog_drain(spa_t *spa);
-extern void spa_errlog_sync(spa_t *spa, uint64_t txg);
-extern void spa_get_errlists(spa_t *spa, avl_tree_t *last, avl_tree_t *scrub);
-
-/* vdev cache */
-extern void vdev_cache_stat_init(void);
-extern void vdev_cache_stat_fini(void);
-
-/* Initialization and termination */
-extern void spa_init(int flags);
-extern void spa_fini(void);
-extern void spa_boot_init(void);
-
-/* properties */
-extern int spa_prop_set(spa_t *spa, nvlist_t *nvp);
-extern int spa_prop_get(spa_t *spa, nvlist_t **nvp);
-extern void spa_prop_clear_bootfs(spa_t *spa, uint64_t obj, dmu_tx_t *tx);
-extern void spa_configfile_set(spa_t *, nvlist_t *, boolean_t);
-
-/* asynchronous event notification */
-extern void spa_event_notify(spa_t *spa, vdev_t *vdev, nvlist_t *hist_nvl,
- const char *name);
-extern sysevent_t *spa_event_create(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl,
- const char *name);
-extern void spa_event_post(sysevent_t *ev);
-extern void spa_event_discard(sysevent_t *ev);
-
-#ifdef ZFS_DEBUG
-#define dprintf_bp(bp, fmt, ...) do { \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) { \
- char *__blkbuf = kmem_alloc(BP_SPRINTF_LEN, KM_SLEEP); \
- snprintf_blkptr(__blkbuf, BP_SPRINTF_LEN, (bp)); \
- dprintf(fmt " %s\n", __VA_ARGS__, __blkbuf); \
- kmem_free(__blkbuf, BP_SPRINTF_LEN); \
- } \
-_NOTE(CONSTCOND) } while (0)
-#else
-#define dprintf_bp(bp, fmt, ...)
-#endif
-
-extern int spa_mode_global; /* mode, e.g. FREAD | FWRITE */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SPA_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_boot.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_boot.h
deleted file mode 100644
index 8df5072a55ef..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_boot.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2012 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_SPA_BOOT_H
-#define _SYS_SPA_BOOT_H
-
-#include <sys/nvpair.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern char *spa_get_bootprop(char *prop);
-extern void spa_free_bootprop(char *prop);
-
-extern void spa_arch_init(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SPA_BOOT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_checkpoint.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_checkpoint.h
deleted file mode 100644
index 9be2b6eeab3c..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_checkpoint.h
+++ /dev/null
@@ -1,44 +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 (c) 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_SPA_CHECKPOINT_H
-#define _SYS_SPA_CHECKPOINT_H
-
-#include <sys/zthr.h>
-
-typedef struct spa_checkpoint_info {
- uint64_t sci_timestamp; /* when checkpointed uberblock was synced */
- uint64_t sci_dspace; /* disk space used by checkpoint in bytes */
-} spa_checkpoint_info_t;
-
-int spa_checkpoint(const char *);
-int spa_checkpoint_discard(const char *);
-
-boolean_t spa_checkpoint_discard_thread_check(void *, zthr_t *);
-void spa_checkpoint_discard_thread(void *, zthr_t *);
-
-int spa_checkpoint_get_stats(spa_t *, pool_checkpoint_stat_t *);
-
-#endif /* _SYS_SPA_CHECKPOINT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h
deleted file mode 100644
index 11b6982798e8..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h
+++ /dev/null
@@ -1,435 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright 2013 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- * Copyright 2013 Saso Kiselkov. All rights reserved.
- * Copyright (c) 2017 Datto Inc.
- * Copyright (c) 2017, Intel Corporation.
- * Copyright (c) 2016 Actifio, Inc. All rights reserved.
- */
-
-#ifndef _SYS_SPA_IMPL_H
-#define _SYS_SPA_IMPL_H
-
-#include <sys/spa.h>
-#include <sys/spa_checkpoint.h>
-#include <sys/vdev.h>
-#include <sys/vdev_removal.h>
-#include <sys/metaslab.h>
-#include <sys/dmu.h>
-#include <sys/dsl_pool.h>
-#include <sys/uberblock_impl.h>
-#include <sys/zfs_context.h>
-#include <sys/avl.h>
-#include <sys/refcount.h>
-#include <sys/bplist.h>
-#include <sys/bpobj.h>
-#include <sys/zfeature.h>
-#include <sys/zthr.h>
-#include <zfeature_common.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct spa_error_entry {
- zbookmark_phys_t se_bookmark;
- char *se_name;
- avl_node_t se_avl;
-} spa_error_entry_t;
-
-typedef struct spa_history_phys {
- uint64_t sh_pool_create_len; /* ending offset of zpool create */
- uint64_t sh_phys_max_off; /* physical EOF */
- uint64_t sh_bof; /* logical BOF */
- uint64_t sh_eof; /* logical EOF */
- uint64_t sh_records_lost; /* num of records overwritten */
-} spa_history_phys_t;
-
-/*
- * All members must be uint64_t, for byteswap purposes.
- */
-typedef struct spa_removing_phys {
- uint64_t sr_state; /* dsl_scan_state_t */
-
- /*
- * The vdev ID that we most recently attempted to remove,
- * or -1 if no removal has been attempted.
- */
- uint64_t sr_removing_vdev;
-
- /*
- * The vdev ID that we most recently successfully removed,
- * or -1 if no devices have been removed.
- */
- uint64_t sr_prev_indirect_vdev;
-
- uint64_t sr_start_time;
- uint64_t sr_end_time;
-
- /*
- * Note that we can not use the space map's or indirect mapping's
- * accounting as a substitute for these values, because we need to
- * count frees of not-yet-copied data as though it did the copy.
- * Otherwise, we could get into a situation where copied > to_copy,
- * or we complete before copied == to_copy.
- */
- uint64_t sr_to_copy; /* bytes that need to be copied */
- uint64_t sr_copied; /* bytes that have been copied or freed */
-} spa_removing_phys_t;
-
-/*
- * This struct is stored as an entry in the DMU_POOL_DIRECTORY_OBJECT
- * (with key DMU_POOL_CONDENSING_INDIRECT). It is present if a condense
- * of an indirect vdev's mapping object is in progress.
- */
-typedef struct spa_condensing_indirect_phys {
- /*
- * The vdev ID of the indirect vdev whose indirect mapping is
- * being condensed.
- */
- uint64_t scip_vdev;
-
- /*
- * The vdev's old obsolete spacemap. This spacemap's contents are
- * being integrated into the new mapping.
- */
- uint64_t scip_prev_obsolete_sm_object;
-
- /*
- * The new mapping object that is being created.
- */
- uint64_t scip_next_mapping_object;
-} spa_condensing_indirect_phys_t;
-
-struct spa_aux_vdev {
- uint64_t sav_object; /* MOS object for device list */
- nvlist_t *sav_config; /* cached device config */
- vdev_t **sav_vdevs; /* devices */
- int sav_count; /* number devices */
- boolean_t sav_sync; /* sync the device list */
- nvlist_t **sav_pending; /* pending device additions */
- uint_t sav_npending; /* # pending devices */
-};
-
-typedef struct spa_config_lock {
- kmutex_t scl_lock;
- kthread_t *scl_writer;
- int scl_write_wanted;
- kcondvar_t scl_cv;
- zfs_refcount_t scl_count;
-} spa_config_lock_t;
-
-typedef struct spa_config_dirent {
- list_node_t scd_link;
- char *scd_path;
-} spa_config_dirent_t;
-
-typedef enum zio_taskq_type {
- ZIO_TASKQ_ISSUE = 0,
- ZIO_TASKQ_ISSUE_HIGH,
- ZIO_TASKQ_INTERRUPT,
- ZIO_TASKQ_INTERRUPT_HIGH,
- ZIO_TASKQ_TYPES
-} zio_taskq_type_t;
-
-/*
- * State machine for the zpool-poolname process. The states transitions
- * are done as follows:
- *
- * From To Routine
- * PROC_NONE -> PROC_CREATED spa_activate()
- * PROC_CREATED -> PROC_ACTIVE spa_thread()
- * PROC_ACTIVE -> PROC_DEACTIVATE spa_deactivate()
- * PROC_DEACTIVATE -> PROC_GONE spa_thread()
- * PROC_GONE -> PROC_NONE spa_deactivate()
- */
-typedef enum spa_proc_state {
- SPA_PROC_NONE, /* spa_proc = &p0, no process created */
- SPA_PROC_CREATED, /* spa_activate() has proc, is waiting */
- SPA_PROC_ACTIVE, /* taskqs created, spa_proc set */
- SPA_PROC_DEACTIVATE, /* spa_deactivate() requests process exit */
- SPA_PROC_GONE /* spa_thread() is exiting, spa_proc = &p0 */
-} spa_proc_state_t;
-
-typedef struct spa_taskqs {
- uint_t stqs_count;
- taskq_t **stqs_taskq;
-} spa_taskqs_t;
-
-typedef enum spa_all_vdev_zap_action {
- AVZ_ACTION_NONE = 0,
- AVZ_ACTION_DESTROY, /* Destroy all per-vdev ZAPs and the AVZ. */
- AVZ_ACTION_REBUILD, /* Populate the new AVZ, see spa_avz_rebuild */
- AVZ_ACTION_INITIALIZE
-} spa_avz_action_t;
-
-typedef enum spa_config_source {
- SPA_CONFIG_SRC_NONE = 0,
- SPA_CONFIG_SRC_SCAN, /* scan of path (default: /dev/dsk) */
- SPA_CONFIG_SRC_CACHEFILE, /* any cachefile */
- SPA_CONFIG_SRC_TRYIMPORT, /* returned from call to tryimport */
- SPA_CONFIG_SRC_SPLIT, /* new pool in a pool split */
- SPA_CONFIG_SRC_MOS /* MOS, but not always from right txg */
-} spa_config_source_t;
-
-struct spa {
- /*
- * Fields protected by spa_namespace_lock.
- */
- char spa_name[ZFS_MAX_DATASET_NAME_LEN]; /* pool name */
- char *spa_comment; /* comment */
- avl_node_t spa_avl; /* node in spa_namespace_avl */
- nvlist_t *spa_config; /* last synced config */
- nvlist_t *spa_config_syncing; /* currently syncing config */
- nvlist_t *spa_config_splitting; /* config for splitting */
- nvlist_t *spa_load_info; /* info and errors from load */
- uint64_t spa_config_txg; /* txg of last config change */
- int spa_sync_pass; /* iterate-to-convergence */
- pool_state_t spa_state; /* pool state */
- int spa_inject_ref; /* injection references */
- uint8_t spa_sync_on; /* sync threads are running */
- spa_load_state_t spa_load_state; /* current load operation */
- boolean_t spa_indirect_vdevs_loaded; /* mappings loaded? */
- boolean_t spa_trust_config; /* do we trust vdev tree? */
- spa_config_source_t spa_config_source; /* where config comes from? */
- uint64_t spa_import_flags; /* import specific flags */
- spa_taskqs_t spa_zio_taskq[ZIO_TYPES][ZIO_TASKQ_TYPES];
- dsl_pool_t *spa_dsl_pool;
- boolean_t spa_is_initializing; /* true while opening pool */
- metaslab_class_t *spa_normal_class; /* normal data class */
- metaslab_class_t *spa_log_class; /* intent log data class */
- metaslab_class_t *spa_special_class; /* special allocation class */
- metaslab_class_t *spa_dedup_class; /* dedup allocation class */
- uint64_t spa_first_txg; /* first txg after spa_open() */
- uint64_t spa_final_txg; /* txg of export/destroy */
- uint64_t spa_freeze_txg; /* freeze pool at this txg */
- uint64_t spa_load_max_txg; /* best initial ub_txg */
- uint64_t spa_claim_max_txg; /* highest claimed birth txg */
- timespec_t spa_loaded_ts; /* 1st successful open time */
- objset_t *spa_meta_objset; /* copy of dp->dp_meta_objset */
- kmutex_t spa_evicting_os_lock; /* Evicting objset list lock */
- list_t spa_evicting_os_list; /* Objsets being evicted. */
- kcondvar_t spa_evicting_os_cv; /* Objset Eviction Completion */
- txg_list_t spa_vdev_txg_list; /* per-txg dirty vdev list */
- vdev_t *spa_root_vdev; /* top-level vdev container */
- int spa_min_ashift; /* of vdevs in normal class */
- int spa_max_ashift; /* of vdevs in normal class */
- uint64_t spa_config_guid; /* config pool guid */
- uint64_t spa_load_guid; /* spa_load initialized guid */
- uint64_t spa_last_synced_guid; /* last synced guid */
- list_t spa_config_dirty_list; /* vdevs with dirty config */
- list_t spa_state_dirty_list; /* vdevs with dirty state */
- /*
- * spa_alloc_locks and spa_alloc_trees are arrays, whose lengths are
- * stored in spa_alloc_count. There is one tree and one lock for each
- * allocator, to help improve allocation performance in write-heavy
- * workloads.
- */
- kmutex_t *spa_alloc_locks;
- avl_tree_t *spa_alloc_trees;
- int spa_alloc_count;
-
- spa_aux_vdev_t spa_spares; /* hot spares */
- spa_aux_vdev_t spa_l2cache; /* L2ARC cache devices */
- nvlist_t *spa_label_features; /* Features for reading MOS */
- uint64_t spa_config_object; /* MOS object for pool config */
- uint64_t spa_config_generation; /* config generation number */
- uint64_t spa_syncing_txg; /* txg currently syncing */
- bpobj_t spa_deferred_bpobj; /* deferred-free bplist */
- bplist_t spa_free_bplist[TXG_SIZE]; /* bplist of stuff to free */
- zio_cksum_salt_t spa_cksum_salt; /* secret salt for cksum */
- /* checksum context templates */
- kmutex_t spa_cksum_tmpls_lock;
- void *spa_cksum_tmpls[ZIO_CHECKSUM_FUNCTIONS];
- uberblock_t spa_ubsync; /* last synced uberblock */
- uberblock_t spa_uberblock; /* current uberblock */
- boolean_t spa_extreme_rewind; /* rewind past deferred frees */
- uint64_t spa_last_io; /* lbolt of last non-scan I/O */
- kmutex_t spa_scrub_lock; /* resilver/scrub lock */
- uint64_t spa_scrub_inflight; /* in-flight scrub bytes */
- uint64_t spa_load_verify_ios; /* in-flight verifications IOs */
- kcondvar_t spa_scrub_io_cv; /* scrub I/O completion */
- uint8_t spa_scrub_active; /* active or suspended? */
- uint8_t spa_scrub_type; /* type of scrub we're doing */
- uint8_t spa_scrub_finished; /* indicator to rotate logs */
- uint8_t spa_scrub_started; /* started since last boot */
- uint8_t spa_scrub_reopen; /* scrub doing vdev_reopen */
- uint64_t spa_scan_pass_start; /* start time per pass/reboot */
- uint64_t spa_scan_pass_scrub_pause; /* scrub pause time */
- uint64_t spa_scan_pass_scrub_spent_paused; /* total paused */
- uint64_t spa_scan_pass_exam; /* examined bytes per pass */
- uint64_t spa_scan_pass_issued; /* issued bytes per pass */
- kmutex_t spa_async_lock; /* protect async state */
- kthread_t *spa_async_thread; /* thread doing async task */
- kthread_t *spa_async_thread_vd; /* thread doing vd async task */
- int spa_async_suspended; /* async tasks suspended */
- kcondvar_t spa_async_cv; /* wait for thread_exit() */
- uint16_t spa_async_tasks; /* async task mask */
- uint64_t spa_missing_tvds; /* unopenable tvds on load */
- uint64_t spa_missing_tvds_allowed; /* allow loading spa? */
-
- spa_removing_phys_t spa_removing_phys;
- spa_vdev_removal_t *spa_vdev_removal;
-
- spa_condensing_indirect_phys_t spa_condensing_indirect_phys;
- spa_condensing_indirect_t *spa_condensing_indirect;
- zthr_t *spa_condense_zthr; /* zthr doing condense. */
-
- uint64_t spa_checkpoint_txg; /* the txg of the checkpoint */
- spa_checkpoint_info_t spa_checkpoint_info; /* checkpoint accounting */
- zthr_t *spa_checkpoint_discard_zthr;
-
- char *spa_root; /* alternate root directory */
- uint64_t spa_ena; /* spa-wide ereport ENA */
- int spa_last_open_failed; /* error if last open failed */
- uint64_t spa_last_ubsync_txg; /* "best" uberblock txg */
- uint64_t spa_last_ubsync_txg_ts; /* timestamp from that ub */
- uint64_t spa_load_txg; /* ub txg that loaded */
- uint64_t spa_load_txg_ts; /* timestamp from that ub */
- uint64_t spa_load_meta_errors; /* verify metadata err count */
- uint64_t spa_load_data_errors; /* verify data err count */
- uint64_t spa_verify_min_txg; /* start txg of verify scrub */
- kmutex_t spa_errlog_lock; /* error log lock */
- uint64_t spa_errlog_last; /* last error log object */
- uint64_t spa_errlog_scrub; /* scrub error log object */
- kmutex_t spa_errlist_lock; /* error list/ereport lock */
- avl_tree_t spa_errlist_last; /* last error list */
- avl_tree_t spa_errlist_scrub; /* scrub error list */
- uint64_t spa_deflate; /* should we deflate? */
- uint64_t spa_history; /* history object */
- kmutex_t spa_history_lock; /* history lock */
- vdev_t *spa_pending_vdev; /* pending vdev additions */
- kmutex_t spa_props_lock; /* property lock */
- uint64_t spa_pool_props_object; /* object for properties */
- uint64_t spa_bootfs; /* default boot filesystem */
- uint64_t spa_failmode; /* failure mode for the pool */
- uint64_t spa_delegation; /* delegation on/off */
- list_t spa_config_list; /* previous cache file(s) */
- /* per-CPU array of root of async I/O: */
- zio_t **spa_async_zio_root;
- zio_t *spa_suspend_zio_root; /* root of all suspended I/O */
- zio_t *spa_txg_zio[TXG_SIZE]; /* spa_sync() waits for this */
- kmutex_t spa_suspend_lock; /* protects suspend_zio_root */
- kcondvar_t spa_suspend_cv; /* notification of resume */
- zio_suspend_reason_t spa_suspended; /* pool is suspended */
- uint8_t spa_claiming; /* pool is doing zil_claim() */
- boolean_t spa_is_root; /* pool is root */
- int spa_minref; /* num refs when first opened */
- int spa_mode; /* FREAD | FWRITE */
- spa_log_state_t spa_log_state; /* log state */
- uint64_t spa_autoexpand; /* lun expansion on/off */
- uint64_t spa_bootsize; /* efi system partition size */
- ddt_t *spa_ddt[ZIO_CHECKSUM_FUNCTIONS]; /* in-core DDTs */
- uint64_t spa_ddt_stat_object; /* DDT statistics */
- uint64_t spa_dedup_ditto; /* dedup ditto threshold */
- uint64_t spa_dedup_checksum; /* default dedup checksum */
- uint64_t spa_dspace; /* dspace in normal class */
- kmutex_t spa_vdev_top_lock; /* dueling offline/remove */
- kmutex_t spa_proc_lock; /* protects spa_proc* */
- kcondvar_t spa_proc_cv; /* spa_proc_state transitions */
- spa_proc_state_t spa_proc_state; /* see definition */
- struct proc *spa_proc; /* "zpool-poolname" process */
- uint64_t spa_did; /* if procp != p0, did of t1 */
- kthread_t *spa_trim_thread; /* thread sending TRIM I/Os */
- kmutex_t spa_trim_lock; /* protects spa_trim_cv */
- kcondvar_t spa_trim_cv; /* used to notify TRIM thread */
- boolean_t spa_autoreplace; /* autoreplace set in open */
- int spa_vdev_locks; /* locks grabbed */
- uint64_t spa_creation_version; /* version at pool creation */
- uint64_t spa_prev_software_version; /* See ub_software_version */
- uint64_t spa_feat_for_write_obj; /* required to write to pool */
- uint64_t spa_feat_for_read_obj; /* required to read from pool */
- uint64_t spa_feat_desc_obj; /* Feature descriptions */
- uint64_t spa_feat_enabled_txg_obj; /* Feature enabled txg */
- kmutex_t spa_feat_stats_lock; /* protects spa_feat_stats */
- nvlist_t *spa_feat_stats; /* Cache of enabled features */
- /* cache feature refcounts */
- uint64_t spa_feat_refcount_cache[SPA_FEATURES];
-#ifdef illumos
- cyclic_id_t spa_deadman_cycid; /* cyclic id */
-#else /* !illumos */
-#ifdef _KERNEL
- struct callout spa_deadman_cycid; /* callout id */
- struct task spa_deadman_task;
-#endif
-#endif /* illumos */
- uint64_t spa_deadman_calls; /* number of deadman calls */
- hrtime_t spa_sync_starttime; /* starting time fo spa_sync */
- uint64_t spa_deadman_synctime; /* deadman expiration timer */
- uint64_t spa_all_vdev_zaps; /* ZAP of per-vd ZAP obj #s */
- spa_avz_action_t spa_avz_action; /* destroy/rebuild AVZ? */
-
-#ifdef illumos
- /*
- * spa_iokstat_lock protects spa_iokstat and
- * spa_queue_stats[].
- */
- kmutex_t spa_iokstat_lock;
- struct kstat *spa_iokstat; /* kstat of io to this pool */
- struct {
- int spa_active;
- int spa_queued;
- } spa_queue_stats[ZIO_PRIORITY_NUM_QUEUEABLE];
-#endif
- /* arc_memory_throttle() parameters during low memory condition */
- uint64_t spa_lowmem_page_load; /* memory load during txg */
- uint64_t spa_lowmem_last_txg; /* txg window start */
-
- hrtime_t spa_ccw_fail_time; /* Conf cache write fail time */
-
- taskq_t *spa_zvol_taskq; /* Taskq for minor management */
-
- uint64_t spa_multihost; /* multihost aware (mmp) */
- mmp_thread_t spa_mmp; /* multihost mmp thread */
- list_t spa_leaf_list; /* list of leaf vdevs */
- uint64_t spa_leaf_list_gen; /* track leaf_list changes */
-
- /*
- * spa_refcount & spa_config_lock must be the last elements
- * because refcount_t changes size based on compilation options.
- * because zfs_refcount_t changes size based on compilation options.
- * In order for the MDB module to function correctly, the other
- * fields must remain in the same location.
- */
- spa_config_lock_t spa_config_lock[SCL_LOCKS]; /* config changes */
- zfs_refcount_t spa_refcount; /* number of opens */
-#ifndef illumos
- boolean_t spa_splitting_newspa; /* creating new spa in split */
-#endif
-};
-
-extern const char *spa_config_path;
-
-extern void spa_taskq_dispatch_ent(spa_t *spa, zio_type_t t, zio_taskq_type_t q,
- task_func_t *func, void *arg, uint_t flags, taskq_ent_t *ent);
-extern void spa_load_spares(spa_t *spa);
-extern void spa_load_l2cache(spa_t *spa);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SPA_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h
deleted file mode 100644
index 2bce20b48ba5..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_map.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_SPACE_MAP_H
-#define _SYS_SPACE_MAP_H
-
-#include <sys/avl.h>
-#include <sys/range_tree.h>
-#include <sys/dmu.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The size of the space map object has increased to include a histogram.
- * The SPACE_MAP_SIZE_V0 designates the original size and is used to
- * maintain backward compatibility.
- */
-#define SPACE_MAP_SIZE_V0 (3 * sizeof (uint64_t))
-#define SPACE_MAP_HISTOGRAM_SIZE 32
-
-/*
- * The space_map_phys is the on-disk representation of the space map.
- * Consumers of space maps should never reference any of the members of this
- * structure directly. These members may only be updated in syncing context.
- *
- * Note the smp_object is no longer used but remains in the structure
- * for backward compatibility.
- */
-typedef struct space_map_phys {
- /* object number: not needed but kept for backwards compatibility */
- uint64_t smp_object;
-
- /* length of the object in bytes */
- uint64_t smp_length;
-
- /* space allocated from the map */
- int64_t smp_alloc;
-
- /* reserved */
- uint64_t smp_pad[5];
-
- /*
- * The smp_histogram maintains a histogram of free regions. Each
- * bucket, smp_histogram[i], contains the number of free regions
- * whose size is:
- * 2^(i+sm_shift) <= size of free region in bytes < 2^(i+sm_shift+1)
- */
- uint64_t smp_histogram[SPACE_MAP_HISTOGRAM_SIZE];
-} space_map_phys_t;
-
-/*
- * The space map object defines a region of space, its size, how much is
- * allocated, and the on-disk object that stores this information.
- * Consumers of space maps may only access the members of this structure.
- *
- * Note: the space_map may not be accessed concurrently; consumers
- * must provide external locking if required.
- */
-typedef struct space_map {
- uint64_t sm_start; /* start of map */
- uint64_t sm_size; /* size of map */
- uint8_t sm_shift; /* unit shift */
- objset_t *sm_os; /* objset for this map */
- uint64_t sm_object; /* object id for this map */
- uint32_t sm_blksz; /* block size for space map */
- dmu_buf_t *sm_dbuf; /* space_map_phys_t dbuf */
- space_map_phys_t *sm_phys; /* on-disk space map */
-} space_map_t;
-
-/*
- * debug entry
- *
- * 2 2 10 50
- * +-----+-----+------------+----------------------------------+
- * | 1 0 | act | syncpass | txg (lower bits) |
- * +-----+-----+------------+----------------------------------+
- * 63 62 61 60 59 50 49 0
- *
- *
- * one-word entry
- *
- * 1 47 1 15
- * +-----------------------------------------------------------+
- * | 0 | offset (sm_shift units) | type | run |
- * +-----------------------------------------------------------+
- * 63 62 16 15 14 0
- *
- *
- * two-word entry
- *
- * 2 2 36 24
- * +-----+-----+---------------------------+-------------------+
- * | 1 1 | pad | run | vdev |
- * +-----+-----+---------------------------+-------------------+
- * 63 62 61 60 59 24 23 0
- *
- * 1 63
- * +------+----------------------------------------------------+
- * | type | offset |
- * +------+----------------------------------------------------+
- * 63 62 0
- *
- * Note that a two-word entry will not strandle a block boundary.
- * If necessary, the last word of a block will be padded with a
- * debug entry (with act = syncpass = txg = 0).
- */
-
-typedef enum {
- SM_ALLOC,
- SM_FREE
-} maptype_t;
-
-typedef struct space_map_entry {
- maptype_t sme_type;
- uint32_t sme_vdev; /* max is 2^24-1; SM_NO_VDEVID if not present */
- uint64_t sme_offset; /* max is 2^63-1; units of sm_shift */
- uint64_t sme_run; /* max is 2^36; units of sm_shift */
-} space_map_entry_t;
-
-#define SM_NO_VDEVID (1 << SPA_VDEVBITS)
-
-/* one-word entry constants */
-#define SM_DEBUG_PREFIX 2
-#define SM_OFFSET_BITS 47
-#define SM_RUN_BITS 15
-
-/* two-word entry constants */
-#define SM2_PREFIX 3
-#define SM2_OFFSET_BITS 63
-#define SM2_RUN_BITS 36
-
-#define SM_PREFIX_DECODE(x) BF64_DECODE(x, 62, 2)
-#define SM_PREFIX_ENCODE(x) BF64_ENCODE(x, 62, 2)
-
-#define SM_DEBUG_ACTION_DECODE(x) BF64_DECODE(x, 60, 2)
-#define SM_DEBUG_ACTION_ENCODE(x) BF64_ENCODE(x, 60, 2)
-#define SM_DEBUG_SYNCPASS_DECODE(x) BF64_DECODE(x, 50, 10)
-#define SM_DEBUG_SYNCPASS_ENCODE(x) BF64_ENCODE(x, 50, 10)
-#define SM_DEBUG_TXG_DECODE(x) BF64_DECODE(x, 0, 50)
-#define SM_DEBUG_TXG_ENCODE(x) BF64_ENCODE(x, 0, 50)
-
-#define SM_OFFSET_DECODE(x) BF64_DECODE(x, 16, SM_OFFSET_BITS)
-#define SM_OFFSET_ENCODE(x) BF64_ENCODE(x, 16, SM_OFFSET_BITS)
-#define SM_TYPE_DECODE(x) BF64_DECODE(x, 15, 1)
-#define SM_TYPE_ENCODE(x) BF64_ENCODE(x, 15, 1)
-#define SM_RUN_DECODE(x) (BF64_DECODE(x, 0, SM_RUN_BITS) + 1)
-#define SM_RUN_ENCODE(x) BF64_ENCODE((x) - 1, 0, SM_RUN_BITS)
-#define SM_RUN_MAX SM_RUN_DECODE(~0ULL)
-#define SM_OFFSET_MAX SM_OFFSET_DECODE(~0ULL)
-
-#define SM2_RUN_DECODE(x) (BF64_DECODE(x, SPA_VDEVBITS, SM2_RUN_BITS) + 1)
-#define SM2_RUN_ENCODE(x) BF64_ENCODE((x) - 1, SPA_VDEVBITS, SM2_RUN_BITS)
-#define SM2_VDEV_DECODE(x) BF64_DECODE(x, 0, SPA_VDEVBITS)
-#define SM2_VDEV_ENCODE(x) BF64_ENCODE(x, 0, SPA_VDEVBITS)
-#define SM2_TYPE_DECODE(x) BF64_DECODE(x, SM2_OFFSET_BITS, 1)
-#define SM2_TYPE_ENCODE(x) BF64_ENCODE(x, SM2_OFFSET_BITS, 1)
-#define SM2_OFFSET_DECODE(x) BF64_DECODE(x, 0, SM2_OFFSET_BITS)
-#define SM2_OFFSET_ENCODE(x) BF64_ENCODE(x, 0, SM2_OFFSET_BITS)
-#define SM2_RUN_MAX SM2_RUN_DECODE(~0ULL)
-#define SM2_OFFSET_MAX SM2_OFFSET_DECODE(~0ULL)
-
-boolean_t sm_entry_is_debug(uint64_t e);
-boolean_t sm_entry_is_single_word(uint64_t e);
-boolean_t sm_entry_is_double_word(uint64_t e);
-
-typedef int (*sm_cb_t)(space_map_entry_t *sme, void *arg);
-
-int space_map_load(space_map_t *sm, range_tree_t *rt, maptype_t maptype);
-int space_map_load_length(space_map_t *sm, range_tree_t *rt, maptype_t maptype,
- uint64_t length);
-int space_map_iterate(space_map_t *sm, uint64_t length,
- sm_cb_t callback, void *arg);
-int space_map_incremental_destroy(space_map_t *sm, sm_cb_t callback, void *arg,
- dmu_tx_t *tx);
-
-boolean_t space_map_histogram_verify(space_map_t *sm, range_tree_t *rt);
-void space_map_histogram_clear(space_map_t *sm);
-void space_map_histogram_add(space_map_t *sm, range_tree_t *rt,
- dmu_tx_t *tx);
-
-uint64_t space_map_object(space_map_t *sm);
-int64_t space_map_allocated(space_map_t *sm);
-uint64_t space_map_length(space_map_t *sm);
-
-void space_map_write(space_map_t *sm, range_tree_t *rt, maptype_t maptype,
- uint64_t vdev_id, dmu_tx_t *tx);
-uint64_t space_map_estimate_optimal_size(space_map_t *sm, range_tree_t *rt,
- uint64_t vdev_id);
-void space_map_truncate(space_map_t *sm, int blocksize, dmu_tx_t *tx);
-uint64_t space_map_alloc(objset_t *os, int blocksize, dmu_tx_t *tx);
-void space_map_free(space_map_t *sm, dmu_tx_t *tx);
-void space_map_free_obj(objset_t *os, uint64_t smobj, dmu_tx_t *tx);
-
-int space_map_open(space_map_t **smp, objset_t *os, uint64_t object,
- uint64_t start, uint64_t size, uint8_t shift);
-void space_map_close(space_map_t *sm);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SPACE_MAP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_reftree.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_reftree.h
deleted file mode 100644
index 249b15be6729..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/space_reftree.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2013 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_SPACE_REFTREE_H
-#define _SYS_SPACE_REFTREE_H
-
-#include <sys/range_tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct space_ref {
- avl_node_t sr_node; /* AVL node */
- uint64_t sr_offset; /* range offset (start or end) */
- int64_t sr_refcnt; /* associated reference count */
-} space_ref_t;
-
-void space_reftree_create(avl_tree_t *t);
-void space_reftree_destroy(avl_tree_t *t);
-void space_reftree_add_seg(avl_tree_t *t, uint64_t start, uint64_t end,
- int64_t refcnt);
-void space_reftree_add_map(avl_tree_t *t, range_tree_t *rt, int64_t refcnt);
-void space_reftree_generate_map(avl_tree_t *t, range_tree_t *rt,
- int64_t minref);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_SPACE_REFTREE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/trim_map.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/trim_map.h
deleted file mode 100644
index f228d0766631..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/trim_map.h
+++ /dev/null
@@ -1,51 +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 (c) 2012 Pawel Jakub Dawidek <pawel@dawidek.net>.
- * All rights reserved.
- */
-
-#ifndef _SYS_TRIM_MAP_H
-#define _SYS_TRIM_MAP_H
-
-#include <sys/avl.h>
-#include <sys/list.h>
-#include <sys/spa.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void trim_map_create(vdev_t *vd);
-extern void trim_map_destroy(vdev_t *vd);
-extern void trim_map_free(vdev_t *vd, uint64_t offset, uint64_t size, uint64_t txg);
-extern boolean_t trim_map_write_start(zio_t *zio);
-extern void trim_map_write_done(zio_t *zio);
-
-extern void trim_thread_create(spa_t *spa);
-extern void trim_thread_destroy(spa_t *spa);
-extern void trim_thread_wakeup(spa_t *spa);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_TRIM_MAP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h
deleted file mode 100644
index d5c22e41478e..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_TXG_H
-#define _SYS_TXG_H
-
-#include <sys/spa.h>
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define TXG_CONCURRENT_STATES 3 /* open, quiescing, syncing */
-#define TXG_SIZE 4 /* next power of 2 */
-#define TXG_MASK (TXG_SIZE - 1) /* mask for size */
-#define TXG_INITIAL TXG_SIZE /* initial txg */
-#define TXG_IDX (txg & TXG_MASK)
-
-/* Number of txgs worth of frees we defer adding to in-core spacemaps */
-#define TXG_DEFER_SIZE 2
-
-typedef struct tx_cpu tx_cpu_t;
-
-typedef struct txg_handle {
- tx_cpu_t *th_cpu;
- uint64_t th_txg;
-} txg_handle_t;
-
-typedef struct txg_node {
- struct txg_node *tn_next[TXG_SIZE];
- uint8_t tn_member[TXG_SIZE];
-} txg_node_t;
-
-typedef struct txg_list {
- kmutex_t tl_lock;
- size_t tl_offset;
- spa_t *tl_spa;
- txg_node_t *tl_head[TXG_SIZE];
-} txg_list_t;
-
-struct dsl_pool;
-
-extern void txg_init(struct dsl_pool *dp, uint64_t txg);
-extern void txg_fini(struct dsl_pool *dp);
-extern void txg_sync_start(struct dsl_pool *dp);
-extern void txg_sync_stop(struct dsl_pool *dp);
-extern uint64_t txg_hold_open(struct dsl_pool *dp, txg_handle_t *txghp);
-extern void txg_rele_to_quiesce(txg_handle_t *txghp);
-extern void txg_rele_to_sync(txg_handle_t *txghp);
-extern void txg_register_callbacks(txg_handle_t *txghp, list_t *tx_callbacks);
-
-extern void txg_delay(struct dsl_pool *dp, uint64_t txg, hrtime_t delta,
- hrtime_t resolution);
-extern void txg_kick(struct dsl_pool *dp);
-
-/*
- * Wait until the given transaction group has finished syncing.
- * Try to make this happen as soon as possible (eg. kick off any
- * necessary syncs immediately). If txg==0, wait for the currently open
- * txg to finish syncing.
- */
-extern void txg_wait_synced(struct dsl_pool *dp, uint64_t txg);
-
-/*
- * Wait as above. Returns true if the thread was signaled while waiting.
- */
-extern boolean_t txg_wait_synced_sig(struct dsl_pool *dp, uint64_t txg);
-
-/*
- * Wait until the given transaction group, or one after it, is
- * the open transaction group. Try to make this happen as soon
- * as possible (eg. kick off any necessary syncs immediately).
- * If txg == 0, wait for the next open txg.
- */
-extern void txg_wait_open(struct dsl_pool *dp, uint64_t txg);
-
-/*
- * Returns TRUE if we are "backed up" waiting for the syncing
- * transaction to complete; otherwise returns FALSE.
- */
-extern boolean_t txg_stalled(struct dsl_pool *dp);
-
-/* returns TRUE if someone is waiting for the next txg to sync */
-extern boolean_t txg_sync_waiting(struct dsl_pool *dp);
-
-extern void txg_verify(spa_t *spa, uint64_t txg);
-
-/*
- * Per-txg object lists.
- */
-
-#define TXG_CLEAN(txg) ((txg) - 1)
-
-extern void txg_list_create(txg_list_t *tl, spa_t *spa, size_t offset);
-extern void txg_list_destroy(txg_list_t *tl);
-extern boolean_t txg_list_empty(txg_list_t *tl, uint64_t txg);
-extern boolean_t txg_all_lists_empty(txg_list_t *tl);
-extern boolean_t txg_list_add(txg_list_t *tl, void *p, uint64_t txg);
-extern boolean_t txg_list_add_tail(txg_list_t *tl, void *p, uint64_t txg);
-extern void *txg_list_remove(txg_list_t *tl, uint64_t txg);
-extern void *txg_list_remove_this(txg_list_t *tl, void *p, uint64_t txg);
-extern boolean_t txg_list_member(txg_list_t *tl, void *p, uint64_t txg);
-extern void *txg_list_head(txg_list_t *tl, uint64_t txg);
-extern void *txg_list_next(txg_list_t *tl, void *p, uint64_t txg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_TXG_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg_impl.h
deleted file mode 100644
index bf3b269d707d..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg_impl.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2013, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_TXG_IMPL_H
-#define _SYS_TXG_IMPL_H
-
-#include <sys/spa.h>
-#include <sys/txg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The tx_cpu structure is a per-cpu structure that is used to track
- * the number of active transaction holds (tc_count). As transactions
- * are assigned into a transaction group the appropriate tc_count is
- * incremented to indicate that there are pending changes that have yet
- * to quiesce. Consumers evenutally call txg_rele_to_sync() to decrement
- * the tc_count. A transaction group is not considered quiesced until all
- * tx_cpu structures have reached a tc_count of zero.
- *
- * This structure is a per-cpu structure by design. Updates to this structure
- * are frequent and concurrent. Having a single structure would result in
- * heavy lock contention so a per-cpu design was implemented. With the fanned
- * out mutex design, consumers only need to lock the mutex associated with
- * thread's cpu.
- *
- * The tx_cpu contains two locks, the tc_lock and tc_open_lock.
- * The tc_lock is used to protect all members of the tx_cpu structure with
- * the exception of the tc_open_lock. This lock should only be held for a
- * short period of time, typically when updating the value of tc_count.
- *
- * The tc_open_lock protects the tx_open_txg member of the tx_state structure.
- * This lock is used to ensure that transactions are only assigned into
- * the current open transaction group. In order to move the current open
- * transaction group to the quiesce phase, the txg_quiesce thread must
- * grab all tc_open_locks, increment the tx_open_txg, and drop the locks.
- * The tc_open_lock is held until the transaction is assigned into the
- * transaction group. Typically, this is a short operation but if throttling
- * is occuring it may be held for longer periods of time.
- */
-struct tx_cpu {
- kmutex_t tc_open_lock; /* protects tx_open_txg */
- kmutex_t tc_lock; /* protects the rest of this struct */
- kcondvar_t tc_cv[TXG_SIZE];
- uint64_t tc_count[TXG_SIZE]; /* tx hold count on each txg */
- list_t tc_callbacks[TXG_SIZE]; /* commit cb list */
- char tc_pad[8]; /* pad to fill 3 cache lines */
-};
-
-/*
- * The tx_state structure maintains the state information about the different
- * stages of the pool's transcation groups. A per pool tx_state structure
- * is used to track this information. The tx_state structure also points to
- * an array of tx_cpu structures (described above). Although the tx_sync_lock
- * is used to protect the members of this structure, it is not used to
- * protect the tx_open_txg. Instead a special lock in the tx_cpu structure
- * is used. Readers of tx_open_txg must grab the per-cpu tc_open_lock.
- * Any thread wishing to update tx_open_txg must grab the tc_open_lock on
- * every cpu (see txg_quiesce()).
- */
-typedef struct tx_state {
- tx_cpu_t *tx_cpu; /* protects access to tx_open_txg */
- kmutex_t tx_sync_lock; /* protects the rest of this struct */
-
- uint64_t tx_open_txg; /* currently open txg id */
- uint64_t tx_quiescing_txg; /* currently quiescing txg id */
- uint64_t tx_quiesced_txg; /* quiesced txg waiting for sync */
- uint64_t tx_syncing_txg; /* currently syncing txg id */
- uint64_t tx_synced_txg; /* last synced txg id */
-
- hrtime_t tx_open_time; /* start time of tx_open_txg */
-
- uint64_t tx_sync_txg_waiting; /* txg we're waiting to sync */
- uint64_t tx_quiesce_txg_waiting; /* txg we're waiting to open */
-
- kcondvar_t tx_sync_more_cv;
- kcondvar_t tx_sync_done_cv;
- kcondvar_t tx_quiesce_more_cv;
- kcondvar_t tx_quiesce_done_cv;
- kcondvar_t tx_timeout_cv;
- kcondvar_t tx_exit_cv; /* wait for all threads to exit */
-
- uint8_t tx_threads; /* number of threads */
- uint8_t tx_exiting; /* set when we're exiting */
-
- kthread_t *tx_sync_thread;
- kthread_t *tx_quiesce_thread;
-
- taskq_t *tx_commit_cb_taskq; /* commit callback taskq */
-} tx_state_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_TXG_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock.h
deleted file mode 100644
index 044e438387c0..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2014 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_UBERBLOCK_H
-#define _SYS_UBERBLOCK_H
-
-#include <sys/spa.h>
-#include <sys/vdev.h>
-#include <sys/zio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct uberblock uberblock_t;
-
-extern int uberblock_verify(uberblock_t *);
-extern boolean_t uberblock_update(uberblock_t *ub, vdev_t *rvd, uint64_t txg,
- uint64_t mmp_delay);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_UBERBLOCK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock_impl.h
deleted file mode 100644
index caf43957dfe4..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock_impl.h
+++ /dev/null
@@ -1,145 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_UBERBLOCK_IMPL_H
-#define _SYS_UBERBLOCK_IMPL_H
-
-#include <sys/uberblock.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The uberblock version is incremented whenever an incompatible on-disk
- * format change is made to the SPA, DMU, or ZAP.
- *
- * Note: the first two fields should never be moved. When a storage pool
- * is opened, the uberblock must be read off the disk before the version
- * can be checked. If the ub_version field is moved, we may not detect
- * version mismatch. If the ub_magic field is moved, applications that
- * expect the magic number in the first word won't work.
- */
-#define UBERBLOCK_MAGIC 0x00bab10c /* oo-ba-bloc! */
-#define UBERBLOCK_SHIFT 10 /* up to 1K */
-#define MMP_MAGIC 0xa11cea11 /* all-see-all */
-
-#define MMP_INTERVAL_VALID_BIT 0x01
-#define MMP_SEQ_VALID_BIT 0x02
-#define MMP_FAIL_INT_VALID_BIT 0x04
-
-#define MMP_VALID(ubp) (ubp->ub_magic == UBERBLOCK_MAGIC && \
- ubp->ub_mmp_magic == MMP_MAGIC)
-#define MMP_INTERVAL_VALID(ubp) (MMP_VALID(ubp) && (ubp->ub_mmp_config & \
- MMP_INTERVAL_VALID_BIT))
-#define MMP_SEQ_VALID(ubp) (MMP_VALID(ubp) && (ubp->ub_mmp_config & \
- MMP_SEQ_VALID_BIT))
-#define MMP_FAIL_INT_VALID(ubp) (MMP_VALID(ubp) && (ubp->ub_mmp_config & \
- MMP_FAIL_INT_VALID_BIT))
-
-#define MMP_INTERVAL(ubp) ((ubp->ub_mmp_config & 0x00000000FFFFFF00) \
- >> 8)
-#define MMP_SEQ(ubp) ((ubp->ub_mmp_config & 0x0000FFFF00000000) \
- >> 32)
-#define MMP_FAIL_INT(ubp) ((ubp->ub_mmp_config & 0xFFFF000000000000) \
- >> 48)
-
-#define MMP_INTERVAL_SET(write) \
- (((uint64_t)(write & 0xFFFFFF) << 8) | MMP_INTERVAL_VALID_BIT)
-
-#define MMP_SEQ_SET(seq) \
- (((uint64_t)(seq & 0xFFFF) << 32) | MMP_SEQ_VALID_BIT)
-
-#define MMP_FAIL_INT_SET(fail) \
- (((uint64_t)(fail & 0xFFFF) << 48) | MMP_FAIL_INT_VALID_BIT)
-
-struct uberblock {
- uint64_t ub_magic; /* UBERBLOCK_MAGIC */
- uint64_t ub_version; /* SPA_VERSION */
- uint64_t ub_txg; /* txg of last sync */
- uint64_t ub_guid_sum; /* sum of all vdev guids */
- uint64_t ub_timestamp; /* UTC time of last sync */
- blkptr_t ub_rootbp; /* MOS objset_phys_t */
-
- /* highest SPA_VERSION supported by software that wrote this txg */
- uint64_t ub_software_version;
-
- /* Maybe missing in uberblocks we read, but always written */
- uint64_t ub_mmp_magic;
- /*
- * If ub_mmp_delay == 0 and ub_mmp_magic is valid, MMP is off.
- * Otherwise, nanosec since last MMP write.
- */
- uint64_t ub_mmp_delay;
-
- /*
- * The ub_mmp_config contains the multihost write interval, multihost
- * fail intervals, sequence number for sub-second granularity, and
- * valid bit mask. This layout is as follows:
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * 0 | Fail Intervals| Seq | Write Interval (ms) | VALID |
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * This allows a write_interval of (2^24/1000)s, over 4.5 hours
- *
- * VALID Bits:
- * - 0x01 - Write Interval (ms)
- * - 0x02 - Sequence number exists
- * - 0x04 - Fail Intervals
- * - 0xf8 - Reserved
- */
- uint64_t ub_mmp_config;
-
- /*
- * ub_checkpoint_txg indicates two things about the current uberblock:
- *
- * 1] If it is not zero then this uberblock is a checkpoint. If it is
- * zero, then this uberblock is not a checkpoint.
- *
- * 2] On checkpointed uberblocks, the value of ub_checkpoint_txg is
- * the ub_txg that the uberblock had at the time we moved it to
- * the MOS config.
- *
- * The field is set when we checkpoint the uberblock and continues to
- * hold that value even after we've rewound (unlike the ub_txg that
- * is reset to a higher value).
- *
- * Besides checks used to determine whether we are reopening the
- * pool from a checkpointed uberblock [see spa_ld_select_uberblock()],
- * the value of the field is used to determine which ZIL blocks have
- * been allocated according to the ms_sm when we are rewinding to a
- * checkpoint. Specifically, if blk_birth > ub_checkpoint_txg, then
- * the ZIL block is not allocated [see uses of spa_min_claim_txg()].
- */
- uint64_t ub_checkpoint_txg;
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_UBERBLOCK_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/unique.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/unique.h
deleted file mode 100644
index d4ba32e5c642..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/unique.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_UNIQUE_H
-#define _SYS_UNIQUE_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The number of significant bits in each unique value. */
-#define UNIQUE_BITS 56
-
-void unique_init(void);
-void unique_fini(void);
-
-/*
- * Return a new unique value (which will not be uniquified against until
- * it is unique_insert()-ed).
- */
-uint64_t unique_create(void);
-
-/* Return a unique value, which equals the one passed in if possible. */
-uint64_t unique_insert(uint64_t value);
-
-/* Indicate that this value no longer needs to be uniquified against. */
-void unique_remove(uint64_t value);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_UNIQUE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h
deleted file mode 100644
index 0bb266873c6c..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h
+++ /dev/null
@@ -1,196 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2020 by Delphix. All rights reserved.
- * Copyright (c) 2017, Intel Corporation.
- */
-
-#ifndef _SYS_VDEV_H
-#define _SYS_VDEV_H
-
-#include <sys/spa.h>
-#include <sys/zio.h>
-#include <sys/dmu.h>
-#include <sys/space_map.h>
-#include <sys/fs/zfs.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum vdev_dtl_type {
- DTL_MISSING, /* 0% replication: no copies of the data */
- DTL_PARTIAL, /* less than 100% replication: some copies missing */
- DTL_SCRUB, /* unable to fully repair during scrub/resilver */
- DTL_OUTAGE, /* temporarily missing (used to attempt detach) */
- DTL_TYPES
-} vdev_dtl_type_t;
-
-extern boolean_t zfs_nocacheflush;
-extern boolean_t zfs_trim_enabled;
-
-extern void vdev_dbgmsg(vdev_t *vd, const char *fmt, ...);
-extern void vdev_dbgmsg_print_tree(vdev_t *, int);
-extern int vdev_open(vdev_t *);
-extern void vdev_open_children(vdev_t *);
-extern boolean_t vdev_uses_zvols(vdev_t *);
-extern int vdev_validate(vdev_t *);
-extern int vdev_copy_path_strict(vdev_t *, vdev_t *);
-extern void vdev_copy_path_relaxed(vdev_t *, vdev_t *);
-extern void vdev_close(vdev_t *);
-extern int vdev_create(vdev_t *, uint64_t txg, boolean_t isreplace);
-extern void vdev_reopen(vdev_t *);
-extern int vdev_validate_aux(vdev_t *vd);
-extern zio_t *vdev_probe(vdev_t *vd, zio_t *pio);
-extern boolean_t vdev_is_concrete(vdev_t *vd);
-extern boolean_t vdev_is_bootable(vdev_t *vd);
-extern vdev_t *vdev_lookup_top(spa_t *spa, uint64_t vdev);
-extern vdev_t *vdev_lookup_by_guid(vdev_t *vd, uint64_t guid);
-extern int vdev_count_leaves(spa_t *spa);
-extern void vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t d,
- uint64_t txg, uint64_t size);
-extern boolean_t vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t d,
- uint64_t txg, uint64_t size);
-extern boolean_t vdev_dtl_empty(vdev_t *vd, vdev_dtl_type_t d);
-extern boolean_t vdev_dtl_need_resilver(vdev_t *vd, uint64_t off, size_t size);
-extern void vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg,
- int scrub_done);
-extern boolean_t vdev_dtl_required(vdev_t *vd);
-extern boolean_t vdev_resilver_needed(vdev_t *vd,
- uint64_t *minp, uint64_t *maxp);
-extern void vdev_destroy_unlink_zap(vdev_t *vd, uint64_t zapobj,
- dmu_tx_t *tx);
-extern uint64_t vdev_create_link_zap(vdev_t *vd, dmu_tx_t *tx);
-extern void vdev_construct_zaps(vdev_t *vd, dmu_tx_t *tx);
-extern void vdev_destroy_spacemaps(vdev_t *vd, dmu_tx_t *tx);
-extern void vdev_indirect_mark_obsolete(vdev_t *vd, uint64_t offset,
- uint64_t size);
-extern void spa_vdev_indirect_mark_obsolete(spa_t *spa, uint64_t vdev,
- uint64_t offset, uint64_t size, dmu_tx_t *tx);
-
-extern void vdev_hold(vdev_t *);
-extern void vdev_rele(vdev_t *);
-
-extern int vdev_metaslab_init(vdev_t *vd, uint64_t txg);
-extern void vdev_metaslab_fini(vdev_t *vd);
-extern void vdev_metaslab_set_size(vdev_t *);
-extern void vdev_ashift_optimize(vdev_t *);
-extern void vdev_expand(vdev_t *vd, uint64_t txg);
-extern void vdev_split(vdev_t *vd);
-extern void vdev_deadman(vdev_t *vd);
-
-extern void vdev_get_stats(vdev_t *vd, vdev_stat_t *vs);
-extern void vdev_clear_stats(vdev_t *vd);
-extern void vdev_stat_update(zio_t *zio, uint64_t psize);
-extern void vdev_scan_stat_init(vdev_t *vd);
-extern void vdev_propagate_state(vdev_t *vd);
-extern void vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state,
- vdev_aux_t aux);
-extern boolean_t vdev_children_are_offline(vdev_t *vd);
-
-extern void vdev_space_update(vdev_t *vd,
- int64_t alloc_delta, int64_t defer_delta, int64_t space_delta);
-
-extern int64_t vdev_deflated_space(vdev_t *vd, int64_t space);
-
-extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize);
-
-extern int vdev_fault(spa_t *spa, uint64_t guid, vdev_aux_t aux);
-extern int vdev_degrade(spa_t *spa, uint64_t guid, vdev_aux_t aux);
-extern int vdev_online(spa_t *spa, uint64_t guid, uint64_t flags,
- vdev_state_t *);
-extern int vdev_offline(spa_t *spa, uint64_t guid, uint64_t flags);
-extern void vdev_clear(spa_t *spa, vdev_t *vd);
-
-extern boolean_t vdev_is_dead(vdev_t *vd);
-extern boolean_t vdev_readable(vdev_t *vd);
-extern boolean_t vdev_writeable(vdev_t *vd);
-extern boolean_t vdev_allocatable(vdev_t *vd);
-extern boolean_t vdev_accessible(vdev_t *vd, zio_t *zio);
-extern boolean_t vdev_is_spacemap_addressable(vdev_t *vd);
-
-extern void vdev_cache_init(vdev_t *vd);
-extern void vdev_cache_fini(vdev_t *vd);
-extern boolean_t vdev_cache_read(zio_t *zio);
-extern void vdev_cache_write(zio_t *zio);
-extern void vdev_cache_purge(vdev_t *vd);
-
-extern void vdev_queue_init(vdev_t *vd);
-extern void vdev_queue_fini(vdev_t *vd);
-extern zio_t *vdev_queue_io(zio_t *zio);
-extern void vdev_queue_io_done(zio_t *zio);
-extern void vdev_queue_change_io_priority(zio_t *zio, zio_priority_t priority);
-extern int vdev_queue_length(vdev_t *vd);
-extern uint64_t vdev_queue_lastoffset(vdev_t *vd);
-extern void vdev_queue_register_lastoffset(vdev_t *vd, zio_t *zio);
-
-extern void vdev_config_dirty(vdev_t *vd);
-extern void vdev_config_clean(vdev_t *vd);
-extern int vdev_config_sync(vdev_t **svd, int svdcount, uint64_t txg);
-
-extern void vdev_state_dirty(vdev_t *vd);
-extern void vdev_state_clean(vdev_t *vd);
-
-typedef enum vdev_config_flag {
- VDEV_CONFIG_SPARE = 1 << 0,
- VDEV_CONFIG_L2CACHE = 1 << 1,
- VDEV_CONFIG_REMOVING = 1 << 2,
- VDEV_CONFIG_MOS = 1 << 3,
- VDEV_CONFIG_MISSING = 1 << 4
-} vdev_config_flag_t;
-
-extern void vdev_top_config_generate(spa_t *spa, nvlist_t *config);
-extern nvlist_t *vdev_config_generate(spa_t *spa, vdev_t *vd,
- boolean_t getstats, vdev_config_flag_t flags);
-
-/*
- * Label routines
- */
-struct uberblock;
-extern uint64_t vdev_label_offset(uint64_t psize, int l, uint64_t offset);
-extern int vdev_label_number(uint64_t psise, uint64_t offset);
-extern nvlist_t *vdev_label_read_config(vdev_t *vd, uint64_t txg);
-extern void vdev_uberblock_load(vdev_t *, struct uberblock *, nvlist_t **);
-extern void vdev_label_write(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t
- offset, uint64_t size, zio_done_func_t *done, void *priv, int flags);
-extern int vdev_label_read_bootenv(vdev_t *, nvlist_t *);
-extern int vdev_label_write_bootenv(vdev_t *, char *);
-
-typedef enum {
- VDEV_LABEL_CREATE, /* create/add a new device */
- VDEV_LABEL_REPLACE, /* replace an existing device */
- VDEV_LABEL_SPARE, /* add a new hot spare */
- VDEV_LABEL_REMOVE, /* remove an existing device */
- VDEV_LABEL_L2CACHE, /* add an L2ARC cache device */
- VDEV_LABEL_SPLIT /* generating new label for split-off dev */
-} vdev_labeltype_t;
-
-extern int vdev_label_init(vdev_t *vd, uint64_t txg, vdev_labeltype_t reason);
-
-extern int vdev_label_write_pad2(vdev_t *vd, const char *buf, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_disk.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_disk.h
deleted file mode 100644
index 61e2f273f0a0..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_disk.h
+++ /dev/null
@@ -1,67 +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 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- * Copyright (c) 2013 Joyent, Inc. All rights reserved.
- * Copyright 2012 Nexenta Systems, Inc. All rights reserved.
- */
-
-#ifndef _SYS_VDEV_DISK_H
-#define _SYS_VDEV_DISK_H
-
-#include <sys/vdev.h>
-#ifdef _KERNEL
-#include <sys/buf.h>
-#include <sys/ddi.h>
-#include <sys/sunldi.h>
-#include <sys/sunddi.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef _KERNEL
-typedef struct vdev_disk {
- ddi_devid_t vd_devid;
- char *vd_minor;
- ldi_handle_t vd_lh;
- list_t vd_ldi_cbs;
- boolean_t vd_ldi_offline;
-} vdev_disk_t;
-#endif
-
-extern int vdev_disk_physio(vdev_t *,
- caddr_t, size_t, uint64_t, int, boolean_t);
-
-/*
- * Since vdev_disk.c is not compiled into libzpool, this function should only be
- * defined in the zfs kernel module.
- */
-#ifdef _KERNEL
-extern int vdev_disk_ldi_physio(ldi_handle_t, caddr_t, size_t, uint64_t, int);
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_DISK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_file.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_file.h
deleted file mode 100644
index 0260b4ab4f79..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_file.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_VDEV_FILE_H
-#define _SYS_VDEV_FILE_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <sys/vdev.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct vdev_file {
- vnode_t *vf_vnode;
-} vdev_file_t;
-
-extern void vdev_file_init(void);
-extern void vdev_file_fini(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_FILE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
deleted file mode 100644
index e40335fc73ae..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
+++ /dev/null
@@ -1,571 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2020 by Delphix. All rights reserved.
- * Copyright (c) 2017, Intel Corporation.
- */
-
-#ifndef _SYS_VDEV_IMPL_H
-#define _SYS_VDEV_IMPL_H
-
-#include <sys/avl.h>
-#include <sys/bpobj.h>
-#include <sys/dmu.h>
-#include <sys/metaslab.h>
-#include <sys/nvpair.h>
-#include <sys/space_map.h>
-#include <sys/vdev.h>
-#include <sys/dkio.h>
-#include <sys/uberblock_impl.h>
-#include <sys/vdev_indirect_mapping.h>
-#include <sys/vdev_indirect_births.h>
-#include <sys/vdev_removal.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Virtual device descriptors.
- *
- * All storage pool operations go through the virtual device framework,
- * which provides data replication and I/O scheduling.
- */
-
-/*
- * Forward declarations that lots of things need.
- */
-typedef struct vdev_queue vdev_queue_t;
-typedef struct vdev_cache vdev_cache_t;
-typedef struct vdev_cache_entry vdev_cache_entry_t;
-struct abd;
-
-extern int zfs_vdev_queue_depth_pct;
-extern int zfs_vdev_def_queue_depth;
-extern uint32_t zfs_vdev_async_write_max_active;
-
-/*
- * Virtual device operations
- */
-typedef int vdev_open_func_t(vdev_t *vd, uint64_t *size, uint64_t *max_size,
- uint64_t *logical_ashift, uint64_t *physical_ashift);
-typedef void vdev_close_func_t(vdev_t *vd);
-typedef uint64_t vdev_asize_func_t(vdev_t *vd, uint64_t psize);
-typedef void vdev_io_start_func_t(zio_t *zio);
-typedef void vdev_io_done_func_t(zio_t *zio);
-typedef void vdev_state_change_func_t(vdev_t *vd, int, int);
-typedef boolean_t vdev_need_resilver_func_t(vdev_t *vd, uint64_t, size_t);
-typedef void vdev_hold_func_t(vdev_t *vd);
-typedef void vdev_rele_func_t(vdev_t *vd);
-
-typedef void vdev_remap_cb_t(uint64_t inner_offset, vdev_t *vd,
- uint64_t offset, uint64_t size, void *arg);
-typedef void vdev_remap_func_t(vdev_t *vd, uint64_t offset, uint64_t size,
- vdev_remap_cb_t callback, void *arg);
-/*
- * Given a target vdev, translates the logical range "in" to the physical
- * range "res"
- */
-typedef void vdev_xlation_func_t(vdev_t *cvd, const range_seg_t *in,
- range_seg_t *res);
-
-typedef struct vdev_ops {
- vdev_open_func_t *vdev_op_open;
- vdev_close_func_t *vdev_op_close;
- vdev_asize_func_t *vdev_op_asize;
- vdev_io_start_func_t *vdev_op_io_start;
- vdev_io_done_func_t *vdev_op_io_done;
- vdev_state_change_func_t *vdev_op_state_change;
- vdev_need_resilver_func_t *vdev_op_need_resilver;
- vdev_hold_func_t *vdev_op_hold;
- vdev_rele_func_t *vdev_op_rele;
- vdev_remap_func_t *vdev_op_remap;
- /*
- * For translating ranges from non-leaf vdevs (e.g. raidz) to leaves.
- * Used when initializing vdevs. Isn't used by leaf ops.
- */
- vdev_xlation_func_t *vdev_op_xlate;
- char vdev_op_type[16];
- boolean_t vdev_op_leaf;
-} vdev_ops_t;
-
-/*
- * Virtual device properties
- */
-struct vdev_cache_entry {
- struct abd *ve_abd;
- uint64_t ve_offset;
- uint64_t ve_lastused;
- avl_node_t ve_offset_node;
- avl_node_t ve_lastused_node;
- uint32_t ve_hits;
- uint16_t ve_missed_update;
- zio_t *ve_fill_io;
-};
-
-struct vdev_cache {
- avl_tree_t vc_offset_tree;
- avl_tree_t vc_lastused_tree;
- kmutex_t vc_lock;
-};
-
-typedef struct vdev_queue_class {
- uint32_t vqc_active;
-
- /*
- * Sorted by offset or timestamp, depending on if the queue is
- * LBA-ordered vs FIFO.
- */
- avl_tree_t vqc_queued_tree;
-} vdev_queue_class_t;
-
-struct vdev_queue {
- vdev_t *vq_vdev;
- vdev_queue_class_t vq_class[ZIO_PRIORITY_NUM_QUEUEABLE];
- avl_tree_t vq_active_tree;
- avl_tree_t vq_read_offset_tree;
- avl_tree_t vq_write_offset_tree;
- uint64_t vq_last_offset;
- hrtime_t vq_io_complete_ts; /* time last i/o completed */
- kmutex_t vq_lock;
- uint64_t vq_lastoffset;
-};
-
-typedef enum vdev_alloc_bias {
- VDEV_BIAS_NONE,
- VDEV_BIAS_LOG, /* dedicated to ZIL data (SLOG) */
- VDEV_BIAS_SPECIAL, /* dedicated to ddt, metadata, and small blks */
- VDEV_BIAS_DEDUP /* dedicated to dedup metadata */
-} vdev_alloc_bias_t;
-
-
-/*
- * On-disk indirect vdev state.
- *
- * An indirect vdev is described exclusively in the MOS config of a pool.
- * The config for an indirect vdev includes several fields, which are
- * accessed in memory by a vdev_indirect_config_t.
- */
-typedef struct vdev_indirect_config {
- /*
- * Object (in MOS) which contains the indirect mapping. This object
- * contains an array of vdev_indirect_mapping_entry_phys_t ordered by
- * vimep_src. The bonus buffer for this object is a
- * vdev_indirect_mapping_phys_t. This object is allocated when a vdev
- * removal is initiated.
- *
- * Note that this object can be empty if none of the data on the vdev
- * has been copied yet.
- */
- uint64_t vic_mapping_object;
-
- /*
- * Object (in MOS) which contains the birth times for the mapping
- * entries. This object contains an array of
- * vdev_indirect_birth_entry_phys_t sorted by vibe_offset. The bonus
- * buffer for this object is a vdev_indirect_birth_phys_t. This object
- * is allocated when a vdev removal is initiated.
- *
- * Note that this object can be empty if none of the vdev has yet been
- * copied.
- */
- uint64_t vic_births_object;
-
- /*
- * This is the vdev ID which was removed previous to this vdev, or
- * UINT64_MAX if there are no previously removed vdevs.
- */
- uint64_t vic_prev_indirect_vdev;
-} vdev_indirect_config_t;
-
-/*
- * Virtual device descriptor
- */
-struct vdev {
- /*
- * Common to all vdev types.
- */
- uint64_t vdev_id; /* child number in vdev parent */
- uint64_t vdev_guid; /* unique ID for this vdev */
- uint64_t vdev_guid_sum; /* self guid + all child guids */
- uint64_t vdev_orig_guid; /* orig. guid prior to remove */
- uint64_t vdev_asize; /* allocatable device capacity */
- uint64_t vdev_min_asize; /* min acceptable asize */
- uint64_t vdev_max_asize; /* max acceptable asize */
- uint64_t vdev_ashift; /* block alignment shift */
- /*
- * Logical block alignment shift
- *
- * The smallest sized/aligned I/O supported by the device.
- */
- uint64_t vdev_logical_ashift;
- /*
- * Physical block alignment shift
- *
- * The device supports logical I/Os with vdev_logical_ashift
- * size/alignment, but optimum performance will be achieved by
- * aligning/sizing requests to vdev_physical_ashift. Smaller
- * requests may be inflated or incur device level read-modify-write
- * operations.
- *
- * May be 0 to indicate no preference (i.e. use vdev_logical_ashift).
- */
- uint64_t vdev_physical_ashift;
- uint64_t vdev_state; /* see VDEV_STATE_* #defines */
- uint64_t vdev_prevstate; /* used when reopening a vdev */
- vdev_ops_t *vdev_ops; /* vdev operations */
- spa_t *vdev_spa; /* spa for this vdev */
- void *vdev_tsd; /* type-specific data */
- vnode_t *vdev_name_vp; /* vnode for pathname */
- vnode_t *vdev_devid_vp; /* vnode for devid */
- vdev_t *vdev_top; /* top-level vdev */
- vdev_t *vdev_parent; /* parent vdev */
- vdev_t **vdev_child; /* array of children */
- uint64_t vdev_children; /* number of children */
- vdev_stat_t vdev_stat; /* virtual device statistics */
- boolean_t vdev_expanding; /* expand the vdev? */
- boolean_t vdev_reopening; /* reopen in progress? */
- boolean_t vdev_nonrot; /* true if solid state */
- int vdev_open_error; /* error on last open */
- kthread_t *vdev_open_thread; /* thread opening children */
- uint64_t vdev_crtxg; /* txg when top-level was added */
-
- /*
- * Top-level vdev state.
- */
- uint64_t vdev_ms_array; /* metaslab array object */
- uint64_t vdev_ms_shift; /* metaslab size shift */
- uint64_t vdev_ms_count; /* number of metaslabs */
- metaslab_group_t *vdev_mg; /* metaslab group */
- metaslab_t **vdev_ms; /* metaslab array */
- txg_list_t vdev_ms_list; /* per-txg dirty metaslab lists */
- txg_list_t vdev_dtl_list; /* per-txg dirty DTL lists */
- txg_node_t vdev_txg_node; /* per-txg dirty vdev linkage */
- boolean_t vdev_remove_wanted; /* async remove wanted? */
- boolean_t vdev_probe_wanted; /* async probe wanted? */
- list_node_t vdev_config_dirty_node; /* config dirty list */
- list_node_t vdev_state_dirty_node; /* state dirty list */
- uint64_t vdev_deflate_ratio; /* deflation ratio (x512) */
- uint64_t vdev_islog; /* is an intent log device */
- uint64_t vdev_removing; /* device is being removed? */
- boolean_t vdev_ishole; /* is a hole in the namespace */
- uint64_t vdev_top_zap;
- vdev_alloc_bias_t vdev_alloc_bias; /* metaslab allocation bias */
-
- /* pool checkpoint related */
- space_map_t *vdev_checkpoint_sm; /* contains reserved blocks */
-
- boolean_t vdev_initialize_exit_wanted;
- vdev_initializing_state_t vdev_initialize_state;
- kthread_t *vdev_initialize_thread;
- /* Protects vdev_initialize_thread and vdev_initialize_state. */
- kmutex_t vdev_initialize_lock;
- kcondvar_t vdev_initialize_cv;
- uint64_t vdev_initialize_offset[TXG_SIZE];
- uint64_t vdev_initialize_last_offset;
- range_tree_t *vdev_initialize_tree; /* valid while initializing */
- uint64_t vdev_initialize_bytes_est;
- uint64_t vdev_initialize_bytes_done;
- time_t vdev_initialize_action_time; /* start and end time */
-
- /* for limiting outstanding I/Os */
- kmutex_t vdev_initialize_io_lock;
- kcondvar_t vdev_initialize_io_cv;
- uint64_t vdev_initialize_inflight;
-
- /*
- * Values stored in the config for an indirect or removing vdev.
- */
- vdev_indirect_config_t vdev_indirect_config;
-
- /*
- * The vdev_indirect_rwlock protects the vdev_indirect_mapping
- * pointer from changing on indirect vdevs (when it is condensed).
- * Note that removing (not yet indirect) vdevs have different
- * access patterns (the mapping is not accessed from open context,
- * e.g. from zio_read) and locking strategy (e.g. svr_lock).
- */
- krwlock_t vdev_indirect_rwlock;
- vdev_indirect_mapping_t *vdev_indirect_mapping;
- vdev_indirect_births_t *vdev_indirect_births;
-
- /*
- * In memory data structures used to manage the obsolete sm, for
- * indirect or removing vdevs.
- *
- * The vdev_obsolete_segments is the in-core record of the segments
- * that are no longer referenced anywhere in the pool (due to
- * being freed or remapped and not referenced by any snapshots).
- * During a sync, segments are added to vdev_obsolete_segments
- * via vdev_indirect_mark_obsolete(); at the end of each sync
- * pass, this is appended to vdev_obsolete_sm via
- * vdev_indirect_sync_obsolete(). The vdev_obsolete_lock
- * protects against concurrent modifications of vdev_obsolete_segments
- * from multiple zio threads.
- */
- kmutex_t vdev_obsolete_lock;
- range_tree_t *vdev_obsolete_segments;
- space_map_t *vdev_obsolete_sm;
-
- /*
- * Protects the vdev_scan_io_queue field itself as well as the
- * structure's contents (when present).
- */
- kmutex_t vdev_scan_io_queue_lock;
- struct dsl_scan_io_queue *vdev_scan_io_queue;
-
- /*
- * Leaf vdev state.
- */
- range_tree_t *vdev_dtl[DTL_TYPES]; /* dirty time logs */
- space_map_t *vdev_dtl_sm; /* dirty time log space map */
- txg_node_t vdev_dtl_node; /* per-txg dirty DTL linkage */
- uint64_t vdev_dtl_object; /* DTL object */
- uint64_t vdev_psize; /* physical device capacity */
- uint64_t vdev_wholedisk; /* true if this is a whole disk */
- uint64_t vdev_offline; /* persistent offline state */
- uint64_t vdev_faulted; /* persistent faulted state */
- uint64_t vdev_degraded; /* persistent degraded state */
- uint64_t vdev_removed; /* persistent removed state */
- uint64_t vdev_resilver_txg; /* persistent resilvering state */
- uint64_t vdev_nparity; /* number of parity devices for raidz */
- char *vdev_path; /* vdev path (if any) */
- char *vdev_devid; /* vdev devid (if any) */
- char *vdev_physpath; /* vdev device path (if any) */
- char *vdev_fru; /* physical FRU location */
- uint64_t vdev_not_present; /* not present during import */
- uint64_t vdev_unspare; /* unspare when resilvering done */
- boolean_t vdev_nowritecache; /* true if flushwritecache failed */
- boolean_t vdev_notrim; /* true if trim failed */
- boolean_t vdev_checkremove; /* temporary online test */
- boolean_t vdev_forcefault; /* force online fault */
- boolean_t vdev_splitting; /* split or repair in progress */
- boolean_t vdev_delayed_close; /* delayed device close? */
- boolean_t vdev_tmpoffline; /* device taken offline temporarily? */
- boolean_t vdev_detached; /* device detached? */
- boolean_t vdev_cant_read; /* vdev is failing all reads */
- boolean_t vdev_cant_write; /* vdev is failing all writes */
- boolean_t vdev_isspare; /* was a hot spare */
- boolean_t vdev_isl2cache; /* was a l2cache device */
- vdev_queue_t vdev_queue; /* I/O deadline schedule queue */
- vdev_cache_t vdev_cache; /* physical block cache */
- spa_aux_vdev_t *vdev_aux; /* for l2cache and spares vdevs */
- zio_t *vdev_probe_zio; /* root of current probe */
- vdev_aux_t vdev_label_aux; /* on-disk aux state */
- struct trim_map *vdev_trimmap; /* map on outstanding trims */
- uint64_t vdev_leaf_zap;
- hrtime_t vdev_mmp_pending; /* 0 if write finished */
- uint64_t vdev_mmp_kstat_id; /* to find kstat entry */
- list_node_t vdev_leaf_node; /* leaf vdev list */
-
- /*
- * For DTrace to work in userland (libzpool) context, these fields must
- * remain at the end of the structure. DTrace will use the kernel's
- * CTF definition for 'struct vdev', and since the size of a kmutex_t is
- * larger in userland, the offsets for the rest of the fields would be
- * incorrect.
- */
- kmutex_t vdev_dtl_lock; /* vdev_dtl_{map,resilver} */
- kmutex_t vdev_stat_lock; /* vdev_stat */
- kmutex_t vdev_probe_lock; /* protects vdev_probe_zio */
-};
-
-#define VDEV_RAIDZ_MAXPARITY 3
-
-#define VDEV_PAD_SIZE (8 << 10)
-/* 2 padding areas (vl_pad1 and vl_be) to skip */
-#define VDEV_SKIP_SIZE VDEV_PAD_SIZE * 2
-#define VDEV_PHYS_SIZE (112 << 10)
-#define VDEV_UBERBLOCK_RING (128 << 10)
-
-/*
- * MMP blocks occupy the last MMP_BLOCKS_PER_LABEL slots in the uberblock
- * ring when MMP is enabled.
- */
-#define MMP_BLOCKS_PER_LABEL 1
-
-/* The largest uberblock we support is 8k. */
-#define MAX_UBERBLOCK_SHIFT (13)
-#define VDEV_UBERBLOCK_SHIFT(vd) \
- MIN(MAX((vd)->vdev_top->vdev_ashift, UBERBLOCK_SHIFT), \
- MAX_UBERBLOCK_SHIFT)
-#define VDEV_UBERBLOCK_COUNT(vd) \
- (VDEV_UBERBLOCK_RING >> VDEV_UBERBLOCK_SHIFT(vd))
-#define VDEV_UBERBLOCK_OFFSET(vd, n) \
- offsetof(vdev_label_t, vl_uberblock[(n) << VDEV_UBERBLOCK_SHIFT(vd)])
-#define VDEV_UBERBLOCK_SIZE(vd) (1ULL << VDEV_UBERBLOCK_SHIFT(vd))
-
-typedef struct vdev_phys {
- char vp_nvlist[VDEV_PHYS_SIZE - sizeof (zio_eck_t)];
- zio_eck_t vp_zbt;
-} vdev_phys_t;
-
-typedef enum vbe_vers {
- /* The bootenv file is stored as ascii text in the envblock */
- VB_RAW = 0,
-
- /*
- * The bootenv file is converted to an nvlist and then packed into the
- * envblock.
- */
- VB_NVLIST = 1
-} vbe_vers_t;
-
-typedef struct vdev_boot_envblock {
- uint64_t vbe_version;
- char vbe_bootenv[VDEV_PAD_SIZE - sizeof (uint64_t) -
- sizeof (zio_eck_t)];
- zio_eck_t vbe_zbt;
-} vdev_boot_envblock_t;
-
-CTASSERT(sizeof (vdev_boot_envblock_t) == VDEV_PAD_SIZE);
-
-typedef struct vdev_label {
- char vl_pad1[VDEV_PAD_SIZE]; /* 8K */
- vdev_boot_envblock_t vl_be; /* 8K */
- vdev_phys_t vl_vdev_phys; /* 112K */
- char vl_uberblock[VDEV_UBERBLOCK_RING]; /* 128K */
-} vdev_label_t; /* 256K total */
-
-/*
- * vdev_dirty() flags
- */
-#define VDD_METASLAB 0x01
-#define VDD_DTL 0x02
-
-/* Offset of embedded boot loader region on each label */
-#define VDEV_BOOT_OFFSET (2 * sizeof (vdev_label_t))
-/*
- * Size of embedded boot loader region on each label.
- * The total size of the first two labels plus the boot area is 4MB.
- */
-#define VDEV_BOOT_SIZE (7ULL << 19) /* 3.5M */
-
-/*
- * Size of label regions at the start and end of each leaf device.
- */
-#define VDEV_LABEL_START_SIZE (2 * sizeof (vdev_label_t) + VDEV_BOOT_SIZE)
-#define VDEV_LABEL_END_SIZE (2 * sizeof (vdev_label_t))
-#define VDEV_LABELS 4
-#define VDEV_BEST_LABEL VDEV_LABELS
-
-#define VDEV_ALLOC_LOAD 0
-#define VDEV_ALLOC_ADD 1
-#define VDEV_ALLOC_SPARE 2
-#define VDEV_ALLOC_L2CACHE 3
-#define VDEV_ALLOC_ROOTPOOL 4
-#define VDEV_ALLOC_SPLIT 5
-#define VDEV_ALLOC_ATTACH 6
-
-/*
- * Allocate or free a vdev
- */
-extern vdev_t *vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid,
- vdev_ops_t *ops);
-extern int vdev_alloc(spa_t *spa, vdev_t **vdp, nvlist_t *config,
- vdev_t *parent, uint_t id, int alloctype);
-extern void vdev_free(vdev_t *vd);
-
-/*
- * Add or remove children and parents
- */
-extern void vdev_add_child(vdev_t *pvd, vdev_t *cvd);
-extern void vdev_remove_child(vdev_t *pvd, vdev_t *cvd);
-extern void vdev_compact_children(vdev_t *pvd);
-extern vdev_t *vdev_add_parent(vdev_t *cvd, vdev_ops_t *ops);
-extern void vdev_remove_parent(vdev_t *cvd);
-
-/*
- * vdev sync load and sync
- */
-extern boolean_t vdev_log_state_valid(vdev_t *vd);
-extern int vdev_load(vdev_t *vd);
-extern int vdev_dtl_load(vdev_t *vd);
-extern void vdev_sync(vdev_t *vd, uint64_t txg);
-extern void vdev_sync_done(vdev_t *vd, uint64_t txg);
-extern void vdev_dirty(vdev_t *vd, int flags, void *arg, uint64_t txg);
-extern void vdev_dirty_leaves(vdev_t *vd, int flags, uint64_t txg);
-
-/*
- * Available vdev types.
- */
-extern vdev_ops_t vdev_root_ops;
-extern vdev_ops_t vdev_mirror_ops;
-extern vdev_ops_t vdev_replacing_ops;
-extern vdev_ops_t vdev_raidz_ops;
-#ifdef _KERNEL
-extern vdev_ops_t vdev_geom_ops;
-#else
-extern vdev_ops_t vdev_disk_ops;
-#endif
-extern vdev_ops_t vdev_file_ops;
-extern vdev_ops_t vdev_missing_ops;
-extern vdev_ops_t vdev_hole_ops;
-extern vdev_ops_t vdev_spare_ops;
-extern vdev_ops_t vdev_indirect_ops;
-
-/*
- * Common size functions
- */
-extern void vdev_default_xlate(vdev_t *vd, const range_seg_t *in,
- range_seg_t *out);
-extern uint64_t vdev_default_asize(vdev_t *vd, uint64_t psize);
-extern uint64_t vdev_get_min_asize(vdev_t *vd);
-extern void vdev_set_min_asize(vdev_t *vd);
-
-/*
- * Global variables
- */
-extern int vdev_standard_sm_blksz;
-/* zdb uses this tunable, so it must be declared here to make lint happy. */
-extern int zfs_vdev_cache_size;
-extern uint_t zfs_geom_probe_vdev_key;
-
-/*
- * Functions from vdev_indirect.c
- */
-extern void vdev_indirect_sync_obsolete(vdev_t *vd, dmu_tx_t *tx);
-extern boolean_t vdev_indirect_should_condense(vdev_t *vd);
-extern void spa_condense_indirect_start_sync(vdev_t *vd, dmu_tx_t *tx);
-extern int vdev_obsolete_sm_object(vdev_t *vd);
-extern boolean_t vdev_obsolete_counts_are_precise(vdev_t *vd);
-
-#ifdef illumos
-/*
- * Other miscellaneous functions
- */
-int vdev_checkpoint_sm_object(vdev_t *vd);
-
-/*
- * The vdev_buf_t is used to translate between zio_t and buf_t, and back again.
- */
-typedef struct vdev_buf {
- buf_t vb_buf; /* buffer that describes the io */
- zio_t *vb_io; /* pointer back to the original zio_t */
-} vdev_buf_t;
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_births.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_births.h
deleted file mode 100644
index 987b14485d2b..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_births.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_VDEV_INDIRECT_BIRTHS_H
-#define _SYS_VDEV_INDIRECT_BIRTHS_H
-
-#include <sys/dmu.h>
-#include <sys/spa.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct vdev_indirect_birth_entry_phys {
- uint64_t vibe_offset;
- uint64_t vibe_phys_birth_txg;
-} vdev_indirect_birth_entry_phys_t;
-
-typedef struct vdev_indirect_birth_phys {
- uint64_t vib_count; /* count of v_i_b_entry_phys_t's */
-} vdev_indirect_birth_phys_t;
-
-typedef struct vdev_indirect_births {
- uint64_t vib_object;
-
- /*
- * Each entry indicates that everything up to but not including
- * vibe_offset was copied in vibe_phys_birth_txg. Entries are sorted
- * by increasing phys_birth, and also by increasing offset. See
- * vdev_indirect_births_physbirth for usage.
- */
- vdev_indirect_birth_entry_phys_t *vib_entries;
-
- objset_t *vib_objset;
-
- dmu_buf_t *vib_dbuf;
- vdev_indirect_birth_phys_t *vib_phys;
-} vdev_indirect_births_t;
-
-extern vdev_indirect_births_t *vdev_indirect_births_open(objset_t *os,
- uint64_t object);
-extern void vdev_indirect_births_close(vdev_indirect_births_t *vib);
-extern boolean_t vdev_indirect_births_is_open(vdev_indirect_births_t *vib);
-extern uint64_t vdev_indirect_births_alloc(objset_t *os, dmu_tx_t *tx);
-extern void vdev_indirect_births_free(objset_t *os, uint64_t object,
- dmu_tx_t *tx);
-
-extern uint64_t vdev_indirect_births_count(vdev_indirect_births_t *vib);
-extern uint64_t vdev_indirect_births_object(vdev_indirect_births_t *vib);
-
-extern void vdev_indirect_births_add_entry(vdev_indirect_births_t *vib,
- uint64_t offset, uint64_t txg, dmu_tx_t *tx);
-
-extern uint64_t vdev_indirect_births_physbirth(vdev_indirect_births_t *vib,
- uint64_t offset, uint64_t asize);
-
-extern uint64_t vdev_indirect_births_last_entry_txg(
- vdev_indirect_births_t *vib);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_INDIRECT_BIRTHS_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_mapping.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_mapping.h
deleted file mode 100644
index 7e42c1019504..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_indirect_mapping.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_VDEV_INDIRECT_MAPPING_H
-#define _SYS_VDEV_INDIRECT_MAPPING_H
-
-#include <sys/dmu.h>
-#include <sys/list.h>
-#include <sys/spa.h>
-#include <sys/space_map.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct vdev_indirect_mapping_entry_phys {
- /*
- * Decode with DVA_MAPPING_* macros.
- * Contains:
- * the source offset (low 63 bits)
- * the one-bit "mark", used for garbage collection (by zdb)
- */
- uint64_t vimep_src;
-
- /*
- * Note: the DVA's asize is 24 bits, and can thus store ranges
- * up to 8GB.
- */
- dva_t vimep_dst;
-} vdev_indirect_mapping_entry_phys_t;
-
-#define DVA_MAPPING_GET_SRC_OFFSET(vimep) \
- BF64_GET_SB((vimep)->vimep_src, 0, 63, SPA_MINBLOCKSHIFT, 0)
-#define DVA_MAPPING_SET_SRC_OFFSET(vimep, x) \
- BF64_SET_SB((vimep)->vimep_src, 0, 63, SPA_MINBLOCKSHIFT, 0, x)
-
-typedef struct vdev_indirect_mapping_entry {
- vdev_indirect_mapping_entry_phys_t vime_mapping;
- uint32_t vime_obsolete_count;
- list_node_t vime_node;
-} vdev_indirect_mapping_entry_t;
-
-/*
- * This is stored in the bonus buffer of the mapping object, see comment of
- * vdev_indirect_config for more details.
- */
-typedef struct vdev_indirect_mapping_phys {
- uint64_t vimp_max_offset;
- uint64_t vimp_bytes_mapped;
- uint64_t vimp_num_entries; /* number of v_i_m_entry_phys_t's */
-
- /*
- * For each entry in the mapping object, this object contains an
- * entry representing the number of bytes of that mapping entry
- * that were no longer in use by the pool at the time this indirect
- * vdev was last condensed.
- */
- uint64_t vimp_counts_object;
-} vdev_indirect_mapping_phys_t;
-
-#define VDEV_INDIRECT_MAPPING_SIZE_V0 (3 * sizeof (uint64_t))
-
-typedef struct vdev_indirect_mapping {
- uint64_t vim_object;
- boolean_t vim_havecounts;
-
- /*
- * An ordered array of all mapping entries, sorted by source offset.
- * Note that vim_entries is needed during a removal (and contains
- * mappings that have been synced to disk so far) to handle frees
- * from the removing device.
- */
- vdev_indirect_mapping_entry_phys_t *vim_entries;
-
- objset_t *vim_objset;
-
- dmu_buf_t *vim_dbuf;
- vdev_indirect_mapping_phys_t *vim_phys;
-} vdev_indirect_mapping_t;
-
-extern vdev_indirect_mapping_t *vdev_indirect_mapping_open(objset_t *os,
- uint64_t object);
-extern void vdev_indirect_mapping_close(vdev_indirect_mapping_t *vim);
-extern uint64_t vdev_indirect_mapping_alloc(objset_t *os, dmu_tx_t *tx);
-extern void vdev_indirect_mapping_free(objset_t *os, uint64_t obj,
- dmu_tx_t *tx);
-
-extern uint64_t vdev_indirect_mapping_num_entries(vdev_indirect_mapping_t *vim);
-extern uint64_t vdev_indirect_mapping_max_offset(vdev_indirect_mapping_t *vim);
-extern uint64_t vdev_indirect_mapping_object(vdev_indirect_mapping_t *vim);
-extern uint64_t vdev_indirect_mapping_bytes_mapped(
- vdev_indirect_mapping_t *vim);
-extern uint64_t vdev_indirect_mapping_size(vdev_indirect_mapping_t *vim);
-
-/*
- * Writes the given list of vdev_indirect_mapping_entry_t to the mapping
- * then updates internal state.
- */
-extern void vdev_indirect_mapping_add_entries(vdev_indirect_mapping_t *vim,
- list_t *vime_list, dmu_tx_t *tx);
-
-extern vdev_indirect_mapping_entry_phys_t *
- vdev_indirect_mapping_entry_for_offset(vdev_indirect_mapping_t *vim,
- uint64_t offset);
-
-extern vdev_indirect_mapping_entry_phys_t *
- vdev_indirect_mapping_entry_for_offset_or_next(vdev_indirect_mapping_t *vim,
- uint64_t offset);
-
-extern uint32_t *vdev_indirect_mapping_load_obsolete_counts(
- vdev_indirect_mapping_t *vim);
-extern void vdev_indirect_mapping_load_obsolete_spacemap(
- vdev_indirect_mapping_t *vim,
- uint32_t *counts, space_map_t *obsolete_space_sm);
-extern void vdev_indirect_mapping_increment_obsolete_count(
- vdev_indirect_mapping_t *vim,
- uint64_t offset, uint64_t asize, uint32_t *counts);
-extern void vdev_indirect_mapping_free_obsolete_counts(
- vdev_indirect_mapping_t *vim, uint32_t *counts);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_INDIRECT_MAPPING_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_initialize.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_initialize.h
deleted file mode 100644
index db4b0572cd60..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_initialize.h
+++ /dev/null
@@ -1,46 +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 (c) 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_VDEV_INITIALIZE_H
-#define _SYS_VDEV_INITIALIZE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void vdev_initialize(vdev_t *vd);
-extern void vdev_initialize_stop(vdev_t *vd,
- vdev_initializing_state_t tgt_state);
-extern void vdev_initialize_stop_all(vdev_t *vd,
- vdev_initializing_state_t tgt_state);
-extern void vdev_initialize_restart(vdev_t *vd);
-extern void vdev_xlate(vdev_t *vd, const range_seg_t *logical_rs,
- range_seg_t *physical_rs);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_INITIALIZE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_raidz.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_raidz.h
deleted file mode 100644
index e771e668fda6..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_raidz.h
+++ /dev/null
@@ -1,50 +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 (c) 2013, Joyent, Inc. All rights reserved.
- */
-
-#ifndef _SYS_VDEV_RAIDZ_H
-#define _SYS_VDEV_RAIDZ_H
-
-#include <sys/vdev.h>
-#ifdef illumos
-#include <sys/semaphore.h>
-#ifdef _KERNEL
-#include <sys/ddi.h>
-#include <sys/sunldi.h>
-#include <sys/sunddi.h>
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef _KERNEL
-extern int vdev_raidz_physio(vdev_t *,
- caddr_t, size_t, uint64_t, uint64_t, boolean_t, boolean_t);
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_RAIDZ_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_removal.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_removal.h
deleted file mode 100644
index 3962237afdab..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_removal.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2014, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_VDEV_REMOVAL_H
-#define _SYS_VDEV_REMOVAL_H
-
-#include <sys/spa.h>
-#include <sys/bpobj.h>
-#include <sys/vdev_indirect_mapping.h>
-#include <sys/vdev_indirect_births.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct spa_vdev_removal {
- uint64_t svr_vdev_id;
- uint64_t svr_max_offset_to_sync[TXG_SIZE];
- /* Thread performing a vdev removal. */
- kthread_t *svr_thread;
- /* Segments left to copy from the current metaslab. */
- range_tree_t *svr_allocd_segs;
- kmutex_t svr_lock;
- kcondvar_t svr_cv;
- boolean_t svr_thread_exit;
-
- /*
- * New mappings to write out each txg.
- */
- list_t svr_new_segments[TXG_SIZE];
-
- /*
- * Ranges that were freed while a mapping was in flight. This is
- * a subset of the ranges covered by vdev_im_new_segments.
- */
- range_tree_t *svr_frees[TXG_SIZE];
-
- /*
- * Number of bytes which we have finished our work for
- * in each txg. This could be data copied (which will be part of
- * the mappings in vdev_im_new_segments), or data freed before
- * we got around to copying it.
- */
- uint64_t svr_bytes_done[TXG_SIZE];
-
- /* List of leaf zap objects to be unlinked */
- nvlist_t *svr_zaplist;
-} spa_vdev_removal_t;
-
-typedef struct spa_condensing_indirect {
- /*
- * New mappings to write out each txg.
- */
- list_t sci_new_mapping_entries[TXG_SIZE];
-
- vdev_indirect_mapping_t *sci_new_mapping;
-} spa_condensing_indirect_t;
-
-extern int spa_remove_init(spa_t *);
-extern void spa_restart_removal(spa_t *);
-extern int spa_condense_init(spa_t *);
-extern void spa_condense_fini(spa_t *);
-extern void spa_start_indirect_condensing_thread(spa_t *);
-extern void spa_vdev_condense_suspend(spa_t *);
-extern int spa_vdev_remove(spa_t *, uint64_t, boolean_t);
-extern void free_from_removing_vdev(vdev_t *, uint64_t, uint64_t);
-extern int spa_removal_get_stats(spa_t *, pool_removal_stat_t *);
-extern void svr_sync(spa_t *spa, dmu_tx_t *tx);
-extern void spa_vdev_remove_suspend(spa_t *);
-extern int spa_vdev_remove_cancel(spa_t *);
-extern void spa_vdev_removal_destroy(spa_vdev_removal_t *svr);
-
-extern int vdev_removal_max_span;
-extern int zfs_remove_max_segment;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_VDEV_REMOVAL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h
deleted file mode 100644
index e60233b4b103..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h
+++ /dev/null
@@ -1,514 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright 2017 Nexenta Systems, Inc.
- */
-
-#ifndef _SYS_ZAP_H
-#define _SYS_ZAP_H
-
-/*
- * ZAP - ZFS Attribute Processor
- *
- * The ZAP is a module which sits on top of the DMU (Data Management
- * Unit) and implements a higher-level storage primitive using DMU
- * objects. Its primary consumer is the ZPL (ZFS Posix Layer).
- *
- * A "zapobj" is a DMU object which the ZAP uses to stores attributes.
- * Users should use only zap routines to access a zapobj - they should
- * not access the DMU object directly using DMU routines.
- *
- * The attributes stored in a zapobj are name-value pairs. The name is
- * a zero-terminated string of up to ZAP_MAXNAMELEN bytes (including
- * terminating NULL). The value is an array of integers, which may be
- * 1, 2, 4, or 8 bytes long. The total space used by the array (number
- * of integers * integer length) can be up to ZAP_MAXVALUELEN bytes.
- * Note that an 8-byte integer value can be used to store the location
- * (object number) of another dmu object (which may be itself a zapobj).
- * Note that you can use a zero-length attribute to store a single bit
- * of information - the attribute is present or not.
- *
- * The ZAP routines are thread-safe. However, you must observe the
- * DMU's restriction that a transaction may not be operated on
- * concurrently.
- *
- * Any of the routines that return an int may return an I/O error (EIO
- * or ECHECKSUM).
- *
- *
- * Implementation / Performance Notes:
- *
- * The ZAP is intended to operate most efficiently on attributes with
- * short (49 bytes or less) names and single 8-byte values, for which
- * the microzap will be used. The ZAP should be efficient enough so
- * that the user does not need to cache these attributes.
- *
- * The ZAP's locking scheme makes its routines thread-safe. Operations
- * on different zapobjs will be processed concurrently. Operations on
- * the same zapobj which only read data will be processed concurrently.
- * Operations on the same zapobj which modify data will be processed
- * concurrently when there are many attributes in the zapobj (because
- * the ZAP uses per-block locking - more than 128 * (number of cpus)
- * small attributes will suffice).
- */
-
-/*
- * We're using zero-terminated byte strings (ie. ASCII or UTF-8 C
- * strings) for the names of attributes, rather than a byte string
- * bounded by an explicit length. If some day we want to support names
- * in character sets which have embedded zeros (eg. UTF-16, UTF-32),
- * we'll have to add routines for using length-bounded strings.
- */
-
-#include <sys/dmu.h>
-#include <sys/refcount.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Specifies matching criteria for ZAP lookups.
- * MT_NORMALIZE Use ZAP normalization flags, which can include both
- * unicode normalization and case-insensitivity.
- * MT_MATCH_CASE Do case-sensitive lookups even if MT_NORMALIZE is
- * specified and ZAP normalization flags include
- * U8_TEXTPREP_TOUPPER.
- */
-typedef enum matchtype {
- MT_NORMALIZE = 1 << 0,
- MT_MATCH_CASE = 1 << 1,
-} matchtype_t;
-
-typedef enum zap_flags {
- /* Use 64-bit hash value (serialized cursors will always use 64-bits) */
- ZAP_FLAG_HASH64 = 1 << 0,
- /* Key is binary, not string (zap_add_uint64() can be used) */
- ZAP_FLAG_UINT64_KEY = 1 << 1,
- /*
- * First word of key (which must be an array of uint64) is
- * already randomly distributed.
- */
- ZAP_FLAG_PRE_HASHED_KEY = 1 << 2,
-} zap_flags_t;
-
-/*
- * Create a new zapobj with no attributes and return its object number.
- *
- * dnodesize specifies the on-disk size of the dnode for the new zapobj.
- * Valid values are multiples of 512 up to DNODE_MAX_SIZE.
- */
-uint64_t zap_create(objset_t *ds, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
-uint64_t zap_create_dnsize(objset_t *ds, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx);
-uint64_t zap_create_norm(objset_t *ds, int normflags, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
-uint64_t zap_create_norm_dnsize(objset_t *ds, int normflags,
- dmu_object_type_t ot, dmu_object_type_t bonustype, int bonuslen,
- int dnodesize, dmu_tx_t *tx);
-uint64_t zap_create_flags(objset_t *os, int normflags, zap_flags_t flags,
- dmu_object_type_t ot, int leaf_blockshift, int indirect_blockshift,
- dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
-uint64_t zap_create_flags_dnsize(objset_t *os, int normflags,
- zap_flags_t flags, dmu_object_type_t ot, int leaf_blockshift,
- int indirect_blockshift, dmu_object_type_t bonustype, int bonuslen,
- int dnodesize, dmu_tx_t *tx);
-uint64_t zap_create_link(objset_t *os, dmu_object_type_t ot,
- uint64_t parent_obj, const char *name, dmu_tx_t *tx);
-uint64_t zap_create_link_dnsize(objset_t *os, dmu_object_type_t ot,
- uint64_t parent_obj, const char *name, int dnodesize, dmu_tx_t *tx);
-uint64_t zap_create_link_dnsize(objset_t *os, dmu_object_type_t ot,
- uint64_t parent_obj, const char *name, int dnodesize, dmu_tx_t *tx);
-
-/*
- * Initialize an already-allocated object.
- */
-void mzap_create_impl(objset_t *os, uint64_t obj, int normflags,
- zap_flags_t flags, dmu_tx_t *tx);
-
-/*
- * Create a new zapobj with no attributes from the given (unallocated)
- * object number.
- */
-int zap_create_claim(objset_t *ds, uint64_t obj, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
-int zap_create_claim_dnsize(objset_t *ds, uint64_t obj, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx);
-int zap_create_claim_norm(objset_t *ds, uint64_t obj,
- int normflags, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
-int zap_create_claim_norm_dnsize(objset_t *ds, uint64_t obj,
- int normflags, dmu_object_type_t ot,
- dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx);
-
-/*
- * The zapobj passed in must be a valid ZAP object for all of the
- * following routines.
- */
-
-/*
- * Destroy this zapobj and all its attributes.
- *
- * Frees the object number using dmu_object_free.
- */
-int zap_destroy(objset_t *ds, uint64_t zapobj, dmu_tx_t *tx);
-
-/*
- * Manipulate attributes.
- *
- * 'integer_size' is in bytes, and must be 1, 2, 4, or 8.
- */
-
-/*
- * Retrieve the contents of the attribute with the given name.
- *
- * If the requested attribute does not exist, the call will fail and
- * return ENOENT.
- *
- * If 'integer_size' is smaller than the attribute's integer size, the
- * call will fail and return EINVAL.
- *
- * If 'integer_size' is equal to or larger than the attribute's integer
- * size, the call will succeed and return 0.
- *
- * When converting to a larger integer size, the integers will be treated as
- * unsigned (ie. no sign-extension will be performed).
- *
- * 'num_integers' is the length (in integers) of 'buf'.
- *
- * If the attribute is longer than the buffer, as many integers as will
- * fit will be transferred to 'buf'. If the entire attribute was not
- * transferred, the call will return EOVERFLOW.
- */
-int zap_lookup(objset_t *ds, uint64_t zapobj, const char *name,
- uint64_t integer_size, uint64_t num_integers, void *buf);
-
-/*
- * If rn_len is nonzero, realname will be set to the name of the found
- * entry (which may be different from the requested name if matchtype is
- * not MT_EXACT).
- *
- * If normalization_conflictp is not NULL, it will be set if there is
- * another name with the same case/unicode normalized form.
- */
-int zap_lookup_norm(objset_t *ds, uint64_t zapobj, const char *name,
- uint64_t integer_size, uint64_t num_integers, void *buf,
- matchtype_t mt, char *realname, int rn_len,
- boolean_t *normalization_conflictp);
-int zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
- int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf);
-int zap_contains(objset_t *ds, uint64_t zapobj, const char *name);
-int zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
- int key_numints);
-int zap_lookup_by_dnode(dnode_t *dn, const char *name,
- uint64_t integer_size, uint64_t num_integers, void *buf);
-int zap_lookup_norm_by_dnode(dnode_t *dn, const char *name,
- uint64_t integer_size, uint64_t num_integers, void *buf,
- matchtype_t mt, char *realname, int rn_len,
- boolean_t *ncp);
-
-int zap_count_write_by_dnode(dnode_t *dn, const char *name,
- int add, zfs_refcount_t *towrite, zfs_refcount_t *tooverwrite);
-
-/*
- * Create an attribute with the given name and value.
- *
- * If an attribute with the given name already exists, the call will
- * fail and return EEXIST.
- */
-int zap_add(objset_t *ds, uint64_t zapobj, const char *key,
- int integer_size, uint64_t num_integers,
- const void *val, dmu_tx_t *tx);
-int zap_add_by_dnode(dnode_t *dn, const char *key,
- int integer_size, uint64_t num_integers,
- const void *val, dmu_tx_t *tx);
-int zap_add_uint64(objset_t *ds, uint64_t zapobj, const uint64_t *key,
- int key_numints, int integer_size, uint64_t num_integers,
- const void *val, dmu_tx_t *tx);
-
-/*
- * Set the attribute with the given name to the given value. If an
- * attribute with the given name does not exist, it will be created. If
- * an attribute with the given name already exists, the previous value
- * will be overwritten. The integer_size may be different from the
- * existing attribute's integer size, in which case the attribute's
- * integer size will be updated to the new value.
- */
-int zap_update(objset_t *ds, uint64_t zapobj, const char *name,
- int integer_size, uint64_t num_integers, const void *val, dmu_tx_t *tx);
-int zap_update_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
- int key_numints,
- int integer_size, uint64_t num_integers, const void *val, dmu_tx_t *tx);
-
-/*
- * Get the length (in integers) and the integer size of the specified
- * attribute.
- *
- * If the requested attribute does not exist, the call will fail and
- * return ENOENT.
- */
-int zap_length(objset_t *ds, uint64_t zapobj, const char *name,
- uint64_t *integer_size, uint64_t *num_integers);
-int zap_length_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
- int key_numints, uint64_t *integer_size, uint64_t *num_integers);
-
-/*
- * Remove the specified attribute.
- *
- * If the specified attribute does not exist, the call will fail and
- * return ENOENT.
- */
-int zap_remove(objset_t *ds, uint64_t zapobj, const char *name, dmu_tx_t *tx);
-int zap_remove_norm(objset_t *ds, uint64_t zapobj, const char *name,
- matchtype_t mt, dmu_tx_t *tx);
-int zap_remove_by_dnode(dnode_t *dn, const char *name, dmu_tx_t *tx);
-int zap_remove_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
- int key_numints, dmu_tx_t *tx);
-
-/*
- * Returns (in *count) the number of attributes in the specified zap
- * object.
- */
-int zap_count(objset_t *ds, uint64_t zapobj, uint64_t *count);
-
-/*
- * Returns (in name) the name of the entry whose (value & mask)
- * (za_first_integer) is value, or ENOENT if not found. The string
- * pointed to by name must be at least 256 bytes long. If mask==0, the
- * match must be exact (ie, same as mask=-1ULL).
- */
-int zap_value_search(objset_t *os, uint64_t zapobj,
- uint64_t value, uint64_t mask, char *name);
-
-/*
- * Transfer all the entries from fromobj into intoobj. Only works on
- * int_size=8 num_integers=1 values. Fails if there are any duplicated
- * entries.
- */
-int zap_join(objset_t *os, uint64_t fromobj, uint64_t intoobj, dmu_tx_t *tx);
-
-/* Same as zap_join, but set the values to 'value'. */
-int zap_join_key(objset_t *os, uint64_t fromobj, uint64_t intoobj,
- uint64_t value, dmu_tx_t *tx);
-
-/* Same as zap_join, but add together any duplicated entries. */
-int zap_join_increment(objset_t *os, uint64_t fromobj, uint64_t intoobj,
- dmu_tx_t *tx);
-
-/*
- * Manipulate entries where the name + value are the "same" (the name is
- * a stringified version of the value).
- */
-int zap_add_int(objset_t *os, uint64_t obj, uint64_t value, dmu_tx_t *tx);
-int zap_remove_int(objset_t *os, uint64_t obj, uint64_t value, dmu_tx_t *tx);
-int zap_lookup_int(objset_t *os, uint64_t obj, uint64_t value);
-int zap_increment_int(objset_t *os, uint64_t obj, uint64_t key, int64_t delta,
- dmu_tx_t *tx);
-
-/* Here the key is an int and the value is a different int. */
-int zap_add_int_key(objset_t *os, uint64_t obj,
- uint64_t key, uint64_t value, dmu_tx_t *tx);
-int zap_update_int_key(objset_t *os, uint64_t obj,
- uint64_t key, uint64_t value, dmu_tx_t *tx);
-int zap_lookup_int_key(objset_t *os, uint64_t obj,
- uint64_t key, uint64_t *valuep);
-
-int zap_increment(objset_t *os, uint64_t obj, const char *name, int64_t delta,
- dmu_tx_t *tx);
-
-struct zap;
-struct zap_leaf;
-typedef struct zap_cursor {
- /* This structure is opaque! */
- objset_t *zc_objset;
- struct zap *zc_zap;
- struct zap_leaf *zc_leaf;
- uint64_t zc_zapobj;
- uint64_t zc_serialized;
- uint64_t zc_hash;
- uint32_t zc_cd;
- boolean_t zc_prefetch;
-} zap_cursor_t;
-
-typedef struct {
- int za_integer_length;
- /*
- * za_normalization_conflict will be set if there are additional
- * entries with this normalized form (eg, "foo" and "Foo").
- */
- boolean_t za_normalization_conflict;
- uint64_t za_num_integers;
- uint64_t za_first_integer; /* no sign extension for <8byte ints */
- char za_name[ZAP_MAXNAMELEN];
-} zap_attribute_t;
-
-/*
- * The interface for listing all the attributes of a zapobj can be
- * thought of as cursor moving down a list of the attributes one by
- * one. The cookie returned by the zap_cursor_serialize routine is
- * persistent across system calls (and across reboot, even).
- */
-
-/*
- * Initialize a zap cursor, pointing to the "first" attribute of the
- * zapobj. You must _fini the cursor when you are done with it.
- */
-void zap_cursor_init(zap_cursor_t *zc, objset_t *ds, uint64_t zapobj);
-void zap_cursor_init_noprefetch(zap_cursor_t *zc, objset_t *os,
- uint64_t zapobj);
-void zap_cursor_fini(zap_cursor_t *zc);
-
-/*
- * Get the attribute currently pointed to by the cursor. Returns
- * ENOENT if at the end of the attributes.
- */
-int zap_cursor_retrieve(zap_cursor_t *zc, zap_attribute_t *za);
-
-/*
- * Advance the cursor to the next attribute.
- */
-void zap_cursor_advance(zap_cursor_t *zc);
-
-/*
- * Get a persistent cookie pointing to the current position of the zap
- * cursor. The low 4 bits in the cookie are always zero, and thus can
- * be used as to differentiate a serialized cookie from a different type
- * of value. The cookie will be less than 2^32 as long as there are
- * fewer than 2^22 (4.2 million) entries in the zap object.
- */
-uint64_t zap_cursor_serialize(zap_cursor_t *zc);
-
-/*
- * Advance the cursor to the attribute having the given key.
- */
-int zap_cursor_move_to_key(zap_cursor_t *zc, const char *name, matchtype_t mt);
-
-/*
- * Initialize a zap cursor pointing to the position recorded by
- * zap_cursor_serialize (in the "serialized" argument). You can also
- * use a "serialized" argument of 0 to start at the beginning of the
- * zapobj (ie. zap_cursor_init_serialized(..., 0) is equivalent to
- * zap_cursor_init(...).)
- */
-void zap_cursor_init_serialized(zap_cursor_t *zc, objset_t *ds,
- uint64_t zapobj, uint64_t serialized);
-
-
-#define ZAP_HISTOGRAM_SIZE 10
-
-typedef struct zap_stats {
- /*
- * Size of the pointer table (in number of entries).
- * This is always a power of 2, or zero if it's a microzap.
- * In general, it should be considerably greater than zs_num_leafs.
- */
- uint64_t zs_ptrtbl_len;
-
- uint64_t zs_blocksize; /* size of zap blocks */
-
- /*
- * The number of blocks used. Note that some blocks may be
- * wasted because old ptrtbl's and large name/value blocks are
- * not reused. (Although their space is reclaimed, we don't
- * reuse those offsets in the object.)
- */
- uint64_t zs_num_blocks;
-
- /*
- * Pointer table values from zap_ptrtbl in the zap_phys_t
- */
- uint64_t zs_ptrtbl_nextblk; /* next (larger) copy start block */
- uint64_t zs_ptrtbl_blks_copied; /* number source blocks copied */
- uint64_t zs_ptrtbl_zt_blk; /* starting block number */
- uint64_t zs_ptrtbl_zt_numblks; /* number of blocks */
- uint64_t zs_ptrtbl_zt_shift; /* bits to index it */
-
- /*
- * Values of the other members of the zap_phys_t
- */
- uint64_t zs_block_type; /* ZBT_HEADER */
- uint64_t zs_magic; /* ZAP_MAGIC */
- uint64_t zs_num_leafs; /* The number of leaf blocks */
- uint64_t zs_num_entries; /* The number of zap entries */
- uint64_t zs_salt; /* salt to stir into hash function */
-
- /*
- * Histograms. For all histograms, the last index
- * (ZAP_HISTOGRAM_SIZE-1) includes any values which are greater
- * than what can be represented. For example
- * zs_leafs_with_n5_entries[ZAP_HISTOGRAM_SIZE-1] is the number
- * of leafs with more than 45 entries.
- */
-
- /*
- * zs_leafs_with_n_pointers[n] is the number of leafs with
- * 2^n pointers to it.
- */
- uint64_t zs_leafs_with_2n_pointers[ZAP_HISTOGRAM_SIZE];
-
- /*
- * zs_leafs_with_n_entries[n] is the number of leafs with
- * [n*5, (n+1)*5) entries. In the current implementation, there
- * can be at most 55 entries in any block, but there may be
- * fewer if the name or value is large, or the block is not
- * completely full.
- */
- uint64_t zs_blocks_with_n5_entries[ZAP_HISTOGRAM_SIZE];
-
- /*
- * zs_leafs_n_tenths_full[n] is the number of leafs whose
- * fullness is in the range [n/10, (n+1)/10).
- */
- uint64_t zs_blocks_n_tenths_full[ZAP_HISTOGRAM_SIZE];
-
- /*
- * zs_entries_using_n_chunks[n] is the number of entries which
- * consume n 24-byte chunks. (Note, large names/values only use
- * one chunk, but contribute to zs_num_blocks_large.)
- */
- uint64_t zs_entries_using_n_chunks[ZAP_HISTOGRAM_SIZE];
-
- /*
- * zs_buckets_with_n_entries[n] is the number of buckets (each
- * leaf has 64 buckets) with n entries.
- * zs_buckets_with_n_entries[1] should be very close to
- * zs_num_entries.
- */
- uint64_t zs_buckets_with_n_entries[ZAP_HISTOGRAM_SIZE];
-} zap_stats_t;
-
-/*
- * Get statistics about a ZAP object. Note: you need to be aware of the
- * internal implementation of the ZAP to correctly interpret some of the
- * statistics. This interface shouldn't be relied on unless you really
- * know what you're doing.
- */
-int zap_get_stats(objset_t *ds, uint64_t zapobj, zap_stats_t *zs);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZAP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h
deleted file mode 100644
index 912b8b219c4c..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h
+++ /dev/null
@@ -1,242 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013, 2016 by Delphix. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- * Copyright 2017 Nexenta Systems, Inc.
- */
-
-#ifndef _SYS_ZAP_IMPL_H
-#define _SYS_ZAP_IMPL_H
-
-#include <sys/zap.h>
-#include <sys/zfs_context.h>
-#include <sys/avl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int fzap_default_block_shift;
-
-#define ZAP_MAGIC 0x2F52AB2ABULL
-
-#define FZAP_BLOCK_SHIFT(zap) ((zap)->zap_f.zap_block_shift)
-
-#define MZAP_ENT_LEN 64
-#define MZAP_NAME_LEN (MZAP_ENT_LEN - 8 - 4 - 2)
-#define MZAP_MAX_BLKSZ SPA_OLD_MAXBLOCKSIZE
-
-#define ZAP_NEED_CD (-1U)
-
-typedef struct mzap_ent_phys {
- uint64_t mze_value;
- uint32_t mze_cd;
- uint16_t mze_pad; /* in case we want to chain them someday */
- char mze_name[MZAP_NAME_LEN];
-} mzap_ent_phys_t;
-
-typedef struct mzap_phys {
- uint64_t mz_block_type; /* ZBT_MICRO */
- uint64_t mz_salt;
- uint64_t mz_normflags;
- uint64_t mz_pad[5];
- mzap_ent_phys_t mz_chunk[1];
- /* actually variable size depending on block size */
-} mzap_phys_t;
-
-typedef struct mzap_ent {
- avl_node_t mze_node;
- int mze_chunkid;
- uint64_t mze_hash;
- uint32_t mze_cd; /* copy from mze_phys->mze_cd */
-} mzap_ent_t;
-
-#define MZE_PHYS(zap, mze) \
- (&zap_m_phys(zap)->mz_chunk[(mze)->mze_chunkid])
-
-/*
- * The (fat) zap is stored in one object. It is an array of
- * 1<<FZAP_BLOCK_SHIFT byte blocks. The layout looks like one of:
- *
- * ptrtbl fits in first block:
- * [zap_phys_t zap_ptrtbl_shift < 6] [zap_leaf_t] ...
- *
- * ptrtbl too big for first block:
- * [zap_phys_t zap_ptrtbl_shift >= 6] [zap_leaf_t] [ptrtbl] ...
- *
- */
-
-struct dmu_buf;
-struct zap_leaf;
-
-#define ZBT_LEAF ((1ULL << 63) + 0)
-#define ZBT_HEADER ((1ULL << 63) + 1)
-#define ZBT_MICRO ((1ULL << 63) + 3)
-/* any other values are ptrtbl blocks */
-
-/*
- * the embedded pointer table takes up half a block:
- * block size / entry size (2^3) / 2
- */
-#define ZAP_EMBEDDED_PTRTBL_SHIFT(zap) (FZAP_BLOCK_SHIFT(zap) - 3 - 1)
-
-/*
- * The embedded pointer table starts half-way through the block. Since
- * the pointer table itself is half the block, it starts at (64-bit)
- * word number (1<<ZAP_EMBEDDED_PTRTBL_SHIFT(zap)).
- */
-#define ZAP_EMBEDDED_PTRTBL_ENT(zap, idx) \
- ((uint64_t *)zap_f_phys(zap)) \
- [(idx) + (1<<ZAP_EMBEDDED_PTRTBL_SHIFT(zap))]
-
-/*
- * TAKE NOTE:
- * If zap_phys_t is modified, zap_byteswap() must be modified.
- */
-typedef struct zap_phys {
- uint64_t zap_block_type; /* ZBT_HEADER */
- uint64_t zap_magic; /* ZAP_MAGIC */
-
- struct zap_table_phys {
- uint64_t zt_blk; /* starting block number */
- uint64_t zt_numblks; /* number of blocks */
- uint64_t zt_shift; /* bits to index it */
- uint64_t zt_nextblk; /* next (larger) copy start block */
- uint64_t zt_blks_copied; /* number source blocks copied */
- } zap_ptrtbl;
-
- uint64_t zap_freeblk; /* the next free block */
- uint64_t zap_num_leafs; /* number of leafs */
- uint64_t zap_num_entries; /* number of entries */
- uint64_t zap_salt; /* salt to stir into hash function */
- uint64_t zap_normflags; /* flags for u8_textprep_str() */
- uint64_t zap_flags; /* zap_flags_t */
- /*
- * This structure is followed by padding, and then the embedded
- * pointer table. The embedded pointer table takes up second
- * half of the block. It is accessed using the
- * ZAP_EMBEDDED_PTRTBL_ENT() macro.
- */
-} zap_phys_t;
-
-typedef struct zap_table_phys zap_table_phys_t;
-
-typedef struct zap {
- dmu_buf_user_t zap_dbu;
- objset_t *zap_objset;
- uint64_t zap_object;
- struct dmu_buf *zap_dbuf;
- krwlock_t zap_rwlock;
- boolean_t zap_ismicro;
- int zap_normflags;
- uint64_t zap_salt;
- union {
- struct {
- /*
- * zap_num_entries_mtx protects
- * zap_num_entries
- */
- kmutex_t zap_num_entries_mtx;
- int zap_block_shift;
- } zap_fat;
- struct {
- int16_t zap_num_entries;
- int16_t zap_num_chunks;
- int16_t zap_alloc_next;
- avl_tree_t zap_avl;
- } zap_micro;
- } zap_u;
-} zap_t;
-
-inline zap_phys_t *
-zap_f_phys(zap_t *zap)
-{
- return (zap->zap_dbuf->db_data);
-}
-
-inline mzap_phys_t *
-zap_m_phys(zap_t *zap)
-{
- return (zap->zap_dbuf->db_data);
-}
-
-typedef struct zap_name {
- zap_t *zn_zap;
- int zn_key_intlen;
- const void *zn_key_orig;
- int zn_key_orig_numints;
- const void *zn_key_norm;
- int zn_key_norm_numints;
- uint64_t zn_hash;
- matchtype_t zn_matchtype;
- int zn_normflags;
- char zn_normbuf[ZAP_MAXNAMELEN];
-} zap_name_t;
-
-#define zap_f zap_u.zap_fat
-#define zap_m zap_u.zap_micro
-
-boolean_t zap_match(zap_name_t *zn, const char *matchname);
-int zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx,
- krw_t lti, boolean_t fatreader, boolean_t adding, void *tag, zap_t **zapp);
-void zap_unlockdir(zap_t *zap, void *tag);
-void zap_evict_sync(void *dbu);
-zap_name_t *zap_name_alloc(zap_t *zap, const char *key, matchtype_t mt);
-void zap_name_free(zap_name_t *zn);
-int zap_hashbits(zap_t *zap);
-uint32_t zap_maxcd(zap_t *zap);
-uint64_t zap_getflags(zap_t *zap);
-
-#define ZAP_HASH_IDX(hash, n) (((n) == 0) ? 0 : ((hash) >> (64 - (n))))
-
-void fzap_byteswap(void *buf, size_t size);
-int fzap_count(zap_t *zap, uint64_t *count);
-int fzap_lookup(zap_name_t *zn,
- uint64_t integer_size, uint64_t num_integers, void *buf,
- char *realname, int rn_len, boolean_t *normalization_conflictp);
-void fzap_prefetch(zap_name_t *zn);
-int fzap_add(zap_name_t *zn, uint64_t integer_size, uint64_t num_integers,
- const void *val, void *tag, dmu_tx_t *tx);
-int fzap_update(zap_name_t *zn,
- int integer_size, uint64_t num_integers, const void *val,
- void *tag, dmu_tx_t *tx);
-int fzap_length(zap_name_t *zn,
- uint64_t *integer_size, uint64_t *num_integers);
-int fzap_remove(zap_name_t *zn, dmu_tx_t *tx);
-int fzap_cursor_retrieve(zap_t *zap, zap_cursor_t *zc, zap_attribute_t *za);
-void fzap_get_stats(zap_t *zap, zap_stats_t *zs);
-void zap_put_leaf(struct zap_leaf *l);
-
-int fzap_add_cd(zap_name_t *zn,
- uint64_t integer_size, uint64_t num_integers,
- const void *val, uint32_t cd, void *tag, dmu_tx_t *tx);
-void fzap_upgrade(zap_t *zap, dmu_tx_t *tx, zap_flags_t flags);
-int fzap_cursor_move_to_key(zap_cursor_t *zc, zap_name_t *zn);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZAP_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h
deleted file mode 100644
index 76b3ecc72557..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h
+++ /dev/null
@@ -1,248 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
- */
-
-#ifndef _SYS_ZAP_LEAF_H
-#define _SYS_ZAP_LEAF_H
-
-#include <sys/zap.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct zap;
-struct zap_name;
-struct zap_stats;
-
-#define ZAP_LEAF_MAGIC 0x2AB1EAF
-
-/* chunk size = 24 bytes */
-#define ZAP_LEAF_CHUNKSIZE 24
-
-/*
- * The amount of space available for chunks is:
- * block size (1<<l->l_bs) - hash entry size (2) * number of hash
- * entries - header space (2*chunksize)
- */
-#define ZAP_LEAF_NUMCHUNKS(l) \
- (((1<<(l)->l_bs) - 2*ZAP_LEAF_HASH_NUMENTRIES(l)) / \
- ZAP_LEAF_CHUNKSIZE - 2)
-
-/*
- * The amount of space within the chunk available for the array is:
- * chunk size - space for type (1) - space for next pointer (2)
- */
-#define ZAP_LEAF_ARRAY_BYTES (ZAP_LEAF_CHUNKSIZE - 3)
-
-#define ZAP_LEAF_ARRAY_NCHUNKS(bytes) \
- (((bytes)+ZAP_LEAF_ARRAY_BYTES-1)/ZAP_LEAF_ARRAY_BYTES)
-
-/*
- * Low water mark: when there are only this many chunks free, start
- * growing the ptrtbl. Ideally, this should be larger than a
- * "reasonably-sized" entry. 20 chunks is more than enough for the
- * largest directory entry (MAXNAMELEN (256) byte name, 8-byte value),
- * while still being only around 3% for 16k blocks.
- */
-#define ZAP_LEAF_LOW_WATER (20)
-
-/*
- * The leaf hash table has block size / 2^5 (32) number of entries,
- * which should be more than enough for the maximum number of entries,
- * which is less than block size / CHUNKSIZE (24) / minimum number of
- * chunks per entry (3).
- */
-#define ZAP_LEAF_HASH_SHIFT(l) ((l)->l_bs - 5)
-#define ZAP_LEAF_HASH_NUMENTRIES(l) (1 << ZAP_LEAF_HASH_SHIFT(l))
-
-/*
- * The chunks start immediately after the hash table. The end of the
- * hash table is at l_hash + HASH_NUMENTRIES, which we simply cast to a
- * chunk_t.
- */
-#define ZAP_LEAF_CHUNK(l, idx) \
- ((zap_leaf_chunk_t *) \
- (zap_leaf_phys(l)->l_hash + ZAP_LEAF_HASH_NUMENTRIES(l)))[idx]
-#define ZAP_LEAF_ENTRY(l, idx) (&ZAP_LEAF_CHUNK(l, idx).l_entry)
-
-typedef enum zap_chunk_type {
- ZAP_CHUNK_FREE = 253,
- ZAP_CHUNK_ENTRY = 252,
- ZAP_CHUNK_ARRAY = 251,
- ZAP_CHUNK_TYPE_MAX = 250
-} zap_chunk_type_t;
-
-#define ZLF_ENTRIES_CDSORTED (1<<0)
-
-/*
- * TAKE NOTE:
- * If zap_leaf_phys_t is modified, zap_leaf_byteswap() must be modified.
- */
-typedef struct zap_leaf_phys {
- struct zap_leaf_header {
- /* Public to ZAP */
- uint64_t lh_block_type; /* ZBT_LEAF */
- uint64_t lh_pad1;
- uint64_t lh_prefix; /* hash prefix of this leaf */
- uint32_t lh_magic; /* ZAP_LEAF_MAGIC */
- uint16_t lh_nfree; /* number free chunks */
- uint16_t lh_nentries; /* number of entries */
- uint16_t lh_prefix_len; /* num bits used to id this */
-
- /* Private to zap_leaf */
- uint16_t lh_freelist; /* chunk head of free list */
- uint8_t lh_flags; /* ZLF_* flags */
- uint8_t lh_pad2[11];
- } l_hdr; /* 2 24-byte chunks */
-
- /*
- * The header is followed by a hash table with
- * ZAP_LEAF_HASH_NUMENTRIES(zap) entries. The hash table is
- * followed by an array of ZAP_LEAF_NUMCHUNKS(zap)
- * zap_leaf_chunk structures. These structures are accessed
- * with the ZAP_LEAF_CHUNK() macro.
- */
-
- uint16_t l_hash[1];
-} zap_leaf_phys_t;
-
-typedef union zap_leaf_chunk {
- struct zap_leaf_entry {
- uint8_t le_type; /* always ZAP_CHUNK_ENTRY */
- uint8_t le_value_intlen; /* size of value's ints */
- uint16_t le_next; /* next entry in hash chain */
- uint16_t le_name_chunk; /* first chunk of the name */
- uint16_t le_name_numints; /* ints in name (incl null) */
- uint16_t le_value_chunk; /* first chunk of the value */
- uint16_t le_value_numints; /* value length in ints */
- uint32_t le_cd; /* collision differentiator */
- uint64_t le_hash; /* hash value of the name */
- } l_entry;
- struct zap_leaf_array {
- uint8_t la_type; /* always ZAP_CHUNK_ARRAY */
- uint8_t la_array[ZAP_LEAF_ARRAY_BYTES];
- uint16_t la_next; /* next blk or CHAIN_END */
- } l_array;
- struct zap_leaf_free {
- uint8_t lf_type; /* always ZAP_CHUNK_FREE */
- uint8_t lf_pad[ZAP_LEAF_ARRAY_BYTES];
- uint16_t lf_next; /* next in free list, or CHAIN_END */
- } l_free;
-} zap_leaf_chunk_t;
-
-typedef struct zap_leaf {
- dmu_buf_user_t l_dbu;
- krwlock_t l_rwlock;
- uint64_t l_blkid; /* 1<<ZAP_BLOCK_SHIFT byte block off */
- int l_bs; /* block size shift */
- dmu_buf_t *l_dbuf;
-} zap_leaf_t;
-
-inline zap_leaf_phys_t *
-zap_leaf_phys(zap_leaf_t *l)
-{
- return (l->l_dbuf->db_data);
-}
-
-typedef struct zap_entry_handle {
- /* Set by zap_leaf and public to ZAP */
- uint64_t zeh_num_integers;
- uint64_t zeh_hash;
- uint32_t zeh_cd;
- uint8_t zeh_integer_size;
-
- /* Private to zap_leaf */
- uint16_t zeh_fakechunk;
- uint16_t *zeh_chunkp;
- zap_leaf_t *zeh_leaf;
-} zap_entry_handle_t;
-
-/*
- * Return a handle to the named entry, or ENOENT if not found. The hash
- * value must equal zap_hash(name).
- */
-extern int zap_leaf_lookup(zap_leaf_t *l,
- struct zap_name *zn, zap_entry_handle_t *zeh);
-
-/*
- * Return a handle to the entry with this hash+cd, or the entry with the
- * next closest hash+cd.
- */
-extern int zap_leaf_lookup_closest(zap_leaf_t *l,
- uint64_t hash, uint32_t cd, zap_entry_handle_t *zeh);
-
-/*
- * Read the first num_integers in the attribute. Integer size
- * conversion will be done without sign extension. Return EINVAL if
- * integer_size is too small. Return EOVERFLOW if there are more than
- * num_integers in the attribute.
- */
-extern int zap_entry_read(const zap_entry_handle_t *zeh,
- uint8_t integer_size, uint64_t num_integers, void *buf);
-
-extern int zap_entry_read_name(struct zap *zap, const zap_entry_handle_t *zeh,
- uint16_t buflen, char *buf);
-
-/*
- * Replace the value of an existing entry.
- *
- * May fail if it runs out of space (ENOSPC).
- */
-extern int zap_entry_update(zap_entry_handle_t *zeh,
- uint8_t integer_size, uint64_t num_integers, const void *buf);
-
-/*
- * Remove an entry.
- */
-extern void zap_entry_remove(zap_entry_handle_t *zeh);
-
-/*
- * Create an entry. An equal entry must not exist, and this entry must
- * belong in this leaf (according to its hash value). Fills in the
- * entry handle on success. Returns 0 on success or ENOSPC on failure.
- */
-extern int zap_entry_create(zap_leaf_t *l, struct zap_name *zn, uint32_t cd,
- uint8_t integer_size, uint64_t num_integers, const void *buf,
- zap_entry_handle_t *zeh);
-
-/* Determine whether there is another entry with the same normalized form. */
-extern boolean_t zap_entry_normalization_conflict(zap_entry_handle_t *zeh,
- struct zap_name *zn, const char *name, struct zap *zap);
-
-/*
- * Other stuff.
- */
-
-extern void zap_leaf_init(zap_leaf_t *l, boolean_t sort);
-extern void zap_leaf_byteswap(zap_leaf_phys_t *buf, int len);
-extern void zap_leaf_split(zap_leaf_t *l, zap_leaf_t *nl, boolean_t sort);
-extern void zap_leaf_stats(struct zap *zap, zap_leaf_t *l,
- struct zap_stats *zs);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZAP_LEAF_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp.h
deleted file mode 100644
index a6cb575b5b62..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2016, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZCP_H
-#define _SYS_ZCP_H
-
-#include <sys/dmu_tx.h>
-#include <sys/dsl_pool.h>
-
-#include "lua.h"
-#include "lualib.h"
-#include "lauxlib.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZCP_RUN_INFO_KEY "runinfo"
-
-extern uint64_t zfs_lua_max_instrlimit;
-extern uint64_t zfs_lua_max_memlimit;
-
-int zcp_argerror(lua_State *, int, const char *, ...);
-
-int zcp_eval(const char *, const char *, boolean_t, uint64_t, uint64_t,
- nvpair_t *, nvlist_t *);
-
-int zcp_load_list_lib(lua_State *);
-
-int zcp_load_synctask_lib(lua_State *, boolean_t);
-
-typedef void (zcp_cleanup_t)(void *);
-typedef struct zcp_cleanup_handler {
- zcp_cleanup_t *zch_cleanup_func;
- void *zch_cleanup_arg;
- list_node_t zch_node;
-} zcp_cleanup_handler_t;
-
-typedef struct zcp_alloc_arg {
- boolean_t aa_must_succeed;
- int64_t aa_alloc_remaining;
- int64_t aa_alloc_limit;
-} zcp_alloc_arg_t;
-
-typedef struct zcp_run_info {
- dsl_pool_t *zri_pool;
-
- /*
- * An estimate of the total amount of space consumed by all
- * synctasks we have successfully performed so far in this
- * channel program. Used to generate ENOSPC errors for syncfuncs.
- */
- int zri_space_used;
-
- /*
- * The credentials of the thread which originally invoked the channel
- * program. Since channel programs are always invoked from the synctask
- * thread they should always do permissions checks against this cred
- * rather than the 'current' thread's.
- */
- cred_t *zri_cred;
-
- /*
- * The tx in which this channel program is running.
- */
- dmu_tx_t *zri_tx;
-
- /*
- * The maximum number of Lua instructions the channel program is allowed
- * to execute. If it takes longer than this it will time out. A value
- * of 0 indicates no instruction limit.
- */
- uint64_t zri_maxinstrs;
-
- /*
- * The number of Lua instructions the channel program has executed.
- */
- uint64_t zri_curinstrs;
-
- /*
- * Boolean indicating whether or not the channel program exited
- * because it timed out.
- */
- boolean_t zri_timed_out;
-
- /*
- * Channel program was canceled by user
- */
- boolean_t zri_canceled;
-
- /*
- * Boolean indicating whether or not we are running in syncing
- * context.
- */
- boolean_t zri_sync;
-
- /*
- * List of currently registered cleanup handlers, which will be
- * triggered in the event of a fatal error.
- */
- list_t zri_cleanup_handlers;
-
- /*
- * The Lua state context of our channel program.
- */
- lua_State *zri_state;
-
- /*
- * Lua memory allocator arguments.
- */
- zcp_alloc_arg_t *zri_allocargs;
-
- /*
- * Contains output values from zcp script or error string.
- */
- nvlist_t *zri_outnvl;
-
- /*
- * The errno number returned to caller of zcp_eval().
- */
- int zri_result;
-} zcp_run_info_t;
-
-zcp_run_info_t *zcp_run_info(lua_State *);
-zcp_cleanup_handler_t *zcp_register_cleanup(lua_State *, zcp_cleanup_t, void *);
-void zcp_deregister_cleanup(lua_State *, zcp_cleanup_handler_t *);
-void zcp_cleanup(lua_State *);
-
-/*
- * Argument parsing routines for channel program callback functions.
- */
-typedef struct zcp_arg {
- /*
- * The name of this argument. For keyword arguments this is the name
- * functions will use to set the argument. For positional arguments
- * the name has no programatic meaning, but will appear in error
- * messages and help output.
- */
- const char *za_name;
-
- /*
- * The Lua type this argument should have (e.g. LUA_TSTRING,
- * LUA_TBOOLEAN) see the lua_type() function documentation for a
- * complete list. Calling a function with an argument that does
- * not match the expected type will result in the program terminating.
- */
- const int za_lua_type;
-} zcp_arg_t;
-
-void zcp_parse_args(lua_State *, const char *, const zcp_arg_t *,
- const zcp_arg_t *);
-int zcp_nvlist_to_lua(lua_State *, nvlist_t *, char *, int);
-int zcp_dataset_hold_error(lua_State *, dsl_pool_t *, const char *, int);
-struct dsl_dataset *zcp_dataset_hold(lua_State *, dsl_pool_t *,
- const char *, void *);
-
-typedef int (zcp_lib_func_t)(lua_State *);
-typedef struct zcp_lib_info {
- const char *name;
- zcp_lib_func_t *func;
- const zcp_arg_t pargs[4];
- const zcp_arg_t kwargs[2];
-} zcp_lib_info_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZCP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_global.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_global.h
deleted file mode 100644
index e227f2f4b7f5..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_global.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZCP_GLOBALS_H
-#define _SYS_ZCP_GLOBALS_H
-
-#include "lua.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void zcp_load_globals(lua_State *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZCP_GLOBALS_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_iter.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_iter.h
deleted file mode 100644
index a021e1ce8917..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_iter.h
+++ /dev/null
@@ -1,41 +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 (c) 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZCP_LIST_H
-#define _SYS_ZCP_LIST_H
-
-#include "lua.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void zcp_load_list_funcs(lua_State *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZCP_LIST_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_prop.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_prop.h
deleted file mode 100644
index 97b17619565c..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zcp_prop.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZCP_PROP_H
-#define _SYS_ZCP_PROP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int zcp_load_get_lib(lua_State *state);
-boolean_t prop_valid_for_ds(dsl_dataset_t *ds, zfs_prop_t zfs_prop);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZCP_PROP_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h
deleted file mode 100644
index 5abde149a615..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h
+++ /dev/null
@@ -1,73 +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 (c) 2013 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZFEATURE_H
-#define _SYS_ZFEATURE_H
-
-#include <sys/nvpair.h>
-#include <sys/txg.h>
-#include "zfeature_common.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define VALID_FEATURE_FID(fid) ((fid) >= 0 && (fid) < SPA_FEATURES)
-#define VALID_FEATURE_OR_NONE(fid) ((fid) == SPA_FEATURE_NONE || \
- VALID_FEATURE_FID(fid))
-
-struct spa;
-struct dmu_tx;
-struct objset;
-
-extern void spa_feature_create_zap_objects(struct spa *, struct dmu_tx *);
-extern void spa_feature_enable(struct spa *, spa_feature_t,
- struct dmu_tx *);
-extern void spa_feature_incr(struct spa *, spa_feature_t, struct dmu_tx *);
-extern void spa_feature_decr(struct spa *, spa_feature_t, struct dmu_tx *);
-extern boolean_t spa_feature_is_enabled(struct spa *, spa_feature_t);
-extern boolean_t spa_feature_is_active(struct spa *, spa_feature_t);
-extern boolean_t spa_feature_enabled_txg(spa_t *spa, spa_feature_t fid,
- uint64_t *txg);
-extern uint64_t spa_feature_refcount(spa_t *, spa_feature_t, uint64_t);
-extern boolean_t spa_features_check(spa_t *, boolean_t, nvlist_t *, nvlist_t *);
-
-/*
- * These functions are only exported for zhack and zdb; normal callers should
- * use the above interfaces.
- */
-extern int feature_get_refcount(struct spa *, zfeature_info_t *, uint64_t *);
-extern int feature_get_refcount_from_disk(spa_t *spa, zfeature_info_t *feature,
- uint64_t *res);
-extern void feature_enable_sync(struct spa *, zfeature_info_t *,
- struct dmu_tx *);
-extern void feature_sync(struct spa *, zfeature_info_t *, uint64_t,
- struct dmu_tx *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZFEATURE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h
deleted file mode 100644
index b34360a3c821..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h
+++ /dev/null
@@ -1,248 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _SYS_FS_ZFS_ACL_H
-#define _SYS_FS_ZFS_ACL_H
-
-#ifdef _KERNEL
-#include <sys/cred.h>
-#endif
-#include <sys/acl.h>
-#include <sys/dmu.h>
-#include <sys/zfs_fuid.h>
-#include <sys/sa.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct znode_phys;
-
-#define ACE_SLOT_CNT 6
-#define ZFS_ACL_VERSION_INITIAL 0ULL
-#define ZFS_ACL_VERSION_FUID 1ULL
-#define ZFS_ACL_VERSION ZFS_ACL_VERSION_FUID
-
-/*
- * ZFS ACLs (Access Control Lists) are stored in various forms.
- *
- * Files created with ACL version ZFS_ACL_VERSION_INITIAL
- * will all be created with fixed length ACEs of type
- * zfs_oldace_t.
- *
- * Files with ACL version ZFS_ACL_VERSION_FUID will be created
- * with various sized ACEs. The abstraction entries will utilize
- * zfs_ace_hdr_t, normal user/group entries will use zfs_ace_t
- * and some specialized CIFS ACEs will use zfs_object_ace_t.
- */
-
-/*
- * All ACEs have a common hdr. For
- * owner@, group@, and everyone@ this is all
- * thats needed.
- */
-typedef struct zfs_ace_hdr {
- uint16_t z_type;
- uint16_t z_flags;
- uint32_t z_access_mask;
-} zfs_ace_hdr_t;
-
-typedef zfs_ace_hdr_t zfs_ace_abstract_t;
-
-/*
- * Standard ACE
- */
-typedef struct zfs_ace {
- zfs_ace_hdr_t z_hdr;
- uint64_t z_fuid;
-} zfs_ace_t;
-
-/*
- * The following type only applies to ACE_ACCESS_ALLOWED|DENIED_OBJECT_ACE_TYPE
- * and will only be set/retrieved in a CIFS context.
- */
-
-typedef struct zfs_object_ace {
- zfs_ace_t z_ace;
- uint8_t z_object_type[16]; /* object type */
- uint8_t z_inherit_type[16]; /* inherited object type */
-} zfs_object_ace_t;
-
-typedef struct zfs_oldace {
- uint32_t z_fuid; /* "who" */
- uint32_t z_access_mask; /* access mask */
- uint16_t z_flags; /* flags, i.e inheritance */
- uint16_t z_type; /* type of entry allow/deny */
-} zfs_oldace_t;
-
-typedef struct zfs_acl_phys_v0 {
- uint64_t z_acl_extern_obj; /* ext acl pieces */
- uint32_t z_acl_count; /* Number of ACEs */
- uint16_t z_acl_version; /* acl version */
- uint16_t z_acl_pad; /* pad */
- zfs_oldace_t z_ace_data[ACE_SLOT_CNT]; /* 6 standard ACEs */
-} zfs_acl_phys_v0_t;
-
-#define ZFS_ACE_SPACE (sizeof (zfs_oldace_t) * ACE_SLOT_CNT)
-
-/*
- * Size of ACL count is always 2 bytes.
- * Necessary to for dealing with both V0 ACL and V1 ACL layout
- */
-#define ZFS_ACL_COUNT_SIZE (sizeof (uint16_t))
-
-typedef struct zfs_acl_phys {
- uint64_t z_acl_extern_obj; /* ext acl pieces */
- uint32_t z_acl_size; /* Number of bytes in ACL */
- uint16_t z_acl_version; /* acl version */
- uint16_t z_acl_count; /* ace count */
- uint8_t z_ace_data[ZFS_ACE_SPACE]; /* space for embedded ACEs */
-} zfs_acl_phys_t;
-
-typedef struct acl_ops {
- uint32_t (*ace_mask_get) (void *acep); /* get access mask */
- void (*ace_mask_set) (void *acep,
- uint32_t mask); /* set access mask */
- uint16_t (*ace_flags_get) (void *acep); /* get flags */
- void (*ace_flags_set) (void *acep,
- uint16_t flags); /* set flags */
- uint16_t (*ace_type_get)(void *acep); /* get type */
- void (*ace_type_set)(void *acep,
- uint16_t type); /* set type */
- uint64_t (*ace_who_get)(void *acep); /* get who/fuid */
- void (*ace_who_set)(void *acep,
- uint64_t who); /* set who/fuid */
- size_t (*ace_size)(void *acep); /* how big is this ace */
- size_t (*ace_abstract_size)(void); /* sizeof abstract entry */
- int (*ace_mask_off)(void); /* off of access mask in ace */
- /* ptr to data if any */
- int (*ace_data)(void *acep, void **datap);
-} acl_ops_t;
-
-/*
- * A zfs_acl_t structure is composed of a list of zfs_acl_node_t's.
- * Each node will have one or more ACEs associated with it. You will
- * only have multiple nodes during a chmod operation. Normally only
- * one node is required.
- */
-typedef struct zfs_acl_node {
- list_node_t z_next; /* Next chunk of ACEs */
- void *z_acldata; /* pointer into actual ACE(s) */
- void *z_allocdata; /* pointer to kmem allocated memory */
- size_t z_allocsize; /* Size of blob in bytes */
- size_t z_size; /* length of ACL data */
- uint64_t z_ace_count; /* number of ACEs in this acl node */
- int z_ace_idx; /* ace iterator positioned on */
-} zfs_acl_node_t;
-
-typedef struct zfs_acl {
- uint64_t z_acl_count; /* Number of ACEs */
- size_t z_acl_bytes; /* Number of bytes in ACL */
- uint_t z_version; /* version of ACL */
- void *z_next_ace; /* pointer to next ACE */
- uint64_t z_hints; /* ACL hints (ZFS_INHERIT_ACE ...) */
- zfs_acl_node_t *z_curr_node; /* current node iterator is handling */
- list_t z_acl; /* chunks of ACE data */
- acl_ops_t z_ops; /* ACL operations */
-} zfs_acl_t;
-
-typedef struct acl_locator_cb {
- zfs_acl_t *cb_aclp;
- zfs_acl_node_t *cb_acl_node;
-} zfs_acl_locator_cb_t;
-
-#define ACL_DATA_ALLOCED 0x1
-#define ZFS_ACL_SIZE(aclcnt) (sizeof (ace_t) * (aclcnt))
-
-struct zfs_fuid_info;
-
-typedef struct zfs_acl_ids {
- uint64_t z_fuid; /* file owner fuid */
- uint64_t z_fgid; /* file group owner fuid */
- uint64_t z_mode; /* mode to set on create */
- zfs_acl_t *z_aclp; /* ACL to create with file */
- struct zfs_fuid_info *z_fuidp; /* for tracking fuids for log */
-} zfs_acl_ids_t;
-
-/*
- * Property values for acl_mode and acl_inherit.
- *
- * acl_mode can take discard, noallow, groupmask and passthrough.
- * whereas acl_inherit has secure instead of groupmask.
- */
-
-#define ZFS_ACL_DISCARD 0
-#define ZFS_ACL_NOALLOW 1
-#define ZFS_ACL_GROUPMASK 2
-#define ZFS_ACL_PASSTHROUGH 3
-#define ZFS_ACL_RESTRICTED 4
-#define ZFS_ACL_PASSTHROUGH_X 5
-
-struct znode;
-struct zfsvfs;
-
-#ifdef _KERNEL
-int zfs_acl_ids_create(struct znode *, int, vattr_t *,
- cred_t *, vsecattr_t *, zfs_acl_ids_t *);
-void zfs_acl_ids_free(zfs_acl_ids_t *);
-boolean_t zfs_acl_ids_overquota(struct zfsvfs *, zfs_acl_ids_t *);
-int zfs_getacl(struct znode *, vsecattr_t *, boolean_t, cred_t *);
-int zfs_setacl(struct znode *, vsecattr_t *, boolean_t, cred_t *);
-void zfs_acl_rele(void *);
-void zfs_oldace_byteswap(ace_t *, int);
-void zfs_ace_byteswap(void *, size_t, boolean_t);
-extern boolean_t zfs_has_access(struct znode *zp, cred_t *cr);
-extern int zfs_zaccess(struct znode *, int, int, boolean_t, cred_t *);
-#ifdef illumos
-int zfs_fastaccesschk_execute(struct znode *, cred_t *);
-#endif
-int zfs_freebsd_fastaccesschk_execute(struct vnode *, cred_t *);
-extern int zfs_zaccess_rwx(struct znode *, mode_t, int, cred_t *);
-extern int zfs_zaccess_unix(struct znode *, mode_t, cred_t *);
-extern int zfs_acl_access(struct znode *, int, cred_t *);
-int zfs_acl_chmod_setattr(struct znode *, zfs_acl_t **, uint64_t);
-int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *);
-int zfs_zaccess_rename(struct znode *, struct znode *,
- struct znode *, struct znode *, cred_t *cr);
-void zfs_acl_free(zfs_acl_t *);
-int zfs_vsec_2_aclp(struct zfsvfs *, vtype_t, vsecattr_t *, cred_t *,
- struct zfs_fuid_info **, zfs_acl_t **);
-int zfs_aclset_common(struct znode *, zfs_acl_t *, cred_t *, dmu_tx_t *);
-uint64_t zfs_external_acl(struct znode *);
-int zfs_znode_acl_version(struct znode *);
-int zfs_acl_size(struct znode *, int *);
-zfs_acl_t *zfs_acl_alloc(int);
-zfs_acl_node_t *zfs_acl_node_alloc(size_t);
-void zfs_acl_xform(struct znode *, zfs_acl_t *, cred_t *);
-void zfs_acl_data_locator(void **, uint32_t *, uint32_t, boolean_t, void *);
-uint64_t zfs_mode_compute(uint64_t, zfs_acl_t *,
- uint64_t *, uint64_t, uint64_t);
-int zfs_acl_chown_setattr(struct znode *);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _SYS_FS_ZFS_ACL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h
deleted file mode 100644
index 38fda1d40585..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2013 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZFS_CONTEXT_H
-#define _SYS_ZFS_CONTEXT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/param.h>
-#include <sys/stdint.h>
-#include <sys/note.h>
-#include <sys/kernel.h>
-#include <sys/debug.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/sysmacros.h>
-#include <sys/bitmap.h>
-#include <sys/cmn_err.h>
-#include <sys/kmem.h>
-#include <sys/taskq.h>
-#include <sys/taskqueue.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/mutex.h>
-#include <sys/rwlock.h>
-#include <sys/kcondvar.h>
-#include <sys/random.h>
-#include <sys/byteorder.h>
-#include <sys/systm.h>
-#include <sys/list.h>
-#include <sys/zfs_debug.h>
-#include <sys/sysevent.h>
-#include <sys/uio.h>
-#include <sys/dirent.h>
-#include <sys/time.h>
-#include <sys/uio.h>
-#include <sys/fcntl.h>
-#include <sys/limits.h>
-#include <sys/string.h>
-#include <sys/bio.h>
-#include <sys/buf.h>
-#include <sys/cred.h>
-#include <sys/sdt.h>
-#include <sys/file.h>
-#include <sys/vfs.h>
-#include <sys/sysctl.h>
-#include <sys/sbuf.h>
-#include <sys/priv.h>
-#include <sys/kdb.h>
-#include <sys/ktr.h>
-#include <sys/stack.h>
-#include <sys/lockf.h>
-#include <sys/pathname.h>
-#include <sys/policy.h>
-#include <sys/refstr.h>
-#include <sys/zone.h>
-#include <sys/eventhandler.h>
-#include <sys/extattr.h>
-#include <sys/misc.h>
-#include <sys/sig.h>
-#include <sys/osd.h>
-#include <sys/sysevent/dev.h>
-#include <sys/sysevent/eventdefs.h>
-#include <sys/u8_textprep.h>
-#include <sys/fm/util.h>
-#include <sys/sunddi.h>
-#ifdef illumos
-#include <sys/cyclic.h>
-#endif
-#include <sys/callo.h>
-#include <sys/disp.h>
-#include <machine/_inttypes.h>
-#include <machine/stdarg.h>
-
-#include <vm/vm.h>
-#include <vm/vm_page.h>
-#include <vm/vm_object.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_map.h>
-#include <vm/vm_extern.h>
-#include <vm/vnode_pager.h>
-
-#define boot_ncpus (mp_ncpus)
-
-#define CPU_SEQID (curcpu)
-
-#define tsd_create(keyp, destructor) do { \
- *(keyp) = osd_thread_register((destructor)); \
- KASSERT(*(keyp) > 0, ("cannot register OSD")); \
-} while (0)
-#define tsd_destroy(keyp) osd_thread_deregister(*(keyp))
-#define tsd_get(key) osd_thread_get(curthread, (key))
-#define tsd_set(key, value) osd_thread_set(curthread, (key), (value))
-
-#ifdef __cplusplus
-}
-#endif
-
-extern int zfs_debug_level;
-extern struct mtx zfs_debug_mtx;
-#define ZFS_LOG(lvl, ...) do { \
- if (((lvl) & 0xff) <= zfs_debug_level) { \
- mtx_lock(&zfs_debug_mtx); \
- printf("%s:%u[%d]: ", __func__, __LINE__, (lvl)); \
- printf(__VA_ARGS__); \
- printf("\n"); \
- if ((lvl) & 0x100) \
- kdb_backtrace(); \
- mtx_unlock(&zfs_debug_mtx); \
- } \
-} while (0)
-
-#define sys_shutdown rebooting
-
-#define noinline __attribute__((noinline))
-#define likely(x) __builtin_expect((x), 1)
-
-#endif /* _SYS_ZFS_CONTEXT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h
deleted file mode 100644
index de770c52add0..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h
+++ /dev/null
@@ -1,65 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _ZFS_CTLDIR_H
-#define _ZFS_CTLDIR_H
-
-#include <sys/vnode.h>
-#include <sys/zfs_vfsops.h>
-#include <sys/zfs_znode.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZFS_CTLDIR_NAME ".zfs"
-
-#define zfs_has_ctldir(zdp) \
- ((zdp)->z_id == (zdp)->z_zfsvfs->z_root && \
- ((zdp)->z_zfsvfs->z_ctldir != NULL))
-#define zfs_show_ctldir(zdp) \
- (zfs_has_ctldir(zdp) && \
- ((zdp)->z_zfsvfs->z_show_ctldir))
-
-void zfsctl_create(zfsvfs_t *);
-void zfsctl_destroy(zfsvfs_t *);
-int zfsctl_root(zfsvfs_t *, int, vnode_t **);
-void zfsctl_init(void);
-void zfsctl_fini(void);
-boolean_t zfsctl_is_node(vnode_t *);
-
-int zfsctl_rename_snapshot(const char *from, const char *to);
-int zfsctl_destroy_snapshot(const char *snapname, int force);
-int zfsctl_umount_snapshots(vfs_t *, int, cred_t *);
-
-int zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp);
-
-#define ZFSCTL_INO_ROOT 0x1
-#define ZFSCTL_INO_SNAPDIR 0x2
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ZFS_CTLDIR_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h
deleted file mode 100644
index 9cbfc26b64e2..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_debug.h
+++ /dev/null
@@ -1,99 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZFS_DEBUG_H
-#define _SYS_ZFS_DEBUG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-/*
- * ZFS debugging
- */
-
-#if defined(DEBUG) || !defined(_KERNEL)
-#if !defined(ZFS_DEBUG)
-#define ZFS_DEBUG
-#endif
-#endif
-
-extern int zfs_flags;
-extern boolean_t zfs_recover;
-extern boolean_t zfs_free_leak_on_eio;
-
-#define ZFS_DEBUG_DPRINTF (1 << 0)
-#define ZFS_DEBUG_DBUF_VERIFY (1 << 1)
-#define ZFS_DEBUG_DNODE_VERIFY (1 << 2)
-#define ZFS_DEBUG_SNAPNAMES (1 << 3)
-#define ZFS_DEBUG_MODIFY (1 << 4)
-/* 1<<5 was previously used, try not to reuse */
-#define ZFS_DEBUG_ZIO_FREE (1 << 6)
-#define ZFS_DEBUG_HISTOGRAM_VERIFY (1 << 7)
-#define ZFS_DEBUG_METASLAB_VERIFY (1 << 8)
-#define ZFS_DEBUG_INDIRECT_REMAP (1 << 9)
-
-#ifdef ZFS_DEBUG
-extern void __dprintf(const char *file, const char *func,
- int line, const char *fmt, ...);
-#define dprintf(...) \
- if (zfs_flags & ZFS_DEBUG_DPRINTF) \
- __dprintf(__FILE__, __func__, __LINE__, __VA_ARGS__)
-#else
-#define dprintf(...) ((void)0)
-#endif /* ZFS_DEBUG */
-
-extern void zfs_panic_recover(const char *fmt, ...);
-
-typedef struct zfs_dbgmsg {
- list_node_t zdm_node;
- time_t zdm_timestamp;
- char zdm_msg[1]; /* variable length allocation */
-} zfs_dbgmsg_t;
-
-extern void zfs_dbgmsg_init(void);
-extern void zfs_dbgmsg_fini(void);
-extern void zfs_dbgmsg(const char *fmt, ...);
-extern void zfs_dbgmsg_print(const char *tag);
-
-#ifdef illumos
-#ifndef _KERNEL
-extern int dprintf_find_string(const char *string);
-#endif
-#endif /* illumos */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZFS_DEBUG_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_dir.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_dir.h
deleted file mode 100644
index 22d8e603c433..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_dir.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_FS_ZFS_DIR_H
-#define _SYS_FS_ZFS_DIR_H
-
-#include <sys/pathname.h>
-#include <sys/dmu.h>
-#include <sys/zfs_znode.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* zfs_dirent_lock() flags */
-#define ZNEW 0x0001 /* entry should not exist */
-#define ZEXISTS 0x0002 /* entry should exist */
-#define ZSHARED 0x0004 /* shared access (zfs_dirlook()) */
-#define ZXATTR 0x0008 /* we want the xattr dir */
-#define ZRENAMING 0x0010 /* znode is being renamed */
-#define ZCILOOK 0x0020 /* case-insensitive lookup requested */
-#define ZCIEXACT 0x0040 /* c-i requires c-s match (rename) */
-#define ZHAVELOCK 0x0080 /* z_name_lock is already held */
-
-/* mknode flags */
-#define IS_ROOT_NODE 0x01 /* create a root node */
-#define IS_XATTR 0x02 /* create an extended attribute node */
-
-extern int zfs_dirent_lookup(znode_t *, const char *, znode_t **, int);
-extern int zfs_link_create(znode_t *, const char *, znode_t *, dmu_tx_t *, int);
-extern int zfs_link_destroy(znode_t *, const char *, znode_t *, dmu_tx_t *, int,
- boolean_t *);
-#if 0
-extern int zfs_dirlook(vnode_t *, const char *, vnode_t **, int);
-#else
-extern int zfs_dirlook(znode_t *, const char *name, znode_t **);
-#endif
-extern void zfs_mknode(znode_t *, vattr_t *, dmu_tx_t *, cred_t *,
- uint_t, znode_t **, zfs_acl_ids_t *);
-extern void zfs_rmnode(znode_t *);
-extern boolean_t zfs_dirempty(znode_t *);
-extern void zfs_unlinked_add(znode_t *, dmu_tx_t *);
-extern void zfs_unlinked_drain(zfsvfs_t *zfsvfs);
-extern int zfs_sticky_remove_access(znode_t *, znode_t *, cred_t *cr);
-extern int zfs_get_xattrdir(znode_t *, vnode_t **, cred_t *, int);
-extern int zfs_make_xattrdir(znode_t *, vattr_t *, vnode_t **, cred_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_FS_ZFS_DIR_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_fuid.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_fuid.h
deleted file mode 100644
index b381bb98e734..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_fuid.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_FS_ZFS_FUID_H
-#define _SYS_FS_ZFS_FUID_H
-
-#include <sys/types.h>
-#ifdef _KERNEL
-#include <sys/kidmap.h>
-#include <sys/dmu.h>
-#include <sys/zfs_vfsops.h>
-#endif
-#include <sys/avl.h>
-#include <sys/list.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
- ZFS_OWNER,
- ZFS_GROUP,
- ZFS_ACE_USER,
- ZFS_ACE_GROUP
-} zfs_fuid_type_t;
-
-/*
- * Estimate space needed for one more fuid table entry.
- * for now assume its current size + 1K
- */
-#define FUID_SIZE_ESTIMATE(z) ((z)->z_fuid_size + (SPA_MINBLOCKSIZE << 1))
-
-#define FUID_INDEX(x) ((x) >> 32)
-#define FUID_RID(x) ((x) & 0xffffffff)
-#define FUID_ENCODE(idx, rid) (((uint64_t)(idx) << 32) | (rid))
-/*
- * FUIDs cause problems for the intent log
- * we need to replay the creation of the FUID,
- * but we can't count on the idmapper to be around
- * and during replay the FUID index may be different than
- * before. Also, if an ACL has 100 ACEs and 12 different
- * domains we don't want to log 100 domain strings, but rather
- * just the unique 12.
- */
-
-/*
- * The FUIDs in the log will index into
- * domain string table and the bottom half will be the rid.
- * Used for mapping ephemeral uid/gid during ACL setting to FUIDs
- */
-typedef struct zfs_fuid {
- list_node_t z_next;
- uint64_t z_id; /* uid/gid being converted to fuid */
- uint64_t z_domidx; /* index in AVL domain table */
- uint64_t z_logfuid; /* index for domain in log */
-} zfs_fuid_t;
-
-/* list of unique domains */
-typedef struct zfs_fuid_domain {
- list_node_t z_next;
- uint64_t z_domidx; /* AVL tree idx */
- const char *z_domain; /* domain string */
-} zfs_fuid_domain_t;
-
-/*
- * FUID information necessary for logging create, setattr, and setacl.
- */
-typedef struct zfs_fuid_info {
- list_t z_fuids;
- list_t z_domains;
- uint64_t z_fuid_owner;
- uint64_t z_fuid_group;
- char **z_domain_table; /* Used during replay */
- uint32_t z_fuid_cnt; /* How many fuids in z_fuids */
- uint32_t z_domain_cnt; /* How many domains */
- size_t z_domain_str_sz; /* len of domain strings z_domain list */
-} zfs_fuid_info_t;
-
-#ifdef _KERNEL
-struct znode;
-extern uid_t zfs_fuid_map_id(zfsvfs_t *, uint64_t, cred_t *, zfs_fuid_type_t);
-extern void zfs_fuid_node_add(zfs_fuid_info_t **, const char *, uint32_t,
- uint64_t, uint64_t, zfs_fuid_type_t);
-extern void zfs_fuid_destroy(zfsvfs_t *);
-extern uint64_t zfs_fuid_create_cred(zfsvfs_t *, zfs_fuid_type_t,
- cred_t *, zfs_fuid_info_t **);
-extern uint64_t zfs_fuid_create(zfsvfs_t *, uint64_t, cred_t *, zfs_fuid_type_t,
- zfs_fuid_info_t **);
-extern void zfs_fuid_map_ids(struct znode *zp, cred_t *cr,
- uid_t *uid, uid_t *gid);
-extern zfs_fuid_info_t *zfs_fuid_info_alloc(void);
-extern void zfs_fuid_info_free(zfs_fuid_info_t *);
-extern boolean_t zfs_groupmember(zfsvfs_t *, uint64_t, cred_t *);
-void zfs_fuid_sync(zfsvfs_t *, dmu_tx_t *);
-extern int zfs_fuid_find_by_domain(zfsvfs_t *, const char *domain,
- char **retdomain, boolean_t addok);
-extern const char *zfs_fuid_find_by_idx(zfsvfs_t *zfsvfs, uint32_t idx);
-extern void zfs_fuid_txhold(zfsvfs_t *zfsvfs, dmu_tx_t *tx);
-#endif
-
-char *zfs_fuid_idx_domain(avl_tree_t *, uint32_t);
-void zfs_fuid_avl_tree_create(avl_tree_t *, avl_tree_t *);
-uint64_t zfs_fuid_table_load(objset_t *, uint64_t, avl_tree_t *, avl_tree_t *);
-void zfs_fuid_table_destroy(avl_tree_t *, avl_tree_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_FS_ZFS_FUID_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
deleted file mode 100644
index 756800f8afde..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h
+++ /dev/null
@@ -1,466 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011-2012 Pawel Jakub Dawidek. All rights reserved.
- * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
- * Copyright 2016 RackTop Systems.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-#ifndef _SYS_ZFS_IOCTL_H
-#define _SYS_ZFS_IOCTL_H
-
-#include <sys/cred.h>
-#include <sys/dmu.h>
-#include <sys/zio.h>
-#include <sys/dsl_deleg.h>
-#include <sys/spa.h>
-#include <sys/zfs_stat.h>
-
-#ifdef _KERNEL
-#include <sys/nvpair.h>
-#endif /* _KERNEL */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The structures in this file are passed between userland and the
- * kernel. Userland may be running a 32-bit process, while the kernel
- * is 64-bit. Therefore, these structures need to compile the same in
- * 32-bit and 64-bit. This means not using type "long", and adding
- * explicit padding so that the 32-bit structure will not be packed more
- * tightly than the 64-bit structure (which requires 64-bit alignment).
- */
-
-/*
- * Property values for snapdir
- */
-#define ZFS_SNAPDIR_HIDDEN 0
-#define ZFS_SNAPDIR_VISIBLE 1
-
-/*
- * Field manipulation macros for the drr_versioninfo field of the
- * send stream header.
- */
-
-/*
- * Header types for zfs send streams.
- */
-typedef enum drr_headertype {
- DMU_SUBSTREAM = 0x1,
- DMU_COMPOUNDSTREAM = 0x2
-} drr_headertype_t;
-
-#define DMU_GET_STREAM_HDRTYPE(vi) BF64_GET((vi), 0, 2)
-#define DMU_SET_STREAM_HDRTYPE(vi, x) BF64_SET((vi), 0, 2, x)
-
-#define DMU_GET_FEATUREFLAGS(vi) BF64_GET((vi), 2, 30)
-#define DMU_SET_FEATUREFLAGS(vi, x) BF64_SET((vi), 2, 30, x)
-
-/*
- * Feature flags for zfs send streams (flags in drr_versioninfo)
- */
-
-#define DMU_BACKUP_FEATURE_DEDUP (1 << 0)
-#define DMU_BACKUP_FEATURE_DEDUPPROPS (1 << 1)
-#define DMU_BACKUP_FEATURE_SA_SPILL (1 << 2)
-/* flags #3 - #15 are reserved for incompatible closed-source implementations */
-#define DMU_BACKUP_FEATURE_EMBED_DATA (1 << 16)
-#define DMU_BACKUP_FEATURE_LZ4 (1 << 17)
-/* flag #18 is reserved for a Delphix feature */
-#define DMU_BACKUP_FEATURE_LARGE_BLOCKS (1 << 19)
-#define DMU_BACKUP_FEATURE_RESUMING (1 << 20)
-/* flag #21 is reserved for a Delphix feature */
-#define DMU_BACKUP_FEATURE_COMPRESSED (1 << 22)
-#define DMU_BACKUP_FEATURE_LARGE_DNODE (1 << 23)
-/* flag #24 is reserved for the raw send feature */
-/* flag #25 is reserved for the ZSTD compression feature */
-
-/*
- * Mask of all supported backup features
- */
-#define DMU_BACKUP_FEATURE_MASK (DMU_BACKUP_FEATURE_DEDUP | \
- DMU_BACKUP_FEATURE_DEDUPPROPS | DMU_BACKUP_FEATURE_SA_SPILL | \
- DMU_BACKUP_FEATURE_EMBED_DATA | DMU_BACKUP_FEATURE_LZ4 | \
- DMU_BACKUP_FEATURE_RESUMING | \
- DMU_BACKUP_FEATURE_LARGE_BLOCKS | DMU_BACKUP_FEATURE_LARGE_DNODE | \
- DMU_BACKUP_FEATURE_COMPRESSED)
-
-/* Are all features in the given flag word currently supported? */
-#define DMU_STREAM_SUPPORTED(x) (!((x) & ~DMU_BACKUP_FEATURE_MASK))
-
-typedef enum dmu_send_resume_token_version {
- ZFS_SEND_RESUME_TOKEN_VERSION = 1
-} dmu_send_resume_token_version_t;
-
-/*
- * The drr_versioninfo field of the dmu_replay_record has the
- * following layout:
- *
- * 64 56 48 40 32 24 16 8 0
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- * | reserved | feature-flags |C|S|
- * +-------+-------+-------+-------+-------+-------+-------+-------+
- *
- * The low order two bits indicate the header type: SUBSTREAM (0x1)
- * or COMPOUNDSTREAM (0x2). Using two bits for this is historical:
- * this field used to be a version number, where the two version types
- * were 1 and 2. Using two bits for this allows earlier versions of
- * the code to be able to recognize send streams that don't use any
- * of the features indicated by feature flags.
- */
-
-#define DMU_BACKUP_MAGIC 0x2F5bacbacULL
-
-/*
- * Send stream flags. Bits 24-31 are reserved for vendor-specific
- * implementations and should not be used.
- */
-#define DRR_FLAG_CLONE (1<<0)
-#define DRR_FLAG_CI_DATA (1<<1)
-/*
- * This send stream, if it is a full send, includes the FREE and FREEOBJECT
- * records that are created by the sending process. This means that the send
- * stream can be received as a clone, even though it is not an incremental.
- * This is not implemented as a feature flag, because the receiving side does
- * not need to have implemented it to receive this stream; it is fully backwards
- * compatible. We need a flag, though, because full send streams without it
- * cannot necessarily be received as a clone correctly.
- */
-#define DRR_FLAG_FREERECORDS (1<<2)
-
-/*
- * flags in the drr_checksumflags field in the DRR_WRITE and
- * DRR_WRITE_BYREF blocks
- */
-#define DRR_CHECKSUM_DEDUP (1<<0)
-
-#define DRR_IS_DEDUP_CAPABLE(flags) ((flags) & DRR_CHECKSUM_DEDUP)
-
-/* deal with compressed drr_write replay records */
-#define DRR_WRITE_COMPRESSED(drrw) ((drrw)->drr_compressiontype != 0)
-#define DRR_WRITE_PAYLOAD_SIZE(drrw) \
- (DRR_WRITE_COMPRESSED(drrw) ? (drrw)->drr_compressed_size : \
- (drrw)->drr_logical_size)
-
-typedef struct dmu_replay_record {
- enum {
- DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
- DRR_WRITE, DRR_FREE, DRR_END, DRR_WRITE_BYREF,
- DRR_SPILL, DRR_WRITE_EMBEDDED, DRR_NUMTYPES
- } drr_type;
- uint32_t drr_payloadlen;
- union {
- struct drr_begin {
- uint64_t drr_magic;
- uint64_t drr_versioninfo; /* was drr_version */
- uint64_t drr_creation_time;
- dmu_objset_type_t drr_type;
- uint32_t drr_flags;
- uint64_t drr_toguid;
- uint64_t drr_fromguid;
- char drr_toname[MAXNAMELEN];
- } drr_begin;
- struct drr_end {
- zio_cksum_t drr_checksum;
- uint64_t drr_toguid;
- } drr_end;
- struct drr_object {
- uint64_t drr_object;
- dmu_object_type_t drr_type;
- dmu_object_type_t drr_bonustype;
- uint32_t drr_blksz;
- uint32_t drr_bonuslen;
- uint8_t drr_checksumtype;
- uint8_t drr_compress;
- uint8_t drr_dn_slots;
- uint8_t drr_pad[5];
- uint64_t drr_toguid;
- /* bonus content follows */
- } drr_object;
- struct drr_freeobjects {
- uint64_t drr_firstobj;
- uint64_t drr_numobjs;
- uint64_t drr_toguid;
- } drr_freeobjects;
- struct drr_write {
- uint64_t drr_object;
- dmu_object_type_t drr_type;
- uint32_t drr_pad;
- uint64_t drr_offset;
- uint64_t drr_logical_size;
- uint64_t drr_toguid;
- uint8_t drr_checksumtype;
- uint8_t drr_checksumflags;
- uint8_t drr_compressiontype;
- uint8_t drr_pad2[5];
- /* deduplication key */
- ddt_key_t drr_key;
- /* only nonzero if drr_compressiontype is not 0 */
- uint64_t drr_compressed_size;
- /* content follows */
- } drr_write;
- struct drr_free {
- uint64_t drr_object;
- uint64_t drr_offset;
- uint64_t drr_length;
- uint64_t drr_toguid;
- } drr_free;
- struct drr_write_byref {
- /* where to put the data */
- uint64_t drr_object;
- uint64_t drr_offset;
- uint64_t drr_length;
- uint64_t drr_toguid;
- /* where to find the prior copy of the data */
- uint64_t drr_refguid;
- uint64_t drr_refobject;
- uint64_t drr_refoffset;
- /* properties of the data */
- uint8_t drr_checksumtype;
- uint8_t drr_checksumflags;
- uint8_t drr_pad2[6];
- ddt_key_t drr_key; /* deduplication key */
- } drr_write_byref;
- struct drr_spill {
- uint64_t drr_object;
- uint64_t drr_length;
- uint64_t drr_toguid;
- uint64_t drr_pad[4]; /* needed for crypto */
- /* spill data follows */
- } drr_spill;
- struct drr_write_embedded {
- uint64_t drr_object;
- uint64_t drr_offset;
- /* logical length, should equal blocksize */
- uint64_t drr_length;
- uint64_t drr_toguid;
- uint8_t drr_compression;
- uint8_t drr_etype;
- uint8_t drr_pad[6];
- uint32_t drr_lsize; /* uncompressed size of payload */
- uint32_t drr_psize; /* compr. (real) size of payload */
- /* (possibly compressed) content follows */
- } drr_write_embedded;
-
- /*
- * Nore: drr_checksum is overlaid with all record types
- * except DRR_BEGIN. Therefore its (non-pad) members
- * must not overlap with members from the other structs.
- * We accomplish this by putting its members at the very
- * end of the struct.
- */
- struct drr_checksum {
- uint64_t drr_pad[34];
- /*
- * fletcher-4 checksum of everything preceding the
- * checksum.
- */
- zio_cksum_t drr_checksum;
- } drr_checksum;
- } drr_u;
-} dmu_replay_record_t;
-
-/* diff record range types */
-typedef enum diff_type {
- DDR_NONE = 0x1,
- DDR_INUSE = 0x2,
- DDR_FREE = 0x4
-} diff_type_t;
-
-/*
- * The diff reports back ranges of free or in-use objects.
- */
-typedef struct dmu_diff_record {
- uint64_t ddr_type;
- uint64_t ddr_first;
- uint64_t ddr_last;
-} dmu_diff_record_t;
-
-typedef struct zinject_record {
- uint64_t zi_objset;
- uint64_t zi_object;
- uint64_t zi_start;
- uint64_t zi_end;
- uint64_t zi_guid;
- uint32_t zi_level;
- uint32_t zi_error;
- uint64_t zi_type;
- uint32_t zi_freq;
- uint32_t zi_failfast;
- char zi_func[MAXNAMELEN];
- uint32_t zi_iotype;
- int32_t zi_duration;
- uint64_t zi_timer;
- uint64_t zi_nlanes;
- uint32_t zi_cmd;
- uint32_t zi_pad;
-} zinject_record_t;
-
-#define ZINJECT_NULL 0x1
-#define ZINJECT_FLUSH_ARC 0x2
-#define ZINJECT_UNLOAD_SPA 0x4
-
-typedef enum zinject_type {
- ZINJECT_UNINITIALIZED,
- ZINJECT_DATA_FAULT,
- ZINJECT_DEVICE_FAULT,
- ZINJECT_LABEL_FAULT,
- ZINJECT_IGNORED_WRITES,
- ZINJECT_PANIC,
- ZINJECT_DELAY_IO,
-} zinject_type_t;
-
-typedef struct zfs_share {
- uint64_t z_exportdata;
- uint64_t z_sharedata;
- uint64_t z_sharetype; /* 0 = share, 1 = unshare */
- uint64_t z_sharemax; /* max length of share string */
-} zfs_share_t;
-
-/*
- * ZFS file systems may behave the usual, POSIX-compliant way, where
- * name lookups are case-sensitive. They may also be set up so that
- * all the name lookups are case-insensitive, or so that only some
- * lookups, the ones that set an FIGNORECASE flag, are case-insensitive.
- */
-typedef enum zfs_case {
- ZFS_CASE_SENSITIVE,
- ZFS_CASE_INSENSITIVE,
- ZFS_CASE_MIXED
-} zfs_case_t;
-
-/*
- * Note: this struct must have the same layout in 32-bit and 64-bit, so
- * that 32-bit processes (like /sbin/zfs) can pass it to the 64-bit
- * kernel. Therefore, we add padding to it so that no "hidden" padding
- * is automatically added on 64-bit (but not on 32-bit).
- */
-typedef struct zfs_cmd {
- char zc_name[MAXPATHLEN]; /* name of pool or dataset */
- uint64_t zc_nvlist_src; /* really (char *) */
- uint64_t zc_nvlist_src_size;
- uint64_t zc_nvlist_dst; /* really (char *) */
- uint64_t zc_nvlist_dst_size;
- boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */
- int zc_pad2;
-
- /*
- * The following members are for legacy ioctls which haven't been
- * converted to the new method.
- */
- uint64_t zc_history; /* really (char *) */
- char zc_value[MAXPATHLEN * 2];
- char zc_string[MAXNAMELEN];
- uint64_t zc_guid;
- uint64_t zc_nvlist_conf; /* really (char *) */
- uint64_t zc_nvlist_conf_size;
- uint64_t zc_cookie;
- uint64_t zc_objset_type;
- uint64_t zc_perm_action;
- uint64_t zc_history_len;
- uint64_t zc_history_offset;
- uint64_t zc_obj;
- uint64_t zc_iflags; /* internal to zfs(7fs) */
- zfs_share_t zc_share;
- uint64_t zc_jailid;
- dmu_objset_stats_t zc_objset_stats;
- dmu_replay_record_t zc_begin_record;
- zinject_record_t zc_inject_record;
- uint32_t zc_defer_destroy;
- uint32_t zc_flags;
- uint64_t zc_action_handle;
- int zc_cleanup_fd;
- uint8_t zc_simple;
- uint8_t zc_pad3[3];
- boolean_t zc_resumable;
- uint32_t zc_pad4;
- uint64_t zc_sendobj;
- uint64_t zc_fromobj;
- uint64_t zc_createtxg;
- zfs_stat_t zc_stat;
-} zfs_cmd_t;
-
-typedef struct zfs_useracct {
- char zu_domain[256];
- uid_t zu_rid;
- uint32_t zu_pad;
- uint64_t zu_space;
-} zfs_useracct_t;
-
-#define ZFSDEV_MAX_MINOR (1 << 16)
-#define ZFS_MIN_MINOR (ZFSDEV_MAX_MINOR + 1)
-
-#define ZPOOL_EXPORT_AFTER_SPLIT 0x1
-
-#ifdef _KERNEL
-struct objset;
-struct zfsvfs;
-
-typedef struct zfs_creat {
- nvlist_t *zct_zplprops;
- nvlist_t *zct_props;
-} zfs_creat_t;
-
-extern int zfs_secpolicy_snapshot_perms(const char *, cred_t *);
-extern int zfs_secpolicy_rename_perms(const char *, const char *, cred_t *);
-extern int zfs_secpolicy_destroy_perms(const char *, cred_t *);
-extern int zfs_busy(void);
-extern void zfs_unmount_snap(const char *);
-extern void zfs_destroy_unmount_origin(const char *);
-#ifdef illumos
-extern int getzfsvfs_impl(struct objset *, struct zfsvfs **);
-#else
-extern int getzfsvfs_impl(struct objset *, vfs_t **);
-#endif
-extern int getzfsvfs(const char *, struct zfsvfs **);
-
-/*
- * ZFS minor numbers can refer to either a control device instance or
- * a zvol. Depending on the value of zss_type, zss_data points to either
- * a zvol_state_t or a zfs_onexit_t.
- */
-enum zfs_soft_state_type {
- ZSST_ZVOL,
- ZSST_CTLDEV
-};
-
-typedef struct zfs_soft_state {
- enum zfs_soft_state_type zss_type;
- void *zss_data;
-} zfs_soft_state_t;
-
-extern void *zfsdev_get_soft_state(minor_t minor,
- enum zfs_soft_state_type which);
-extern minor_t zfsdev_minor_alloc(void);
-
-extern void *zfsdev_state;
-
-#endif /* _KERNEL */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZFS_IOCTL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_onexit.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_onexit.h
deleted file mode 100644
index 4982bd4d0afc..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_onexit.h
+++ /dev/null
@@ -1,66 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _SYS_ZFS_ONEXIT_H
-#define _SYS_ZFS_ONEXIT_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef _KERNEL
-
-typedef struct zfs_onexit {
- kmutex_t zo_lock;
- list_t zo_actions;
-} zfs_onexit_t;
-
-typedef struct zfs_onexit_action_node {
- list_node_t za_link;
- void (*za_func)(void *);
- void *za_data;
-} zfs_onexit_action_node_t;
-
-extern void zfs_onexit_init(zfs_onexit_t **zo);
-extern void zfs_onexit_destroy(zfs_onexit_t *zo);
-
-#endif
-
-extern int zfs_onexit_fd_hold(int fd, minor_t *minorp);
-extern void zfs_onexit_fd_rele(int fd);
-extern int zfs_onexit_add_cb(minor_t minor, void (*func)(void *), void *data,
- uint64_t *action_handle);
-extern int zfs_onexit_del_cb(minor_t minor, uint64_t action_handle,
- boolean_t fire);
-extern int zfs_onexit_cb_data(minor_t minor, uint64_t action_handle,
- void **data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZFS_ONEXIT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_rlock.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_rlock.h
deleted file mode 100644
index ffae1130fd88..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_rlock.h
+++ /dev/null
@@ -1,90 +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 2006 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2018 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_FS_ZFS_RLOCK_H
-#define _SYS_FS_ZFS_RLOCK_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __FreeBSD__
-#define rangelock_init zfs_rangelock_init
-#define rangelock_fini zfs_rangelock_fini
-#endif
-
-typedef enum {
- RL_READER,
- RL_WRITER,
- RL_APPEND
-} rangelock_type_t;
-
-struct locked_range;
-
-typedef void (rangelock_cb_t)(struct locked_range *, void *);
-
-#ifdef __FreeBSD__
-typedef struct zfs_rangelock {
-#else
-typedef struct rangelock {
-#endif
- avl_tree_t rl_tree; /* contains locked_range_t */
- kmutex_t rl_lock;
- rangelock_cb_t *rl_cb;
- void *rl_arg;
-} rangelock_t;
-
-typedef struct locked_range {
- rangelock_t *lr_rangelock; /* rangelock that this lock applies to */
- avl_node_t lr_node; /* avl node link */
- uint64_t lr_offset; /* file range offset */
- uint64_t lr_length; /* file range length */
- uint_t lr_count; /* range reference count in tree */
- rangelock_type_t lr_type; /* range type */
- kcondvar_t lr_write_cv; /* cv for waiting writers */
- kcondvar_t lr_read_cv; /* cv for waiting readers */
- uint8_t lr_proxy; /* acting for original range */
- uint8_t lr_write_wanted; /* writer wants to lock this range */
- uint8_t lr_read_wanted; /* reader wants to lock this range */
-} locked_range_t;
-
-void rangelock_init(rangelock_t *, rangelock_cb_t *, void *);
-void rangelock_fini(rangelock_t *);
-
-locked_range_t *rangelock_enter(rangelock_t *,
- uint64_t, uint64_t, rangelock_type_t);
-locked_range_t *rangelock_tryenter(rangelock_t *,
- uint64_t, uint64_t, rangelock_type_t);
-void rangelock_exit(locked_range_t *);
-void rangelock_reduce(locked_range_t *, uint64_t, uint64_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_FS_ZFS_RLOCK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_sa.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_sa.h
deleted file mode 100644
index fc40b0e9517c..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_sa.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_ZFS_SA_H
-#define _SYS_ZFS_SA_H
-
-#ifdef _KERNEL
-#include <sys/list.h>
-#include <sys/dmu.h>
-#include <sys/zfs_acl.h>
-#include <sys/zfs_znode.h>
-#include <sys/sa.h>
-#include <sys/zil.h>
-
-
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * This is the list of known attributes
- * to the ZPL. The values of the actual
- * attributes are not defined by the order
- * the enums. It is controlled by the attribute
- * registration mechanism. Two different file system
- * could have different numeric values for the same
- * attributes. this list is only used for dereferencing
- * into the table that will hold the actual numeric value.
- */
-typedef enum zpl_attr {
- ZPL_ATIME,
- ZPL_MTIME,
- ZPL_CTIME,
- ZPL_CRTIME,
- ZPL_GEN,
- ZPL_MODE,
- ZPL_SIZE,
- ZPL_PARENT,
- ZPL_LINKS,
- ZPL_XATTR,
- ZPL_RDEV,
- ZPL_FLAGS,
- ZPL_UID,
- ZPL_GID,
- ZPL_PAD,
- ZPL_ZNODE_ACL,
- ZPL_DACL_COUNT,
- ZPL_SYMLINK,
- ZPL_SCANSTAMP,
- ZPL_DACL_ACES,
- ZPL_END
-} zpl_attr_t;
-
-#define ZFS_OLD_ZNODE_PHYS_SIZE 0x108
-#define ZFS_SA_BASE_ATTR_SIZE (ZFS_OLD_ZNODE_PHYS_SIZE - \
- sizeof (zfs_acl_phys_t))
-
-#define SA_MODE_OFFSET 0
-#define SA_SIZE_OFFSET 8
-#define SA_GEN_OFFSET 16
-#define SA_UID_OFFSET 24
-#define SA_GID_OFFSET 32
-#define SA_PARENT_OFFSET 40
-
-extern sa_attr_reg_t zfs_attr_table[ZPL_END + 1];
-extern sa_attr_reg_t zfs_legacy_attr_table[ZPL_END + 1];
-
-/*
- * This is a deprecated data structure that only exists for
- * dealing with file systems create prior to ZPL version 5.
- */
-typedef struct znode_phys {
- uint64_t zp_atime[2]; /* 0 - last file access time */
- uint64_t zp_mtime[2]; /* 16 - last file modification time */
- uint64_t zp_ctime[2]; /* 32 - last file change time */
- uint64_t zp_crtime[2]; /* 48 - creation time */
- uint64_t zp_gen; /* 64 - generation (txg of creation) */
- uint64_t zp_mode; /* 72 - file mode bits */
- uint64_t zp_size; /* 80 - size of file */
- uint64_t zp_parent; /* 88 - directory parent (`..') */
- uint64_t zp_links; /* 96 - number of links to file */
- uint64_t zp_xattr; /* 104 - DMU object for xattrs */
- uint64_t zp_rdev; /* 112 - dev_t for VBLK & VCHR files */
- uint64_t zp_flags; /* 120 - persistent flags */
- uint64_t zp_uid; /* 128 - file owner */
- uint64_t zp_gid; /* 136 - owning group */
- uint64_t zp_zap; /* 144 - extra attributes */
- uint64_t zp_pad[3]; /* 152 - future */
- zfs_acl_phys_t zp_acl; /* 176 - 263 ACL */
- /*
- * Data may pad out any remaining bytes in the znode buffer, eg:
- *
- * |<---------------------- dnode_phys (512) ------------------------>|
- * |<-- dnode (192) --->|<----------- "bonus" buffer (320) ---------->|
- * |<---- znode (264) ---->|<---- data (56) ---->|
- *
- * At present, we use this space for the following:
- * - symbolic links
- * - 32-byte anti-virus scanstamp (regular files only)
- */
-} znode_phys_t;
-
-#ifdef _KERNEL
-int zfs_sa_readlink(struct znode *, uio_t *);
-void zfs_sa_symlink(struct znode *, char *link, int len, dmu_tx_t *);
-void zfs_sa_upgrade(struct sa_handle *, dmu_tx_t *);
-void zfs_sa_get_scanstamp(struct znode *, xvattr_t *);
-void zfs_sa_set_scanstamp(struct znode *, xvattr_t *, dmu_tx_t *);
-void zfs_sa_uprade_pre(struct sa_handle *, void *, dmu_tx_t *);
-void zfs_sa_upgrade_post(struct sa_handle *, void *, dmu_tx_t *);
-void zfs_sa_upgrade_txholds(dmu_tx_t *, struct znode *);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZFS_SA_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_stat.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_stat.h
deleted file mode 100644
index a8af7ec61ba9..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_stat.h
+++ /dev/null
@@ -1,55 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _SYS_FS_ZFS_STAT_H
-#define _SYS_FS_ZFS_STAT_H
-
-#ifdef _KERNEL
-#include <sys/isa_defs.h>
-#include <sys/dmu.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * A limited number of zpl level stats are retrievable
- * with an ioctl. zfs diff is the current consumer.
- */
-typedef struct zfs_stat {
- uint64_t zs_gen;
- uint64_t zs_mode;
- uint64_t zs_links;
- uint64_t zs_ctime[2];
-} zfs_stat_t;
-
-extern int zfs_obj_to_stats(objset_t *osp, uint64_t obj, zfs_stat_t *sb,
- char *buf, int len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_FS_ZFS_STAT_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h
deleted file mode 100644
index 8fba5e735da6..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h
+++ /dev/null
@@ -1,192 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011 Pawel Jakub Dawidek <pawel@dawidek.net>.
- * All rights reserved.
- */
-
-#ifndef _SYS_FS_ZFS_VFSOPS_H
-#define _SYS_FS_ZFS_VFSOPS_H
-
-#include <sys/list.h>
-#include <sys/vfs.h>
-#include <sys/zil.h>
-#include <sys/sa.h>
-#include <sys/rrwlock.h>
-#include <sys/zfs_ioctl.h>
-#include <sys/rmlock.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct zfsvfs zfsvfs_t;
-struct znode;
-
-struct zfsvfs {
- vfs_t *z_vfs; /* generic fs struct */
- zfsvfs_t *z_parent; /* parent fs */
- objset_t *z_os; /* objset reference */
- uint64_t z_root; /* id of root znode */
- uint64_t z_unlinkedobj; /* id of unlinked zapobj */
- uint64_t z_max_blksz; /* maximum block size for files */
- uint64_t z_fuid_obj; /* fuid table object number */
- uint64_t z_fuid_size; /* fuid table size */
- avl_tree_t z_fuid_idx; /* fuid tree keyed by index */
- avl_tree_t z_fuid_domain; /* fuid tree keyed by domain */
- krwlock_t z_fuid_lock; /* fuid lock */
- boolean_t z_fuid_loaded; /* fuid tables are loaded */
- boolean_t z_fuid_dirty; /* need to sync fuid table ? */
- struct zfs_fuid_info *z_fuid_replay; /* fuid info for replay */
- zilog_t *z_log; /* intent log pointer */
- uint_t z_acl_mode; /* acl chmod/mode behavior */
- uint_t z_acl_inherit; /* acl inheritance behavior */
- zfs_case_t z_case; /* case-sense */
- boolean_t z_utf8; /* utf8-only */
- int z_norm; /* normalization flags */
- boolean_t z_atime; /* enable atimes mount option */
- boolean_t z_unmounted; /* unmounted */
- rrmlock_t z_teardown_lock;
- struct rmslock z_teardown_inactive_lock;
- list_t z_all_znodes; /* all vnodes in the fs */
- kmutex_t z_znodes_lock; /* lock for z_all_znodes */
- struct zfsctl_root *z_ctldir; /* .zfs directory pointer */
- boolean_t z_show_ctldir; /* expose .zfs in the root dir */
- boolean_t z_issnap; /* true if this is a snapshot */
- boolean_t z_vscan; /* virus scan on/off */
- boolean_t z_use_fuids; /* version allows fuids */
- boolean_t z_replay; /* set during ZIL replay */
- boolean_t z_use_sa; /* version allow system attributes */
- boolean_t z_use_namecache;/* make use of FreeBSD name cache */
- uint64_t z_version; /* ZPL version */
- uint64_t z_shares_dir; /* hidden shares dir */
- kmutex_t z_lock;
- uint64_t z_userquota_obj;
- uint64_t z_groupquota_obj;
- uint64_t z_replay_eof; /* New end of file - replay only */
- sa_attr_type_t *z_attr_table; /* SA attr mapping->id */
-#define ZFS_OBJ_MTX_SZ 64
- kmutex_t z_hold_mtx[ZFS_OBJ_MTX_SZ]; /* znode hold locks */
-#if defined(__FreeBSD__)
- struct task z_unlinked_drain_task;
-#endif
-};
-
-#define ZFS_TRYRLOCK_TEARDOWN_INACTIVE(zfsvfs) \
- rms_try_rlock(&(zfsvfs)->z_teardown_inactive_lock)
-
-#define ZFS_RLOCK_TEARDOWN_INACTIVE(zfsvfs) \
- rms_rlock(&(zfsvfs)->z_teardown_inactive_lock)
-
-#define ZFS_RUNLOCK_TEARDOWN_INACTIVE(zfsvfs) \
- rms_runlock(&(zfsvfs)->z_teardown_inactive_lock)
-
-#define ZFS_WLOCK_TEARDOWN_INACTIVE(zfsvfs) \
- rms_wlock(&(zfsvfs)->z_teardown_inactive_lock)
-
-#define ZFS_WUNLOCK_TEARDOWN_INACTIVE(zfsvfs) \
- rms_wunlock(&(zfsvfs)->z_teardown_inactive_lock)
-
-#define ZFS_TEARDOWN_INACTIVE_WLOCKED(zfsvfs) \
- rms_wowned(&(zfsvfs)->z_teardown_inactive_lock)
-
-/*
- * Normal filesystems (those not under .zfs/snapshot) have a total
- * file ID size limited to 12 bytes (including the length field) due to
- * NFSv2 protocol's limitation of 32 bytes for a filehandle. For historical
- * reasons, this same limit is being imposed by the Solaris NFSv3 implementation
- * (although the NFSv3 protocol actually permits a maximum of 64 bytes). It
- * is not possible to expand beyond 12 bytes without abandoning support
- * of NFSv2.
- *
- * For normal filesystems, we partition up the available space as follows:
- * 2 bytes fid length (required)
- * 6 bytes object number (48 bits)
- * 4 bytes generation number (32 bits)
- *
- * We reserve only 48 bits for the object number, as this is the limit
- * currently defined and imposed by the DMU.
- */
-typedef struct zfid_short {
- uint16_t zf_len;
- uint8_t zf_object[6]; /* obj[i] = obj >> (8 * i) */
- uint8_t zf_gen[4]; /* gen[i] = gen >> (8 * i) */
-} zfid_short_t;
-
-/*
- * Filesystems under .zfs/snapshot have a total file ID size of 22[*] bytes
- * (including the length field). This makes files under .zfs/snapshot
- * accessible by NFSv3 and NFSv4, but not NFSv2.
- *
- * For files under .zfs/snapshot, we partition up the available space
- * as follows:
- * 2 bytes fid length (required)
- * 6 bytes object number (48 bits)
- * 4 bytes generation number (32 bits)
- * 6 bytes objset id (48 bits)
- * 4 bytes[**] currently just zero (32 bits)
- *
- * We reserve only 48 bits for the object number and objset id, as these are
- * the limits currently defined and imposed by the DMU.
- *
- * [*] 20 bytes on FreeBSD to fit into the size of struct fid.
- * [**] 2 bytes on FreeBSD for the above reason.
- */
-typedef struct zfid_long {
- zfid_short_t z_fid;
- uint8_t zf_setid[6]; /* obj[i] = obj >> (8 * i) */
- uint8_t zf_setgen[2]; /* gen[i] = gen >> (8 * i) */
-} zfid_long_t;
-
-#define SHORT_FID_LEN (sizeof (zfid_short_t) - sizeof (uint16_t))
-#define LONG_FID_LEN (sizeof (zfid_long_t) - sizeof (uint16_t))
-
-extern uint_t zfs_fsyncer_key;
-extern int zfs_super_owner;
-
-extern int zfs_suspend_fs(zfsvfs_t *zfsvfs);
-extern int zfs_resume_fs(zfsvfs_t *zfsvfs, struct dsl_dataset *ds);
-extern int zfs_userspace_one(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
- const char *domain, uint64_t rid, uint64_t *valuep);
-extern int zfs_userspace_many(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
- uint64_t *cookiep, void *vbuf, uint64_t *bufsizep);
-extern int zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
- const char *domain, uint64_t rid, uint64_t quota);
-extern boolean_t zfs_owner_overquota(zfsvfs_t *zfsvfs, struct znode *,
- boolean_t isgroup);
-extern boolean_t zfs_fuid_overquota(zfsvfs_t *zfsvfs, boolean_t isgroup,
- uint64_t fuid);
-extern int zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers);
-extern int zfsvfs_create(const char *name, zfsvfs_t **zfvp);
-extern int zfsvfs_create_impl(zfsvfs_t **zfvp, zfsvfs_t *zfsvfs, objset_t *os);
-extern void zfsvfs_free(zfsvfs_t *zfsvfs);
-extern int zfs_check_global_label(const char *dsname, const char *hexsl);
-
-#ifdef _KERNEL
-extern void zfsvfs_update_fromname(const char *oldname, const char *newname);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_FS_ZFS_VFSOPS_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
deleted file mode 100644
index a95545bda4e1..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
+++ /dev/null
@@ -1,374 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
- */
-
-#ifndef _SYS_FS_ZFS_ZNODE_H
-#define _SYS_FS_ZFS_ZNODE_H
-
-#ifdef _KERNEL
-#include <sys/list.h>
-#include <sys/dmu.h>
-#include <sys/sa.h>
-#include <sys/zfs_vfsops.h>
-#include <sys/rrwlock.h>
-#include <sys/zfs_sa.h>
-#include <sys/zfs_stat.h>
-#include <sys/zfs_rlock.h>
-#endif
-#include <sys/zfs_acl.h>
-#include <sys/zil.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Additional file level attributes, that are stored
- * in the upper half of zp_flags
- */
-#define ZFS_READONLY 0x0000000100000000
-#define ZFS_HIDDEN 0x0000000200000000
-#define ZFS_SYSTEM 0x0000000400000000
-#define ZFS_ARCHIVE 0x0000000800000000
-#define ZFS_IMMUTABLE 0x0000001000000000
-#define ZFS_NOUNLINK 0x0000002000000000
-#define ZFS_APPENDONLY 0x0000004000000000
-#define ZFS_NODUMP 0x0000008000000000
-#define ZFS_OPAQUE 0x0000010000000000
-#define ZFS_AV_QUARANTINED 0x0000020000000000
-#define ZFS_AV_MODIFIED 0x0000040000000000
-#define ZFS_REPARSE 0x0000080000000000
-#define ZFS_OFFLINE 0x0000100000000000
-#define ZFS_SPARSE 0x0000200000000000
-
-#define ZFS_ATTR_SET(zp, attr, value, pflags, tx) \
-{ \
- if (value) \
- pflags |= attr; \
- else \
- pflags &= ~attr; \
- VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_FLAGS(zp->z_zfsvfs), \
- &pflags, sizeof (pflags), tx)); \
-}
-
-/*
- * Define special zfs pflags
- */
-#define ZFS_XATTR 0x1 /* is an extended attribute */
-#define ZFS_INHERIT_ACE 0x2 /* ace has inheritable ACEs */
-#define ZFS_ACL_TRIVIAL 0x4 /* files ACL is trivial */
-#define ZFS_ACL_OBJ_ACE 0x8 /* ACL has CMPLX Object ACE */
-#define ZFS_ACL_PROTECTED 0x10 /* ACL protected */
-#define ZFS_ACL_DEFAULTED 0x20 /* ACL should be defaulted */
-#define ZFS_ACL_AUTO_INHERIT 0x40 /* ACL should be inherited */
-#define ZFS_BONUS_SCANSTAMP 0x80 /* Scanstamp in bonus area */
-#define ZFS_NO_EXECS_DENIED 0x100 /* exec was given to everyone */
-
-#define SA_ZPL_ATIME(z) z->z_attr_table[ZPL_ATIME]
-#define SA_ZPL_MTIME(z) z->z_attr_table[ZPL_MTIME]
-#define SA_ZPL_CTIME(z) z->z_attr_table[ZPL_CTIME]
-#define SA_ZPL_CRTIME(z) z->z_attr_table[ZPL_CRTIME]
-#define SA_ZPL_GEN(z) z->z_attr_table[ZPL_GEN]
-#define SA_ZPL_DACL_ACES(z) z->z_attr_table[ZPL_DACL_ACES]
-#define SA_ZPL_XATTR(z) z->z_attr_table[ZPL_XATTR]
-#define SA_ZPL_SYMLINK(z) z->z_attr_table[ZPL_SYMLINK]
-#define SA_ZPL_RDEV(z) z->z_attr_table[ZPL_RDEV]
-#define SA_ZPL_SCANSTAMP(z) z->z_attr_table[ZPL_SCANSTAMP]
-#define SA_ZPL_UID(z) z->z_attr_table[ZPL_UID]
-#define SA_ZPL_GID(z) z->z_attr_table[ZPL_GID]
-#define SA_ZPL_PARENT(z) z->z_attr_table[ZPL_PARENT]
-#define SA_ZPL_LINKS(z) z->z_attr_table[ZPL_LINKS]
-#define SA_ZPL_MODE(z) z->z_attr_table[ZPL_MODE]
-#define SA_ZPL_DACL_COUNT(z) z->z_attr_table[ZPL_DACL_COUNT]
-#define SA_ZPL_FLAGS(z) z->z_attr_table[ZPL_FLAGS]
-#define SA_ZPL_SIZE(z) z->z_attr_table[ZPL_SIZE]
-#define SA_ZPL_ZNODE_ACL(z) z->z_attr_table[ZPL_ZNODE_ACL]
-#define SA_ZPL_PAD(z) z->z_attr_table[ZPL_PAD]
-
-/*
- * Is ID ephemeral?
- */
-#define IS_EPHEMERAL(x) (x > MAXUID)
-
-/*
- * Should we use FUIDs?
- */
-#define USE_FUIDS(version, os) (version >= ZPL_VERSION_FUID && \
- spa_version(dmu_objset_spa(os)) >= SPA_VERSION_FUID)
-#define USE_SA(version, os) (version >= ZPL_VERSION_SA && \
- spa_version(dmu_objset_spa(os)) >= SPA_VERSION_SA)
-
-#define MASTER_NODE_OBJ 1
-
-/*
- * Special attributes for master node.
- * "userquota@" and "groupquota@" are also valid (from
- * zfs_userquota_prop_prefixes[]).
- */
-#define ZFS_FSID "FSID"
-#define ZFS_UNLINKED_SET "DELETE_QUEUE"
-#define ZFS_ROOT_OBJ "ROOT"
-#define ZPL_VERSION_STR "VERSION"
-#define ZFS_FUID_TABLES "FUID"
-#define ZFS_SHARES_DIR "SHARES"
-#define ZFS_SA_ATTRS "SA_ATTRS"
-
-/*
- * Convert mode bits (zp_mode) to BSD-style DT_* values for storing in
- * the directory entries.
- */
-#ifndef IFTODT
-#define IFTODT(mode) (((mode) & S_IFMT) >> 12)
-#endif
-
-/*
- * The directory entry has the type (currently unused on Solaris) in the
- * top 4 bits, and the object number in the low 48 bits. The "middle"
- * 12 bits are unused.
- */
-#define ZFS_DIRENT_TYPE(de) BF64_GET(de, 60, 4)
-#define ZFS_DIRENT_OBJ(de) BF64_GET(de, 0, 48)
-
-/*
- * Directory entry locks control access to directory entries.
- * They are used to protect creates, deletes, and renames.
- * Each directory znode has a mutex and a list of locked names.
- */
-#ifdef _KERNEL
-typedef struct zfs_dirlock {
- char *dl_name; /* directory entry being locked */
- uint32_t dl_sharecnt; /* 0 if exclusive, > 0 if shared */
- uint8_t dl_namelock; /* 1 if z_name_lock is NOT held */
- uint16_t dl_namesize; /* set if dl_name was allocated */
- kcondvar_t dl_cv; /* wait for entry to be unlocked */
- struct znode *dl_dzp; /* directory znode */
- struct zfs_dirlock *dl_next; /* next in z_dirlocks list */
-} zfs_dirlock_t;
-
-typedef struct znode {
- struct zfsvfs *z_zfsvfs;
- vnode_t *z_vnode;
- uint64_t z_id; /* object ID for this znode */
-#ifdef illumos
- kmutex_t z_lock; /* znode modification lock */
- krwlock_t z_parent_lock; /* parent lock for directories */
- krwlock_t z_name_lock; /* "master" lock for dirent locks */
- zfs_dirlock_t *z_dirlocks; /* directory entry lock list */
-#endif
- rangelock_t z_rangelock; /* file range locks */
- uint8_t z_unlinked; /* file has been unlinked */
- uint8_t z_atime_dirty; /* atime needs to be synced */
- uint8_t z_zn_prefetch; /* Prefetch znodes? */
- uint8_t z_moved; /* Has this znode been moved? */
- uint_t z_blksz; /* block size in bytes */
- uint_t z_seq; /* modification sequence number */
- uint64_t z_mapcnt; /* number of pages mapped to file */
- uint64_t z_dnodesize; /* dnode size */
- uint64_t z_gen; /* generation (cached) */
- uint64_t z_size; /* file size (cached) */
- uint64_t z_atime[2]; /* atime (cached) */
- uint64_t z_links; /* file links (cached) */
- uint64_t z_pflags; /* pflags (cached) */
- uint64_t z_uid; /* uid fuid (cached) */
- uint64_t z_gid; /* gid fuid (cached) */
- mode_t z_mode; /* mode (cached) */
- uint32_t z_sync_cnt; /* synchronous open count */
- kmutex_t z_acl_lock; /* acl data lock */
- zfs_acl_t *z_acl_cached; /* cached acl */
- list_node_t z_link_node; /* all znodes in fs link */
- sa_handle_t *z_sa_hdl; /* handle to sa data */
- boolean_t z_is_sa; /* are we native sa? */
-} znode_t;
-
-#define ZFS_LINK_MAX UINT64_MAX
-
-/*
- * Range locking rules
- * --------------------
- * 1. When truncating a file (zfs_create, zfs_setattr, zfs_space) the whole
- * file range needs to be locked as RL_WRITER. Only then can the pages be
- * freed etc and zp_size reset. zp_size must be set within range lock.
- * 2. For writes and punching holes (zfs_write & zfs_space) just the range
- * being written or freed needs to be locked as RL_WRITER.
- * Multiple writes at the end of the file must coordinate zp_size updates
- * to ensure data isn't lost. A compare and swap loop is currently used
- * to ensure the file size is at least the offset last written.
- * 3. For reads (zfs_read, zfs_get_data & zfs_putapage) just the range being
- * read needs to be locked as RL_READER. A check against zp_size can then
- * be made for reading beyond end of file.
- */
-
-/*
- * Convert between znode pointers and vnode pointers
- */
-#ifdef DEBUG
-static __inline vnode_t *
-ZTOV(znode_t *zp)
-{
- vnode_t *vp = zp->z_vnode;
-
- ASSERT(vp != NULL && vp->v_data == zp);
- return (vp);
-}
-static __inline znode_t *
-VTOZ(vnode_t *vp)
-{
- znode_t *zp = (znode_t *)vp->v_data;
-
- ASSERT(zp != NULL && zp->z_vnode == vp);
- return (zp);
-}
-#else
-#define ZTOV(ZP) ((ZP)->z_vnode)
-#define VTOZ(VP) ((znode_t *)(VP)->v_data)
-#endif
-
-#define VTOZ_SMR(VP) ((znode_t *)vn_load_v_data_smr(VP))
-
-/* Called on entry to each ZFS vnode and vfs operation */
-#define ZFS_ENTER(zfsvfs) \
- { \
- rrm_enter_read(&(zfsvfs)->z_teardown_lock, FTAG); \
- if ((zfsvfs)->z_unmounted) { \
- ZFS_EXIT(zfsvfs); \
- return (EIO); \
- } \
- }
-
-/* Must be called before exiting the vop */
-#define ZFS_EXIT(zfsvfs) rrm_exit(&(zfsvfs)->z_teardown_lock, FTAG)
-
-/* Verifies the znode is valid */
-#define ZFS_VERIFY_ZP(zp) \
- if ((zp)->z_sa_hdl == NULL) { \
- ZFS_EXIT((zp)->z_zfsvfs); \
- return (EIO); \
- } \
-
-/*
- * Macros for dealing with dmu_buf_hold
- */
-#define ZFS_OBJ_HASH(obj_num) ((obj_num) & (ZFS_OBJ_MTX_SZ - 1))
-#define ZFS_OBJ_MUTEX(zfsvfs, obj_num) \
- (&(zfsvfs)->z_hold_mtx[ZFS_OBJ_HASH(obj_num)])
-#define ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num) \
- mutex_enter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
-#define ZFS_OBJ_HOLD_TRYENTER(zfsvfs, obj_num) \
- mutex_tryenter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
-#define ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num) \
- mutex_exit(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
-
-/* Encode ZFS stored time values from a struct timespec */
-#define ZFS_TIME_ENCODE(tp, stmp) \
-{ \
- (stmp)[0] = (uint64_t)(tp)->tv_sec; \
- (stmp)[1] = (uint64_t)(tp)->tv_nsec; \
-}
-
-/* Decode ZFS stored time values to a struct timespec */
-#define ZFS_TIME_DECODE(tp, stmp) \
-{ \
- (tp)->tv_sec = (time_t)(stmp)[0]; \
- (tp)->tv_nsec = (long)(stmp)[1]; \
-}
-
-/*
- * Timestamp defines
- */
-#define ACCESSED (AT_ATIME)
-#define STATE_CHANGED (AT_CTIME)
-#define CONTENT_MODIFIED (AT_MTIME | AT_CTIME)
-
-#define ZFS_ACCESSTIME_STAMP(zfsvfs, zp) \
- if ((zfsvfs)->z_atime && !((zfsvfs)->z_vfs->vfs_flag & VFS_RDONLY)) \
- zfs_tstamp_update_setup(zp, ACCESSED, NULL, NULL, B_FALSE);
-
-extern int zfs_init_fs(zfsvfs_t *, znode_t **);
-extern void zfs_set_dataprop(objset_t *);
-extern void zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *,
- dmu_tx_t *tx);
-extern void zfs_tstamp_update_setup(znode_t *, uint_t, uint64_t [2],
- uint64_t [2], boolean_t);
-extern void zfs_grow_blocksize(znode_t *, uint64_t, dmu_tx_t *);
-extern int zfs_freesp(znode_t *, uint64_t, uint64_t, int, boolean_t);
-extern void zfs_znode_init(void);
-extern void zfs_znode_fini(void);
-extern int zfs_zget(zfsvfs_t *, uint64_t, znode_t **);
-extern int zfs_rezget(znode_t *);
-extern void zfs_zinactive(znode_t *);
-extern void zfs_znode_delete(znode_t *, dmu_tx_t *);
-extern void zfs_znode_free(znode_t *);
-extern void zfs_remove_op_tables();
-extern int zfs_create_op_tables();
-extern dev_t zfs_cmpldev(uint64_t);
-extern int zfs_get_zplprop(objset_t *os, zfs_prop_t prop, uint64_t *value);
-extern int zfs_get_stats(objset_t *os, nvlist_t *nv);
-extern boolean_t zfs_get_vfs_flag_unmounted(objset_t *os);
-extern void zfs_znode_dmu_fini(znode_t *);
-
-extern void zfs_log_create(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype,
- znode_t *dzp, znode_t *zp, char *name, vsecattr_t *, zfs_fuid_info_t *,
- vattr_t *vap);
-extern int zfs_log_create_txtype(zil_create_t, vsecattr_t *vsecp,
- vattr_t *vap);
-extern void zfs_log_remove(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype,
- znode_t *dzp, char *name, uint64_t foid);
-#define ZFS_NO_OBJECT 0 /* no object id */
-extern void zfs_log_link(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype,
- znode_t *dzp, znode_t *zp, char *name);
-extern void zfs_log_symlink(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype,
- znode_t *dzp, znode_t *zp, char *name, char *link);
-extern void zfs_log_rename(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype,
- znode_t *sdzp, char *sname, znode_t *tdzp, char *dname, znode_t *szp);
-extern void zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype,
- znode_t *zp, offset_t off, ssize_t len, int ioflag);
-extern void zfs_log_truncate(zilog_t *zilog, dmu_tx_t *tx, int txtype,
- znode_t *zp, uint64_t off, uint64_t len);
-extern void zfs_log_setattr(zilog_t *zilog, dmu_tx_t *tx, int txtype,
- znode_t *zp, vattr_t *vap, uint_t mask_applied, zfs_fuid_info_t *fuidp);
-#ifndef ZFS_NO_ACL
-extern void zfs_log_acl(zilog_t *zilog, dmu_tx_t *tx, znode_t *zp,
- vsecattr_t *vsecp, zfs_fuid_info_t *fuidp);
-#endif
-extern void zfs_xvattr_set(znode_t *zp, xvattr_t *xvap, dmu_tx_t *tx);
-extern void zfs_upgrade(zfsvfs_t *zfsvfs, dmu_tx_t *tx);
-extern int zfs_create_share_dir(zfsvfs_t *zfsvfs, dmu_tx_t *tx);
-
-extern zil_get_data_t zfs_get_data;
-extern zil_replay_func_t *zfs_replay_vector[TX_MAX_TYPE];
-extern int zfsfstype;
-
-extern int zfs_znode_parent_and_name(znode_t *zp, znode_t **dzpp, char *buf);
-
-#endif /* _KERNEL */
-
-extern int zfs_obj_to_path(objset_t *osp, uint64_t obj, char *buf, int len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_FS_ZFS_ZNODE_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
deleted file mode 100644
index a27a9547ac43..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
+++ /dev/null
@@ -1,464 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-/* Portions Copyright 2010 Robert Milkowski */
-
-#ifndef _SYS_ZIL_H
-#define _SYS_ZIL_H
-
-#include <sys/types.h>
-#include <sys/spa.h>
-#include <sys/zio.h>
-#include <sys/dmu.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct dsl_pool;
-struct dsl_dataset;
-struct lwb;
-
-/*
- * Intent log format:
- *
- * Each objset has its own intent log. The log header (zil_header_t)
- * for objset N's intent log is kept in the Nth object of the SPA's
- * intent_log objset. The log header points to a chain of log blocks,
- * each of which contains log records (i.e., transactions) followed by
- * a log block trailer (zil_trailer_t). The format of a log record
- * depends on the record (or transaction) type, but all records begin
- * with a common structure that defines the type, length, and txg.
- */
-
-/*
- * Intent log header - this on disk structure holds fields to manage
- * the log. All fields are 64 bit to easily handle cross architectures.
- */
-typedef struct zil_header {
- uint64_t zh_claim_txg; /* txg in which log blocks were claimed */
- uint64_t zh_replay_seq; /* highest replayed sequence number */
- blkptr_t zh_log; /* log chain */
- uint64_t zh_claim_blk_seq; /* highest claimed block sequence number */
- uint64_t zh_flags; /* header flags */
- uint64_t zh_claim_lr_seq; /* highest claimed lr sequence number */
- uint64_t zh_pad[3];
-} zil_header_t;
-
-/*
- * zh_flags bit settings
- */
-#define ZIL_REPLAY_NEEDED 0x1 /* replay needed - internal only */
-#define ZIL_CLAIM_LR_SEQ_VALID 0x2 /* zh_claim_lr_seq field is valid */
-
-/*
- * Log block chaining.
- *
- * Log blocks are chained together. Originally they were chained at the
- * end of the block. For performance reasons the chain was moved to the
- * beginning of the block which allows writes for only the data being used.
- * The older position is supported for backwards compatability.
- *
- * The zio_eck_t contains a zec_cksum which for the intent log is
- * the sequence number of this log block. A seq of 0 is invalid.
- * The zec_cksum is checked by the SPA against the sequence
- * number passed in the blk_cksum field of the blkptr_t
- */
-typedef struct zil_chain {
- uint64_t zc_pad;
- blkptr_t zc_next_blk; /* next block in chain */
- uint64_t zc_nused; /* bytes in log block used */
- zio_eck_t zc_eck; /* block trailer */
-} zil_chain_t;
-
-#define ZIL_MIN_BLKSZ 4096ULL
-
-/*
- * ziltest is by and large an ugly hack, but very useful in
- * checking replay without tedious work.
- * When running ziltest we want to keep all itx's and so maintain
- * a single list in the zl_itxg[] that uses a high txg: ZILTEST_TXG
- * We subtract TXG_CONCURRENT_STATES to allow for common code.
- */
-#define ZILTEST_TXG (UINT64_MAX - TXG_CONCURRENT_STATES)
-
-/*
- * The words of a log block checksum.
- */
-#define ZIL_ZC_GUID_0 0
-#define ZIL_ZC_GUID_1 1
-#define ZIL_ZC_OBJSET 2
-#define ZIL_ZC_SEQ 3
-
-typedef enum zil_create {
- Z_FILE,
- Z_DIR,
- Z_XATTRDIR,
-} zil_create_t;
-
-/*
- * size of xvattr log section.
- * its composed of lr_attr_t + xvattr bitmap + 2 64 bit timestamps
- * for create time and a single 64 bit integer for all of the attributes,
- * and 4 64 bit integers (32 bytes) for the scanstamp.
- *
- */
-
-#define ZIL_XVAT_SIZE(mapsize) \
- sizeof (lr_attr_t) + (sizeof (uint32_t) * (mapsize - 1)) + \
- (sizeof (uint64_t) * 7)
-
-/*
- * Size of ACL in log. The ACE data is padded out to properly align
- * on 8 byte boundary.
- */
-
-#define ZIL_ACE_LENGTH(x) (roundup(x, sizeof (uint64_t)))
-
-/*
- * Intent log transaction types and record structures
- */
-#define TX_COMMIT 0 /* Commit marker (no on-disk state) */
-#define TX_CREATE 1 /* Create file */
-#define TX_MKDIR 2 /* Make directory */
-#define TX_MKXATTR 3 /* Make XATTR directory */
-#define TX_SYMLINK 4 /* Create symbolic link to a file */
-#define TX_REMOVE 5 /* Remove file */
-#define TX_RMDIR 6 /* Remove directory */
-#define TX_LINK 7 /* Create hard link to a file */
-#define TX_RENAME 8 /* Rename a file */
-#define TX_WRITE 9 /* File write */
-#define TX_TRUNCATE 10 /* Truncate a file */
-#define TX_SETATTR 11 /* Set file attributes */
-#define TX_ACL_V0 12 /* Set old formatted ACL */
-#define TX_ACL 13 /* Set ACL */
-#define TX_CREATE_ACL 14 /* create with ACL */
-#define TX_CREATE_ATTR 15 /* create + attrs */
-#define TX_CREATE_ACL_ATTR 16 /* create with ACL + attrs */
-#define TX_MKDIR_ACL 17 /* mkdir with ACL */
-#define TX_MKDIR_ATTR 18 /* mkdir with attr */
-#define TX_MKDIR_ACL_ATTR 19 /* mkdir with ACL + attrs */
-#define TX_WRITE2 20 /* dmu_sync EALREADY write */
-#define TX_MAX_TYPE 21 /* Max transaction type */
-
-/*
- * The transactions for mkdir, symlink, remove, rmdir, link, and rename
- * may have the following bit set, indicating the original request
- * specified case-insensitive handling of names.
- */
-#define TX_CI ((uint64_t)0x1 << 63) /* case-insensitive behavior requested */
-
-/*
- * Transactions for write, truncate, setattr, acl_v0, and acl can be logged
- * out of order. For convenience in the code, all such records must have
- * lr_foid at the same offset.
- */
-#define TX_OOO(txtype) \
- ((txtype) == TX_WRITE || \
- (txtype) == TX_TRUNCATE || \
- (txtype) == TX_SETATTR || \
- (txtype) == TX_ACL_V0 || \
- (txtype) == TX_ACL || \
- (txtype) == TX_WRITE2)
-
-/*
- * The number of dnode slots consumed by the object is stored in the 8
- * unused upper bits of the object ID. We subtract 1 from the value
- * stored on disk for compatibility with implementations that don't
- * support large dnodes. The slot count for a single-slot dnode will
- * contain 0 for those bits to preserve the log record format for
- * "small" dnodes.
- */
-#define LR_FOID_GET_SLOTS(oid) (BF64_GET((oid), 56, 8) + 1)
-#define LR_FOID_SET_SLOTS(oid, x) BF64_SET((oid), 56, 8, (x) - 1)
-#define LR_FOID_GET_OBJ(oid) BF64_GET((oid), 0, DN_MAX_OBJECT_SHIFT)
-#define LR_FOID_SET_OBJ(oid, x) BF64_SET((oid), 0, DN_MAX_OBJECT_SHIFT, (x))
-
-/*
- * Format of log records.
- * The fields are carefully defined to allow them to be aligned
- * and sized the same on sparc & intel architectures.
- * Each log record has a common structure at the beginning.
- *
- * The log record on disk (lrc_seq) holds the sequence number of all log
- * records which is used to ensure we don't replay the same record.
- */
-typedef struct { /* common log record header */
- uint64_t lrc_txtype; /* intent log transaction type */
- uint64_t lrc_reclen; /* transaction record length */
- uint64_t lrc_txg; /* dmu transaction group number */
- uint64_t lrc_seq; /* see comment above */
-} lr_t;
-
-/*
- * Common start of all out-of-order record types (TX_OOO() above).
- */
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_foid; /* object id */
-} lr_ooo_t;
-
-/*
- * Handle option extended vattr attributes.
- *
- * Whenever new attributes are added the version number
- * will need to be updated as will code in
- * zfs_log.c and zfs_replay.c
- */
-typedef struct {
- uint32_t lr_attr_masksize; /* number of elements in array */
- uint32_t lr_attr_bitmap; /* First entry of array */
- /* remainder of array and any additional fields */
-} lr_attr_t;
-
-/*
- * log record for creates without optional ACL.
- * This log record does support optional xvattr_t attributes.
- */
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_doid; /* object id of directory */
- uint64_t lr_foid; /* object id of created file object */
- uint64_t lr_mode; /* mode of object */
- uint64_t lr_uid; /* uid of object */
- uint64_t lr_gid; /* gid of object */
- uint64_t lr_gen; /* generation (txg of creation) */
- uint64_t lr_crtime[2]; /* creation time */
- uint64_t lr_rdev; /* rdev of object to create */
- /* name of object to create follows this */
- /* for symlinks, link content follows name */
- /* for creates with xvattr data, the name follows the xvattr info */
-} lr_create_t;
-
-/*
- * FUID ACL record will be an array of ACEs from the original ACL.
- * If this array includes ephemeral IDs, the record will also include
- * an array of log-specific FUIDs to replace the ephemeral IDs.
- * Only one copy of each unique domain will be present, so the log-specific
- * FUIDs will use an index into a compressed domain table. On replay this
- * information will be used to construct real FUIDs (and bypass idmap,
- * since it may not be available).
- */
-
-/*
- * Log record for creates with optional ACL
- * This log record is also used for recording any FUID
- * information needed for replaying the create. If the
- * file doesn't have any actual ACEs then the lr_aclcnt
- * would be zero.
- *
- * After lr_acl_flags, there are a lr_acl_bytes number of variable sized ace's.
- * If create is also setting xvattr's, then acl data follows xvattr.
- * If ACE FUIDs are needed then they will follow the xvattr_t. Following
- * the FUIDs will be the domain table information. The FUIDs for the owner
- * and group will be in lr_create. Name follows ACL data.
- */
-typedef struct {
- lr_create_t lr_create; /* common create portion */
- uint64_t lr_aclcnt; /* number of ACEs in ACL */
- uint64_t lr_domcnt; /* number of unique domains */
- uint64_t lr_fuidcnt; /* number of real fuids */
- uint64_t lr_acl_bytes; /* number of bytes in ACL */
- uint64_t lr_acl_flags; /* ACL flags */
-} lr_acl_create_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_doid; /* obj id of directory */
- /* name of object to remove follows this */
-} lr_remove_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_doid; /* obj id of directory */
- uint64_t lr_link_obj; /* obj id of link */
- /* name of object to link follows this */
-} lr_link_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_sdoid; /* obj id of source directory */
- uint64_t lr_tdoid; /* obj id of target directory */
- /* 2 strings: names of source and destination follow this */
-} lr_rename_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_foid; /* file object to write */
- uint64_t lr_offset; /* offset to write to */
- uint64_t lr_length; /* user data length to write */
- uint64_t lr_blkoff; /* no longer used */
- blkptr_t lr_blkptr; /* spa block pointer for replay */
- /* write data will follow for small writes */
-} lr_write_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_foid; /* object id of file to truncate */
- uint64_t lr_offset; /* offset to truncate from */
- uint64_t lr_length; /* length to truncate */
-} lr_truncate_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_foid; /* file object to change attributes */
- uint64_t lr_mask; /* mask of attributes to set */
- uint64_t lr_mode; /* mode to set */
- uint64_t lr_uid; /* uid to set */
- uint64_t lr_gid; /* gid to set */
- uint64_t lr_size; /* size to set */
- uint64_t lr_atime[2]; /* access time */
- uint64_t lr_mtime[2]; /* modification time */
- /* optional attribute lr_attr_t may be here */
-} lr_setattr_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_foid; /* obj id of file */
- uint64_t lr_aclcnt; /* number of acl entries */
- /* lr_aclcnt number of ace_t entries follow this */
-} lr_acl_v0_t;
-
-typedef struct {
- lr_t lr_common; /* common portion of log record */
- uint64_t lr_foid; /* obj id of file */
- uint64_t lr_aclcnt; /* number of ACEs in ACL */
- uint64_t lr_domcnt; /* number of unique domains */
- uint64_t lr_fuidcnt; /* number of real fuids */
- uint64_t lr_acl_bytes; /* number of bytes in ACL */
- uint64_t lr_acl_flags; /* ACL flags */
- /* lr_acl_bytes number of variable sized ace's follows */
-} lr_acl_t;
-
-/*
- * ZIL structure definitions, interface function prototype and globals.
- */
-
-/*
- * Writes are handled in three different ways:
- *
- * WR_INDIRECT:
- * In this mode, if we need to commit the write later, then the block
- * is immediately written into the file system (using dmu_sync),
- * and a pointer to the block is put into the log record.
- * When the txg commits the block is linked in.
- * This saves additionally writing the data into the log record.
- * There are a few requirements for this to occur:
- * - write is greater than zfs/zvol_immediate_write_sz
- * - not using slogs (as slogs are assumed to always be faster
- * than writing into the main pool)
- * - the write occupies only one block
- * WR_COPIED:
- * If we know we'll immediately be committing the
- * transaction (FSYNC or FDSYNC), the we allocate a larger
- * log record here for the data and copy the data in.
- * WR_NEED_COPY:
- * Otherwise we don't allocate a buffer, and *if* we need to
- * flush the write later then a buffer is allocated and
- * we retrieve the data using the dmu.
- */
-typedef enum {
- WR_INDIRECT, /* indirect - a large write (dmu_sync() data */
- /* and put blkptr in log, rather than actual data) */
- WR_COPIED, /* immediate - data is copied into lr_write_t */
- WR_NEED_COPY, /* immediate - data needs to be copied if pushed */
- WR_NUM_STATES /* number of states */
-} itx_wr_state_t;
-
-typedef struct itx {
- list_node_t itx_node; /* linkage on zl_itx_list */
- void *itx_private; /* type-specific opaque data */
- itx_wr_state_t itx_wr_state; /* write state */
- uint8_t itx_sync; /* synchronous transaction */
- uint64_t itx_oid; /* object id */
- lr_t itx_lr; /* common part of log record */
- /* followed by type-specific part of lr_xx_t and its immediate data */
-} itx_t;
-
-typedef int zil_parse_blk_func_t(zilog_t *zilog, blkptr_t *bp, void *arg,
- uint64_t txg);
-typedef int zil_parse_lr_func_t(zilog_t *zilog, lr_t *lr, void *arg,
- uint64_t txg);
-typedef int zil_replay_func_t(void *arg1, void *arg2, boolean_t byteswap);
-typedef int zil_get_data_t(void *arg, lr_write_t *lr, char *dbuf,
- struct lwb *lwb, zio_t *zio);
-
-extern int zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func,
- zil_parse_lr_func_t *parse_lr_func, void *arg, uint64_t txg);
-
-extern void zil_init(void);
-extern void zil_fini(void);
-
-extern zilog_t *zil_alloc(objset_t *os, zil_header_t *zh_phys);
-extern void zil_free(zilog_t *zilog);
-
-extern zilog_t *zil_open(objset_t *os, zil_get_data_t *get_data);
-extern void zil_close(zilog_t *zilog);
-
-extern void zil_replay(objset_t *os, void *arg,
- zil_replay_func_t *replay_func[TX_MAX_TYPE]);
-extern boolean_t zil_replaying(zilog_t *zilog, dmu_tx_t *tx);
-extern void zil_destroy(zilog_t *zilog, boolean_t keep_first);
-extern void zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx);
-extern void zil_rollback_destroy(zilog_t *zilog, dmu_tx_t *tx);
-
-extern itx_t *zil_itx_create(uint64_t txtype, size_t lrsize);
-extern void zil_itx_destroy(itx_t *itx);
-extern void zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx);
-
-extern void zil_async_to_sync(zilog_t *zilog, uint64_t oid);
-extern void zil_commit(zilog_t *zilog, uint64_t oid);
-extern void zil_commit_impl(zilog_t *zilog, uint64_t oid);
-
-extern int zil_reset(const char *osname, void *txarg);
-extern int zil_claim(struct dsl_pool *dp,
- struct dsl_dataset *ds, void *txarg);
-extern int zil_check_log_chain(struct dsl_pool *dp,
- struct dsl_dataset *ds, void *tx);
-extern void zil_sync(zilog_t *zilog, dmu_tx_t *tx);
-extern void zil_clean(zilog_t *zilog, uint64_t synced_txg);
-
-extern int zil_suspend(const char *osname, void **cookiep);
-extern void zil_resume(void *cookie);
-
-extern void zil_lwb_add_block(struct lwb *lwb, const blkptr_t *bp);
-extern void zil_lwb_add_txg(struct lwb *lwb, uint64_t txg);
-extern int zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp);
-
-extern void zil_set_sync(zilog_t *zilog, uint64_t syncval);
-
-extern void zil_set_logbias(zilog_t *zilog, uint64_t slogval);
-
-extern uint64_t zil_max_copied_data(zilog_t *zilog);
-extern uint64_t zil_max_log_data(zilog_t *zilog);
-
-extern int zil_replay_disable;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZIL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
deleted file mode 100644
index a19ba970574f..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
+++ /dev/null
@@ -1,229 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2014 Integros [integros.com]
- */
-
-/* Portions Copyright 2010 Robert Milkowski */
-
-#ifndef _SYS_ZIL_IMPL_H
-#define _SYS_ZIL_IMPL_H
-
-#include <sys/zil.h>
-#include <sys/dmu_objset.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Possbile states for a given lwb structure.
- *
- * An lwb will start out in the "closed" state, and then transition to
- * the "opened" state via a call to zil_lwb_write_open(). When
- * transitioning from "closed" to "opened" the zilog's "zl_issuer_lock"
- * must be held.
- *
- * After the lwb is "opened", it can transition into the "issued" state
- * via zil_lwb_write_issue(). Again, the zilog's "zl_issuer_lock" must
- * be held when making this transition.
- *
- * After the lwb's write zio completes, it transitions into the "write
- * done" state via zil_lwb_write_done(); and then into the "flush done"
- * state via zil_lwb_flush_vdevs_done(). When transitioning from
- * "issued" to "write done", and then from "write done" to "flush done",
- * the zilog's "zl_lock" must be held, *not* the "zl_issuer_lock".
- *
- * The zilog's "zl_issuer_lock" can become heavily contended in certain
- * workloads, so we specifically avoid acquiring that lock when
- * transitioning an lwb from "issued" to "done". This allows us to avoid
- * having to acquire the "zl_issuer_lock" for each lwb ZIO completion,
- * which would have added more lock contention on an already heavily
- * contended lock.
- *
- * Additionally, correctness when reading an lwb's state is often
- * acheived by exploiting the fact that these state transitions occur in
- * this specific order; i.e. "closed" to "opened" to "issued" to "done".
- *
- * Thus, if an lwb is in the "closed" or "opened" state, holding the
- * "zl_issuer_lock" will prevent a concurrent thread from transitioning
- * that lwb to the "issued" state. Likewise, if an lwb is already in the
- * "issued" state, holding the "zl_lock" will prevent a concurrent
- * thread from transitioning that lwb to the "write done" state.
- */
-typedef enum {
- LWB_STATE_CLOSED,
- LWB_STATE_OPENED,
- LWB_STATE_ISSUED,
- LWB_STATE_WRITE_DONE,
- LWB_STATE_FLUSH_DONE,
- LWB_NUM_STATES
-} lwb_state_t;
-
-/*
- * Log write block (lwb)
- *
- * Prior to an lwb being issued to disk via zil_lwb_write_issue(), it
- * will be protected by the zilog's "zl_issuer_lock". Basically, prior
- * to it being issued, it will only be accessed by the thread that's
- * holding the "zl_issuer_lock". After the lwb is issued, the zilog's
- * "zl_lock" is used to protect the lwb against concurrent access.
- */
-typedef struct lwb {
- zilog_t *lwb_zilog; /* back pointer to log struct */
- blkptr_t lwb_blk; /* on disk address of this log blk */
- boolean_t lwb_slog; /* lwb_blk is on SLOG device */
- int lwb_nused; /* # used bytes in buffer */
- int lwb_sz; /* size of block and buffer */
- lwb_state_t lwb_state; /* the state of this lwb */
- char *lwb_buf; /* log write buffer */
- zio_t *lwb_write_zio; /* zio for the lwb buffer */
- zio_t *lwb_root_zio; /* root zio for lwb write and flushes */
- dmu_tx_t *lwb_tx; /* tx for log block allocation */
- uint64_t lwb_max_txg; /* highest txg in this lwb */
- list_node_t lwb_node; /* zilog->zl_lwb_list linkage */
- list_t lwb_waiters; /* list of zil_commit_waiter's */
- avl_tree_t lwb_vdev_tree; /* vdevs to flush after lwb write */
- kmutex_t lwb_vdev_lock; /* protects lwb_vdev_tree */
- hrtime_t lwb_issued_timestamp; /* when was the lwb issued? */
-} lwb_t;
-
-/*
- * ZIL commit waiter.
- *
- * This structure is allocated each time zil_commit() is called, and is
- * used by zil_commit() to communicate with other parts of the ZIL, such
- * that zil_commit() can know when it safe for it return. For more
- * details, see the comment above zil_commit().
- *
- * The "zcw_lock" field is used to protect the commit waiter against
- * concurrent access. This lock is often acquired while already holding
- * the zilog's "zl_issuer_lock" or "zl_lock"; see the functions
- * zil_process_commit_list() and zil_lwb_flush_vdevs_done() as examples
- * of this. Thus, one must be careful not to acquire the
- * "zl_issuer_lock" or "zl_lock" when already holding the "zcw_lock";
- * e.g. see the zil_commit_waiter_timeout() function.
- */
-typedef struct zil_commit_waiter {
- kcondvar_t zcw_cv; /* signalled when "done" */
- kmutex_t zcw_lock; /* protects fields of this struct */
- list_node_t zcw_node; /* linkage in lwb_t:lwb_waiter list */
- lwb_t *zcw_lwb; /* back pointer to lwb when linked */
- boolean_t zcw_done; /* B_TRUE when "done", else B_FALSE */
- int zcw_zio_error; /* contains the zio io_error value */
-} zil_commit_waiter_t;
-
-/*
- * Intent log transaction lists
- */
-typedef struct itxs {
- list_t i_sync_list; /* list of synchronous itxs */
- avl_tree_t i_async_tree; /* tree of foids for async itxs */
-} itxs_t;
-
-typedef struct itxg {
- kmutex_t itxg_lock; /* lock for this structure */
- uint64_t itxg_txg; /* txg for this chain */
- itxs_t *itxg_itxs; /* sync and async itxs */
-} itxg_t;
-
-/* for async nodes we build up an AVL tree of lists of async itxs per file */
-typedef struct itx_async_node {
- uint64_t ia_foid; /* file object id */
- list_t ia_list; /* list of async itxs for this foid */
- avl_node_t ia_node; /* AVL tree linkage */
-} itx_async_node_t;
-
-/*
- * Vdev flushing: during a zil_commit(), we build up an AVL tree of the vdevs
- * we've touched so we know which ones need a write cache flush at the end.
- */
-typedef struct zil_vdev_node {
- uint64_t zv_vdev; /* vdev to be flushed */
- avl_node_t zv_node; /* AVL tree linkage */
-} zil_vdev_node_t;
-
-#define ZIL_PREV_BLKS 16
-
-/*
- * Stable storage intent log management structure. One per dataset.
- */
-struct zilog {
- kmutex_t zl_lock; /* protects most zilog_t fields */
- struct dsl_pool *zl_dmu_pool; /* DSL pool */
- spa_t *zl_spa; /* handle for read/write log */
- const zil_header_t *zl_header; /* log header buffer */
- objset_t *zl_os; /* object set we're logging */
- zil_get_data_t *zl_get_data; /* callback to get object content */
- lwb_t *zl_last_lwb_opened; /* most recent lwb opened */
- hrtime_t zl_last_lwb_latency; /* zio latency of last lwb done */
- uint64_t zl_lr_seq; /* on-disk log record sequence number */
- uint64_t zl_commit_lr_seq; /* last committed on-disk lr seq */
- uint64_t zl_destroy_txg; /* txg of last zil_destroy() */
- uint64_t zl_replayed_seq[TXG_SIZE]; /* last replayed rec seq */
- uint64_t zl_replaying_seq; /* current replay seq number */
- uint32_t zl_suspend; /* log suspend count */
- kcondvar_t zl_cv_suspend; /* log suspend completion */
- uint8_t zl_suspending; /* log is currently suspending */
- uint8_t zl_keep_first; /* keep first log block in destroy */
- uint8_t zl_replay; /* replaying records while set */
- uint8_t zl_stop_sync; /* for debugging */
- kmutex_t zl_issuer_lock; /* single writer, per ZIL, at a time */
- uint8_t zl_logbias; /* latency or throughput */
- uint8_t zl_sync; /* synchronous or asynchronous */
- int zl_parse_error; /* last zil_parse() error */
- uint64_t zl_parse_blk_seq; /* highest blk seq on last parse */
- uint64_t zl_parse_lr_seq; /* highest lr seq on last parse */
- uint64_t zl_parse_blk_count; /* number of blocks parsed */
- uint64_t zl_parse_lr_count; /* number of log records parsed */
- itxg_t zl_itxg[TXG_SIZE]; /* intent log txg chains */
- list_t zl_itx_commit_list; /* itx list to be committed */
- uint64_t zl_cur_used; /* current commit log size used */
- list_t zl_lwb_list; /* in-flight log write list */
- avl_tree_t zl_bp_tree; /* track bps during log parse */
- clock_t zl_replay_time; /* lbolt of when replay started */
- uint64_t zl_replay_blks; /* number of log blocks replayed */
- zil_header_t zl_old_header; /* debugging aid */
- uint_t zl_prev_blks[ZIL_PREV_BLKS]; /* size - sector rounded */
- uint_t zl_prev_rotor; /* rotor for zl_prev[] */
- txg_node_t zl_dirty_link; /* protected by dp_dirty_zilogs list */
- uint64_t zl_dirty_max_txg; /* highest txg used to dirty zilog */
- /*
- * Max block size for this ZIL. Note that this can not be changed
- * while the ZIL is in use because consumers (ZPL/zvol) need to take
- * this into account when deciding between WR_COPIED and WR_NEED_COPY
- * (see zil_max_copied_data()).
- */
- uint64_t zl_max_block_size;
-};
-
-typedef struct zil_bp_node {
- dva_t zn_dva;
- avl_node_t zn_node;
-} zil_bp_node_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZIL_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
deleted file mode 100644
index 99aecb67069b..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
+++ /dev/null
@@ -1,675 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
- * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
- * Copyright 2016 Toomas Soome <tsoome@me.com>
- */
-
-#ifndef _ZIO_H
-#define _ZIO_H
-
-#include <sys/zio_priority.h>
-#include <sys/zfs_context.h>
-#include <sys/spa.h>
-#include <sys/txg.h>
-#include <sys/avl.h>
-#include <sys/kstat.h>
-#include <sys/fs/zfs.h>
-#include <sys/zio_impl.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Embedded checksum
- */
-#define ZEC_MAGIC 0x210da7ab10c7a11ULL
-
-typedef struct zio_eck {
- uint64_t zec_magic; /* for validation, endianness */
- zio_cksum_t zec_cksum; /* 256-bit checksum */
-} zio_eck_t;
-
-/*
- * Gang block headers are self-checksumming and contain an array
- * of block pointers.
- */
-#define SPA_GANGBLOCKSIZE SPA_MINBLOCKSIZE
-#define SPA_GBH_NBLKPTRS ((SPA_GANGBLOCKSIZE - \
- sizeof (zio_eck_t)) / sizeof (blkptr_t))
-#define SPA_GBH_FILLER ((SPA_GANGBLOCKSIZE - \
- sizeof (zio_eck_t) - \
- (SPA_GBH_NBLKPTRS * sizeof (blkptr_t))) /\
- sizeof (uint64_t))
-
-typedef struct zio_gbh {
- blkptr_t zg_blkptr[SPA_GBH_NBLKPTRS];
- uint64_t zg_filler[SPA_GBH_FILLER];
- zio_eck_t zg_tail;
-} zio_gbh_phys_t;
-
-enum zio_checksum {
- ZIO_CHECKSUM_INHERIT = 0,
- ZIO_CHECKSUM_ON,
- ZIO_CHECKSUM_OFF,
- ZIO_CHECKSUM_LABEL,
- ZIO_CHECKSUM_GANG_HEADER,
- ZIO_CHECKSUM_ZILOG,
- ZIO_CHECKSUM_FLETCHER_2,
- ZIO_CHECKSUM_FLETCHER_4,
- ZIO_CHECKSUM_SHA256,
- ZIO_CHECKSUM_ZILOG2,
- ZIO_CHECKSUM_NOPARITY,
- ZIO_CHECKSUM_SHA512,
- ZIO_CHECKSUM_SKEIN,
-#ifdef illumos
- ZIO_CHECKSUM_EDONR,
-#endif
- ZIO_CHECKSUM_FUNCTIONS
-};
-
-/*
- * The number of "legacy" compression functions which can be set on individual
- * objects.
- */
-#define ZIO_CHECKSUM_LEGACY_FUNCTIONS ZIO_CHECKSUM_ZILOG2
-
-#define ZIO_CHECKSUM_ON_VALUE ZIO_CHECKSUM_FLETCHER_4
-#define ZIO_CHECKSUM_DEFAULT ZIO_CHECKSUM_ON
-
-#define ZIO_CHECKSUM_MASK 0xffULL
-#define ZIO_CHECKSUM_VERIFY (1 << 8)
-
-#define ZIO_DEDUPCHECKSUM ZIO_CHECKSUM_SHA256
-#define ZIO_DEDUPDITTO_MIN 100
-
-/*
- * The number of "legacy" compression functions which can be set on individual
- * objects.
- */
-#define ZIO_COMPRESS_LEGACY_FUNCTIONS ZIO_COMPRESS_LZ4
-
-/*
- * The meaning of "compress = on" selected by the compression features enabled
- * on a given pool.
- */
-#define ZIO_COMPRESS_LEGACY_ON_VALUE ZIO_COMPRESS_LZJB
-#define ZIO_COMPRESS_LZ4_ON_VALUE ZIO_COMPRESS_LZ4
-
-#define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF
-
-#define BOOTFS_COMPRESS_VALID(compress) \
- ((compress) == ZIO_COMPRESS_LZJB || \
- (compress) == ZIO_COMPRESS_LZ4 || \
- (compress) == ZIO_COMPRESS_ON || \
- (compress) == ZIO_COMPRESS_OFF)
-
-#define ZIO_FAILURE_MODE_WAIT 0
-#define ZIO_FAILURE_MODE_CONTINUE 1
-#define ZIO_FAILURE_MODE_PANIC 2
-
-typedef enum zio_suspend_reason {
- ZIO_SUSPEND_NONE = 0,
- ZIO_SUSPEND_IOERR,
- ZIO_SUSPEND_MMP,
-} zio_suspend_reason_t;
-
-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,
-
-#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,
-
-#define ZIO_FLAG_DDT_INHERIT (ZIO_FLAG_IO_RETRY - 1)
-#define ZIO_FLAG_GANG_INHERIT (ZIO_FLAG_IO_RETRY - 1)
-
- /*
- * 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,
-
-#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 = 1 << 23,
- ZIO_FLAG_GANG_CHILD = 1 << 24,
- ZIO_FLAG_DDT_CHILD = 1 << 25,
- ZIO_FLAG_GODFATHER = 1 << 26,
- ZIO_FLAG_NOPWRITE = 1 << 27,
- ZIO_FLAG_REEXECUTED = 1 << 28,
- ZIO_FLAG_DELEGATED = 1 << 29,
-};
-
-#define ZIO_FLAG_MUSTSUCCEED 0
-
-#define ZIO_DDT_CHILD_FLAGS(zio) \
- (((zio)->io_flags & ZIO_FLAG_DDT_INHERIT) | \
- ZIO_FLAG_DDT_CHILD | ZIO_FLAG_CANFAIL)
-
-#define ZIO_GANG_CHILD_FLAGS(zio) \
- (((zio)->io_flags & ZIO_FLAG_GANG_INHERIT) | \
- ZIO_FLAG_GANG_CHILD | ZIO_FLAG_CANFAIL)
-
-#define ZIO_VDEV_CHILD_FLAGS(zio) \
- (((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)))
-
-enum zio_child {
- ZIO_CHILD_VDEV = 0,
- ZIO_CHILD_GANG,
- ZIO_CHILD_DDT,
- ZIO_CHILD_LOGICAL,
- ZIO_CHILD_TYPES
-};
-
-#define ZIO_CHILD_VDEV_BIT ZIO_CHILD_BIT(ZIO_CHILD_VDEV)
-#define ZIO_CHILD_GANG_BIT ZIO_CHILD_BIT(ZIO_CHILD_GANG)
-#define ZIO_CHILD_DDT_BIT ZIO_CHILD_BIT(ZIO_CHILD_DDT)
-#define ZIO_CHILD_LOGICAL_BIT ZIO_CHILD_BIT(ZIO_CHILD_LOGICAL)
-#define ZIO_CHILD_ALL_BITS \
- (ZIO_CHILD_VDEV_BIT | ZIO_CHILD_GANG_BIT | \
- ZIO_CHILD_DDT_BIT | ZIO_CHILD_LOGICAL_BIT)
-
-enum zio_wait_type {
- ZIO_WAIT_READY = 0,
- ZIO_WAIT_DONE,
- ZIO_WAIT_TYPES
-};
-
-/*
- * These are bespoke errnos used in ZFS. We map them to their closest FreeBSD
- * equivalents. This gives us more useful error messages from strerror(3).
- */
-#define ECKSUM EINTEGRITY
-#define EFRAGS ENOSPC
-
-typedef void zio_done_func_t(zio_t *zio);
-
-extern boolean_t zio_dva_throttle_enabled;
-extern const char *zio_type_name[ZIO_TYPES];
-
-/*
- * A bookmark is a four-tuple <objset, object, level, blkid> that uniquely
- * identifies any block in the pool. By convention, the meta-objset (MOS)
- * is objset 0, and the meta-dnode is object 0. This covers all blocks
- * except root blocks and ZIL blocks, which are defined as follows:
- *
- * Root blocks (objset_phys_t) are object 0, level -1: <objset, 0, -1, 0>.
- * ZIL blocks are bookmarked <objset, 0, -2, blkid == ZIL sequence number>.
- * dmu_sync()ed ZIL data blocks are bookmarked <objset, object, -2, blkid>.
- * dnode visit bookmarks are <objset, object id of dnode, -3, 0>.
- *
- * Note: this structure is called a bookmark because its original purpose
- * was to remember where to resume a pool-wide traverse.
- *
- * Note: this structure is passed between userland and the kernel, and is
- * stored on disk (by virtue of being incorporated into other on-disk
- * structures, e.g. dsl_scan_phys_t).
- */
-typedef struct zbookmark_phys {
- uint64_t zb_objset;
- uint64_t zb_object;
- int64_t zb_level;
- uint64_t zb_blkid;
-} zbookmark_phys_t;
-
-#define SET_BOOKMARK(zb, objset, object, level, blkid) \
-{ \
- (zb)->zb_objset = objset; \
- (zb)->zb_object = object; \
- (zb)->zb_level = level; \
- (zb)->zb_blkid = blkid; \
-}
-
-#define ZB_DESTROYED_OBJSET (-1ULL)
-
-#define ZB_ROOT_OBJECT (0ULL)
-#define ZB_ROOT_LEVEL (-1LL)
-#define ZB_ROOT_BLKID (0ULL)
-
-#define ZB_ZIL_OBJECT (0ULL)
-#define ZB_ZIL_LEVEL (-2LL)
-
-#define ZB_DNODE_LEVEL (-3LL)
-#define ZB_DNODE_BLKID (0ULL)
-
-#define ZB_IS_ZERO(zb) \
- ((zb)->zb_objset == 0 && (zb)->zb_object == 0 && \
- (zb)->zb_level == 0 && (zb)->zb_blkid == 0)
-#define ZB_IS_ROOT(zb) \
- ((zb)->zb_object == ZB_ROOT_OBJECT && \
- (zb)->zb_level == ZB_ROOT_LEVEL && \
- (zb)->zb_blkid == ZB_ROOT_BLKID)
-
-typedef struct zio_prop {
- enum zio_checksum zp_checksum;
- enum zio_compress zp_compress;
- dmu_object_type_t zp_type;
- uint8_t zp_level;
- uint8_t zp_copies;
- boolean_t zp_dedup;
- boolean_t zp_dedup_verify;
- boolean_t zp_nopwrite;
- uint32_t zp_zpl_smallblk;
-} zio_prop_t;
-
-typedef struct zio_cksum_report zio_cksum_report_t;
-
-typedef void zio_cksum_finish_f(zio_cksum_report_t *rep,
- const void *good_data);
-typedef void zio_cksum_free_f(void *cbdata, size_t size);
-
-struct zio_bad_cksum; /* defined in zio_checksum.h */
-struct dnode_phys;
-struct abd;
-
-struct zio_cksum_report {
- struct zio_cksum_report *zcr_next;
- nvlist_t *zcr_ereport;
- nvlist_t *zcr_detector;
- void *zcr_cbdata;
- size_t zcr_cbinfo; /* passed to zcr_free() */
- uint64_t zcr_align;
- uint64_t zcr_length;
- zio_cksum_finish_f *zcr_finish;
- zio_cksum_free_f *zcr_free;
-
- /* internal use only */
- struct zio_bad_cksum *zcr_ckinfo; /* information from failure */
-};
-
-typedef void zio_vsd_cksum_report_f(zio_t *zio, zio_cksum_report_t *zcr,
- void *arg);
-
-zio_vsd_cksum_report_f zio_vsd_default_cksum_report;
-
-typedef struct zio_vsd_ops {
- zio_done_func_t *vsd_free;
- zio_vsd_cksum_report_f *vsd_cksum_report;
-} zio_vsd_ops_t;
-
-typedef struct zio_gang_node {
- zio_gbh_phys_t *gn_gbh;
- struct zio_gang_node *gn_child[SPA_GBH_NBLKPTRS];
-} zio_gang_node_t;
-
-typedef zio_t *zio_gang_issue_func_t(zio_t *zio, blkptr_t *bp,
- zio_gang_node_t *gn, struct abd *data, uint64_t offset);
-
-typedef void zio_transform_func_t(zio_t *zio, struct abd *data, uint64_t size);
-
-typedef struct zio_transform {
- struct abd *zt_orig_abd;
- uint64_t zt_orig_size;
- uint64_t zt_bufsize;
- zio_transform_func_t *zt_transform;
- struct zio_transform *zt_next;
-} zio_transform_t;
-
-typedef zio_t *zio_pipe_stage_t(zio_t *zio);
-
-/*
- * The io_reexecute flags are distinct from io_flags because the child must
- * be able to propagate them to the parent. The normal io_flags are local
- * to the zio, not protected by any lock, and not modifiable by children;
- * the reexecute flags are protected by io_lock, modifiable by children,
- * and always propagated -- even when ZIO_FLAG_DONT_PROPAGATE is set.
- */
-#define ZIO_REEXECUTE_NOW 0x01
-#define ZIO_REEXECUTE_SUSPEND 0x02
-
-typedef struct zio_alloc_list {
- list_t zal_list;
- uint64_t zal_size;
-} zio_alloc_list_t;
-
-typedef struct zio_link {
- zio_t *zl_parent;
- zio_t *zl_child;
- list_node_t zl_parent_node;
- list_node_t zl_child_node;
-} zio_link_t;
-
-/*
- * Used for TRIM kstat.
- */
-typedef struct zio_trim_stats {
- /*
- * Number of bytes successfully TRIMmed.
- */
- kstat_named_t bytes;
-
- /*
- * Number of successful TRIM requests.
- */
- kstat_named_t success;
-
- /*
- * Number of TRIM requests that failed because TRIM is not
- * supported.
- */
- kstat_named_t unsupported;
-
- /*
- * Number of TRIM requests that failed for other reasons.
- */
- kstat_named_t failed;
-} zio_trim_stats_t;
-
-extern zio_trim_stats_t zio_trim_stats;
-
-#define ZIO_TRIM_STAT_INCR(stat, val) \
- atomic_add_64(&zio_trim_stats.stat.value.ui64, (val));
-#define ZIO_TRIM_STAT_BUMP(stat) \
- ZIO_TRIM_STAT_INCR(stat, 1);
-
-struct zio {
- /* Core information about this I/O */
- zbookmark_phys_t io_bookmark;
- zio_prop_t io_prop;
- zio_type_t io_type;
- enum zio_child io_child_type;
- int io_cmd;
- zio_priority_t io_priority;
- uint8_t io_reexecute;
- uint8_t io_state[ZIO_WAIT_TYPES];
- uint64_t io_txg;
- spa_t *io_spa;
- blkptr_t *io_bp;
- blkptr_t *io_bp_override;
- blkptr_t io_bp_copy;
- list_t io_parent_list;
- list_t io_child_list;
- zio_t *io_logical;
- zio_transform_t *io_transform_stack;
-
- /* Callback info */
- zio_done_func_t *io_ready;
- zio_done_func_t *io_children_ready;
- zio_done_func_t *io_physdone;
- zio_done_func_t *io_done;
- void *io_private;
- int64_t io_prev_space_delta; /* DMU private */
- blkptr_t io_bp_orig;
-
- /* Data represented by this I/O */
- struct abd *io_abd;
- struct abd *io_orig_abd;
- uint64_t io_size;
- uint64_t io_orig_size;
- /* io_lsize != io_orig_size iff this is a raw write */
- uint64_t io_lsize;
-
- /* Stuff for the vdev stack */
- vdev_t *io_vd;
- void *io_vsd;
- const zio_vsd_ops_t *io_vsd_ops;
- metaslab_class_t *io_metaslab_class; /* dva throttle class */
-
- uint64_t io_offset;
- hrtime_t io_timestamp;
- hrtime_t io_queued_timestamp;
- hrtime_t io_target_timestamp;
- avl_node_t io_queue_node;
- avl_node_t io_offset_node;
- avl_node_t io_alloc_node;
- zio_alloc_list_t io_alloc_list;
-
-#ifdef __FreeBSD__
- struct bio *io_bio;
-#ifdef _KERNEL
- struct callout io_timer;
-#endif
-#endif
-
- /* Internal pipeline state */
- enum zio_flag io_flags;
- enum zio_stage io_stage;
- enum zio_stage io_pipeline;
- enum zio_flag io_orig_flags;
- enum zio_stage io_orig_stage;
- enum zio_stage io_orig_pipeline;
- enum zio_stage io_pipeline_trace;
- int io_error;
- int io_child_error[ZIO_CHILD_TYPES];
- uint64_t io_children[ZIO_CHILD_TYPES][ZIO_WAIT_TYPES];
- uint64_t io_child_count;
- uint64_t io_phys_children;
- uint64_t io_parent_count;
- uint64_t *io_stall;
- zio_t *io_gang_leader;
- zio_gang_node_t *io_gang_tree;
- void *io_executor;
- void *io_waiter;
- kmutex_t io_lock;
- kcondvar_t io_cv;
- int io_allocator;
-
- /* FMA state */
- zio_cksum_report_t *io_cksum_report;
- uint64_t io_ena;
-
- /* Taskq dispatching state */
- taskq_ent_t io_tqent;
-
- avl_node_t io_trim_node;
- list_node_t io_trim_link;
-};
-
-extern int zio_bookmark_compare(const void *, const void *);
-
-extern zio_t *zio_null(zio_t *pio, spa_t *spa, vdev_t *vd,
- zio_done_func_t *done, void *priv, enum zio_flag flags);
-
-extern zio_t *zio_root(spa_t *spa,
- zio_done_func_t *done, void *priv, enum zio_flag flags);
-
-extern zio_t *zio_read(zio_t *pio, spa_t *spa, const blkptr_t *bp,
- struct abd *data, uint64_t lsize, zio_done_func_t *done, void *priv,
- zio_priority_t priority, enum zio_flag flags, const zbookmark_phys_t *zb);
-
-extern zio_t *zio_write(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp,
- struct abd *data, uint64_t size, uint64_t psize, const zio_prop_t *zp,
- zio_done_func_t *ready, zio_done_func_t *children_ready,
- zio_done_func_t *physdone, zio_done_func_t *done,
- void *priv, zio_priority_t priority, enum zio_flag flags,
- const zbookmark_phys_t *zb);
-
-extern zio_t *zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp,
- struct abd *data, uint64_t size, zio_done_func_t *done, void *priv,
- zio_priority_t priority, enum zio_flag flags, zbookmark_phys_t *zb);
-
-extern void zio_write_override(zio_t *zio, blkptr_t *bp, int copies,
- boolean_t nopwrite);
-
-extern void zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp);
-
-extern zio_t *zio_claim(zio_t *pio, spa_t *spa, uint64_t txg,
- const blkptr_t *bp,
- zio_done_func_t *done, void *priv, enum zio_flag flags);
-
-extern zio_t *zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd,
- uint64_t offset, uint64_t size, zio_done_func_t *done, void *priv,
- zio_priority_t priority, enum zio_flag flags);
-
-extern zio_t *zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset,
- uint64_t size, struct abd *data, int checksum,
- zio_done_func_t *done, void *priv, zio_priority_t priority,
- enum zio_flag flags, boolean_t labels);
-
-extern zio_t *zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset,
- uint64_t size, struct abd *data, int checksum,
- zio_done_func_t *done, void *priv, zio_priority_t priority,
- enum zio_flag flags, boolean_t labels);
-
-extern zio_t *zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg,
- const blkptr_t *bp, uint64_t size, enum zio_flag flags);
-
-extern int zio_alloc_zil(spa_t *spa, uint64_t objset, uint64_t txg,
- blkptr_t *new_bp, blkptr_t *old_bp, uint64_t size, boolean_t *slog);
-extern void zio_flush(zio_t *zio, vdev_t *vd);
-extern zio_t *zio_trim(zio_t *zio, spa_t *spa, vdev_t *vd, uint64_t offset,
- uint64_t size);
-extern void zio_shrink(zio_t *zio, uint64_t size);
-
-extern int zio_wait(zio_t *zio);
-extern void zio_nowait(zio_t *zio);
-extern void zio_execute(zio_t *zio);
-extern void zio_interrupt(zio_t *zio);
-extern void zio_delay_init(zio_t *zio);
-extern void zio_delay_interrupt(zio_t *zio);
-
-extern zio_t *zio_walk_parents(zio_t *cio, zio_link_t **);
-extern zio_t *zio_walk_children(zio_t *pio, zio_link_t **);
-extern zio_t *zio_unique_parent(zio_t *cio);
-extern void zio_add_child(zio_t *pio, zio_t *cio);
-
-extern void *zio_buf_alloc(size_t size);
-extern void zio_buf_free(void *buf, size_t size);
-extern void *zio_data_buf_alloc(size_t size);
-extern void zio_data_buf_free(void *buf, size_t size);
-
-extern void zio_push_transform(zio_t *zio, struct abd *abd, uint64_t size,
- uint64_t bufsize, zio_transform_func_t *transform);
-extern void zio_pop_transforms(zio_t *zio);
-
-extern void zio_resubmit_stage_async(void *);
-
-extern zio_t *zio_vdev_child_io(zio_t *zio, blkptr_t *bp, vdev_t *vd,
- uint64_t offset, struct abd *data, uint64_t size, int type,
- zio_priority_t priority, enum zio_flag flags,
- zio_done_func_t *done, void *priv);
-
-extern zio_t *zio_vdev_delegated_io(vdev_t *vd, uint64_t offset,
- struct abd *data, uint64_t size, zio_type_t type, zio_priority_t priority,
- enum zio_flag flags, zio_done_func_t *done, void *priv);
-
-extern void zio_vdev_io_bypass(zio_t *zio);
-extern void zio_vdev_io_reissue(zio_t *zio);
-extern void zio_vdev_io_redone(zio_t *zio);
-
-extern void zio_change_priority(zio_t *pio, zio_priority_t priority);
-
-extern void zio_checksum_verified(zio_t *zio);
-extern int zio_worst_error(int e1, int e2);
-
-extern enum zio_checksum zio_checksum_select(enum zio_checksum child,
- enum zio_checksum parent);
-extern enum zio_checksum zio_checksum_dedup_select(spa_t *spa,
- enum zio_checksum child, enum zio_checksum parent);
-extern enum zio_compress zio_compress_select(spa_t *spa,
- enum zio_compress child, enum zio_compress parent);
-
-extern void zio_suspend(spa_t *spa, zio_t *zio, zio_suspend_reason_t);
-extern int zio_resume(spa_t *spa);
-extern void zio_resume_wait(spa_t *spa);
-
-/*
- * Initial setup and teardown.
- */
-extern void zio_init(void);
-extern void zio_fini(void);
-
-/*
- * Fault injection
- */
-struct zinject_record;
-extern uint32_t zio_injection_enabled;
-extern int zio_inject_fault(char *name, int flags, int *id,
- struct zinject_record *record);
-extern int zio_inject_list_next(int *id, char *name, size_t buflen,
- struct zinject_record *record);
-extern int zio_clear_fault(int id);
-extern void zio_handle_panic_injection(spa_t *spa, char *tag, uint64_t type);
-extern int zio_handle_fault_injection(zio_t *zio, int error);
-extern int zio_handle_device_injection(vdev_t *vd, zio_t *zio, int error);
-extern int zio_handle_label_injection(zio_t *zio, int error);
-extern void zio_handle_ignored_writes(zio_t *zio);
-extern hrtime_t zio_handle_io_delay(zio_t *zio);
-
-/*
- * Checksum ereport functions
- */
-extern void zfs_ereport_start_checksum(spa_t *spa, vdev_t *vd, struct zio *zio,
- uint64_t offset, uint64_t length, void *arg, struct zio_bad_cksum *info);
-extern void zfs_ereport_finish_checksum(zio_cksum_report_t *report,
- const void *good_data, const void *bad_data, boolean_t drop_if_identical);
-
-extern void zfs_ereport_send_interim_checksum(zio_cksum_report_t *report);
-extern void zfs_ereport_free_checksum(zio_cksum_report_t *report);
-
-/* If we have the good data in hand, this function can be used */
-extern void zfs_ereport_post_checksum(spa_t *spa, vdev_t *vd,
- struct zio *zio, uint64_t offset, uint64_t length,
- const void *good_data, const void *bad_data, struct zio_bad_cksum *info);
-
-/* Called from spa_sync(), but primarily an injection handler */
-extern void spa_handle_ignored_writes(spa_t *spa);
-
-/* zbookmark_phys functions */
-boolean_t zbookmark_subtree_completed(const struct dnode_phys *dnp,
- const zbookmark_phys_t *subtree_root, const zbookmark_phys_t *last_block);
-int zbookmark_compare(uint16_t dbss1, uint8_t ibs1, uint16_t dbss2,
- uint8_t ibs2, const zbookmark_phys_t *zb1, const zbookmark_phys_t *zb2);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ZIO_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h
deleted file mode 100644
index 782df534c9a0..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h
+++ /dev/null
@@ -1,119 +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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2014, 2016 by Delphix. All rights reserved.
- * Copyright Saso Kiselkov 2013, All rights reserved.
- */
-
-#ifndef _SYS_ZIO_CHECKSUM_H
-#define _SYS_ZIO_CHECKSUM_H
-
-#include <sys/zio.h>
-#include <zfeature_common.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct abd;
-
-/*
- * Signature for checksum functions.
- */
-typedef void zio_checksum_t(struct abd *, uint64_t size,
- const void *ctx_template, zio_cksum_t *zcp);
-typedef void *zio_checksum_tmpl_init_t(const zio_cksum_salt_t *salt);
-typedef void zio_checksum_tmpl_free_t(void *ctx_template);
-
-typedef enum zio_checksum_flags {
- /* Strong enough for metadata? */
- ZCHECKSUM_FLAG_METADATA = (1 << 1),
- /* ZIO embedded checksum */
- ZCHECKSUM_FLAG_EMBEDDED = (1 << 2),
- /* Strong enough for dedup (without verification)? */
- ZCHECKSUM_FLAG_DEDUP = (1 << 3),
- /* Uses salt value */
- ZCHECKSUM_FLAG_SALTED = (1 << 4),
- /* Strong enough for nopwrite? */
- ZCHECKSUM_FLAG_NOPWRITE = (1 << 5)
-} zio_checksum_flags_t;
-
-/*
- * Information about each checksum function.
- */
-typedef struct zio_checksum_info {
- /* checksum function for each byteorder */
- zio_checksum_t *ci_func[2];
- zio_checksum_tmpl_init_t *ci_tmpl_init;
- zio_checksum_tmpl_free_t *ci_tmpl_free;
- zio_checksum_flags_t ci_flags;
- char *ci_name; /* descriptive name */
-} zio_checksum_info_t;
-
-typedef struct zio_bad_cksum {
- zio_cksum_t zbc_expected;
- zio_cksum_t zbc_actual;
- const char *zbc_checksum_name;
- uint8_t zbc_byteswapped;
- uint8_t zbc_injected;
- uint8_t zbc_has_cksum; /* expected/actual valid */
-} zio_bad_cksum_t;
-
-extern zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS];
-
-/*
- * Checksum routines.
- */
-extern zio_checksum_t abd_checksum_SHA256;
-extern zio_checksum_t abd_checksum_SHA512_native;
-extern zio_checksum_t abd_checksum_SHA512_byteswap;
-
-/* Skein */
-extern zio_checksum_t abd_checksum_skein_native;
-extern zio_checksum_t abd_checksum_skein_byteswap;
-extern zio_checksum_tmpl_init_t abd_checksum_skein_tmpl_init;
-extern zio_checksum_tmpl_free_t abd_checksum_skein_tmpl_free;
-
-#ifdef illumos
-/* Edon-R */
-extern zio_checksum_t abd_checksum_edonr_native;
-extern zio_checksum_t abd_checksum_edonr_byteswap;
-extern zio_checksum_tmpl_init_t abd_checksum_edonr_tmpl_init;
-extern zio_checksum_tmpl_free_t abd_checksum_edonr_tmpl_free;
-#endif
-
-extern int zio_checksum_equal(spa_t *, blkptr_t *, enum zio_checksum,
- void *, uint64_t, uint64_t, zio_bad_cksum_t *);
-extern void zio_checksum_compute(zio_t *, enum zio_checksum,
- struct abd *, uint64_t);
-extern int zio_checksum_error_impl(spa_t *, blkptr_t *, enum zio_checksum,
- struct abd *, uint64_t, uint64_t, zio_bad_cksum_t *);
-extern int zio_checksum_error(zio_t *zio, zio_bad_cksum_t *out);
-extern enum zio_checksum spa_dedup_checksum(spa_t *spa);
-extern void zio_checksum_templates_free(spa_t *spa);
-extern spa_feature_t zio_checksum_to_feature(enum zio_checksum cksum);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZIO_CHECKSUM_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_compress.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_compress.h
deleted file mode 100644
index aab0282c45be..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_compress.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
- * Copyright (c) 2015, 2016 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZIO_COMPRESS_H
-#define _SYS_ZIO_COMPRESS_H
-
-#include <sys/abd.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum zio_compress {
- ZIO_COMPRESS_INHERIT = 0,
- ZIO_COMPRESS_ON,
- ZIO_COMPRESS_OFF,
- ZIO_COMPRESS_LZJB,
- ZIO_COMPRESS_EMPTY,
- ZIO_COMPRESS_GZIP_1,
- ZIO_COMPRESS_GZIP_2,
- ZIO_COMPRESS_GZIP_3,
- ZIO_COMPRESS_GZIP_4,
- ZIO_COMPRESS_GZIP_5,
- ZIO_COMPRESS_GZIP_6,
- ZIO_COMPRESS_GZIP_7,
- ZIO_COMPRESS_GZIP_8,
- ZIO_COMPRESS_GZIP_9,
- ZIO_COMPRESS_ZLE,
- ZIO_COMPRESS_LZ4,
- ZIO_COMPRESS_FUNCTIONS
-};
-
-/* Common signature for all zio compress functions. */
-typedef size_t zio_compress_func_t(void *src, void *dst,
- size_t s_len, size_t d_len, int);
-/* Common signature for all zio decompress functions. */
-typedef int zio_decompress_func_t(void *src, void *dst,
- size_t s_len, size_t d_len, int);
-/*
- * Common signature for all zio decompress functions using an ABD as input.
- * This is helpful if you have both compressed ARC and scatter ABDs enabled,
- * but is not a requirement for all compression algorithms.
- */
-typedef int zio_decompress_abd_func_t(abd_t *src, void *dst,
- size_t s_len, size_t d_len, int);
-
-/*
- * Information about each compression function.
- */
-typedef struct zio_compress_info {
- char *ci_name;
- int ci_level;
- zio_compress_func_t *ci_compress;
- zio_decompress_func_t *ci_decompress;
-} zio_compress_info_t;
-
-extern zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS];
-
-/*
- * Compression routines.
- */
-extern size_t lzjb_compress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern int lzjb_decompress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern size_t gzip_compress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern int gzip_decompress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern size_t zle_compress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern int zle_decompress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern void lz4_init(void);
-extern void lz4_fini(void);
-extern size_t lz4_compress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-extern int lz4_decompress(void *src, void *dst, size_t s_len, size_t d_len,
- int level);
-
-/*
- * Compress and decompress data if necessary.
- */
-extern size_t zio_compress_data(enum zio_compress c, abd_t *src, void *dst,
- size_t s_len);
-extern int zio_decompress_data(enum zio_compress c, abd_t *src, void *dst,
- size_t s_len, size_t d_len);
-extern int zio_decompress_data_buf(enum zio_compress c, void *src, void *dst,
- size_t s_len, size_t d_len);
-
-/*
- * Module lifetime management.
- */
-extern void zio_compress_init(void);
-extern void zio_compress_fini(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZIO_COMPRESS_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h
deleted file mode 100644
index 96b3b0135813..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _ZIO_IMPL_H
-#define _ZIO_IMPL_H
-
-#include <sys/zfs_context.h>
-#include <sys/zio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * XXX -- Describe ZFS I/O pipeline here. Fill in as needed.
- *
- * The ZFS I/O pipeline is comprised of various stages which are defined
- * in the zio_stage enum below. The individual stages are used to construct
- * these basic I/O operations: Read, Write, Free, Claim, and Ioctl.
- *
- * I/O operations: (XXX - provide detail for each of the operations)
- *
- * Read:
- * Write:
- * Free:
- * Claim:
- * Ioctl:
- *
- * Although the most common pipeline are used by the basic I/O operations
- * above, there are some helper pipelines (one could consider them
- * sub-pipelines) which are used internally by the ZIO module and are
- * explained below:
- *
- * Interlock Pipeline:
- * The interlock pipeline is the most basic pipeline and is used by all
- * of the I/O operations. The interlock pipeline does not perform any I/O
- * and is used to coordinate the dependencies between I/Os that are being
- * issued (i.e. the parent/child relationship).
- *
- * Vdev child Pipeline:
- * The vdev child pipeline is responsible for performing the physical I/O.
- * It is in this pipeline where the I/O are queued and possibly cached.
- *
- * In addition to performing I/O, the pipeline is also responsible for
- * data transformations. The transformations performed are based on the
- * specific properties that user may have selected and modify the
- * behavior of the pipeline. Examples of supported transformations are
- * compression, dedup, and nop writes. Transformations will either modify
- * the data or the pipeline. This list below further describes each of
- * the supported transformations:
- *
- * Compression:
- * ZFS supports three different flavors of compression -- gzip, lzjb, and
- * zle. Compression occurs as part of the write pipeline and is performed
- * in the ZIO_STAGE_WRITE_BP_INIT stage.
- *
- * Dedup:
- * Dedup reads are handled by the ZIO_STAGE_DDT_READ_START and
- * ZIO_STAGE_DDT_READ_DONE stages. These stages are added to an existing
- * read pipeline if the dedup bit is set on the block pointer.
- * Writing a dedup block is performed by the ZIO_STAGE_DDT_WRITE stage
- * and added to a write pipeline if a user has enabled dedup on that
- * particular dataset.
- *
- * NOP Write:
- * The NOP write feature is performed by the ZIO_STAGE_NOP_WRITE stage
- * and is added to an existing write pipeline if a crypographically
- * secure checksum (i.e. SHA256) is enabled and compression is turned on.
- * The NOP write stage will compare the checksums of the current data
- * on-disk (level-0 blocks only) and the data that is currently being written.
- * If the checksum values are identical then the pipeline is converted to
- * an interlock pipeline skipping block allocation and bypassing the
- * physical I/O. The nop write feature can handle writes in either
- * syncing or open context (i.e. zil writes) and as a result is mutually
- * exclusive with dedup.
- */
-
-/*
- * zio pipeline stage definitions
- */
-enum zio_stage {
- ZIO_STAGE_OPEN = 1 << 0, /* RWFCI */
-
- ZIO_STAGE_READ_BP_INIT = 1 << 1, /* R---- */
- ZIO_STAGE_WRITE_BP_INIT = 1 << 2, /* -W--- */
- ZIO_STAGE_FREE_BP_INIT = 1 << 3, /* --F-- */
- ZIO_STAGE_ISSUE_ASYNC = 1 << 4, /* RWF-- */
- ZIO_STAGE_WRITE_COMPRESS = 1 << 5, /* -W--- */
-
- ZIO_STAGE_CHECKSUM_GENERATE = 1 << 6, /* -W--- */
-
- ZIO_STAGE_NOP_WRITE = 1 << 7, /* -W--- */
-
- ZIO_STAGE_DDT_READ_START = 1 << 8, /* R---- */
- ZIO_STAGE_DDT_READ_DONE = 1 << 9, /* R---- */
- ZIO_STAGE_DDT_WRITE = 1 << 10, /* -W--- */
- ZIO_STAGE_DDT_FREE = 1 << 11, /* --F-- */
-
- ZIO_STAGE_GANG_ASSEMBLE = 1 << 12, /* RWFC- */
- ZIO_STAGE_GANG_ISSUE = 1 << 13, /* RWFC- */
-
- ZIO_STAGE_DVA_THROTTLE = 1 << 14, /* -W--- */
- ZIO_STAGE_DVA_ALLOCATE = 1 << 15, /* -W--- */
- ZIO_STAGE_DVA_FREE = 1 << 16, /* --F-- */
- ZIO_STAGE_DVA_CLAIM = 1 << 17, /* ---C- */
-
- ZIO_STAGE_READY = 1 << 18, /* RWFCI */
-
- ZIO_STAGE_VDEV_IO_START = 1 << 19, /* RWF-I */
- ZIO_STAGE_VDEV_IO_DONE = 1 << 20, /* RWF-I */
- ZIO_STAGE_VDEV_IO_ASSESS = 1 << 21, /* RWF-I */
-
- ZIO_STAGE_CHECKSUM_VERIFY = 1 << 22, /* R---- */
-
- ZIO_STAGE_DONE = 1 << 23 /* RWFCI */
-};
-
-#define ZIO_INTERLOCK_STAGES \
- (ZIO_STAGE_READY | \
- ZIO_STAGE_DONE)
-
-#define ZIO_INTERLOCK_PIPELINE \
- ZIO_INTERLOCK_STAGES
-
-#define ZIO_VDEV_IO_STAGES \
- (ZIO_STAGE_VDEV_IO_START | \
- ZIO_STAGE_VDEV_IO_DONE | \
- ZIO_STAGE_VDEV_IO_ASSESS)
-
-#define ZIO_VDEV_CHILD_PIPELINE \
- (ZIO_VDEV_IO_STAGES | \
- ZIO_STAGE_DONE)
-
-#define ZIO_READ_COMMON_STAGES \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_VDEV_IO_STAGES | \
- ZIO_STAGE_CHECKSUM_VERIFY)
-
-#define ZIO_READ_PHYS_PIPELINE \
- ZIO_READ_COMMON_STAGES
-
-#define ZIO_READ_PIPELINE \
- (ZIO_READ_COMMON_STAGES | \
- ZIO_STAGE_READ_BP_INIT)
-
-#define ZIO_DDT_CHILD_READ_PIPELINE \
- ZIO_READ_COMMON_STAGES
-
-#define ZIO_DDT_READ_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_STAGE_READ_BP_INIT | \
- ZIO_STAGE_DDT_READ_START | \
- ZIO_STAGE_DDT_READ_DONE)
-
-#define ZIO_WRITE_COMMON_STAGES \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_VDEV_IO_STAGES | \
- ZIO_STAGE_ISSUE_ASYNC | \
- ZIO_STAGE_CHECKSUM_GENERATE)
-
-#define ZIO_WRITE_PHYS_PIPELINE \
- ZIO_WRITE_COMMON_STAGES
-
-#define ZIO_REWRITE_PIPELINE \
- (ZIO_WRITE_COMMON_STAGES | \
- ZIO_STAGE_WRITE_COMPRESS | \
- ZIO_STAGE_WRITE_BP_INIT)
-
-#define ZIO_WRITE_PIPELINE \
- (ZIO_WRITE_COMMON_STAGES | \
- ZIO_STAGE_WRITE_BP_INIT | \
- ZIO_STAGE_WRITE_COMPRESS | \
- ZIO_STAGE_DVA_THROTTLE | \
- ZIO_STAGE_DVA_ALLOCATE)
-
-#define ZIO_DDT_CHILD_WRITE_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_VDEV_IO_STAGES | \
- ZIO_STAGE_DVA_THROTTLE | \
- ZIO_STAGE_DVA_ALLOCATE)
-
-#define ZIO_DDT_WRITE_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_STAGE_WRITE_BP_INIT | \
- ZIO_STAGE_ISSUE_ASYNC | \
- ZIO_STAGE_WRITE_COMPRESS | \
- ZIO_STAGE_CHECKSUM_GENERATE | \
- ZIO_STAGE_DDT_WRITE)
-
-#define ZIO_GANG_STAGES \
- (ZIO_STAGE_GANG_ASSEMBLE | \
- ZIO_STAGE_GANG_ISSUE)
-
-#define ZIO_FREE_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_STAGE_FREE_BP_INIT | \
- ZIO_STAGE_DVA_FREE)
-
-#define ZIO_FREE_PHYS_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_VDEV_IO_STAGES)
-
-#define ZIO_DDT_FREE_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_STAGE_FREE_BP_INIT | \
- ZIO_STAGE_ISSUE_ASYNC | \
- ZIO_STAGE_DDT_FREE)
-
-#define ZIO_CLAIM_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_STAGE_DVA_CLAIM)
-
-#define ZIO_IOCTL_PIPELINE \
- (ZIO_INTERLOCK_STAGES | \
- ZIO_STAGE_VDEV_IO_START | \
- ZIO_STAGE_VDEV_IO_ASSESS)
-
-#define ZIO_BLOCKING_STAGES \
- (ZIO_STAGE_DVA_ALLOCATE | \
- ZIO_STAGE_DVA_CLAIM | \
- ZIO_STAGE_VDEV_IO_START)
-
-extern void zio_inject_init(void);
-extern void zio_inject_fini(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ZIO_IMPL_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_priority.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_priority.h
deleted file mode 100644
index ebe05a09dc4e..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_priority.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2014, 2016 by Delphix. All rights reserved.
- */
-#ifndef _ZIO_PRIORITY_H
-#define _ZIO_PRIORITY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum zio_priority {
- ZIO_PRIORITY_SYNC_READ,
- ZIO_PRIORITY_SYNC_WRITE, /* ZIL */
- ZIO_PRIORITY_ASYNC_READ, /* prefetch */
- ZIO_PRIORITY_ASYNC_WRITE, /* spa_sync() */
- ZIO_PRIORITY_SCRUB, /* asynchronous scrub/resilver reads */
- ZIO_PRIORITY_TRIM, /* free requests used for TRIM */
- ZIO_PRIORITY_REMOVAL, /* reads/writes for vdev removal */
- ZIO_PRIORITY_INITIALIZING, /* initializing I/O */
- ZIO_PRIORITY_NUM_QUEUEABLE,
-
- ZIO_PRIORITY_NOW /* non-queued i/os (e.g. free) */
-} zio_priority_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ZIO_PRIORITY_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zrlock.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zrlock.h
deleted file mode 100644
index b6eba1a18ff4..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zrlock.h
+++ /dev/null
@@ -1,63 +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 (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2015 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZRLOCK_H
-#define _SYS_ZRLOCK_H
-
-#include <sys/zfs_context.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct zrlock {
- kmutex_t zr_mtx;
- volatile int32_t zr_refcount;
- kcondvar_t zr_cv;
- uint16_t zr_pad;
-#ifdef ZFS_DEBUG
- kthread_t *zr_owner;
- const char *zr_caller;
-#endif
-} zrlock_t;
-
-extern void zrl_init(zrlock_t *);
-extern void zrl_destroy(zrlock_t *);
-#define zrl_add(_z) zrl_add_impl((_z), __func__)
-extern void zrl_add_impl(zrlock_t *, const char *);
-extern void zrl_remove(zrlock_t *);
-extern int zrl_tryenter(zrlock_t *);
-extern void zrl_exit(zrlock_t *);
-extern int zrl_is_zero(zrlock_t *);
-extern int zrl_is_locked(zrlock_t *);
-#ifdef ZFS_DEBUG
-extern kthread_t *zrl_owner(zrlock_t *);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ZRLOCK_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zthr.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zthr.h
deleted file mode 100644
index 33c218ec4c7d..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zthr.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * This file and its contents are supplied under the terms of the
- * Common Development and Distribution License ("CDDL"), version 1.0.
- * You may only use this file in accordance with the terms of version
- * 1.0 of the CDDL.
- *
- * A full copy of the text of the CDDL should have accompanied this
- * source. A copy of the CDDL is also available via the Internet at
- * http://www.illumos.org/license/CDDL.
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2017, 2018 by Delphix. All rights reserved.
- */
-
-#ifndef _SYS_ZTHR_H
-#define _SYS_ZTHR_H
-
-typedef struct zthr zthr_t;
-typedef void (zthr_func_t)(void *, zthr_t *);
-typedef boolean_t (zthr_checkfunc_t)(void *, zthr_t *);
-
-extern zthr_t *zthr_create(zthr_checkfunc_t checkfunc,
- zthr_func_t *func, void *arg);
-extern zthr_t *zthr_create_timer(zthr_checkfunc_t *checkfunc,
- zthr_func_t *func, void *arg, hrtime_t nano_wait);
-extern void zthr_destroy(zthr_t *t);
-
-extern void zthr_wakeup(zthr_t *t);
-extern void zthr_cancel(zthr_t *t);
-extern void zthr_resume(zthr_t *t);
-
-extern boolean_t zthr_iscancelled(zthr_t *t);
-
-#endif /* _SYS_ZTHR_H */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zvol.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zvol.h
deleted file mode 100644
index 6bd4d42b8c3f..000000000000
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zvol.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*