usr/src/uts/common/fs/zfs/sys/dmu.h
author Christopher Siden <chris.siden@delphix.com>
Mon, 21 May 2012 12:11:39 -0700
changeset 13700 2889e2596bd6
parent 13686 4bc0783f6064
child 13743 95aba6e49b9f
permissions -rw-r--r--
2619 asynchronous destruction of ZFS file systems 2747 SPA versioning with zfs feature flags Reviewed by: Matt Ahrens <[email protected]> Reviewed by: George Wilson <[email protected]> Reviewed by: Richard Lowe <[email protected]> Reviewed by: Dan Kruchinin <[email protected]> Approved by: Eric Schrock <[email protected]>
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: 1356
diff changeset
     5
 * Common Development and Distribution License (the "License").
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
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
 */
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    21
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    22
/*
12123
bb40732a982e 6572591 meta dnode lookup causes bucket lock contention in dbuf hash
Tim Haley <Tim.Haley@Sun.COM>
parents: 11935
diff changeset
    23
 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    24
 * Copyright (c) 2012 by Delphix. All rights reserved.
13329
c48b8bf84ab7 755 dmu_recv_stream builds incomplete guid_to_ds_map
Alexander Stetsenko <ams@nexenta.com>
parents: 13055
diff changeset
    25
 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
13686
4bc0783f6064 2703 add mechanism to report ZFS send progress
Bill Pijewski <wdp@joyent.com>
parents: 13524
diff changeset
    26
 * Copyright (c) 2012, Joyent, Inc. All rights reserved.
13329
c48b8bf84ab7 755 dmu_recv_stream builds incomplete guid_to_ds_map
Alexander Stetsenko <ams@nexenta.com>
parents: 13055
diff changeset
    27
 */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
12294
2a74b443e6b1 PSARC/2010/108 zil synchronicity
Mark J Musante <Mark.Musante@Sun.COM>
parents: 12285
diff changeset
    29
/* Portions Copyright 2010 Robert Milkowski */
2a74b443e6b1 PSARC/2010/108 zil synchronicity
Mark J Musante <Mark.Musante@Sun.COM>
parents: 12285
diff changeset
    30
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#ifndef	_SYS_DMU_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
#define	_SYS_DMU_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
 * This file describes the interface that the DMU provides for its
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
 * consumers.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
 * The DMU also interacts with the SPA.  That interface is described in
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
 * dmu_spa.h.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
#include <sys/inttypes.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
#include <sys/types.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
#include <sys/param.h>
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4007
diff changeset
    45
#include <sys/cred.h>
10373
bcf97ee54990 6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents: 10342
diff changeset
    46
#include <sys/time.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    48
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
struct uio;
11539
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
    53
struct xuio;
2688
12e2ad22b970 6447701 ZFS hangs when iSCSI Target attempts to initialize its backing store
maybee
parents: 2665
diff changeset
    54
struct page;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
struct vnode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
struct spa;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
struct zilog;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
struct zio;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
struct blkptr;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
struct zap_cursor;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
struct dsl_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
struct dsl_pool;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
struct dnode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    64
struct drr_begin;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
struct drr_end;
1775
e51e26b432c0 6410698 ZFS metadata needs to be more highly replicated (ditto blocks)
billm
parents: 1758
diff changeset
    66
struct zbookmark;
e51e26b432c0 6410698 ZFS metadata needs to be more highly replicated (ditto blocks)
billm
parents: 1758
diff changeset
    67
struct spa;
2885
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
    68
struct nvlist;
9412
4aefd8704ce0 6717022 ZFS DMU needs zero-copy support
Aleksandr Guzovskiy <Aleksandr.Guzovskiy@Sun.COM>
parents: 9396
diff changeset
    69
struct arc_buf;
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
    70
struct zio_prop;
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
    71
struct sa_handle;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
typedef struct objset objset_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
typedef struct dmu_tx dmu_tx_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    75
typedef struct dsl_dir dsl_dir_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    77
typedef enum dmu_object_byteswap {
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    78
	DMU_BSWAP_UINT8,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    79
	DMU_BSWAP_UINT16,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    80
	DMU_BSWAP_UINT32,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    81
	DMU_BSWAP_UINT64,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    82
	DMU_BSWAP_ZAP,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    83
	DMU_BSWAP_DNODE,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    84
	DMU_BSWAP_OBJSET,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    85
	DMU_BSWAP_ZNODE,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    86
	DMU_BSWAP_OLDACL,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    87
	DMU_BSWAP_ACL,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    88
	/*
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    89
	 * Allocating a new byteswap type number makes the on-disk format
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    90
	 * incompatible with any other format that uses the same number.
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    91
	 *
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    92
	 * Data can usually be structured to work with one of the
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    93
	 * DMU_BSWAP_UINT* or DMU_BSWAP_ZAP types.
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    94
	 */
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    95
	DMU_BSWAP_NUMFUNCS
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    96
} dmu_object_byteswap_t;
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    97
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    98
#define	DMU_OT_NEWTYPE 0x80
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
    99
