/* * 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 #include #include #include #include #include #include #include #include #include #include #include #ifndef __NetBSD__ #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef __NetBSD__ #include #else #include #endif #include #ifndef __NetBSD__ #include #endif #include #include #include #include #include #include #ifndef __NetBSD__ #include #include #include #include #include #endif #include #include #include #include #include #ifndef __NetBSD__ #include #endif #include #include #ifndef __NetBSD__ #include #include #endif #include #include #include #include #include #if defined(illumos) || defined(__NetBSD__) #include #endif #ifndef __NetBSD__ #include #include #include #include #include #include #include #include /* There is clash. vm_map.h defines the two below and vdev_cache.c use them. */ #ifdef min_offset #undef min_offset #endif #ifdef max_offset #undef max_offset #endif #include #include #else /* !__NetBSD__ */ #include #include #include #endif /* !__NetBSD__ */ #ifndef __NetBSD__ #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)) #else /* !__NetBSD__ */ #define ASSERT_VOP_LOCKED(vp, name) KASSERT(VOP_ISLOCKED(vp) != 0) #define ASSERT_VOP_ELOCKED(vp, name) KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE) #define callout_drain(x) callout_halt(x, NULL) #define CPU_SEQID (curcpu()->ci_data.cpu_index) #define FIGNORECASE 0 #define fm_panic panic #define getf fd_getfile #define getminor(a) minor(a) #define GID_NOBODY (39) #define issig(x) (sigispending(curlwp, 0)) #define kmem_debugging() 0 #define releasef fd_putfile #define strfree(str) kmem_free((str), strlen(str)+1) #define td_ru l_ru #define UID_NOBODY (32767) #define vnode_pager_setsize(vp, size) zfs_netbsd_setsize(vp, size) #define zone_get_hostid(a) 0 extern struct utsname utsname; void zfs_netbsd_setsize(vnode_t *, off_t); static inline int sprintf(char * __restrict buf, const char * __restrict fmt, ...) { va_list ap; int rv; va_start(ap, fmt); rv = vsnprintf(buf, 1024, fmt, ap); va_end(ap); return rv; } static inline void tsd_create(uint_t *keyp, void (*func)(void *)) { int error __unused; error = lwp_specific_key_create(keyp, func); KASSERT(error == 0); } static inline void tsd_destroy(uint_t *keyp) { lwp_specific_key_delete(*keyp); } static inline void * tsd_get(uint_t key) { return lwp_getspecific(key); } static inline int tsd_set(uint_t key, void *value) { lwp_setspecific(key, value); return 0; } static inline int vsprintf(char * __restrict buf, const char * __restrict fmt, va_list ap) { return vsnprintf(buf, 1024, fmt, ap); } #define SYSCTL_DECL(...) #define SYSCTL_NODE(...) #define SYSCTL_INT(...) #define SYSCTL_UINT(...) #define SYSCTL_LONG(...) #define SYSCTL_ULONG(...) #define SYSCTL_QUAD(...) #define SYSCTL_UQUAD(...) #ifdef TUNABLE_INT #undef TUNABLE_INT #undef TUNABLE_ULONG #undef TUNABLE_INT_FETCH #endif #define TUNABLE_INT(...) #define TUNABLE_ULONG(...) #define TUNABLE_INT_FETCH(...) 0 #endif /* !__NetBSD__ */ #ifdef __cplusplus } #endif extern int zfs_debug_level; #ifndef __NetBSD__ 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 #else /* !__NetBSD__ */ extern kmutex_t zfs_debug_mtx; #define ZFS_LOG(lvl, ...) do { \ if (((lvl) & 0xff) <= zfs_debug_level) { \ mutex_enter(&zfs_debug_mtx); \ printf("%s:%u[%d]: ", __func__, __LINE__, (lvl)); \ printf(__VA_ARGS__); \ printf("\n"); \ if ((lvl) & 0x100) \ /* XXXNETBSD backtrace */; \ mutex_exit(&zfs_debug_mtx); \ } \ } while (0) #define sys_shutdown 0 #endif /* !__NetBSD__ */ #endif /* _SYS_ZFS_CONTEXT_H */