This is a step toward being able to vendor the OpenZFS code in FreeBSD.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #10625
#ifndef _LINUX_TYPES_H_
#define _LINUX_TYPES_H_
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <sys/systm.h>
#include <linux/compiler.h>
typedef uint64_t __be64;
typedef unsigned gfp_t;
-typedef uint64_t loff_t;
+typedef off_t loff_t;
typedef vm_paddr_t resource_size_t;
typedef uint16_t __bitwise__ __sum16;
typedef unsigned long pgoff_t;
--- /dev/null
+/*
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * 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 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 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)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_CCOMPAT_H
+#define _SYS_CCOMPAT_H
+
+#if __FreeBSD_version < 1300051
+#define vm_page_valid(m) (m)->valid = VM_PAGE_BITS_ALL
+#define vm_page_do_sunbusy(m)
+#define vm_page_none_valid(m) ((m)->valid == 0)
+#else
+#define vm_page_do_sunbusy(m) vm_page_sunbusy(m)
+#endif
+
+#if __FreeBSD_version < 1300074
+#define VOP_UNLOCK1(x) VOP_UNLOCK(x, 0)
+#else
+#define VOP_UNLOCK1(x) VOP_UNLOCK(x)
+#endif
+
+#if __FreeBSD_version < 1300064
+#define VN_IS_DOOMED(vp) ((vp)->v_iflag & VI_DOOMED)
+#endif
+
+#if __FreeBSD_version < 1300068
+#define VFS_VOP_VECTOR_REGISTER(x)
+#endif
+
+#if __FreeBSD_version >= 1300076
+#define getnewvnode_reserve_() getnewvnode_reserve()
+#else
+#define getnewvnode_reserve_() getnewvnode_reserve(1)
+#endif
+struct hlist_node {
+ struct hlist_node *next, **pprev;
+};
+
+struct hlist_head {
+ struct hlist_node *first;
+};
+
+typedef struct {
+ volatile int counter;
+} atomic_t;
+
+ /* BEGIN CSTYLED */
+#define hlist_for_each(p, head) \
+ for (p = (head)->first; p; p = (p)->next)
+
+#define hlist_entry(ptr, type, field) container_of(ptr, type, field)
+
+#define container_of(ptr, type, member) \
+({ \
+ const __typeof(((type *)0)->member) *__p = (ptr); \
+ (type *)((uintptr_t)__p - offsetof(type, member)); \
+})
+ /* END CSTYLED */
+
+static inline void
+hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+{
+ n->next = h->first;
+ if (h->first != NULL)
+ h->first->pprev = &n->next;
+ WRITE_ONCE(h->first, n);
+ n->pprev = &h->first;
+}
+
+static inline void
+hlist_del(struct hlist_node *n)
+{
+ WRITE_ONCE(*(n->pprev), n->next);
+ if (n->next != NULL)
+ n->next->pprev = n->pprev;
+}
+ /* BEGIN CSTYLED */
+#define READ_ONCE(x) ({ \
+ __typeof(x) __var = ({ \
+ barrier(); \
+ ACCESS_ONCE(x); \
+ }); \
+ barrier(); \
+ __var; \
+})
+
+#define HLIST_HEAD_INIT { }
+#define HLIST_HEAD(name) struct hlist_head name = HLIST_HEAD_INIT
+#define INIT_HLIST_HEAD(head) (head)->first = NULL
+
+#define INIT_HLIST_NODE(node) \
+ do { \
+ (node)->next = NULL; \
+ (node)->pprev = NULL; \
+ } while (0)
+
+/* END CSTYLED */
+static inline int
+atomic_read(const atomic_t *v)
+{
+ return (READ_ONCE(v->counter));
+}
+
+static inline int
+atomic_inc(atomic_t *v)
+{
+ return (atomic_fetchadd_int(&v->counter, 1) + 1);
+}
+
+static inline int
+atomic_dec(atomic_t *v)
+{
+ return (atomic_fetchadd_int(&v->counter, -1) - 1);
+}
+#endif
#define KMALLOC_MAX_SIZE MAXPHYS
-#ifdef _KERNEL
-#if !defined(LOCORE) && !defined(_ASM)
-typedef unsigned long long u_longlong_t;
-typedef long long longlong_t;
-
+#ifndef LOCORE
+#ifndef HAVE_RPC_TYPES
+typedef int bool_t;
+typedef int enum_t;
+#endif
+#endif
-typedef void zfs_kernel_param_t;
+#ifndef __cplusplus
+#define __init
+#define __exit
#endif
+
+#ifdef _KERNEL
#define param_set_charp(a, b) (0)
#define ATTR_UID AT_UID
#define ATTR_GID AT_GID
#define MUTEX_NOLOCKDEP 0
#define RW_NOLOCKDEP 0
-#if !defined(LOCORE) && !defined(_ASM)
-#include <sys/param.h>
-#include <linux/types.h>
-
-#if __FreeBSD_version < 1300051
-#define vm_page_valid(m) (m)->valid = VM_PAGE_BITS_ALL
-#define vm_page_do_sunbusy(m)
-#define vm_page_none_valid(m) ((m)->valid == 0)
-#else
-#define vm_page_do_sunbusy(m) vm_page_sunbusy(m)
-#endif
-
-#if __FreeBSD_version < 1300074
-#define VOP_UNLOCK1(x) VOP_UNLOCK(x, 0)
#else
-#define VOP_UNLOCK1(x) VOP_UNLOCK(x)
-#endif
-
-#if __FreeBSD_version < 1300064
-#define VN_IS_DOOMED(vp) ((vp)->v_iflag & VI_DOOMED)
-#endif
-
-#if __FreeBSD_version < 1300068
-#define VFS_VOP_VECTOR_REGISTER(x)
-#endif
-
-#if __FreeBSD_version >= 1300076
-#define getnewvnode_reserve_() getnewvnode_reserve()
-#else
-#define getnewvnode_reserve_() getnewvnode_reserve(1)
-#endif
-struct hlist_node {
- struct hlist_node *next, **pprev;
-};
-
-struct hlist_head {
- struct hlist_node *first;
-};
-
-typedef struct {
- volatile int counter;
-} atomic_t;
-
- /* BEGIN CSTYLED */
-#define hlist_for_each(p, head) \
- for (p = (head)->first; p; p = (p)->next)
-
-#define hlist_entry(ptr, type, field) container_of(ptr, type, field)
-
-#define container_of(ptr, type, member) \
-({ \
- const __typeof(((type *)0)->member) *__p = (ptr); \
- (type *)((uintptr_t)__p - offsetof(type, member)); \
-})
- /* END CSTYLED */
-
-static inline void
-hlist_add_head(struct hlist_node *n, struct hlist_head *h)
-{
- n->next = h->first;
- if (h->first != NULL)
- h->first->pprev = &n->next;
- WRITE_ONCE(h->first, n);
- n->pprev = &h->first;
-}
-
-static inline void
-hlist_del(struct hlist_node *n)
-{
- WRITE_ONCE(*(n->pprev), n->next);
- if (n->next != NULL)
- n->next->pprev = n->pprev;
-}
- /* BEGIN CSTYLED */
-#define READ_ONCE(x) ({ \
- __typeof(x) __var = ({ \
- barrier(); \
- ACCESS_ONCE(x); \
- }); \
- barrier(); \
- __var; \
-})
-
-#define HLIST_HEAD_INIT { }
-#define HLIST_HEAD(name) struct hlist_head name = HLIST_HEAD_INIT
-#define INIT_HLIST_HEAD(head) (head)->first = NULL
-
-#define INIT_HLIST_NODE(node) \
- do { \
- (node)->next = NULL; \
- (node)->pprev = NULL; \
- } while (0)
-
-/* END CSTYLED */
-static inline int
-atomic_read(const atomic_t *v)
-{
- return (READ_ONCE(v->counter));
-}
-
-static inline int
-atomic_inc(atomic_t *v)
-{
- return (atomic_fetchadd_int(&v->counter, 1) + 1);
-}
-
-static inline int
-atomic_dec(atomic_t *v)
-{
- return (atomic_fetchadd_int(&v->counter, -1) - 1);
-}
-#endif
-#else
-typedef long loff_t;
-typedef long rlim64_t;
-typedef int bool_t;
-typedef int enum_t;
-#ifndef __cplusplus
-#define __init
-#endif
-#define __exit
#define FALSE 0
#define TRUE 1
/*
#define _OPENSOLARIS_SYS_CONDVAR_H_
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/spl_condvar.h>
#include <sys/mutex.h>
#ifndef _SPL_KSTAT_H
#define _SPL_KSTAT_H
+#include <sys/types.h>
#include <sys/sysctl.h>
struct list_head {};
#include <sys/mutex.h>
#ifndef _COMPAT_OPENSOLARIS_SYS_PARAM_H_
#define _COMPAT_OPENSOLARIS_SYS_PARAM_H_
+#include <sys/types.h>
#include_next <sys/param.h>
-
#define PAGESIZE PAGE_SIZE
#define ptob(x) ((uint64_t)(x) << PAGE_SHIFT)
-
+#ifdef _KERNEL
+#include <sys/systm.h>
+#include <sys/libkern.h>
+#endif
#endif
#ifndef _OPENSOLARIS_SYS_SYSTM_H_
#define _OPENSOLARIS_SYS_SYSTM_H_
-#include <sys/param.h>
+#include <sys/endian.h>
#include_next <sys/systm.h>
#include <sys/string.h>
/*
* This is a bag of dirty hacks to keep things compiling.
*/
+#include_next <sys/types.h>
+#ifdef __ILP32__
+typedef __uint64_t u_longlong_t;
+typedef __int64_t longlong_t;
+#else
+typedef unsigned long long u_longlong_t;
+typedef long long longlong_t;
+#endif
#include <sys/stdint.h>
-typedef int64_t clock_t;
#define _CLOCK_T_DECLARED
-#include_next <sys/types.h>
#include <sys/types32.h>
#include <sys/_stdarg.h>
+#include <linux/types.h>
#define MAXNAMELEN 256
+
+
+typedef void zfs_kernel_param_t;
+
typedef struct timespec timestruc_t;
typedef struct timespec timespec_t;
typedef struct timespec inode_timespec_t;
typedef longlong_t diskaddr_t;
-
+#include <sys/debug.h>
#endif /* !_OPENSOLARIS_SYS_TYPES_H_ */
#include <sys/kdb.h>
#include <sys/pathname.h>
#include <sys/conf.h>
+#include <sys/types.h>
+#include <sys/ccompat.h>
+#include <linux/types.h>
#define cv_wait_io(cv, mp) cv_wait(cv, mp)
#define cv_wait_io_sig(cv, mp) cv_wait_sig(cv, mp)
#define tsd_set(k, v) pthread_setspecific(k, v)
#define tsd_create(kp, d) pthread_key_create((pthread_key_t *)kp, d)
#define tsd_destroy(kp) /* nothing */
+#ifdef __FreeBSD__
+typedef off_t loff_t;
+#endif
/*
* kstat creation, installation and deletion
CFLAGS+= -D_SYS_VMEM_H_ -D_MACHINE_ENDIAN_H_ -DKDTRACE_HOOKS -DSMP
.if ${MACHINE_ARCH} == "amd64"
-CFLAGS+= -DHAVE_AVX2 -DHAVE_AVX -D__x86_64 -DHAVE_SSE2 -DHAVE_AVX512F
+CFLAGS+= -DHAVE_AVX2 -DHAVE_AVX -D__x86_64 -DHAVE_SSE2 -DHAVE_AVX512F -DHAVE_SSSE3
.endif
.if defined(WITH_DEBUG) && ${WITH_DEBUG} == "true"
CFLAGS.lobject.c= -Wno-cast-qual
CFLAGS.ltable.c= -Wno-cast-qual
CFLAGS.lvm.c= -Wno-cast-qual
-CFLAGS.nvpair.c= -Wno-cast-qual
+CFLAGS.nvpair.c= -DHAVE_RPC_TYPES -Wno-cast-qual
CFLAGS.spl_string.c= -Wno-cast-qual
CFLAGS.spl_vm.c= -Wno-cast-qual
CFLAGS.spl_zlib.c= -Wno-cast-qual
#include <sys/nvpair.h>
#include <sys/nvpair_impl.h>
#include <sys/types.h>
+#include <sys/param.h>
#include <sys/strings.h>
#include <rpc/xdr.h>
#include <sys/mod.h>
* Use is subject to license terms.
*/
-#include <sys/param.h>
#include <sys/types.h>
+#include <sys/param.h>
#include <sys/time.h>
#include <sys/sysmacros.h>
#include <sys/systm.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/types.h>
* Copyright 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
*/
+#include <sys/cdefs.h>
+#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/cmn_err.h>
void
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/sdt.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/byteorder.h>
#include <sys/kernel.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/jail.h>
#include <sys/kernel.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/priv.h>
#include <sys/vnode.h>
* Use is subject to license terms.
*/
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/string.h>
#include <sys/kmem.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/jail.h>
#include <sys/kernel.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/kmem.h>
* $FreeBSD$
*/
-#include <sys/types.h>
+#include <sys/param.h>
#include <sys/uio.h>
#include <sys/vnode.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mutex.h>
#include <sys/vnode.h>
+#include <sys/ccompat.h>
+
MALLOC_DECLARE(M_MOUNT);
void
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/byteorder.h>
#include <sys/lock.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/kmem.h>
#include <sys/kmem_cache.h>
#include <sys/zmod.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/abd_impl.h>
#include <sys/param.h>
+#include <sys/types.h>
#include <sys/zio.h>
#include <sys/zfs_context.h>
#include <sys/zfs_znode.h>
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/types.h>
+#include <sys/param.h>
#include <sys/dmu.h>
#include <sys/dmu_impl.h>
#include <sys/dmu_tx.h>
#include <sys/zfs_znode.h>
#include <sys/zfs_vnops.h>
+#include <sys/ccompat.h>
#ifndef IDX_TO_OFF
#define IDX_TO_OFF(idx) (((vm_ooffset_t)(idx)) << PAGE_SHIFT)
* so that it cannot be freed until all snapshots have been unmounted.
*/
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/libkern.h>
#include <sys/dirent.h>
#include <sys/zfs_context.h>
#include <sys/zfs_ctldir.h>
#include "zfs_namecheck.h"
#include <sys/kernel.h>
+#include <sys/ccompat.h>
/* Common access mode for all virtual directories under the ctldir */
const uint16_t zfsctl_ctldir_mode = S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP |
#include <sys/dmu_objset.h>
#include <sys/dsl_dir.h>
+#include <sys/ccompat.h>
+
/*
* zfs_match_find() is used by zfs_dirent_lookup() to perform zap lookups
* of names after deciding which is the appropriate lookup interface.
#include <sys/fs/zfs.h>
#include <sys/inttypes.h>
#include <sys/types.h>
+#include <sys/param.h>
#include <sys/zfs_sysfs.h>
#include "zfeature_common.h"
#include <sys/simd.h>
#include <zfs_fletcher.h>
+#ifdef __linux__
#define __asm __asm__ __volatile__
+#endif
static void
fletcher_4_avx512f_init(fletcher_4_ctx_t *ctx)
* SOFTWARE.
*/
+#include <sys/param.h>
#include <sys/byteorder.h>
#include <sys/spa_checksum.h>
#include <sys/strings.h>
* SOFTWARE.
*/
+#include <sys/param.h>
#include <sys/byteorder.h>
#include <sys/spa_checksum.h>
#include <sys/strings.h>
#if defined(__x86_64) && defined(HAVE_AVX512BW)
+#include <sys/param.h>
#include <sys/types.h>
#include <sys/simd.h>
+
+#ifdef __linux__
#define __asm __asm__ __volatile__
+#endif
#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N
#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1)
#include <sys/types.h>
#include <sys/simd.h>
+#ifdef __linux__
#define __asm __asm__ __volatile__
+#endif
#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N
#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1)