#define	DMU_OT_METADATA 0x40
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   100
#define	DMU_OT_BYTESWAP_MASK 0x3f
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   101
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   102
/*
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   103
 * Defines a uint8_t object type. Object types specify if the data
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   104
 * in the object is metadata (boolean) and how to byteswap the data
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   105
 * (dmu_object_byteswap_t).
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   106
 */
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   107
#define	DMU_OT(byteswap, metadata) \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   108
	(DMU_OT_NEWTYPE | \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   109
	((metadata) ? DMU_OT_METADATA : 0) | \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   110
	((byteswap) & DMU_OT_BYTESWAP_MASK))
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   111
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   112
#define	DMU_OT_IS_VALID(ot) (((ot) & DMU_OT_NEWTYPE) ? \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   113
	((ot) & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS : \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   114
	(ot) < DMU_OT_NUMTYPES)
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   115
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   116
#define	DMU_OT_IS_METADATA(ot) (((ot) & DMU_OT_NEWTYPE) ? \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   117
	((ot) & DMU_OT_METADATA) : \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   118
	dmu_ot[(ot)].ot_metadata)
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   119
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   120
#define	DMU_OT_BYTESWAP(ot) (((ot) & DMU_OT_NEWTYPE) ? \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   121
	((ot) & DMU_OT_BYTESWAP_MASK) : \
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   122
	dmu_ot[(ot)].ot_byteswap)
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   123
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   124
typedef enum dmu_object_type {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   125
	DMU_OT_NONE,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   126
	/* general: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   127
	DMU_OT_OBJECT_DIRECTORY,	/* ZAP */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   128
	DMU_OT_OBJECT_ARRAY,		/* UINT64 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   129
	DMU_OT_PACKED_NVLIST,		/* UINT8 (XDR by nvlist_pack/unpack) */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   130
	DMU_OT_PACKED_NVLIST_SIZE,	/* UINT64 */
12470
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   131
	DMU_OT_BPOBJ,			/* UINT64 */
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   132
	DMU_OT_BPOBJ_HDR,		/* UINT64 */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   133
	/* spa: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   134
	DMU_OT_SPACE_MAP_HEADER,	/* UINT64 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   135
	DMU_OT_SPACE_MAP,		/* UINT64 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   136
	/* zil: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   137
	DMU_OT_INTENT_LOG,		/* UINT64 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   138
	/* dmu: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   139
	DMU_OT_DNODE,			/* DNODE */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   140
	DMU_OT_OBJSET,			/* OBJSET */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   141
	/* dsl: */
928
36d72fe4da29 6349314 dmu_object_type names incorrect for DSL Directories and DSL Datasets
tabriz
parents: 885
diff changeset
   142
	DMU_OT_DSL_DIR,			/* UINT64 */
885
d925b21dba78 6347493 tar of 25K empty directory entries in ZFS takes 30+ seconds ...
ahrens
parents: 789
diff changeset
   143
	DMU_OT_DSL_DIR_CHILD_MAP,	/* ZAP */
d925b21dba78 6347493 tar of 25K empty directory entries in ZFS takes 30+ seconds ...
ahrens
parents: 789
diff changeset
   144
	DMU_OT_DSL_DS_SNAP_MAP,		/* ZAP */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   145
	DMU_OT_DSL_PROPS,		/* ZAP */
928
36d72fe4da29 6349314 dmu_object_type names incorrect for DSL Directories and DSL Datasets
tabriz
parents: 885
diff changeset
   146
	DMU_OT_DSL_DATASET,		/* UINT64 */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   147
	/* zpl: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   148
	DMU_OT_ZNODE,			/* ZNODE */
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   149
	DMU_OT_OLDACL,			/* Old ACL */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   150
	DMU_OT_PLAIN_FILE_CONTENTS,	/* UINT8 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   151
	DMU_OT_DIRECTORY_CONTENTS,	/* ZAP */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   152
	DMU_OT_MASTER_NODE,		/* ZAP */
3461
c19b22f347d6 6514331 in-memory delete queue is not needed
ahrens
parents: 3025
diff changeset
   153
	DMU_OT_UNLINKED_SET,		/* ZAP */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   154
	/* zvol: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   155
	DMU_OT_ZVOL,			/* UINT8 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   156
	DMU_OT_ZVOL_PROP,		/* ZAP */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   157
	/* other; for testing only! */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   158
	DMU_OT_PLAIN_OTHER,		/* UINT8 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   159
	DMU_OT_UINT64_OTHER,		/* UINT64 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   160
	DMU_OT_ZAP_OTHER,		/* ZAP */
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   161
	/* new object types: */
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   162
	DMU_OT_ERROR_LOG,		/* ZAP */
2926
acfcfefbc60d PSARC 2006/288 zpool history
ek110237
parents: 2885
diff changeset
   163
	DMU_OT_SPA_HISTORY,		/* UINT8 */
acfcfefbc60d PSARC 2006/288 zpool history
ek110237
parents: 2885
diff changeset
   164
	DMU_OT_SPA_HISTORY_OFFSETS,	/* spa_his_phys_t */
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3835
diff changeset
   165
	DMU_OT_POOL_PROPS,		/* ZAP */
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4007
diff changeset
   166
	DMU_OT_DSL_PERMS,		/* ZAP */
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   167
	DMU_OT_ACL,			/* ACL */
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   168
	DMU_OT_SYSACL,			/* SYSACL */
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   169
	DMU_OT_FUID,			/* FUID table (Packed NVLIST UINT8) */
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   170
	DMU_OT_FUID_SIZE,		/* FUID table size UINT64 */
7046
361307ae060d 6343667 scrub/resilver has to start over when a snapshot is taken
ahrens
parents: 6992
diff changeset
   171
	DMU_OT_NEXT_CLONES,		/* ZAP */
12296
7cf402a7f374 6675946 'zpool status' should show the progress of resilvering for individual disk.
Lin Ling <Lin.Ling@Sun.COM>
parents: 12294
diff changeset
   172
	DMU_OT_SCAN_QUEUE,		/* ZAP */
9396
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   173
	DMU_OT_USERGROUP_USED,		/* ZAP */
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   174
	DMU_OT_USERGROUP_QUOTA,		/* ZAP */
10242
c40d075fbca6 PSARC/2009/297 zfs snapshot holds
Chris Kirby <chris.kirby@sun.com>
parents: 10204
diff changeset
   175
	DMU_OT_USERREFS,		/* ZAP */
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   176
	DMU_OT_DDT_ZAP,			/* ZAP */
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   177
	DMU_OT_DDT_STATS,		/* ZAP */
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   178
	DMU_OT_SA,			/* System attr */
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   179
	DMU_OT_SA_MASTER_NODE,		/* ZAP */
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   180
	DMU_OT_SA_ATTR_REGISTRATION,	/* ZAP */
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   181
	DMU_OT_SA_ATTR_LAYOUTS,		/* ZAP */
12296
7cf402a7f374 6675946 'zpool status' should show the progress of resilvering for individual disk.
Lin Ling <Lin.Ling@Sun.COM>
parents: 12294
diff changeset
   182
	DMU_OT_SCAN_XLATE,		/* ZAP */
7cf402a7f374 6675946 'zpool status' should show the progress of resilvering for individual disk.
Lin Ling <Lin.Ling@Sun.COM>
parents: 12294
diff changeset
   183
	DMU_OT_DEDUP,			/* fake dedup BP from ddt_bp_create() */
12470
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   184
	DMU_OT_DEADLIST,		/* ZAP */
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   185
	DMU_OT_DEADLIST_HDR,		/* UINT64 */
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   186
	DMU_OT_DSL_CLONES,		/* ZAP */
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   187
	DMU_OT_BPOBJ_SUBOBJ,		/* UINT64 */
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   188
	/*
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   189
	 * Do not allocate new object types here. Doing so makes the on-disk
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   190
	 * format incompatible with any other format that uses the same object
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   191
	 * type number.
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   192
	 *
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   193
	 * When creating an object which does not have one of the above types
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   194
	 * use the DMU_OTN_* type with the correct byteswap and metadata
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   195
	 * values.
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   196
	 *
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   197
	 * The DMU_OTN_* types do not have entries in the dmu_ot table,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   198
	 * use the DMU_OT_IS_METDATA() and DMU_OT_BYTESWAP() macros instead
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   199
	 * of indexing into dmu_ot directly (this works for both DMU_OT_* types
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   200
	 * and DMU_OTN_* types).
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   201
	 */
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   202
	DMU_OT_NUMTYPES,
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   203
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   204
	/*
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   205
	 * Names for valid types declared with DMU_OT().
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   206
	 */
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   207
	DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   208
	DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   209
	DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   210
	DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   211
	DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   212
	DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   213
	DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   214
	DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   215
	DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE),
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   216
	DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE),
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   217
} dmu_object_type_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   218
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   219
typedef enum dmu_objset_type {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   220
	DMU_OST_NONE,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   221
	DMU_OST_META,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   222
	DMU_OST_ZFS,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   223
	DMU_OST_ZVOL,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   224
	DMU_OST_OTHER,			/* For testing only! */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   225
	DMU_OST_ANY,			/* Be careful! */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   226
	DMU_OST_NUMTYPES
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   227
} dmu_objset_type_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   228
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   229
void byteswap_uint64_array(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   230
void byteswap_uint32_array(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   231
void byteswap_uint16_array(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   232
void byteswap_uint8_array(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   233
void zap_byteswap(void *buf, size_t size);
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   234
void zfs_oldacl_byteswap(void *buf, size_t size);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   235
void zfs_acl_byteswap(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   236
void zfs_znode_byteswap(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   237
2417
694d5de97348 6444346 zfs promote fails in zone
ahrens
parents: 2391
diff changeset
   238
#define	DS_FIND_SNAPSHOTS	(1<<0)
694d5de97348 6444346 zfs promote fails in zone
ahrens
parents: 2391
diff changeset
   239
#define	DS_FIND_CHILDREN	(1<<1)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   240
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   241
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   242
 * The maximum number of bytes that can be accessed as part of one
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   243
 * operation, including metadata.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   244
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   245
#define	DMU_MAX_ACCESS (10<<20) /* 10MB */
6992
20c04e18c58c 6573681 deleting a very large file can be slow
maybee
parents: 6689
diff changeset
   246
#define	DMU_MAX_DELETEBLKCNT (20480) /* ~5MB of indirect blocks */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   247
9396
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   248
#define	DMU_USERUSED_OBJECT	(-1ULL)
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   249
#define	DMU_GROUPUSED_OBJECT	(-2ULL)
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   250
#define	DMU_DEADLIST_OBJECT	(-3ULL)
9396
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   251
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   252
/*
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   253
 * artificial blkids for bonus buffer and spill blocks
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   254
 */
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   255
#define	DMU_BONUS_BLKID		(-1ULL)
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   256
#define	DMU_SPILL_BLKID		(-2ULL)
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   257
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   258
 * Public routines to create, destroy, open, and close objsets.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   259
 */
10298
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   260
int dmu_objset_hold(const char *name, void *tag, objset_t **osp);
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   261
int dmu_objset_own(const char *name, dmu_objset_type_t type,
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   262
    boolean_t readonly, void *tag, objset_t **osp);
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   263
void dmu_objset_rele(objset_t *os, void *tag);
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   264
void dmu_objset_disown(objset_t *os, void *tag);
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   265
int dmu_objset_open_ds(struct dsl_dataset *ds, objset_t **osp);
a0d52501437c 6860996 %temporary clones are not automatically destroyed on error
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10272
diff changeset
   266
4944
96d96f8de974 6569719 panic dangling dbufs (dn=ffffffff28814d30, dbuf=ffffffff20756008)
maybee
parents: 4849
diff changeset
   267
int dmu_objset_evict_dbufs(objset_t *os);
10272
a0669934e974 6861581 ZFS frees in synching context during rollback
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10242
diff changeset
   268
int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4007
diff changeset
   269
    void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg);
10272
a0669934e974 6861581 ZFS frees in synching context during rollback
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10242
diff changeset
   270
int dmu_objset_clone(const char *name, struct dsl_dataset *clone_origin,
a0669934e974 6861581 ZFS frees in synching context during rollback
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10242
diff changeset
   271
    uint64_t flags);
10242
c40d075fbca6 PSARC/2009/297 zfs snapshot holds
Chris Kirby <chris.kirby@sun.com>
parents: 10204
diff changeset
   272
int dmu_objset_destroy(const char *name, boolean_t defer);
13524
f0e12b33f77c 1644 add ZFS "clones" property
Matthew Ahrens <matt@delphix.com>
parents: 13512
diff changeset
   273
int dmu_snapshots_destroy_nvl(struct nvlist *snaps, boolean_t defer, char *);
13055
8c712bbb18ea PSARC 2010/105 zfs diff
Tim Haley <Tim.Haley@Sun.COM>
parents: 12684
diff changeset
   274
int dmu_objset_snapshot(char *fsname, char *snapname, char *tag,
8c712bbb18ea PSARC 2010/105 zfs diff
Tim Haley <Tim.Haley@Sun.COM>
parents: 12684
diff changeset
   275
    struct nvlist *props, boolean_t recursive, boolean_t temporary, int fd);
4007
c6f5c6753018 PSARC 2007/142 zfs rename -r
mmusante
parents: 3912
diff changeset
   276
int dmu_objset_rename(const char *name, const char *newname,
c6f5c6753018 PSARC 2007/142 zfs rename -r
mmusante
parents: 3912
diff changeset
   277
    boolean_t recursive);
11209
462283cb4096 6905188 panic: kernel heap corruption when doing "zfs rename -r"
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 11125
diff changeset
   278
int dmu_objset_find(char *name, int func(const char *, void *), void *arg,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   279
    int flags);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   280
void dmu_objset_byteswap(void *buf, size_t size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   281
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   282
typedef struct dmu_buf {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   283
	uint64_t db_object;		/* object that this buffer is part of */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   284
	uint64_t db_offset;		/* byte offset in this object */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   285
	uint64_t db_size;		/* size of buffer in bytes */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   286
	void *db_data;			/* data in buffer */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   287
} dmu_buf_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   288
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   289
typedef void dmu_buf_evict_func_t(struct dmu_buf *db, void *user_ptr);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   290
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   291
/*
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1775
diff changeset
   292
 * The names of zap entries in the DIRECTORY_OBJECT of the MOS.
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1775
diff changeset
   293
 */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   294
#define	DMU_POOL_DIRECTORY_OBJECT	1
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   295
#define	DMU_POOL_CONFIG			"config"
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   296
#define	DMU_POOL_FEATURES_FOR_WRITE	"features_for_write"
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   297
#define	DMU_POOL_FEATURES_FOR_READ	"features_for_read"
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   298
#define	DMU_POOL_FEATURE_DESCRIPTIONS	"feature_descriptions"
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   299
#define	DMU_POOL_ROOT_DATASET		"root_dataset"
12470
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   300
#define	DMU_POOL_SYNC_BPOBJ		"sync_bplist"
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   301
#define	DMU_POOL_ERRLOG_SCRUB		"errlog_scrub"
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   302
#define	DMU_POOL_ERRLOG_LAST		"errlog_last"
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1775
diff changeset
   303
#define	DMU_POOL_SPARES			"spares"
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1775
diff changeset
   304
#define	DMU_POOL_DEFLATE		"deflate"
2926
acfcfefbc60d PSARC 2006/288 zpool history
ek110237
parents: 2885
diff changeset
   305
#define	DMU_POOL_HISTORY		"history"
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3835
diff changeset
   306
#define	DMU_POOL_PROPS			"pool_props"
5450
b25030891c44 PSARC 2007/618 ZFS L2ARC
brendan
parents: 5446
diff changeset
   307
#define	DMU_POOL_L2CACHE		"l2cache"
10342
108f0058f837 6833815 scheduled snapshots deleted per snapshot policy can lead to replication failures
Chris Kirby <chris.kirby@sun.com>
parents: 10310
diff changeset
   308
#define	DMU_POOL_TMP_USERREFS		"tmp_userrefs"
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   309
#define	DMU_POOL_DDT			"DDT-%s-%s-%s"
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   310
#define	DMU_POOL_DDT_STATS		"DDT-statistics"
12296
7cf402a7f374 6675946 'zpool status' should show the progress of resilvering for individual disk.
Lin Ling <Lin.Ling@Sun.COM>
parents: 12294
diff changeset
   311
#define	DMU_POOL_CREATION_VERSION	"creation_version"
7cf402a7f374 6675946 'zpool status' should show the progress of resilvering for individual disk.
Lin Ling <Lin.Ling@Sun.COM>
parents: 12294
diff changeset
   312
#define	DMU_POOL_SCAN			"scan"
12470
54258108784b 6948890 snapshot deletion can induce pathologically long spa_sync() times
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 12296
diff changeset
   313
#define	DMU_POOL_FREE_BPOBJ		"free_bpobj"
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   314
#define	DMU_POOL_BPTREE_OBJ		"bptree_obj"
7046
361307ae060d 6343667 scrub/resilver has to start over when a snapshot is taken
ahrens
parents: 6992
diff changeset
   315
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   316
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   317
 * Allocate an object from this objset.  The range of object numbers
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   318
 * available is (0, DN_MAX_OBJECT).  Object 0 is the meta-dnode.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   319
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   320
 * The transaction must be assigned to a txg.  The newly allocated
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   321
 * object will be "held" in the transaction (ie. you can modify the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   322
 * newly allocated object in this transaction).
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   323
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   324
 * dmu_object_alloc() chooses an object and returns it in *objectp.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   325
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   326
 * dmu_object_claim() allocates a specific object number.  If that
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   327
 * number is already allocated, it fails and returns EEXIST.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   328
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   329
 * Return 0 on success, or ENOSPC or EEXIST as specified above.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   330
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   331
uint64_t dmu_object_alloc(objset_t *os, dmu_object_type_t ot,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   332
    int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   333
int dmu_object_claim(objset_t *os, uint64_t object, dmu_object_type_t ot,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   334
    int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   335
int dmu_object_reclaim(objset_t *os, uint64_t object, dmu_object_type_t ot,
8986
45c289aff7c9 6801979 zfs recv can fail with E2BIG
Mark Maybee <Mark.Maybee@Sun.COM>
parents: 7872
diff changeset
   336
    int blocksize, dmu_object_type_t bonustype, int bonuslen);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   337
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   338
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   339
 * Free an object from this objset.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   340
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   341
 * The object's data will be freed as well (ie. you don't need to call
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   342
 * dmu_free(object, 0, -1, tx)).
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   343
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   344
 * The object need not be held in the transaction.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   345
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   346
 * If there are any holds on this object's buffers (via dmu_buf_hold()),
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   347
 * or tx holds on the object (via dmu_tx_hold_object()), you can not
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   348
 * free it; it fails and returns EBUSY.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   349
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   350
 * If the object is not allocated, it fails and returns ENOENT.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   351
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   352
 * Return 0 on success, or EBUSY or ENOENT as specified above.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   353
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   354
int dmu_object_free(objset_t *os, uint64_t object, dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   355
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   356
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   357
 * Find the next allocated or free object.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   358
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   359
 * The objectp parameter is in-out.  It will be updated to be the next
3025
4e5ee8301d84 6424466 "panic: data after EOF" when unmounting abused pool
ahrens
parents: 2986
diff changeset
   360
 * object which is allocated.  Ignore objects which have not been
4e5ee8301d84 6424466 "panic: data after EOF" when unmounting abused pool
ahrens
parents: 2986
diff changeset
   361
 * modified since txg.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   362
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   363
 * XXX Can only be called on a objset with no dirty data.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   364
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   365
 * Returns 0 on success, or ENOENT if there are no more objects.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   366
 */
3025
4e5ee8301d84 6424466 "panic: data after EOF" when unmounting abused pool
ahrens
parents: 2986
diff changeset
   367
int dmu_object_next(objset_t *os, uint64_t *objectp,
4e5ee8301d84 6424466 "panic: data after EOF" when unmounting abused pool
ahrens
parents: 2986
diff changeset
   368
    boolean_t hole, uint64_t txg);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   369
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   370
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   371
 * Set the data blocksize for an object.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   372
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   373
 * The object cannot have any blocks allcated beyond the first.  If
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   374
 * the first block is allocated already, the new size must be greater
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   375
 * than the current block size.  If these conditions are not met,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   376
 * ENOTSUP will be returned.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   377
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   378
 * Returns 0 on success, or EBUSY if there are any holds on the object
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   379
 * contents, or ENOTSUP as described above.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   380
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   381
int dmu_object_set_blocksize(objset_t *os, uint64_t object, uint64_t size,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   382
    int ibs, dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   383
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   384
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   385
 * Set the checksum property on a dnode.  The new checksum algorithm will
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   386
 * apply to all newly written blocks; existing blocks will not be affected.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   387
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   388
void dmu_object_set_checksum(objset_t *os, uint64_t object, uint8_t checksum,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   389
    dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   390
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   391
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   392
 * Set the compress property on a dnode.  The new compression algorithm will
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   393
 * apply to all newly written blocks; existing blocks will not be affected.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   394
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   395
void dmu_object_set_compress(objset_t *os, uint64_t object, uint8_t compress,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   396
    dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   397
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   398
/*
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   399
 * Decide how to write a block: checksum, compression, number of copies, etc.
1775
e51e26b432c0 6410698 ZFS metadata needs to be more highly replicated (ditto blocks)
billm
parents: 1758
diff changeset
   400
 */
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   401
#define	WP_NOFILL	0x1
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   402
#define	WP_DMU_SYNC	0x2
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   403
#define	WP_SPILL	0x4
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   404
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   405
void dmu_write_policy(objset_t *os, struct dnode *dn, int level, int wp,
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   406
    struct zio_prop *zp);
1775
e51e26b432c0 6410698 ZFS metadata needs to be more highly replicated (ditto blocks)
billm
parents: 1758
diff changeset
   407
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   408
 * The bonus data is accessed more or less like a regular buffer.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   409
 * You must dmu_bonus_hold() to get the buffer, which will give you a
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   410
 * dmu_buf_t with db_offset==-1ULL, and db_size = the size of the bonus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   411
 * data.  As with any normal buffer, you must call dmu_buf_read() to
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   412
 * read db_data, dmu_buf_will_dirty() before modifying it, and the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   413
 * object must be held in an assigned transaction before calling
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   414
 * dmu_buf_will_dirty.  You may use dmu_buf_set_user() on the bonus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   415
 * buffer as well.  You must release your hold with dmu_buf_rele().
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   416
 */
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   417
int dmu_bonus_hold(objset_t *os, uint64_t object, void *tag, dmu_buf_t **);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   418
int dmu_bonus_max(void);
4944
96d96f8de974 6569719 panic dangling dbufs (dn=ffffffff28814d30, dbuf=ffffffff20756008)
maybee
parents: 4849
diff changeset
   419
int dmu_set_bonus(dmu_buf_t *, int, dmu_tx_t *);
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   420
int dmu_set_bonustype(dmu_buf_t *, dmu_object_type_t, dmu_tx_t *);
12684
397e44ebb8a9 6710343 dnode cache should register a dnode_move() callback to limit fragmentation
Tom Erickson <Tom.Erickson@Sun.COM>
parents: 12527
diff changeset
   421
dmu_object_type_t dmu_get_bonustype(dmu_buf_t *);
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   422
int dmu_rm_spill(objset_t *, uint64_t, dmu_tx_t *);
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   423
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   424
/*
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   425
 * Special spill buffer support used by "SA" framework
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   426
 */
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   427
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   428
int dmu_spill_hold_by_bonus(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp);
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   429
int dmu_spill_hold_by_dnode(struct dnode *dn, uint32_t flags,
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   430
    void *tag, dmu_buf_t **dbp);
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   431
int dmu_spill_hold_existing(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   432
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   433
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   434
 * Obtain the DMU buffer from the specified object which contains the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   435
 * specified offset.  dmu_buf_hold() puts a "hold" on the buffer, so
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   436
 * that it will remain in memory.  You must release the hold with
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   437
 * dmu_buf_rele().  You musn't access the dmu_buf_t after releasing your
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   438
 * hold.  You must have a hold on any dmu_buf_t* you pass to the DMU.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   439
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   440
 * You must call dmu_buf_read, dmu_buf_will_dirty, or dmu_buf_will_fill
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   441
 * on the returned buffer before reading or writing the buffer's
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   442
 * db_data.  The comments for those routines describe what particular
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   443
 * operations are valid after calling them.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   444
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   445
 * The object number must be a valid, allocated object number.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   446
 */
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   447
int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset,
12285
d736d62dcca2 6944833 Avoid prefetching dbufs in dmu_sync() path
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 12123
diff changeset
   448
    void *tag, dmu_buf_t **, int flags);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   449
void dmu_buf_add_ref(dmu_buf_t *db, void* tag);
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   450
void dmu_buf_rele(dmu_buf_t *db, void *tag);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   451
uint64_t dmu_buf_refcount(dmu_buf_t *db);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   452
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   453
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   454
 * dmu_buf_hold_array holds the DMU buffers which contain all bytes in a
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   455
 * range of an object.  A pointer to an array of dmu_buf_t*'s is
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   456
 * returned (in *dbpp).
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   457
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   458
 * dmu_buf_rele_array releases the hold on an array of dmu_buf_t*'s, and
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   459
 * frees the array.  The hold on the array of buffers MUST be released
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   460
 * with dmu_buf_rele_array.  You can NOT release the hold on each buffer
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   461
 * individually with dmu_buf_rele.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   462
 */
2391
2fa3fd1db808 6447377 ZFS prefetch is inconsistant
maybee
parents: 2237
diff changeset
   463
int dmu_buf_hold_array_by_bonus(dmu_buf_t *db, uint64_t offset,
2fa3fd1db808 6447377 ZFS prefetch is inconsistant
maybee
parents: 2237
diff changeset
   464
    uint64_t length, int read, void *tag, int *numbufsp, dmu_buf_t ***dbpp);
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   465
void dmu_buf_rele_array(dmu_buf_t **, int numbufs, void *tag);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   466
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   467
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   468
 * Returns NULL on success, or the existing user ptr if it's already
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   469
 * been set.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   470
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   471
 * user_ptr is for use by the user and can be obtained via dmu_buf_get_user().
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   472
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   473
 * user_data_ptr_ptr should be NULL, or a pointer to a pointer which
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   474
 * will be set to db->db_data when you are allowed to access it.  Note
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   475
 * that db->db_data (the pointer) can change when you do dmu_buf_read(),
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   476
 * dmu_buf_tryupgrade(), dmu_buf_will_dirty(), or dmu_buf_will_fill().
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   477
 * *user_data_ptr_ptr will be set to the new value when it changes.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   478
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   479
 * If non-NULL, pageout func will be called when this buffer is being
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   480
 * excised from the cache, so that you can clean up the data structure
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   481
 * pointed to by user_ptr.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   482
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   483
 * dmu_evict_user() will call the pageout func for all buffers in a
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   484
 * objset with a given pageout func.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   485
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   486
void *dmu_buf_set_user(dmu_buf_t *db, void *user_ptr, void *user_data_ptr_ptr,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   487
    dmu_buf_evict_func_t *pageout_func);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   488
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   489
 * set_user_ie is the same as set_user, but request immediate eviction
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   490
 * when hold count goes to zero.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   491
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   492
void *dmu_buf_set_user_ie(dmu_buf_t *db, void *user_ptr,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   493
    void *user_data_ptr_ptr, dmu_buf_evict_func_t *pageout_func);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   494
void *dmu_buf_update_user(dmu_buf_t *db_fake, void *old_user_ptr,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   495
    void *user_ptr, void *user_data_ptr_ptr,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   496
    dmu_buf_evict_func_t *pageout_func);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   497
void dmu_evict_user(objset_t *os, dmu_buf_evict_func_t *func);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   498
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   499
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   500
 * Returns the user_ptr set with dmu_buf_set_user(), or NULL if not set.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   501
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   502
void *dmu_buf_get_user(dmu_buf_t *db);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   503
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   504
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   505
 * Indicate that you are going to modify the buffer's data (db_data).
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   506
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   507
 * The transaction (tx) must be assigned to a txg (ie. you've called
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   508
 * dmu_tx_assign()).  The buffer's object must be held in the tx
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   509
 * (ie. you've called dmu_tx_hold_object(tx, db->db_object)).
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   510
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   511
void dmu_buf_will_dirty(dmu_buf_t *db, dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   512
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   513
/*
9653
a70048a304d1 6664765 Unable to remove files when using fat-zap and quota exceeded on ZFS filesystem
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents: 9512
diff changeset
   514
 * Tells if the given dbuf is freeable.
a70048a304d1 6664765 Unable to remove files when using fat-zap and quota exceeded on ZFS filesystem
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents: 9512
diff changeset
   515
 */
a70048a304d1 6664765 Unable to remove files when using fat-zap and quota exceeded on ZFS filesystem
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents: 9512
diff changeset
   516
boolean_t dmu_buf_freeable(dmu_buf_t *);
a70048a304d1 6664765 Unable to remove files when using fat-zap and quota exceeded on ZFS filesystem
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents: 9512
diff changeset
   517
a70048a304d1 6664765 Unable to remove files when using fat-zap and quota exceeded on ZFS filesystem
Sanjeev Bagewadi <Sanjeev.Bagewadi@Sun.COM>
parents: 9512
diff changeset
   518
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   519
 * You must create a transaction, then hold the objects which you will
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   520
 * (or might) modify as part of this transaction.  Then you must assign
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   521
 * the transaction to a transaction group.  Once the transaction has
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   522
 * been assigned, you can modify buffers which belong to held objects as
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   523
 * part of this transaction.  You can't modify buffers before the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   524
 * transaction has been assigned; you can't modify buffers which don't
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   525
 * belong to objects which this transaction holds; you can't hold
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   526
 * objects once the transaction has been assigned.  You may hold an
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   527
 * object which you are going to free (with dmu_object_free()), but you
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   528
 * don't have to.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   529
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   530
 * You can abort the transaction before it has been assigned.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   531
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   532
 * Note that you may hold buffers (with dmu_buf_hold) at any time,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   533
 * regardless of transaction state.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   534
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   535
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   536
#define	DMU_NEW_OBJECT	(-1ULL)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   537
#define	DMU_OBJECT_END	(-1ULL)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   538
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   539
dmu_tx_t *dmu_tx_create(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   540
void dmu_tx_hold_write(dmu_tx_t *tx, uint64_t object, uint64_t off, int len);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   541
void dmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   542
    uint64_t len);
9396
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   543
void dmu_tx_hold_zap(dmu_tx_t *tx, uint64_t object, int add, const char *name);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   544
void dmu_tx_hold_bonus(dmu_tx_t *tx, uint64_t object);
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   545
void dmu_tx_hold_spill(dmu_tx_t *tx, uint64_t object);
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   546
void dmu_tx_hold_sa(dmu_tx_t *tx, struct sa_handle *hdl, boolean_t may_grow);
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 11539
diff changeset
   547
void dmu_tx_hold_sa_create(dmu_tx_t *tx, int total_size);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   548
void dmu_tx_abort(dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   549
int dmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how);
2113
0510bb40c993 6430121 3-way deadlock involving tc_lock within zfs
ahrens
parents: 2082
diff changeset
   550
void dmu_tx_wait(dmu_tx_t *tx);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   551
void dmu_tx_commit(dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   552
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   553
/*
10612
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   554
 * To register a commit callback, dmu_tx_callback_register() must be called.
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   555
 *
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   556
 * dcb_data is a pointer to caller private data that is passed on as a
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   557
 * callback parameter. The caller is responsible for properly allocating and
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   558
 * freeing it.
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   559
 *
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   560
 * When registering a callback, the transaction must be already created, but
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   561
 * it cannot be committed or aborted. It can be assigned to a txg or not.
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   562
 *
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   563
 * The callback will be called after the transaction has been safely written
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   564
 * to stable storage and will also be called if the dmu_tx is aborted.
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   565
 * If there is any error which prevents the transaction from being committed to
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   566
 * disk, the callback will be called with a value of error != 0.
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   567
 */
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   568
typedef void dmu_tx_callback_func_t(void *dcb_data, int error);
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   569
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   570
void dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *dcb_func,
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   571
    void *dcb_data);
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   572
89423355fa6f 6650218 Commit callbacks API for the DMU
Ricardo M. Correia <Ricardo.M.Correia@Sun.COM>
parents: 10407
diff changeset
   573
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   574
 * Free up the data blocks for a defined range of a file.  If size is
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   575
 * -1, the range from offset to end-of-file is freed.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   576
 */
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   577
int dmu_free_range(objset_t *os, uint64_t object, uint64_t offset,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   578
	uint64_t size, dmu_tx_t *tx);
6992
20c04e18c58c 6573681 deleting a very large file can be slow
maybee
parents: 6689
diff changeset
   579
int dmu_free_long_range(objset_t *os, uint64_t object, uint64_t offset,
20c04e18c58c 6573681 deleting a very large file can be slow
maybee
parents: 6689
diff changeset
   580
	uint64_t size);
20c04e18c58c 6573681 deleting a very large file can be slow
maybee
parents: 6689
diff changeset
   581
int dmu_free_object(objset_t *os, uint64_t object);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   582
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   583
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   584
 * Convenience functions.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   585
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   586
 * Canfail routines will return 0 on success, or an errno if there is a
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   587
 * nonrecoverable I/O error.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   588
 */
9512
64cafcbcc337 6801810 Commit of aligned streaming rewrites to ZIL device causes unwanted disk reads
Neil Perrin <Neil.Perrin@Sun.COM>
parents: 9412
diff changeset
   589
#define	DMU_READ_PREFETCH	0 /* prefetch */
64cafcbcc337 6801810 Commit of aligned streaming rewrites to ZIL device causes unwanted disk reads
Neil Perrin <Neil.Perrin@Sun.COM>
parents: 9412
diff changeset
   590
#define	DMU_READ_NO_PREFETCH	1 /* don't prefetch */
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1356
diff changeset
   591
int dmu_read(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
9512
64cafcbcc337 6801810 Commit of aligned streaming rewrites to ZIL device causes unwanted disk reads
Neil Perrin <Neil.Perrin@Sun.COM>
parents: 9412
diff changeset
   592
	void *buf, uint32_t flags);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   593
void dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   594
	const void *buf, dmu_tx_t *tx);
7872
40a9434212f6 6646775 Speed up the dumpifying process for zvols
Tim Haley <Tim.Haley@Sun.COM>
parents: 7046
diff changeset
   595
void dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
40a9434212f6 6646775 Speed up the dumpifying process for zvols
Tim Haley <Tim.Haley@Sun.COM>
parents: 7046
diff changeset
   596
	dmu_tx_t *tx);
3638
6b28ebc717aa 6496357 spec_fsync() is useless on devices that do write caching
billm
parents: 3461
diff changeset
   597
int dmu_read_uio(objset_t *os, uint64_t object, struct uio *uio, uint64_t size);
6b28ebc717aa 6496357 spec_fsync() is useless on devices that do write caching
billm
parents: 3461
diff changeset
   598
int dmu_write_uio(objset_t *os, uint64_t object, struct uio *uio, uint64_t size,
6b28ebc717aa 6496357 spec_fsync() is useless on devices that do write caching
billm
parents: 3461
diff changeset
   599
    dmu_tx_t *tx);
12123
bb40732a982e 6572591 meta dnode lookup causes bucket lock contention in dbuf hash
Tim Haley <Tim.Haley@Sun.COM>
parents: 11935
diff changeset
   600
int dmu_write_uio_dbuf(dmu_buf_t *zdb, struct uio *uio, uint64_t size,
bb40732a982e 6572591 meta dnode lookup causes bucket lock contention in dbuf hash
Tim Haley <Tim.Haley@Sun.COM>
parents: 11935
diff changeset
   601
    dmu_tx_t *tx);
2688
12e2ad22b970 6447701 ZFS hangs when iSCSI Target attempts to initialize its backing store
maybee
parents: 2665
diff changeset
   602
int dmu_write_pages(objset_t *os, uint64_t object, uint64_t offset,
12e2ad22b970 6447701 ZFS hangs when iSCSI Target attempts to initialize its backing store
maybee
parents: 2665
diff changeset
   603
    uint64_t size, struct page *pp, dmu_tx_t *tx);
9412
4aefd8704ce0 6717022 ZFS DMU needs zero-copy support
Aleksandr Guzovskiy <Aleksandr.Guzovskiy@Sun.COM>
parents: 9396
diff changeset
   604
struct arc_buf *dmu_request_arcbuf(dmu_buf_t *handle, int size);
4aefd8704ce0 6717022 ZFS DMU needs zero-copy support
Aleksandr Guzovskiy <Aleksandr.Guzovskiy@Sun.COM>
parents: 9396
diff changeset
   605
void dmu_return_arcbuf(struct arc_buf *buf);
4aefd8704ce0 6717022 ZFS DMU needs zero-copy support
Aleksandr Guzovskiy <Aleksandr.Guzovskiy@Sun.COM>
parents: 9396
diff changeset
   606
void dmu_assign_arcbuf(dmu_buf_t *handle, uint64_t offset, struct arc_buf *buf,
4aefd8704ce0 6717022 ZFS DMU needs zero-copy support
Aleksandr Guzovskiy <Aleksandr.Guzovskiy@Sun.COM>
parents: 9396
diff changeset
   607
    dmu_tx_t *tx);
11539
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   608
int dmu_xuio_init(struct xuio *uio, int niov);
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   609
void dmu_xuio_fini(struct xuio *uio);
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   610
int dmu_xuio_add(struct xuio *uio, struct arc_buf *abuf, offset_t off,
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   611
    size_t n);
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   612
int dmu_xuio_cnt(struct xuio *uio);
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   613
struct arc_buf *dmu_xuio_arcbuf(struct xuio *uio, int i);
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   614
void dmu_xuio_clear(struct xuio *uio, int i);
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   615
void xuio_stat_wbuf_copied();
10d35fc3d7fd 6873106 Need a mechanism to share buffers between fs modules
chunli zhang - Sun Microsystems - Irvine United States <Chunli.Zhang@Sun.COM>
parents: 11209
diff changeset
   616
void xuio_stat_wbuf_nocopy();
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   617
2986
c782fcf7a319 6485204 more tuneable tweakin
ek110237
parents: 2926
diff changeset
   618
extern int zfs_prefetch_disable;
c782fcf7a319 6485204 more tuneable tweakin
ek110237
parents: 2926
diff changeset
   619
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   620
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   621
 * Asynchronously try to read in the data.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   622
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   623
void dmu_prefetch(objset_t *os, uint64_t object, uint64_t offset,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   624
    uint64_t len);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   625
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   626
typedef struct dmu_object_info {
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   627
	/* All sizes are in bytes unless otherwise indicated. */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   628
	uint32_t doi_data_block_size;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   629
	uint32_t doi_metadata_block_size;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   630
	dmu_object_type_t doi_type;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   631
	dmu_object_type_t doi_bonus_type;
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   632
	uint64_t doi_bonus_size;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   633
	uint8_t doi_indirection;		/* 2 = dnode->indirect->data */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   634
	uint8_t doi_checksum;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   635
	uint8_t doi_compress;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   636
	uint8_t doi_pad[5];
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   637
	uint64_t doi_physical_blocks_512;	/* data + metadata, 512b blks */
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   638
	uint64_t doi_max_offset;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   639
	uint64_t doi_fill_count;		/* number of non-empty blocks */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   640
} dmu_object_info_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   641
4849
3a61e0a9a953 6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents: 4787
diff changeset
   642
typedef void arc_byteswap_func_t(void *buf, size_t size);
3a61e0a9a953 6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents: 4787
diff changeset
   643
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   644
typedef struct dmu_object_type_info {
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   645
	dmu_object_byteswap_t	ot_byteswap;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   646
	boolean_t		ot_metadata;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   647
	char			*ot_name;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   648
} dmu_object_type_info_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   649
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   650
typedef struct dmu_object_byteswap_info {
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   651
	arc_byteswap_func_t	*ob_func;
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   652
	char			*ob_name;
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   653
} dmu_object_byteswap_info_t;
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   654
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   655
extern const dmu_object_type_info_t dmu_ot[DMU_OT_NUMTYPES];
13700
2889e2596bd6 2619 asynchronous destruction of ZFS file systems
Christopher Siden <chris.siden@delphix.com>
parents: 13686
diff changeset
   656
extern const dmu_object_byteswap_info_t dmu_ot_byteswap[DMU_BSWAP_NUMFUNCS];
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   657
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   658
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   659
 * Get information on a DMU object.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   660
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   661
 * Return 0 on success or ENOENT if object is not allocated.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   662
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   663
 * If doi is NULL, just indicates whether the object exists.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   664
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   665
int dmu_object_info(objset_t *os, uint64_t object, dmu_object_info_t *doi);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   666
void dmu_object_info_from_dnode(struct dnode *dn, dmu_object_info_t *doi);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   667
void dmu_object_info_from_db(dmu_buf_t *db, dmu_object_info_t *doi);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   668
void dmu_object_size_from_db(dmu_buf_t *db, uint32_t *blksize,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   669
    u_longlong_t *nblk512);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   670
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   671
typedef struct dmu_objset_stats {
2885
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   672
	uint64_t dds_num_clones; /* number of clones of this */
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   673
	uint64_t dds_creation_txg;
5367
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   674
	uint64_t dds_guid;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   675
	dmu_objset_type_t dds_type;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   676
	uint8_t dds_is_snapshot;
1758
d0750a16db04 6397267 assertion failed: (link->list_next == 0) == (link->list_prev == 0)
ahrens
parents: 1731
diff changeset
   677
	uint8_t dds_inconsistent;
5367
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   678
	char dds_origin[MAXNAMELEN];
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   679
} dmu_objset_stats_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   680
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   681
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   682
 * Get stats on a dataset.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   683
 */
2885
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   684
void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat);
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   685
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   686
/*
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   687
 * Add entries to the nvlist for all the objset's properties.  See
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   688
 * zfs_prop_table[] and zfs(1m) for details on the properties.
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   689
 */
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   690
void dmu_objset_stats(objset_t *os, struct nvlist *nv);
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   691
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   692
/*
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   693
 * Get the space usage statistics for statvfs().
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   694
 *
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   695
 * refdbytes is the amount of space "referenced" by this objset.
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   696
 * availbytes is the amount of space available to this objset, taking
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   697
 * into account quotas & reservations, assuming that no other objsets
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   698
 * use the space first.  These values correspond to the 'referenced' and
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   699
 * 'available' properties, described in the zfs(1m) manpage.
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   700
 *
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   701
 * usedobjs and availobjs are the number of objects currently allocated,
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   702
 * and available.
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   703
 */
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   704
void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp,
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   705
    uint64_t *usedobjsp, uint64_t *availobjsp);
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   706
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   707
/*
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   708
 * The fsid_guid is a 56-bit ID that can change to avoid collisions.
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   709
 * (Contrast with the ds_guid which is a 64-bit ID that will never
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   710
 * change, so there is a small probability that it will collide.)
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   711
 */
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2688
diff changeset
   712
uint64_t dmu_objset_fsid_guid(objset_t *os);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   713
10373
bcf97ee54990 6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents: 10342
diff changeset
   714
/*
bcf97ee54990 6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents: 10342
diff changeset
   715
 * Get the [cm]time for an objset's snapshot dir
bcf97ee54990 6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents: 10342
diff changeset
   716
 */
bcf97ee54990 6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents: 10342
diff changeset
   717
timestruc_t dmu_objset_snap_cmtime(objset_t *os);
bcf97ee54990 6395956 snapshot dir needs real c/mtime
Chris Kirby <chris.kirby@sun.com>
parents: 10342
diff changeset
   718
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   719
int dmu_objset_is_snapshot(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   720
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   721
extern struct spa *dmu_objset_spa(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   722
extern struct zilog *dmu_objset_zil(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   723
extern struct dsl_pool *dmu_objset_pool(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   724
extern struct dsl_dataset *dmu_objset_ds(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   725
extern void dmu_objset_name(objset_t *os, char *buf);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   726
extern dmu_objset_type_t dmu_objset_type(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   727
extern uint64_t dmu_objset_id(objset_t *os);
12294
2a74b443e6b1 PSARC/2010/108 zil synchronicity
Mark J Musante <Mark.Musante@Sun.COM>
parents: 12285
diff changeset
   728
extern uint64_t dmu_objset_syncprop(objset_t *os);
10310
ba87b3315737 PSARC 2009/423 ZFS logbias property
Neil Perrin <Neil.Perrin@Sun.COM>
parents: 10298
diff changeset
   729
extern uint64_t dmu_objset_logbias(objset_t *os);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   730
extern int dmu_snapshot_list_next(objset_t *os, int namelen, char *name,
5663
029cc4273b57 6627223 gfs needs to support extended dirent flags
ck153898
parents: 5450
diff changeset
   731
    uint64_t *id, uint64_t *offp, boolean_t *case_conflict);
6492
903545192033 6654808 FIGNORECASE lookups in a zfs xattr dir don't provide 'realname' data
timh
parents: 6083
diff changeset
   732
extern int dmu_snapshot_realname(objset_t *os, char *name, char *real,
903545192033 6654808 FIGNORECASE lookups in a zfs xattr dir don't provide 'realname' data
timh
parents: 6083
diff changeset
   733
    int maxlen, boolean_t *conflict);
885
d925b21dba78 6347493 tar of 25K empty directory entries in ZFS takes 30+ seconds ...
ahrens
parents: 789
diff changeset
   734
extern int dmu_dir_list_next(objset_t *os, int namelen, char *name,
d925b21dba78 6347493 tar of 25K empty directory entries in ZFS takes 30+ seconds ...
ahrens
parents: 789
diff changeset
   735
    uint64_t *idp, uint64_t *offp);
9396
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   736
10407
34e10c4af053 6875779 zfs user accounting callbacks can be simplified
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10373
diff changeset
   737
typedef int objset_used_cb_t(dmu_object_type_t bonustype,
34e10c4af053 6875779 zfs user accounting callbacks can be simplified
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 10373
diff changeset
   738
    void *bonus, uint64_t *userp, uint64_t *groupp);
9396
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   739
extern void dmu_objset_register_type(dmu_objset_type_t ost,
f41cf682d0d3 PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9355
diff changeset
   740
    objset_used_cb_t *cb);
5326
6752aa2bd5bc 6425096 want online 'zfs recv' (read only and read/write)
ek110237
parents: 4944
diff changeset
   741
extern void dmu_objset_set_user(objset_t *os, void *user_ptr);
6752aa2bd5bc 6425096 want online 'zfs recv' (read only and read/write)
ek110237
parents: 4944
diff changeset
   742
extern void *dmu_objset_get_user(objset_t *os);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   743
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   744
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   745
 * Return the txg number for the given assigned transaction.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   746
 */
885
d925b21dba78 6347493 tar of 25K empty directory entries in ZFS takes 30+ seconds ...
ahrens
parents: 789
diff changeset
   747
uint64_t dmu_tx_get_txg(dmu_tx_t *tx);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   748
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   749
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   750
 * Synchronous write.
2237
45affe88ed99 6416482 filebench oltp workload hangs in zfs
maybee
parents: 2199
diff changeset
   751
 * If a parent zio is provided this function initiates a write on the
45affe88ed99 6416482 filebench oltp workload hangs in zfs
maybee
parents: 2199
diff changeset
   752
 * provided buffer as a child of the parent zio.
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 5326
diff changeset
   753
 * In the absence of a parent zio, the write is completed synchronously.
2237
45affe88ed99 6416482 filebench oltp workload hangs in zfs
maybee
parents: 2199
diff changeset
   754
 * At write completion, blk is filled with the bp of the written block.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   755
 * Note that while the data covered by this function will be on stable
2237
45affe88ed99 6416482 filebench oltp workload hangs in zfs
maybee
parents: 2199
diff changeset
   756
 * storage when the write completes this new data does not become a
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   757
 * permanent part of the file until the associated transaction commits.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   758
 */
10922
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   759
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   760
/*
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   761
 * {zfs,zvol,ztest}_get_done() args
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   762
 */
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   763
typedef struct zgd {
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   764
	struct zilog	*zgd_zilog;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   765
	struct blkptr	*zgd_bp;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   766
	dmu_buf_t	*zgd_db;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   767
	struct rl	*zgd_rl;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   768
	void		*zgd_private;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   769
} zgd_t;
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   770
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   771
typedef void dmu_sync_cb_t(zgd_t *arg, int error);
e2081f502306 PSARC 2009/571 ZFS Deduplication Properties
Jeff Bonwick <Jeff.Bonwick@Sun.COM>
parents: 10612
diff changeset
   772
int dmu_sync(struct zio *zio, uint64_t txg, dmu_sync_cb_t *done, zgd_t *zgd);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   773
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   774
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   775
 * Find the next hole or data block in file starting at *off
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   776
 * Return found offset in *off. Return ESRCH for end of file.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   777
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   778
int dmu_offset_next(objset_t *os, uint64_t object, boolean_t hole,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   779
    uint64_t *off);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   780
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   781
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   782
 * Initial setup and final teardown.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   783
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   784
extern void dmu_init(void);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   785
extern void dmu_fini(void);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   786
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   787
typedef void (*dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   788
    uint64_t object, uint64_t offset, int len);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   789
void dmu_traverse_objset(objset_t *os, uint64_t txg_start,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   790
    dmu_traverse_cb_t cb, void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   791
13686
4bc0783f6064 2703 add mechanism to report ZFS send progress
Bill Pijewski <wdp@joyent.com>
parents: 13524
diff changeset
   792
int dmu_send(objset_t *tosnap, objset_t *fromsnap, boolean_t fromorigin,
4bc0783f6064 2703 add mechanism to report ZFS send progress
Bill Pijewski <wdp@joyent.com>
parents: 13524
diff changeset
   793
    int outfd, struct vnode *vp, offset_t *off);
13524
f0e12b33f77c 1644 add ZFS "clones" property
Matthew Ahrens <matt@delphix.com>
parents: 13512
diff changeset
   794
int dmu_send_estimate(objset_t *tosnap, objset_t *fromsnap, boolean_t fromorign,
f0e12b33f77c 1644 add ZFS "clones" property
Matthew Ahrens <matt@delphix.com>
parents: 13512
diff changeset
   795
    uint64_t *sizep);
5367
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   796
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   797
typedef struct dmu_recv_cookie {
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   798
	/*
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   799
	 * This structure is opaque!
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   800
	 *
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   801
	 * If logical and real are different, we are recving the stream
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   802
	 * into the "real" temporary clone, and then switching it with
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   803
	 * the "logical" target.
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   804
	 */
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   805
	struct dsl_dataset *drc_logical_ds;
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   806
	struct dsl_dataset *drc_real_ds;
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   807
	struct drr_begin *drc_drrb;
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   808
	char *drc_tosnap;
11007
216d8396182e PSARC/2009/557 ZFS send dedup
Lori Alt <Lori.Alt@Sun.COM>
parents: 10922
diff changeset
   809
	char *drc_top_ds;
5367
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   810
	boolean_t drc_newfs;
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   811
	boolean_t drc_force;
13329
c48b8bf84ab7 755 dmu_recv_stream builds incomplete guid_to_ds_map
Alexander Stetsenko <ams@nexenta.com>
parents: 13055
diff changeset
   812
	struct avl_tree *drc_guid_to_ds_map;
5367
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   813
} dmu_recv_cookie_t;
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   814
11007
216d8396182e PSARC/2009/557 ZFS send dedup
Lori Alt <Lori.Alt@Sun.COM>
parents: 10922
diff changeset
   815
int dmu_recv_begin(char *tofs, char *tosnap, char *topds, struct drr_begin *,
10204
83c3a84aecef 6760420 zfs unmount -f causes recv to fail
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents: 9653
diff changeset
   816
    boolean_t force, objset_t *origin, dmu_recv_cookie_t *);
12527
693dd2cad55f 6884007 zfs_send() can leave temporary holds around
Chris Kirby <Chris.Kirby@oracle.com>
parents: 12470
diff changeset
   817
int dmu_recv_stream(dmu_recv_cookie_t *drc, struct vnode *vp, offset_t *voffp,
693dd2cad55f 6884007 zfs_send() can leave temporary holds around
Chris Kirby <Chris.Kirby@oracle.com>
parents: 12470
diff changeset
   818
    int cleanup_fd, uint64_t *action_handlep);
5367
c40abbe796be PSARC/2007/574 zfs send -R
ahrens
parents: 5331
diff changeset
   819
int dmu_recv_end(dmu_recv_cookie_t *drc);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   820
13055
8c712bbb18ea PSARC 2010/105 zfs diff
Tim Haley <Tim.Haley@Sun.COM>
parents: 12684
diff changeset
   821
int dmu_diff(objset_t *tosnap, objset_t *fromsnap, struct vnode *vp,
8c712bbb18ea PSARC 2010/105 zfs diff
Tim Haley <Tim.Haley@Sun.COM>
parents: 12684
diff changeset
   822
    offset_t *off);
8c712bbb18ea PSARC 2010/105 zfs diff
Tim Haley <Tim.Haley@Sun.COM>
parents: 12684
diff changeset
   823
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   824
/* CRC64 table */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   825
#define	ZFS_CRC64_POLY	0xC96C5795D7870F42ULL	/* ECMA-182, reflected form */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   826
extern uint64_t zfs_crc64_table[256];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   827
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   828
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   829
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   830
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   831
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   832
#endif	/* _SYS_DMU_H */