aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys
diff options
context:
space:
mode:
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.