Index: include/stddef.h =================================================================== --- include/stddef.h +++ include/stddef.h @@ -72,7 +72,9 @@ #endif #endif +#ifndef offsetof #define offsetof(type, field) __offsetof(type, field) +#endif /* offsetof */ #if __EXT1_VISIBLE /* ISO/IEC 9899:2011 K.3.3.2 */ Index: stand/defs.mk =================================================================== --- stand/defs.mk +++ stand/defs.mk @@ -55,6 +55,7 @@ # Standard options: CFLAGS+= -nostdinc +CFLAGS+= ${CFLAGS_EARLY.${.IMPSRC:T}} ${CFLAGS_EARLY.${.TARGET:T}} .if ${MACHINE_ARCH} == "amd64" && ${DO32:U0} == 1 CFLAGS+= -I${BOOTOBJ}/libsa32 .else Index: stand/libsa/zfs/Makefile.inc =================================================================== --- stand/libsa/zfs/Makefile.inc +++ stand/libsa/zfs/Makefile.inc @@ -1,15 +1,31 @@ # $FreeBSD$ .PATH: ${ZFSSRC} -SRCS+= zfs.c nvlist.c skein.c skein_block.c list.c +SRCS+= zfs.c nvlist.c skein.c skein_block.c list.c zstd_shim.c zstd.c .PATH: ${SYSDIR}/crypto/skein -.PATH: ${SYSDIR}/cddl/contrib/opensolaris/uts/common/os +.PATH: ${SYSDIR}/contrib/openzfs/module/os/freebsd/spl +.PATH: ${SYSDIR}/contrib/openzfs/module/zstd/lib CFLAGS+= -I${LDRSRC} CFLAGS+= -I${SYSDIR}/cddl/boot/zfs -CFLAGS+= -I${SYSDIR}/cddl/contrib/opensolaris/uts/common CFLAGS+= -I${SYSDIR}/crypto/skein +ZFS_EARLY= -I${SRCTOP}/sys/contrib/openzfs/include/os/freebsd \ + -I${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl \ + -I${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/zfs + +CFLAGS_EARLY.list.c+= ${ZFS_EARLY} +CFLAGS_EARLY.zstd_shim.c+= ${ZFS_EARLY} + +# Can't use the early flags because there's two conflicting definitions of boolean_t in +# the zfs code that need to be unified. +CFLAGS.nvlist.c+= -I${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl +CFLAGS.zfs.c+= -I${SRCTOP}/sys/contrib/openzfs/include/os/freebsd/spl + + +CFLAGS.zstd_shim.c+= -DIN_BASE \ + -I${SRCTOP}/sys/contrib/openzfs/include \ + # Do not unroll skein loops, reduce code size CFLAGS.skein_block.c+= -DSKEIN_LOOP=111 CFLAGS.zfs.c+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/lz4 Index: stand/libsa/zfs/zfsimpl.c =================================================================== --- stand/libsa/zfs/zfsimpl.c +++ stand/libsa/zfs/zfsimpl.c @@ -40,6 +40,7 @@ #include "zfsimpl.h" #include "zfssubr.c" +extern int zstd_init(void); struct zfsmount { const spa_t *spa; @@ -110,6 +111,7 @@ */ static const char *features_for_read[] = { "org.illumos:lz4_compress", + "org.freebsd:zstd_compress", "com.delphix:hole_birth", "com.delphix:extensible_dataset", "com.delphix:embedded_data", @@ -169,6 +171,7 @@ dnode_cache_buf = malloc(SPA_MAXBLOCKSIZE); zfs_init_crc(); + zstd_init(); } static int Index: stand/libsa/zfs/zstd_shim.c =================================================================== --- /dev/null +++ stand/libsa/zfs/zstd_shim.c @@ -0,0 +1,77 @@ +/* From src/sys: */ + +/* + * define hearder guards that we need to turn off in this environment... + */ +#define _SYS_MALLOC_H_ 1 + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef int krw_t; +u_int cpu_feature; + +#define M_WAITOK 0 +#define M_ZERO 0 +#define M_NOWAIT 0 +#define MALLOC_DECLARE(x) +#define KM_SLEEP 0 + +extern void Free(void *p, char *file, int line); +extern void *Malloc(size_t bytes, char *file, int line); +#define zfs_kmem_free(p, size) Free(p, __FILE__, __LINE__) +#define zfs_kmem_alloc(size, flags) Malloc((size), __FILE__, __LINE__) +#define kmem_zalloc(size, flags) Malloc((size), __FILE__, __LINE__) +#define kmem_free(p, size) Free(p, __FILE__, __LINE__) + +int mp_ncpus = 1; +volatile time_t time_second = 1; + +#if 0 +typedef struct { + void *ks_data; +} kstat_t; +typedef struct { + const char *n; + union { uint64_t ui64; } value; +} kstat_named_t; +kstat_t __kst; +#define KSTAT_DATA_UINT64 .value.ui64 = 0 +#define kstat_create(a, b, c, d, e, f, g) &__kst +#define kstat_install(k) +#define kstat_delete(k) +#else +#endif + +typedef int boolean_t; + +#define sx_xlock(s) (1) +#define sx_try_xlock(s) (1) +#define sx_xunlock(s) (1) +#define SX_DUPOK 0 +#define SX_NEW 0 +#define SX_NOWITNESS 0 + + +void +sx_init_flags(struct sx *sx, const char *description, int opts) +{ + +} + +void +sx_destroy(struct sx *sx) +{ + +} + +#include + +uintptr_t *__start_set_pcpu; +uintptr_t *__stop_set_pcpu; Index: sys/cddl/boot/zfs/zfsimpl.h =================================================================== --- sys/cddl/boot/zfs/zfsimpl.h +++ sys/cddl/boot/zfs/zfsimpl.h @@ -611,9 +611,63 @@ ZIO_COMPRESS_GZIP_9, ZIO_COMPRESS_ZLE, ZIO_COMPRESS_LZ4, + ZIO_COMPRESS_ZSTD, ZIO_COMPRESS_FUNCTIONS }; +enum zio_zstd_levels { + ZIO_ZSTD_LEVEL_INHERIT = 0, + ZIO_ZSTD_LEVEL_1, +#define ZIO_ZSTD_LEVEL_MIN ZIO_ZSTD_LEVEL_1 + ZIO_ZSTD_LEVEL_2, + ZIO_ZSTD_LEVEL_3, +#define ZIO_ZSTD_LEVEL_DEFAULT ZIO_ZSTD_LEVEL_3 + ZIO_ZSTD_LEVEL_4, + ZIO_ZSTD_LEVEL_5, + ZIO_ZSTD_LEVEL_6, + ZIO_ZSTD_LEVEL_7, + ZIO_ZSTD_LEVEL_8, + ZIO_ZSTD_LEVEL_9, + ZIO_ZSTD_LEVEL_10, + ZIO_ZSTD_LEVEL_11, + ZIO_ZSTD_LEVEL_12, + ZIO_ZSTD_LEVEL_13, + ZIO_ZSTD_LEVEL_14, + ZIO_ZSTD_LEVEL_15, + ZIO_ZSTD_LEVEL_16, + ZIO_ZSTD_LEVEL_17, + ZIO_ZSTD_LEVEL_18, + ZIO_ZSTD_LEVEL_19, +#define ZIO_ZSTD_LEVEL_MAX ZIO_ZSTD_LEVEL_19 + ZIO_ZSTD_LEVEL_RESERVE = 101, /* Leave room for new positive levels */ + ZIO_ZSTD_LEVEL_FAST, /* Fast levels are negative */ + ZIO_ZSTD_LEVEL_FAST_1, +#define ZIO_ZSTD_LEVEL_FAST_DEFAULT ZIO_ZSTD_LEVEL_FAST_1 + ZIO_ZSTD_LEVEL_FAST_2, + ZIO_ZSTD_LEVEL_FAST_3, + ZIO_ZSTD_LEVEL_FAST_4, + ZIO_ZSTD_LEVEL_FAST_5, + ZIO_ZSTD_LEVEL_FAST_6, + ZIO_ZSTD_LEVEL_FAST_7, + ZIO_ZSTD_LEVEL_FAST_8, + ZIO_ZSTD_LEVEL_FAST_9, + ZIO_ZSTD_LEVEL_FAST_10, + ZIO_ZSTD_LEVEL_FAST_20, + ZIO_ZSTD_LEVEL_FAST_30, + ZIO_ZSTD_LEVEL_FAST_40, + ZIO_ZSTD_LEVEL_FAST_50, + ZIO_ZSTD_LEVEL_FAST_60, + ZIO_ZSTD_LEVEL_FAST_70, + ZIO_ZSTD_LEVEL_FAST_80, + ZIO_ZSTD_LEVEL_FAST_90, + ZIO_ZSTD_LEVEL_FAST_100, + ZIO_ZSTD_LEVEL_FAST_500, + ZIO_ZSTD_LEVEL_FAST_1000, +#define ZIO_ZSTD_LEVEL_FAST_MAX ZIO_ZSTD_LEVEL_FAST_1000 + ZIO_ZSTD_LEVEL_AUTO = 251, /* Reserved for future use */ + ZIO_ZSTD_LEVEL_LEVELS +}; + #define ZIO_COMPRESS_ON_VALUE ZIO_COMPRESS_LZJB #define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF Index: sys/cddl/boot/zfs/zfssubr.c =================================================================== --- sys/cddl/boot/zfs/zfssubr.c +++ sys/cddl/boot/zfs/zfssubr.c @@ -107,6 +107,10 @@ #include "sha256.c" #include "skein_zfs.c" +extern int zfs_zstd_decompress(void *s_start, void *d_start, size_t s_len, + size_t d_len, int n); + + static zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS] = { {{NULL, NULL}, NULL, NULL, 0, "inherit"}, {{NULL, NULL}, NULL, NULL, 0, "on"}, @@ -181,6 +185,7 @@ {NULL, NULL, 9, "gzip-9"}, {NULL, zle_decompress, 64, "zle"}, {NULL, lz4_decompress, 0, "lz4"}, + {NULL, zfs_zstd_decompress, ZIO_ZSTD_LEVEL_DEFAULT, "zstd"} }; static void Index: sys/cddl/contrib/opensolaris/uts/common/os/list.c =================================================================== --- sys/cddl/contrib/opensolaris/uts/common/os/list.c +++ /dev/null @@ -1,243 +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. - */ - -/* - * Generic doubly-linked list implementation - */ - -#include -#include -#include -#include -#include - -#define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset)) -#define list_object(a, node) ((void *)(((char *)node) - (a)->list_offset)) -#define list_empty(a) ((a)->list_head.list_next == &(a)->list_head) - -#define list_insert_after_node(list, node, object) { \ - list_node_t *lnew = list_d2l(list, object); \ - lnew->list_prev = (node); \ - lnew->list_next = (node)->list_next; \ - (node)->list_next->list_prev = lnew; \ - (node)->list_next = lnew; \ -} - -#define list_insert_before_node(list, node, object) { \ - list_node_t *lnew = list_d2l(list, object); \ - lnew->list_next = (node); \ - lnew->list_prev = (node)->list_prev; \ - (node)->list_prev->list_next = lnew; \ - (node)->list_prev = lnew; \ -} - -#define list_remove_node(node) \ - (node)->list_prev->list_next = (node)->list_next; \ - (node)->list_next->list_prev = (node)->list_prev; \ - (node)->list_next = (node)->list_prev = NULL - -void -list_create(list_t *list, size_t size, size_t offset) -{ - ASSERT(list); - ASSERT(size > 0); - ASSERT(size >= offset + sizeof (list_node_t)); - - list->list_size = size; - list->list_offset = offset; - list->list_head.list_next = list->list_head.list_prev = - &list->list_head; -} - -void -list_destroy(list_t *list) -{ - list_node_t *node = &list->list_head; - - ASSERT(list); - ASSERT(list->list_head.list_next == node); - ASSERT(list->list_head.list_prev == node); - - node->list_next = node->list_prev = NULL; -} - -void -list_insert_after(list_t *list, void *object, void *nobject) -{ - if (object == NULL) { - list_insert_head(list, nobject); - } else { - list_node_t *lold = list_d2l(list, object); - list_insert_after_node(list, lold, nobject); - } -} - -void -list_insert_before(list_t *list, void *object, void *nobject) -{ - if (object == NULL) { - list_insert_tail(list, nobject); - } else { - list_node_t *lold = list_d2l(list, object); - list_insert_before_node(list, lold, nobject); - } -} - -void -list_insert_head(list_t *list, void *object) -{ - list_node_t *lold = &list->list_head; - list_insert_after_node(list, lold, object); -} - -void -list_insert_tail(list_t *list, void *object) -{ - list_node_t *lold = &list->list_head; - list_insert_before_node(list, lold, object); -} - -void -list_remove(list_t *list, void *object) -{ - list_node_t *lold = list_d2l(list, object); - ASSERT(!list_empty(list)); - ASSERT(lold->list_next != NULL); - list_remove_node(lold); -} - -void * -list_remove_head(list_t *list) -{ - list_node_t *head = list->list_head.list_next; - if (head == &list->list_head) - return (NULL); - list_remove_node(head); - return (list_object(list, head)); -} - -void * -list_remove_tail(list_t *list) -{ - list_node_t *tail = list->list_head.list_prev; - if (tail == &list->list_head) - return (NULL); - list_remove_node(tail); - return (list_object(list, tail)); -} - -void * -list_head(list_t *list) -{ - if (list_empty(list)) - return (NULL); - return (list_object(list, list->list_head.list_next)); -} - -void * -list_tail(list_t *list) -{ - if (list_empty(list)) - return (NULL); - return (list_object(list, list->list_head.list_prev)); -} - -void * -list_next(list_t *list, void *object) -{ - list_node_t *node = list_d2l(list, object); - - if (node->list_next != &list->list_head) - return (list_object(list, node->list_next)); - - return (NULL); -} - -void * -list_prev(list_t *list, void *object) -{ - list_node_t *node = list_d2l(list, object); - - if (node->list_prev != &list->list_head) - return (list_object(list, node->list_prev)); - - return (NULL); -} - -/* - * Insert src list after dst list. Empty src list thereafter. - */ -void -list_move_tail(list_t *dst, list_t *src) -{ - list_node_t *dstnode = &dst->list_head; - list_node_t *srcnode = &src->list_head; - - ASSERT(dst->list_size == src->list_size); - ASSERT(dst->list_offset == src->list_offset); - - if (list_empty(src)) - return; - - dstnode->list_prev->list_next = srcnode->list_next; - srcnode->list_next->list_prev = dstnode->list_prev; - dstnode->list_prev = srcnode->list_prev; - srcnode->list_prev->list_next = dstnode; - - /* empty src list */ - srcnode->list_next = srcnode->list_prev = srcnode; -} - -void -list_link_replace(list_node_t *lold, list_node_t *lnew) -{ - ASSERT(list_link_active(lold)); - ASSERT(!list_link_active(lnew)); - - lnew->list_next = lold->list_next; - lnew->list_prev = lold->list_prev; - lold->list_prev->list_next = lnew; - lold->list_next->list_prev = lnew; - lold->list_next = lold->list_prev = NULL; -} - -void -list_link_init(list_node_t *link) -{ - link->list_next = NULL; - link->list_prev = NULL; -} - -int -list_link_active(list_node_t *link) -{ - return (link->list_next != NULL); -} - -int -list_is_empty(list_t *list) -{ - return (list_empty(list)); -} Index: sys/contrib/openzfs/include/os/freebsd/linux/compiler.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/linux/compiler.h +++ sys/contrib/openzfs/include/os/freebsd/linux/compiler.h @@ -68,7 +68,7 @@ #define noinline __noinline #define ____cacheline_aligned __aligned(CACHE_LINE_SIZE) -#ifndef _KERNEL +#if !defined(_KERNEL) && !defined(_STANDALONE) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif Index: sys/contrib/openzfs/include/os/freebsd/spl/rpc/xdr.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/rpc/xdr.h +++ sys/contrib/openzfs/include/os/freebsd/spl/rpc/xdr.h @@ -33,7 +33,7 @@ #include #include_next -#ifndef _KERNEL +#if !defined(_KERNEL) && !defined(_STANDALONE) #include @@ -66,6 +66,6 @@ xdrmem_control((xdrs), (req), (op)) : \ (*(xdrs)->x_ops->x_control)(xdrs, req, op)) -#endif /* !_KERNEL */ +#endif /* !_KERNEL && !_STANDALONE */ #endif /* !_OPENSOLARIS_RPC_XDR_H_ */ Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/atomic.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/atomic.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/atomic.h @@ -34,7 +34,7 @@ #define atomic_sub_64 atomic_subtract_64 -#if defined(__i386__) && (defined(_KERNEL) || defined(KLD_MODULE)) +#if defined(__i386__) && (defined(_KERNEL) || defined(KLD_MODULE) || defined(_STANDALONE)) #define I386_HAVE_ATOMIC64 #endif Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/byteorder.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/byteorder.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/byteorder.h @@ -80,6 +80,7 @@ #define BE_64(x) BSWAP_64(x) #endif +#if !defined(_STANDALONE) #if BYTE_ORDER == _BIG_ENDIAN #define htonll(x) BMASK_64(x) #define ntohll(x) BMASK_64(x) @@ -101,6 +102,7 @@ #define ntohll(x) BSWAP_64(x) #endif #endif +#endif #define BE_IN32(xa) htonl(*((uint32_t *)(void *)(xa))) Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompile.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompile.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompile.h @@ -113,7 +113,7 @@ #define __VPRINTFLIKE(__n) __sun_attr__((__VPRINTFLIKE__(__n))) #define __KPRINTFLIKE(__n) __sun_attr__((__KPRINTFLIKE__(__n))) #define __KVPRINTFLIKE(__n) __sun_attr__((__KVPRINTFLIKE__(__n))) -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_STANDALONE) #define __NORETURN __sun_attr__((__noreturn__)) #endif #define __CONST __sun_attr__((__const__)) @@ -174,7 +174,7 @@ #define __exit #endif -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_STANDALONE) #define param_set_charp(a, b) (0) #define ATTR_UID AT_UID #define ATTR_GID AT_GID Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/cmn_err.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/cmn_err.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/cmn_err.h @@ -52,42 +52,33 @@ /*PRINTFLIKE2*/ extern void cmn_err(int, const char *, ...) __KPRINTFLIKE(2); -#pragma rarely_called(cmn_err) extern void vzcmn_err(zoneid_t, int, const char *, __va_list) __KVPRINTFLIKE(3); -#pragma rarely_called(vzcmn_err) extern void vcmn_err(int, const char *, __va_list) __KVPRINTFLIKE(2); -#pragma rarely_called(vcmn_err) /*PRINTFLIKE3*/ extern void zcmn_err(zoneid_t, int, const char *, ...) __KPRINTFLIKE(3); -#pragma rarely_called(zcmn_err) extern void vzprintf(zoneid_t, const char *, __va_list) __KVPRINTFLIKE(2); -#pragma rarely_called(vzprintf) /*PRINTFLIKE2*/ extern void zprintf(zoneid_t, const char *, ...) __KPRINTFLIKE(2); -#pragma rarely_called(zprintf) extern void vuprintf(const char *, __va_list) __KVPRINTFLIKE(1); -#pragma rarely_called(vuprintf) /*PRINTFLIKE1*/ extern void panic(const char *, ...) __KPRINTFLIKE(1) __NORETURN; -#pragma rarely_called(panic) extern void vpanic(const char *, __va_list) __KVPRINTFLIKE(1) __NORETURN; -#pragma rarely_called(vpanic) #endif /* !_ASM */ Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/condvar.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/condvar.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/condvar.h @@ -36,6 +36,7 @@ #include #include #include +#include /* * cv_timedwait() is similar to cv_wait() except that it additionally expects Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/kmem.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/kmem.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/kmem.h @@ -29,6 +29,7 @@ #ifndef _OPENSOLARIS_SYS_KMEM_H_ #define _OPENSOLARIS_SYS_KMEM_H_ +#ifdef _KERNEL #include #include #include @@ -93,5 +94,5 @@ zfs_kmem_alloc((size), (kmflags) | M_ZERO) #define kmem_free(buf, size) zfs_kmem_free((buf), (size)) - +#endif #endif /* _OPENSOLARIS_SYS_KMEM_H_ */ Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/kstat.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/kstat.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/kstat.h @@ -121,7 +121,6 @@ size_t ks_raw_bufsize; /* size of raw ops buffer */ struct sysctl_ctx_list ks_sysctl_ctx; struct sysctl_oid *ks_sysctl_root; - }; typedef struct kstat_named_s { Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h =================================================================== --- sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h +++ sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h @@ -41,7 +41,7 @@ #include #include - +#ifdef _KERNEL #define CPU curcpu #define minclsyspri PRIBIO #define defclsyspri minclsyspri @@ -111,4 +111,5 @@ return (p == curproc); } +#endif #endif /* _OPENSOLARIS_SYS_PROC_H_ */ Index: sys/contrib/openzfs/include/sys/zfs_context.h =================================================================== --- sys/contrib/openzfs/include/sys/zfs_context.h +++ sys/contrib/openzfs/include/sys/zfs_context.h @@ -32,7 +32,7 @@ extern "C" { #endif -#ifdef __KERNEL__ +#if defined(__KERNEL__) || defined(_STANDALONE) #include #include #include Index: sys/contrib/openzfs/include/sys/zio_compress.h =================================================================== --- sys/contrib/openzfs/include/sys/zio_compress.h +++ sys/contrib/openzfs/include/sys/zio_compress.h @@ -30,7 +30,9 @@ #ifndef _SYS_ZIO_COMPRESS_H #define _SYS_ZIO_COMPRESS_H +#if !defined(_STANDALONE) #include +#endif #ifdef __cplusplus extern "C" { @@ -134,6 +136,7 @@ typedef int zio_getlevel_func_t(void *src, size_t s_len, uint8_t *level); +#if !defined(_STANDALONE) /* * 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, @@ -141,6 +144,8 @@ */ typedef int zio_decompress_abd_func_t(abd_t *src, void *dst, size_t s_len, size_t d_len, int); +#endif + /* * Information about each compression function. */ @@ -183,10 +188,12 @@ /* * Compress and decompress data if necessary. */ +#if !defined(_STANDALONE) extern size_t zio_compress_data(enum zio_compress c, abd_t *src, void *dst, size_t s_len, uint8_t level); extern int zio_decompress_data(enum zio_compress c, abd_t *src, void *dst, size_t s_len, size_t d_len, uint8_t *level); +#endif extern int zio_decompress_data_buf(enum zio_compress c, void *src, void *dst, size_t s_len, size_t d_len, uint8_t *level); extern int zio_compress_to_feature(enum zio_compress comp); Index: sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h =================================================================== --- sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h +++ sys/contrib/openzfs/lib/libspl/include/os/freebsd/sys/param.h @@ -45,9 +45,9 @@ */ #define MAXNAMELEN 256 -#ifndef IN_BASE -#define UID_NOBODY 60001 /* user ID no body */ -#define GID_NOBODY UID_NOBODY +#ifdef IN_BASE +#define UID_NOBODY 65534 /* user ID no body */ +#define GID_NOBODY 65534 #endif #define UID_NOACCESS 60002 /* user ID no access */ Index: sys/contrib/openzfs/module/os/freebsd/spl/list.c =================================================================== --- sys/contrib/openzfs/module/os/freebsd/spl/list.c +++ sys/contrib/openzfs/module/os/freebsd/spl/list.c @@ -27,10 +27,11 @@ * Generic doubly-linked list implementation */ +#include +#include #include #include #include -#include #include #define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset)) Index: sys/contrib/openzfs/module/zstd/zfs_zstd.c =================================================================== --- sys/contrib/openzfs/module/zstd/zfs_zstd.c +++ sys/contrib/openzfs/module/zstd/zfs_zstd.c @@ -41,15 +41,20 @@ #include #include +#if !defined(_STANDALONE) #include #include #include +#else +#include +#endif #include #define ZSTD_STATIC_LINKING_ONLY #include "lib/zstd.h" #include "lib/zstd_errors.h" +#if !defined(_STANDALONE) kstat_t *zstd_ksp = NULL; typedef struct zstd_stats { @@ -75,6 +80,10 @@ { "compress_failed", KSTAT_DATA_UINT64 }, { "decompress_failed", KSTAT_DATA_UINT64 }, }; +#else +#undef ZSTDSTAT_BUMP +#define ZSTDSTAT_BUMP(x) +#endif /* Enums describing the allocator type specified by kmem_type in zstd_kmem */ enum zstd_kmem_type { @@ -695,6 +704,7 @@ pool_count = (boot_ncpus * 4); zstd_meminit(); +#if !defined(_STANDALONE) /* Initialize kstat */ zstd_ksp = kstat_create("zfs", 0, "zstd", "misc", KSTAT_TYPE_NAMED, sizeof (zstd_stats) / sizeof (kstat_named_t), @@ -703,6 +713,7 @@ zstd_ksp->ks_data = &zstd_stats; kstat_install(zstd_ksp); } +#endif return (0); } @@ -710,12 +721,13 @@ extern void __exit zstd_fini(void) { +#if !defined(_STANDALONE) /* Deinitialize kstat */ if (zstd_ksp != NULL) { kstat_delete(zstd_ksp); zstd_ksp = NULL; } - +#endif /* Release fallback memory */ vmem_free(zstd_dctx_fallback.mem, zstd_dctx_fallback.mem_size); mutex_destroy(&zstd_dctx_fallback.barrier); Index: sys/sys/errno.h =================================================================== --- sys/sys/errno.h +++ sys/sys/errno.h @@ -187,7 +187,7 @@ #define ELAST 97 /* Must be equal largest errno */ #endif /* _POSIX_SOURCE */ -#if defined(_KERNEL) || defined(_WANT_KERNEL_ERRNO) +#if defined(_KERNEL) || defined(_WANT_KERNEL_ERRNO) || defined(_STANDALONE) /* pseudo-errors returned inside kernel to modify return to process */ #define ERESTART (-1) /* restart syscall */ #define EJUSTRETURN (-2) /* don't modify regs, just return */ Index: sys/sys/systm.h =================================================================== --- sys/sys/systm.h +++ sys/sys/systm.h @@ -139,7 +139,6 @@ #include /* MAXCPU */ #include /* curthread */ #include -#endif /* * Helpful macros for quickly coming up with assertions with informative @@ -632,4 +631,5 @@ __NULLABILITY_PRAGMA_POP +#endif #endif /* !_SYS_SYSTM_H_ */ Index: sys/sys/time.h =================================================================== --- sys/sys/time.h +++ sys/sys/time.h @@ -393,7 +393,7 @@ } \ } while (0) -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_STANDALONE) /* Operations on timevals. */ @@ -492,7 +492,7 @@ #define CPUCLOCK_WHICH_TID 1 #endif -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_STANDALONE) /* * Kernel to clock driver interface. @@ -600,7 +600,7 @@ (((sbt2) >= sbt_timethreshold) ? \ ((*(sbt) = getsbinuptime()), 1) : ((*(sbt) = sbinuptime()), 0)) -#else /* !_KERNEL */ +#else /* !_KERNEL && !_STANDALONE */ #include #include Index: sys/sys/types.h =================================================================== --- sys/sys/types.h +++ sys/sys/types.h @@ -270,7 +270,7 @@ typedef __rman_res_t rman_res_t; -#ifdef _KERNEL +#if defined(_KERNEL) typedef int boolean_t; typedef struct device *device_t; typedef __intfptr_t intfptr_t; @@ -292,6 +292,10 @@ typedef char vm_memattr_t; /* memory attribute codes */ typedef struct vm_page *vm_page_t; +#define offsetof(type, field) __offsetof(type, field) +#endif /* _KERNEL */ + +#if defined(_KERNEL) || defined(_STANDALONE) #if !defined(__bool_true_false_are_defined) && !defined(__cplusplus) #define __bool_true_false_are_defined 1 #define false 0 @@ -301,10 +305,7 @@ #endif typedef _Bool bool; #endif /* !__bool_true_false_are_defined && !__cplusplus */ - -#define offsetof(type, field) __offsetof(type, field) - -#endif /* _KERNEL */ +#endif /* KERNEL || _STANDALONE */ /* * The following are all things that really shouldn't exist in this header,