Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F81886171
D26218.id78139.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
29 KB
Referenced Files
None
Subscribers
None
D26218.id78139.diff
View Options
Index: stand/efi/boot1/Makefile
===================================================================
--- stand/efi/boot1/Makefile
+++ stand/efi/boot1/Makefile
@@ -40,6 +40,7 @@
CFLAGS.zfs_module.c+= -I${SYSDIR}/contrib/openzfs/include/os/freebsd/spl
CFLAGS.zfs_module.c+= -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs
CFLAGS.zfs_module.c+= -I${SYSDIR}/cddl/contrib/opensolaris/common/lz4
+CFLAGS.zfs_module.c+= -include ${ZFSOSINC}/spl/sys/ccompile.h
CFLAGS+= -DEFI_ZFS_BOOT
.endif
Index: stand/libsa/zfs/Makefile.inc
===================================================================
--- stand/libsa/zfs/Makefile.inc
+++ stand/libsa/zfs/Makefile.inc
@@ -1,17 +1,37 @@
# $FreeBSD$
.PATH: ${ZFSSRC}
-SRCS+= zfs.c nvlist.c skein.c skein_block.c list.c
.PATH: ${SYSDIR}/crypto/skein
-.PATH: ${SYSDIR}/cddl/contrib/opensolaris/uts/common/os
+.PATH: ${ZFSOSSRC}/spl
+.PATH: ${OZFS}/module/zstd/lib
+ZFSSRC= zfs.c nvlist.c skein.c skein_block.c list.c zstd_shim.c zstd.c
+SRCS+= ${ZFSSRC}
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${ZFSOSINC} \
+ -I${ZFSOSINC}/spl \
+ -I${ZFSOSINC}/zfs
+
+.for i in ${ZFSSRC}
+CFLAGS.$i+= -include ${ZFSOSINC}/spl/sys/ccompile.h
+.endfor
+
+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${ZFSOSINC}/spl
+CFLAGS.zfs.c+= -I${ZFSOSINC}/spl \
+ -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/lz4
+CFLAGS.zstd_shim.c+= -DIN_BASE -I${OZFS}/include
+
# Do not unroll skein loops, reduce code size
CFLAGS.skein_block.c+= -DSKEIN_LOOP=111
+
CFLAGS+= -I${SYSDIR}/contrib/openzfs/include
CFLAGS+= -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs
CFLAGS.zfs.c+= -I${SYSDIR}/cddl/contrib/opensolaris/common/lz4
Index: stand/libsa/zfs/zfsimpl.c
===================================================================
--- stand/libsa/zfs/zfsimpl.c
+++ stand/libsa/zfs/zfsimpl.c
@@ -42,6 +42,7 @@
#include "zfsimpl.h"
#include "zfssubr.c"
+extern int zstd_init(void);
struct zfsmount {
const spa_t *spa;
@@ -112,6 +113,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",
@@ -170,6 +172,7 @@
dnode_cache_buf = malloc(SPA_MAXBLOCKSIZE);
zfs_init_crc();
+ zstd_init();
}
static int
Index: stand/libsa/zfs/zstd_shim.c
===================================================================
--- stand/libsa/zfs/zstd_shim.c
+++ stand/libsa/zfs/zstd_shim.c
@@ -1,6 +1,5 @@
-/*
- * Copyright (c) 2020 iXsystems, Inc.
- * All rights reserved.
+/*-
+ * Copyright (c) 2020 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -11,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
@@ -23,27 +22,20 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+/*
+ * Small amount of shim code needed to get zfs_zstd.c to compile. These items
+ * here should all be defined in the SPL or as part of libstand somewhere, but
+ * aren't for reasons that haven't been tracked down yet. Ideally, they would
+ * all go away and we'd compile zfs_zstd.c directly. Based on an original by
+ * Matt Macey, but only the #include remains untouched from that.
+ */
-#ifndef _SPL_KMEM_CACHE_H
-#define _SPL_KMEM_CACHE_H
-
-#include <sys/taskq.h>
-
-/* kmem move callback return values */
-typedef enum kmem_cbrc {
- KMEM_CBRC_YES = 0, /* Object moved */
- KMEM_CBRC_NO = 1, /* Object not moved */
- KMEM_CBRC_LATER = 2, /* Object not moved, try again later */
- KMEM_CBRC_DONT_NEED = 3, /* Neither object is needed */
- KMEM_CBRC_DONT_KNOW = 4, /* Object unknown */
-} kmem_cbrc_t;
-
-extern void spl_kmem_cache_set_move(kmem_cache_t *,
- kmem_cbrc_t (*)(void *, void *, size_t, void *));
-
-#define kmem_cache_set_move(skc, move) spl_kmem_cache_set_move(skc, move)
+#define ZFS_MODULE_PARAM_ARGS void
+typedef int kmem_cache_t;
+typedef int boolean_t; /* This one may be tough to get rid of */
-#endif
+#include <contrib/openzfs/module/zstd/zfs_zstd.c>
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
@@ -30,8 +30,6 @@
static uint64_t zfs_crc64_table[256];
-#define ECKSUM 666
-
#define ASSERT3S(x, y, z) ((void)0)
#define ASSERT3U(x, y, z) ((void)0)
#define ASSERT3P(x, y, z) ((void)0)
@@ -107,6 +105,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 +183,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 <sys/list.h>
-#include <sys/list_impl.h>
-#include <sys/types.h>
-#include <sys/sysmacros.h>
-#include <sys/debug.h>
-
-#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 <rpc/types.h>
#include_next <rpc/xdr.h>
-#ifndef _KERNEL
+#if !defined(_KERNEL) && !defined(_STANDALONE)
#include <assert.h>
@@ -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
@@ -29,6 +29,8 @@
#ifndef _OPENSOLARIS_SYS_ATOMIC_H_
#define _OPENSOLARIS_SYS_ATOMIC_H_
+#ifndef _STANDALONE
+
#include <sys/types.h>
#include <machine/atomic.h>
@@ -179,4 +181,13 @@
}
#endif /* !defined(COMPAT_32BIT) && defined(__LP64__) */
+#else /* _STANDALONE */
+/*
+ * sometimes atomic_add_64 is defined, sometimes not, but the
+ * following is always right for the boot loader.
+ */
+#undef atomic_add_64
+#define atomic_add_64(ptr, val) *(ptr) += val
+#endif /* !_STANDALONE */
+
#endif /* !_OPENSOLARIS_SYS_ATOMIC_H_ */
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,10 +80,11 @@
#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)
-#else
+#else /* BYTE_ORDER == _LITTLE_ENDIAN */
#ifndef __LP64__
static __inline__ uint64_t
htonll(uint64_t n)
@@ -96,11 +97,12 @@
{
return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32));
}
-#else
+#else /* !__LP64__ */
#define htonll(x) BSWAP_64(x)
#define ntohll(x) BSWAP_64(x)
-#endif
-#endif
+#endif /* __LP64__ */
+#endif /* BYTE_ORDER */
+#endif /* _STANDALONE */
#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,9 +113,9 @@
#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
+#endif /* _KERNEL || _STANDALONE */
#define __CONST __sun_attr__((__const__))
#define __PURE __sun_attr__((__pure__))
@@ -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
@@ -183,9 +183,15 @@
#define ATTR_CTIME AT_CTIME
#define ATTR_MTIME AT_MTIME
#define ATTR_ATIME AT_ATIME
+#if defined(_STANDALONE)
+#define vmem_free kmem_free
+#define vmem_zalloc kmem_zalloc
+#define vmem_alloc kmem_zalloc
+#else
#define vmem_free zfs_kmem_free
#define vmem_zalloc(size, flags) zfs_kmem_alloc(size, flags | M_ZERO)
#define vmem_alloc zfs_kmem_alloc
+#endif
#define MUTEX_NOLOCKDEP 0
#define RW_NOLOCKDEP 0
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 <sys/spl_condvar.h>
#include <sys/mutex.h>
#include <sys/time.h>
+#include <sys/errno.h>
/*
* 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 <sys/param.h>
#include <sys/malloc.h>
#include <sys/vmem.h>
@@ -93,5 +94,5 @@
zfs_kmem_alloc((size), (kmflags) | M_ZERO)
#define kmem_free(buf, size) zfs_kmem_free((buf), (size))
-
+#endif /* _KERNEL */
#endif /* _OPENSOLARIS_SYS_KMEM_H_ */
Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/kmem_cache.h
===================================================================
--- sys/contrib/openzfs/include/os/freebsd/spl/sys/kmem_cache.h
+++ sys/contrib/openzfs/include/os/freebsd/spl/sys/kmem_cache.h
@@ -30,6 +30,7 @@
#ifndef _SPL_KMEM_CACHE_H
#define _SPL_KMEM_CACHE_H
+#ifdef _KERNEL
#include <sys/taskq.h>
/* kmem move callback return values */
@@ -46,4 +47,6 @@
#define kmem_cache_set_move(skc, move) spl_kmem_cache_set_move(skc, move)
+#endif /* _KERNEL */
+
#endif
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
@@ -24,8 +24,11 @@
#ifndef _SPL_KSTAT_H
#define _SPL_KSTAT_H
+
#include <sys/types.h>
+#ifndef _STANDALONE
#include <sys/sysctl.h>
+#endif
struct list_head {};
#include <sys/mutex.h>
#include <sys/proc.h>
@@ -129,9 +132,10 @@
kstat_raw_ops_t ks_raw_ops; /* ops table for raw type */
char *ks_raw_buf; /* buf used for raw ops */
size_t ks_raw_bufsize; /* size of raw ops buffer */
+#ifndef _STANDALONE
struct sysctl_ctx_list ks_sysctl_ctx;
struct sysctl_oid *ks_sysctl_root;
-
+#endif /* _STANDALONE */
};
typedef struct kstat_named_s {
@@ -216,10 +220,16 @@
__kstat_set_seq_raw_ops(k, h, d, a)
#define kstat_set_raw_ops(k, h, d, a) \
__kstat_set_raw_ops(k, h, d, a)
+#ifndef _STANDALONE
#define kstat_create(m, i, n, c, t, s, f) \
__kstat_create(m, i, n, c, t, s, f)
#define kstat_install(k) __kstat_install(k)
#define kstat_delete(k) __kstat_delete(k)
+#else
+#define kstat_create(m, i, n, c, t, s, f) ((kstat_t *)0)
+#define kstat_install(k)
+#define kstat_delete(k)
+#endif
#endif /* _SPL_KSTAT_H */
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 <sys/kmem.h>
#include <sys/malloc.h>
-
+#ifdef _KERNEL
#define CPU curcpu
#define minclsyspri PRIBIO
#define defclsyspri minclsyspri
@@ -111,4 +111,5 @@
return (p == curproc);
}
+#endif /* _KERNEL */
#endif /* _OPENSOLARIS_SYS_PROC_H_ */
Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/procfs_list.h
===================================================================
--- sys/contrib/openzfs/include/os/freebsd/spl/sys/procfs_list.h
+++ sys/contrib/openzfs/include/os/freebsd/spl/sys/procfs_list.h
@@ -25,6 +25,8 @@
#ifndef _SPL_PROCFS_LIST_H
#define _SPL_PROCFS_LIST_H
+#ifndef _STANDALONE
+
#include <sys/kstat.h>
#include <sys/mutex.h>
@@ -64,4 +66,8 @@
void procfs_list_destroy(procfs_list_t *procfs_list);
void procfs_list_add(procfs_list_t *procfs_list, void *p);
+#else
+typedef int procfs_list_t;
+#endif /* !_STANDALONE */
+
#endif /* _SPL_PROCFS_LIST_H */
Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/sig.h
===================================================================
--- sys/contrib/openzfs/include/os/freebsd/spl/sys/sig.h
+++ sys/contrib/openzfs/include/os/freebsd/spl/sys/sig.h
@@ -29,6 +29,8 @@
#ifndef _OPENSOLARIS_SYS_SIG_H_
#define _OPENSOLARIS_SYS_SIG_H_
+#ifndef _STANDALONE
+
#include_next <sys/signal.h>
#include <sys/param.h>
#include <sys/lock.h>
@@ -62,4 +64,7 @@
}
return (0);
}
+
+#endif /* !_STANDALONE */
+
#endif /* _OPENSOLARIS_SYS_SIG_H_ */
Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/sysmacros.h
===================================================================
--- sys/contrib/openzfs/include/os/freebsd/spl/sys/sysmacros.h
+++ sys/contrib/openzfs/include/os/freebsd/spl/sys/sysmacros.h
@@ -31,6 +31,7 @@
#define _SYS_SYSMACROS_H
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/isa_defs.h>
#include <sys/libkern.h>
#include <sys/zone.h>
@@ -71,7 +72,11 @@
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
#endif
+#ifdef _STANDALONE
+#define boot_ncpus 1
+#else /* _STANDALONE */
#define boot_ncpus mp_ncpus
+#endif /* _STANDALONE */
#define kpreempt_disable() critical_enter()
#define kpreempt_enable() critical_exit()
#define CPU_SEQID curcpu
@@ -319,7 +324,7 @@
/* avoid any possibility of clashing with <stddef.h> version */
-#define offsetof(s, m) ((size_t)(&(((s *)0)->m)))
+#define offsetof(type, field) __offsetof(type, field)
#endif
/*
Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/taskq.h
===================================================================
--- sys/contrib/openzfs/include/os/freebsd/spl/sys/taskq.h
+++ sys/contrib/openzfs/include/os/freebsd/spl/sys/taskq.h
@@ -26,6 +26,8 @@
#ifndef _SYS_TASKQ_H
#define _SYS_TASKQ_H
+#ifdef _KERNEL
+
#include <sys/types.h>
#include <sys/proc.h>
#include <sys/taskqueue.h>
@@ -112,4 +114,11 @@
}
#endif
+#endif /* _KERNEL */
+
+#ifdef _STANDALONE
+typedef int taskq_ent_t;
+#define taskq_init_ent(x)
+#endif /* _STANDALONE */
+
#endif /* _SYS_TASKQ_H */
Index: sys/contrib/openzfs/include/os/freebsd/spl/sys/uio.h
===================================================================
--- sys/contrib/openzfs/include/os/freebsd/spl/sys/uio.h
+++ sys/contrib/openzfs/include/os/freebsd/spl/sys/uio.h
@@ -29,6 +29,8 @@
#ifndef _OPENSOLARIS_SYS_UIO_H_
#define _OPENSOLARIS_SYS_UIO_H_
+#ifndef _STANDALONE
+
#include_next <sys/uio.h>
#include <sys/_uio.h>
#include <sys/debug.h>
@@ -107,4 +109,6 @@
return (off);
}
+#endif /* !_STANDALONE */
+
#endif /* !_OPENSOLARIS_SYS_UIO_H_ */
Index: sys/contrib/openzfs/include/sys/nvpair.h
===================================================================
--- sys/contrib/openzfs/include/sys/nvpair.h
+++ sys/contrib/openzfs/include/sys/nvpair.h
@@ -62,7 +62,7 @@
DATA_TYPE_UINT8,
DATA_TYPE_BOOLEAN_ARRAY,
DATA_TYPE_INT8_ARRAY,
-#if !defined(_KERNEL)
+#if !defined(_KERNEL) && !defined(_STANDALONE)
DATA_TYPE_UINT8_ARRAY,
DATA_TYPE_DOUBLE
#else
@@ -191,7 +191,7 @@
int nvlist_add_string_array(nvlist_t *, const char *, char *const *, uint_t);
int nvlist_add_nvlist_array(nvlist_t *, const char *, nvlist_t **, uint_t);
int nvlist_add_hrtime(nvlist_t *, const char *, hrtime_t);
-#if !defined(_KERNEL)
+#if !defined(_KERNEL) && !defined(_STANDALONE)
int nvlist_add_double(nvlist_t *, const char *, double);
#endif
@@ -228,7 +228,7 @@
nvlist_t ***, uint_t *);
int nvlist_lookup_hrtime(nvlist_t *, const char *, hrtime_t *);
int nvlist_lookup_pairs(nvlist_t *, int, ...);
-#if !defined(_KERNEL)
+#if !defined(_KERNEL) && !defined(_STANDALONE)
int nvlist_lookup_double(nvlist_t *, const char *, double *);
#endif
@@ -269,7 +269,7 @@
int nvpair_value_string_array(nvpair_t *, char ***, uint_t *);
int nvpair_value_nvlist_array(nvpair_t *, nvlist_t ***, uint_t *);
int nvpair_value_hrtime(nvpair_t *, hrtime_t *);
-#if !defined(_KERNEL)
+#if !defined(_KERNEL) && !defined(_STANDALONE)
int nvpair_value_double(nvpair_t *, double *);
#endif
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,15 @@
extern "C" {
#endif
-#ifdef __KERNEL__
+/*
+ * This code compiles in three different contexts. When __KERNEL__ is defined,
+ * the code uses "unix-like" kernel interfaces. When _STANDALONE is defined, the
+ * code is running in a reduced capacity environment of the boot loader which is
+ * generally a subset of both POSIX and kernel interfaces (with a few unique
+ * interfaces too). When neither are defined, it's in a userland POSIX or
+ * similar environment.
+ */
+#if defined(__KERNEL__) || defined(_STANDALONE)
#include <sys/note.h>
#include <sys/types.h>
#include <sys/atomic.h>
@@ -65,7 +73,7 @@
#include <sys/procfs_list.h>
#include <sys/mod.h>
#include <sys/zfs_context_os.h>
-#else /* _KERNEL */
+#else /* _KERNEL || _STANDALONE */
#define _SYS_MUTEX_H
#define _SYS_RWLOCK_H
@@ -759,7 +767,7 @@
#define __init
#define __exit
-#endif /* _KERNEL */
+#endif /* _KERNEL || _STANDALONE */
#ifdef __cplusplus
};
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,10 +45,6 @@
*/
#define MAXNAMELEN 256
-#ifndef IN_BASE
-#define UID_NOBODY 60001 /* user ID no body */
-#define GID_NOBODY UID_NOBODY
-#endif
#define UID_NOACCESS 60002 /* user ID no access */
#define MAXUID UINT32_MAX /* max user id */
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,10 @@
* Generic doubly-linked list implementation
*/
+#include <sys/param.h>
#include <sys/list.h>
#include <sys/list_impl.h>
#include <sys/types.h>
-#include <sys/sysmacros.h>
#include <sys/debug.h>
#define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset))
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 28, 10:51 PM (1 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
9052724
Default Alt Text
D26218.id78139.diff (29 KB)
Attached To
Mode
D26218: Integrate zstd into boot loader
Attached
Detach File
Event Timeline
Log In to Comment