usr/src/lib/libzpool/common/sys/zfs_context.h
author gw25295
Wed, 24 Oct 2007 20:00:39 -0700
changeset 5329 33cb98223b2d
parent 4831 41ec732c6d9f
child 5331 3047ad28a67b
permissions -rw-r--r--
PSARC 2007/567 zpool failmode property 6322646 ZFS should gracefully handle all devices failing (when writing) 6413847 vdev label write failure should be handled more gracefully 6417772 need nicer message on write failure 6417779 ZFS: I/O failure (write on ...) -- need to reallocate writes 6467927 Node gets into a panic loop when devices are fenced off 6565042 ZFS should gracefully handle all devices failing (when reading) 6596239 Stop issuing IOs to a vdev that is going to be removed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
     5
 * Common Development and Distribution License (the "License").
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
     6
 * You may not use this file except in compliance with the License.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
3403
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#ifndef _SYS_ZFS_CONTEXT_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#define	_SYS_ZFS_CONTEXT_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#define	_SYS_MUTEX_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
#define	_SYS_RWLOCK_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
#define	_SYS_CONDVAR_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
#define	_SYS_SYSTM_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
#define	_SYS_DEBUG_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
#define	_SYS_T_LOCK_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
#define	_SYS_VNODE_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
#define	_SYS_VFS_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
#define	_SYS_SUNDDI_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
#define	_SYS_CALLB_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
#include <stdio.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
#include <stdlib.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    48
#include <stddef.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
#include <stdarg.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
#include <fcntl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
#include <unistd.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
#include <errno.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
#include <string.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
#include <strings.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
#include <synch.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
#include <thread.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
#include <assert.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
#include <alloca.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
#include <umem.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
#include <limits.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
#include <atomic.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
#include <dirent.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
#include <time.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    64
#include <sys/note.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
#include <sys/types.h>
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
    66
#include <sys/cred.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    67
#include <sys/sysmacros.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    68
#include <sys/bitmap.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    69
#include <sys/resource.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    70
#include <sys/byteorder.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    71
#include <sys/list.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
#include <sys/uio.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
#include <sys/zfs_debug.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
#include <sys/sdt.h>
3403
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
    75
#include <sys/kstat.h>
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 4108
diff changeset
    76
#include <sys/sysevent/eventdefs.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    77
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
 * Debugging
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    80
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    81
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    82
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    83
 * Note that we are not using the debugging levels.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    84
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
#define	CE_CONT		0	/* continuation		*/
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
#define	CE_NOTE		1	/* notice		*/
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    88
#define	CE_WARN		2	/* warning		*/
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    89
#define	CE_PANIC	3	/* panic		*/
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    90
#define	CE_IGNORE	4	/* print nothing	*/
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    91
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
 * ZFS debugging
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    95
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
#ifdef ZFS_DEBUG
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
extern void dprintf_setup(int *argc, char **argv);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
#endif /* ZFS_DEBUG */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    99
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
extern void cmn_err(int, const char *, ...);
3713
00e75dc8b749 6527325 want more assertions in space map code
ahrens
parents: 3403
diff changeset
   101
extern void vcmn_err(int, const char *, __va_list);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   102
extern void panic(const char *, ...);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   103
extern void vpanic(const char *, __va_list);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   104
5329
33cb98223b2d PSARC 2007/567 zpool failmode property
gw25295
parents: 4831
diff changeset
   105
#define	fm_panic	panic
33cb98223b2d PSARC 2007/567 zpool failmode property
gw25295
parents: 4831
diff changeset
   106
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   107
/* This definition is copied from assert.h. */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   108
#if defined(__STDC__)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   109
#if __STDC_VERSION__ - 0 >= 199901L
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   110
#define	verify(EX) (void)((EX) || \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   111
	(__assert_c99(#EX, __FILE__, __LINE__, __func__), 0))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   112
#else
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   113
#define	verify(EX) (void)((EX) || (__assert(#EX, __FILE__, __LINE__), 0))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   114
#endif /* __STDC_VERSION__ - 0 >= 199901L */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   115
#else
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   116
#define	verify(EX) (void)((EX) || (_assert("EX", __FILE__, __LINE__), 0))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   117
#endif	/* __STDC__ */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   118
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   119
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   120
#define	VERIFY	verify
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   121
#define	ASSERT	assert
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   122
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   123
extern void __assert(const char *, const char *, int);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   124
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   125
#ifdef lint
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   126
#define	VERIFY3_IMPL(x, y, z, t)	if (x == z) ((void)0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   127
#else
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   128
/* BEGIN CSTYLED */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   129
#define	VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) do { \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   130
	const TYPE __left = (TYPE)(LEFT); \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   131
	const TYPE __right = (TYPE)(RIGHT); \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   132
	if (!(__left OP __right)) { \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   133
		char *__buf = alloca(256); \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   134
		(void) snprintf(__buf, 256, "%s %s %s (0x%llx %s 0x%llx)", \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   135
			#LEFT, #OP, #RIGHT, \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   136
			(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   137
		__assert(__buf, __FILE__, __LINE__); \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   138
	} \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   139
_NOTE(CONSTCOND) } while (0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   140
/* END CSTYLED */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   141
#endif /* lint */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   142
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   143
#define	VERIFY3S(x, y, z)	VERIFY3_IMPL(x, y, z, int64_t)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   144
#define	VERIFY3U(x, y, z)	VERIFY3_IMPL(x, y, z, uint64_t)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   145
#define	VERIFY3P(x, y, z)	VERIFY3_IMPL(x, y, z, uintptr_t)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   146
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   147
#ifdef NDEBUG
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   148
#define	ASSERT3S(x, y, z)	((void)0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   149
#define	ASSERT3U(x, y, z)	((void)0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   150
#define	ASSERT3P(x, y, z)	((void)0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   151
#else
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   152
#define	ASSERT3S(x, y, z)	VERIFY3S(x, y, z)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   153
#define	ASSERT3U(x, y, z)	VERIFY3U(x, y, z)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   154
#define	ASSERT3P(x, y, z)	VERIFY3P(x, y, z)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   155
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   156
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   157
/*
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 4108
diff changeset
   158
 * DTrace SDT probes have different signatures in userland than they do in
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   159
 * kernel.  If they're being used in kernel code, re-define them out of
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   160
 * existence for their counterparts in libzpool.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   161
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   162
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   163
#ifdef DTRACE_PROBE1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   164
#undef	DTRACE_PROBE1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   165
#define	DTRACE_PROBE1(a, b, c)	((void)0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   166
#endif	/* DTRACE_PROBE1 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   167
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   168
#ifdef DTRACE_PROBE2
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   169
#undef	DTRACE_PROBE2
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   170
#define	DTRACE_PROBE2(a, b, c, d, e)	((void)0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   171
#endif	/* DTRACE_PROBE2 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   172
1596
2e2377ccbf85 6395371 ASSERT in dmu_tx_count_free: blkid + i < dn->dn_phys->dn_nblkptr
ahrens
parents: 1544
diff changeset
   173
#ifdef DTRACE_PROBE3
2e2377ccbf85 6395371 ASSERT in dmu_tx_count_free: blkid + i < dn->dn_phys->dn_nblkptr
ahrens
parents: 1544
diff changeset
   174
#undef	DTRACE_PROBE3
2e2377ccbf85 6395371 ASSERT in dmu_tx_count_free: blkid + i < dn->dn_phys->dn_nblkptr
ahrens
parents: 1544
diff changeset
   175
#define	DTRACE_PROBE3(a, b, c, d, e, f, g)	((void)0)
2e2377ccbf85 6395371 ASSERT in dmu_tx_count_free: blkid + i < dn->dn_phys->dn_nblkptr
ahrens
parents: 1544
diff changeset
   176
#endif	/* DTRACE_PROBE3 */
2e2377ccbf85 6395371 ASSERT in dmu_tx_count_free: blkid + i < dn->dn_phys->dn_nblkptr
ahrens
parents: 1544
diff changeset
   177
2981
b80f5da0b8ed 6485955 need more dtrace probes
ahrens
parents: 2856
diff changeset
   178
#ifdef DTRACE_PROBE4
b80f5da0b8ed 6485955 need more dtrace probes
ahrens
parents: 2856
diff changeset
   179
#undef	DTRACE_PROBE4
b80f5da0b8ed 6485955 need more dtrace probes
ahrens
parents: 2856
diff changeset
   180
#define	DTRACE_PROBE4(a, b, c, d, e, f, g, h, i)	((void)0)
b80f5da0b8ed 6485955 need more dtrace probes
ahrens
parents: 2856
diff changeset
   181
#endif	/* DTRACE_PROBE4 */
b80f5da0b8ed 6485955 need more dtrace probes
ahrens
parents: 2856
diff changeset
   182
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   183
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   184
 * Threads
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   185
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   186
#define	curthread	((void *)(uintptr_t)thr_self())
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   187
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   188
typedef struct kthread kthread_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   189
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   190
#define	thread_create(stk, stksize, func, arg, len, pp, state, pri)	\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   191
	zk_thread_create(func, arg)
2856
6f4d5ee1906a 6463348 ZFS code could be more portable
nd150628
parents: 1635
diff changeset
   192
#define	thread_exit() thr_exit(NULL)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   193
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   194
extern kthread_t *zk_thread_create(void (*func)(), void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   195
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   196
#define	issig(why)	(FALSE)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   197
#define	ISSIG(thr, why)	(FALSE)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   198
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   199
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   200
 * Mutexes
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   201
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   202
typedef struct kmutex {
4831
41ec732c6d9f 6584470 zdb needs to initialize the bpl_lock mutex
gw25295
parents: 4543
diff changeset
   203
	void		*m_owner;
41ec732c6d9f 6584470 zdb needs to initialize the bpl_lock mutex
gw25295
parents: 4543
diff changeset
   204
	boolean_t	initialized;
41ec732c6d9f 6584470 zdb needs to initialize the bpl_lock mutex
gw25295
parents: 4543
diff changeset
   205
	mutex_t		m_lock;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   206
} kmutex_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   207
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   208
#define	MUTEX_DEFAULT	USYNC_THREAD
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   209
#undef MUTEX_HELD
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   210
#define	MUTEX_HELD(m) _mutex_held(&(m)->m_lock)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   211
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   212
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   213
 * Argh -- we have to get cheesy here because the kernel and userland
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   214
 * have different signatures for the same routine.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   215
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   216
extern int _mutex_init(mutex_t *mp, int type, void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   217
extern int _mutex_destroy(mutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   218
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   219
#define	mutex_init(mp, b, c, d)		zmutex_init((kmutex_t *)(mp))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   220
#define	mutex_destroy(mp)		zmutex_destroy((kmutex_t *)(mp))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   221
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   222
extern void zmutex_init(kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   223
extern void zmutex_destroy(kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   224
extern void mutex_enter(kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   225
extern void mutex_exit(kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   226
extern int mutex_tryenter(kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   227
extern void *mutex_owner(kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   228
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   229
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   230
 * RW locks
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   231
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   232
typedef struct krwlock {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   233
	void		*rw_owner;
4831
41ec732c6d9f 6584470 zdb needs to initialize the bpl_lock mutex
gw25295
parents: 4543
diff changeset
   234
	boolean_t	initialized;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   235
	rwlock_t	rw_lock;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   236
} krwlock_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   237
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   238
typedef int krw_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   239
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   240
#define	RW_READER	0
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   241
#define	RW_WRITER	1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   242
#define	RW_DEFAULT	USYNC_THREAD
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   243
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   244
#undef RW_READ_HELD
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   245
#define	RW_READ_HELD(x)		_rw_read_held(&(x)->rw_lock)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   246
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   247
#undef RW_WRITE_HELD
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   248
#define	RW_WRITE_HELD(x)	_rw_write_held(&(x)->rw_lock)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   249
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   250
extern void rw_init(krwlock_t *rwlp, char *name, int type, void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   251
extern void rw_destroy(krwlock_t *rwlp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   252
extern void rw_enter(krwlock_t *rwlp, krw_t rw);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   253
extern int rw_tryenter(krwlock_t *rwlp, krw_t rw);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   254
extern int rw_tryupgrade(krwlock_t *rwlp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   255
extern void rw_exit(krwlock_t *rwlp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   256
#define	rw_downgrade(rwlp) do { } while (0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   257
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   258
extern uid_t crgetuid(cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   259
extern gid_t crgetgid(cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   260
extern int crgetngroups(cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   261
extern gid_t *crgetgroups(cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   262
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   263
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   264
 * Condition variables
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   265
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   266
typedef cond_t kcondvar_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   267
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   268
#define	CV_DEFAULT	USYNC_THREAD
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   269
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   270
extern void cv_init(kcondvar_t *cv, char *name, int type, void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   271
extern void cv_destroy(kcondvar_t *cv);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   272
extern void cv_wait(kcondvar_t *cv, kmutex_t *mp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   273
extern clock_t cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   274
extern void cv_signal(kcondvar_t *cv);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   275
extern void cv_broadcast(kcondvar_t *cv);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   276
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   277
/*
3403
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   278
 * kstat creation, installation and deletion
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   279
 */
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   280
extern kstat_t *kstat_create(char *, int,
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   281
    char *, char *, uchar_t, ulong_t, uchar_t);
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   282
extern void kstat_install(kstat_t *);
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   283
extern void kstat_delete(kstat_t *);
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   284
e52013d23622 6510807 ARC statistics should be exported via kstat
bmc
parents: 2981
diff changeset
   285
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   286
 * Kernel memory
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   287
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   288
#define	KM_SLEEP		UMEM_NOFAIL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   289
#define	KM_NOSLEEP		UMEM_DEFAULT
849
8d799fd81a9b 6345023 /dev/zfs fails to open once ZFS module is unloaded
bonwick
parents: 789
diff changeset
   290
#define	KMC_NODEBUG		UMC_NODEBUG
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   291
#define	kmem_alloc(_s, _f)	umem_alloc(_s, _f)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   292
#define	kmem_zalloc(_s, _f)	umem_zalloc(_s, _f)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   293
#define	kmem_free(_b, _s)	umem_free(_b, _s)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   294
#define	kmem_cache_create(_a, _b, _c, _d, _e, _f, _g, _h, _i) \
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   295
	umem_cache_create(_a, _b, _c, _d, _e, _f, _g, _h, _i)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   296
#define	kmem_cache_destroy(_c)	umem_cache_destroy(_c)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   297
#define	kmem_cache_alloc(_c, _f) umem_cache_alloc(_c, _f)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   298
#define	kmem_cache_free(_c, _b)	umem_cache_free(_c, _b)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   299
#define	kmem_debugging()	0
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   300
#define	kmem_cache_reap_now(c)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   301
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   302
typedef umem_cache_t kmem_cache_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   303
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   304
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   305
 * Task queues
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   306
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   307
typedef struct taskq taskq_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   308
typedef uintptr_t taskqid_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   309
typedef void (task_func_t)(void *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   310
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   311
#define	TASKQ_PREPOPULATE	0x0001
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   312
#define	TASKQ_CPR_SAFE		0x0002	/* Use CPR safe protocol */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   313
#define	TASKQ_DYNAMIC		0x0004	/* Use dynamic thread scheduling */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   314
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   315
#define	TQ_SLEEP	KM_SLEEP	/* Can block for memory */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   316
#define	TQ_NOSLEEP	KM_NOSLEEP	/* cannot block for memory; may fail */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   317
#define	TQ_NOQUEUE	0x02	/* Do not enqueue if can't dispatch */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   318
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   319
extern taskq_t	*taskq_create(const char *, int, pri_t, int, int, uint_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   320
extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   321
extern void	taskq_destroy(taskq_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   322
extern void	taskq_wait(taskq_t *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   323
extern int	taskq_member(taskq_t *, void *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   324
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   325
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   326
 * vnodes
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   327
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   328
typedef struct vnode {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   329
	uint64_t	v_size;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   330
	int		v_fd;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   331
	char		*v_path;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   332
} vnode_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   333
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   334
typedef struct vattr {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   335
	uint_t		va_mask;	/* bit-mask of attributes */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   336
	u_offset_t	va_size;	/* file size in bytes */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   337
} vattr_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   338
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   339
#define	AT_TYPE		0x0001
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   340
#define	AT_MODE		0x0002
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   341
#define	AT_UID		0x0004
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   342
#define	AT_GID		0x0008
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   343
#define	AT_FSID		0x0010
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   344
#define	AT_NODEID	0x0020
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   345
#define	AT_NLINK	0x0040
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   346
#define	AT_SIZE		0x0080
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   347
#define	AT_ATIME	0x0100
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   348
#define	AT_MTIME	0x0200
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   349
#define	AT_CTIME	0x0400
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   350
#define	AT_RDEV		0x0800
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   351
#define	AT_BLKSIZE	0x1000
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   352
#define	AT_NBLOCKS	0x2000
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   353
#define	AT_SEQ		0x8000
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   354
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   355
#define	CRCREAT		0
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   356
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   357
#define	VOP_CLOSE(vp, f, c, o, cr)	0
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   358
#define	VOP_PUTPAGE(vp, of, sz, fl, cr)	0
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   359
#define	VOP_GETATTR(vp, vap, fl, cr)	((vap)->va_size = (vp)->v_size, 0)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   360
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   361
#define	VOP_FSYNC(vp, f, cr)	fsync((vp)->v_fd)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   362
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   363
#define	VN_RELE(vp)	vn_close(vp)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   364
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   365
extern int vn_open(char *path, int x1, int oflags, int mode, vnode_t **vpp,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   366
    int x2, int x3);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   367
extern int vn_openat(char *path, int x1, int oflags, int mode, vnode_t **vpp,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   368
    int x2, int x3, vnode_t *vp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   369
extern int vn_rdwr(int uio, vnode_t *vp, void *addr, ssize_t len,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   370
    offset_t offset, int x1, int x2, rlim64_t x3, void *x4, ssize_t *residp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   371
extern void vn_close(vnode_t *vp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   372
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   373
#define	vn_remove(path, x1, x2)		remove(path)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   374
#define	vn_rename(from, to, seg)	rename((from), (to))
1635
0ab1193d47cb 6398664 zpool detach: missing argument to error message causes core dump
bonwick
parents: 1596
diff changeset
   375
#define	vn_is_readonly(vp)		B_FALSE
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   376
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   377
extern vnode_t *rootdir;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   378
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   379
#include <sys/file.h>		/* for FREAD, FWRITE, etc */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   380
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   381
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   382
 * Random stuff
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   383
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   384
#define	lbolt	(gethrtime() >> 23)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   385
#define	lbolt64	(gethrtime() >> 23)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   386
#define	hz	119	/* frequency when using gethrtime() >> 23 for lbolt */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   387
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   388
extern void delay(clock_t ticks);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   389
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   390
#define	gethrestime_sec() time(NULL)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   391
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   392
#define	max_ncpus	64
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   393
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   394
#define	minclsyspri	60
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   395
#define	maxclsyspri	99
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   396
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   397
#define	CPU_SEQID	(thr_self() & (max_ncpus - 1))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   398
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   399
#define	kcred		NULL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   400
#define	CRED()		NULL
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   401
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   402
extern uint64_t physmem;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   403
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   404
extern int highbit(ulong_t i);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   405
extern int random_get_bytes(uint8_t *ptr, size_t len);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   406
extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   407
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   408
extern void kernel_init(int);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   409
extern void kernel_fini(void);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   410
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   411
struct spa;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   412
extern void nicenum(uint64_t num, char *buf);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   413
extern void show_pool_stats(struct spa *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   414
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   415
typedef struct callb_cpr {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   416
	kmutex_t	*cc_lockp;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   417
} callb_cpr_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   418
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   419
#define	CALLB_CPR_INIT(cp, lockp, func, name)	{		\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   420
	(cp)->cc_lockp = lockp;					\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   421
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   422
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   423
#define	CALLB_CPR_SAFE_BEGIN(cp) {				\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   424
	ASSERT(MUTEX_HELD((cp)->cc_lockp));			\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   425
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   426
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   427
#define	CALLB_CPR_SAFE_END(cp, lockp) {				\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   428
	ASSERT(MUTEX_HELD((cp)->cc_lockp));			\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   429
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   430
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   431
#define	CALLB_CPR_EXIT(cp) {					\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   432
	ASSERT(MUTEX_HELD((cp)->cc_lockp));			\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   433
	mutex_exit((cp)->cc_lockp);				\
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   434
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   435
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   436
#define	zone_dataset_visible(x, y)	(1)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   437
#define	INGLOBALZONE(z)			(1)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   438
3975
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   439
/*
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   440
 * Hostname information
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   441
 */
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   442
extern char hw_serial[];
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   443
extern int ddi_strtoul(const char *str, char **nptr, int base,
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   444
    unsigned long *result);
6674f5d79069 6282725 hostname/hostid should be stored in the label
ek110237
parents: 3912
diff changeset
   445
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   446
/* ZFS Boot Related stuff. */
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   447
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   448
struct _buf {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   449
	intptr_t	_fd;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   450
};
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   451
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   452
struct bootstat {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   453
	uint64_t st_size;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   454
};
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   455
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   456
extern struct _buf *kobj_open_file(char *name);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   457
extern int kobj_read_file(struct _buf *file, char *buf, unsigned size,
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   458
    unsigned off);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   459
extern void kobj_close_file(struct _buf *file);
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3713
diff changeset
   460
extern int kobj_get_filesize(struct _buf *file, uint64_t *size);
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   461
extern int zfs_secpolicy_snapshot_perms(const char *name, cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   462
extern int zfs_secpolicy_rename_perms(const char *from, const char *to,
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   463
    cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   464
extern int zfs_secpolicy_destroy_perms(const char *name, cred_t *cr);
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   465
extern zoneid_t getzoneid(void);
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 849
diff changeset
   466
4108
f12bcec19e0e 6550175 zfs_context.h needs a clean up
lling
parents: 3975
diff changeset
   467
#ifdef	__cplusplus
f12bcec19e0e 6550175 zfs_context.h needs a clean up
lling
parents: 3975
diff changeset
   468
}
f12bcec19e0e 6550175 zfs_context.h needs a clean up
lling
parents: 3975
diff changeset
   469
#endif
f12bcec19e0e 6550175 zfs_context.h needs a clean up
lling
parents: 3975
diff changeset
   470
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   471
#endif	/* _SYS_ZFS_CONTEXT_H */