FreeBSD ZFS
The Zettabyte File System
Data Structures | Defines | Typedefs | Enumerations | Functions | Variables

sys/dmu.h File Reference

This file describes the interface that the DMU provides for its consumers. More...

#include <sys/types.h>
#include <sys/param.h>
#include <sys/cred.h>
#include <sys/time.h>
Include dependency graph for dmu.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dmu_buf
struct  dmu_object_info
 All sizes are in bytes unless otherwise indicated. More...
struct  dmu_object_type_info
struct  dmu_object_byteswap_info
struct  dmu_objset_stats
struct  zgd
 {zfs,zvol,ztest}_get_done() args More...
struct  dmu_recv_cookie
 This structure is opaque! More...

Defines

#define DMU_OT_NEWTYPE   0x80
#define DMU_OT_METADATA   0x40
#define DMU_OT_BYTESWAP_MASK   0x3f
#define DMU_OT(byteswap, metadata)
 Defines a uint8_t object type.
#define DMU_OT_IS_VALID(ot)
#define DMU_OT_IS_METADATA(ot)
#define DMU_OT_BYTESWAP(ot)
#define DS_FIND_SNAPSHOTS   (1<<0)
#define DS_FIND_CHILDREN   (1<<1)
#define DMU_MAX_ACCESS   (10<<20)
 The maximum number of bytes that can be accessed as part of one operation, including metadata.
#define DMU_MAX_DELETEBLKCNT   (20480)
#define DMU_USERUSED_OBJECT   (-1ULL)
#define DMU_GROUPUSED_OBJECT   (-2ULL)
#define DMU_DEADLIST_OBJECT   (-3ULL)
#define DMU_BONUS_BLKID   (-1ULL)
 Artificial blkid for bonus blocks.
#define DMU_SPILL_BLKID   (-2ULL)
 Artificial blkid for spill blocks.
#define DMU_POOL_DIRECTORY_OBJECT   1
#define DMU_POOL_CONFIG   "config"
#define DMU_POOL_FEATURES_FOR_WRITE   "features_for_write"
#define DMU_POOL_FEATURES_FOR_READ   "features_for_read"
#define DMU_POOL_FEATURE_DESCRIPTIONS   "feature_descriptions"
#define DMU_POOL_ROOT_DATASET   "root_dataset"
#define DMU_POOL_SYNC_BPOBJ   "sync_bplist"
#define DMU_POOL_ERRLOG_SCRUB   "errlog_scrub"
#define DMU_POOL_ERRLOG_LAST   "errlog_last"
#define DMU_POOL_SPARES   "spares"
#define DMU_POOL_DEFLATE   "deflate"
#define DMU_POOL_HISTORY   "history"
#define DMU_POOL_PROPS   "pool_props"
#define DMU_POOL_L2CACHE   "l2cache"
#define DMU_POOL_TMP_USERREFS   "tmp_userrefs"
#define DMU_POOL_DDT   "DDT-%s-%s-%s"
#define DMU_POOL_DDT_STATS   "DDT-statistics"
#define DMU_POOL_CREATION_VERSION   "creation_version"
#define DMU_POOL_SCAN   "scan"
#define DMU_POOL_FREE_BPOBJ   "free_bpobj"
#define DMU_POOL_BPTREE_OBJ   "bptree_obj"
#define DMU_POOL_EMPTY_BPOBJ   "empty_bpobj"
#define WP_NOFILL   0x1
#define WP_DMU_SYNC   0x2
#define WP_SPILL   0x4
#define DMU_NEW_OBJECT   (-1ULL)
#define DMU_OBJECT_END   (-1ULL)
#define DMU_READ_PREFETCH   0
#define DMU_READ_NO_PREFETCH   1
#define ZFS_CRC64_POLY   0xC96C5795D7870F42ULL
 ECMA-182, reflected form.

Typedefs

typedef struct objset objset_t
typedef struct dmu_tx dmu_tx_t
typedef struct dsl_dir dsl_dir_t
typedef enum dmu_object_byteswap dmu_object_byteswap_t
typedef enum dmu_object_type dmu_object_type_t
typedef enum dmu_objset_type dmu_objset_type_t
typedef struct dmu_buf dmu_buf_t
typedef void dmu_buf_evict_func_t (struct dmu_buf *db, void *user_ptr)
typedef void dmu_tx_callback_func_t (void *dcb_data, int error)
typedef struct dmu_object_info dmu_object_info_t
 All sizes are in bytes unless otherwise indicated.
typedef void arc_byteswap_func_t (void *buf, size_t size)
typedef struct dmu_object_type_info dmu_object_type_info_t
typedef struct
dmu_object_byteswap_info 
dmu_object_byteswap_info_t
typedef struct dmu_objset_stats dmu_objset_stats_t
typedef int objset_used_cb_t (dmu_object_type_t bonustype, void *bonus, uint64_t *userp, uint64_t *groupp)
typedef struct zgd zgd_t
 {zfs,zvol,ztest}_get_done() args
typedef void dmu_sync_cb_t (zgd_t *arg, int error)
typedef void(* dmu_traverse_cb_t )(objset_t *os, void *arg, struct blkptr *bp, uint64_t object, uint64_t offset, int len)
typedef struct dmu_recv_cookie dmu_recv_cookie_t
 This structure is opaque!

Enumerations

enum  dmu_object_byteswap {
  DMU_BSWAP_UINT8, DMU_BSWAP_UINT16, DMU_BSWAP_UINT32, DMU_BSWAP_UINT64,
  DMU_BSWAP_ZAP, DMU_BSWAP_DNODE, DMU_BSWAP_OBJSET, DMU_BSWAP_ZNODE,
  DMU_BSWAP_OLDACL, DMU_BSWAP_ACL, DMU_BSWAP_NUMFUNCS
}
enum  dmu_object_type {
  DMU_OT_NONE, DMU_OT_OBJECT_DIRECTORY, DMU_OT_OBJECT_ARRAY, DMU_OT_PACKED_NVLIST,
  DMU_OT_PACKED_NVLIST_SIZE, DMU_OT_BPOBJ, DMU_OT_BPOBJ_HDR, DMU_OT_SPACE_MAP_HEADER,
  DMU_OT_SPACE_MAP, DMU_OT_INTENT_LOG, DMU_OT_DNODE, DMU_OT_OBJSET,
  DMU_OT_DSL_DIR, DMU_OT_DSL_DIR_CHILD_MAP, DMU_OT_DSL_DS_SNAP_MAP, DMU_OT_DSL_PROPS,
  DMU_OT_DSL_DATASET, DMU_OT_ZNODE, DMU_OT_OLDACL, DMU_OT_PLAIN_FILE_CONTENTS,
  DMU_OT_DIRECTORY_CONTENTS, DMU_OT_MASTER_NODE, DMU_OT_UNLINKED_SET, DMU_OT_ZVOL,
  DMU_OT_ZVOL_PROP, DMU_OT_PLAIN_OTHER, DMU_OT_UINT64_OTHER, DMU_OT_ZAP_OTHER,
  DMU_OT_ERROR_LOG, DMU_OT_SPA_HISTORY, DMU_OT_SPA_HISTORY_OFFSETS, DMU_OT_POOL_PROPS,
  DMU_OT_DSL_PERMS, DMU_OT_ACL, DMU_OT_SYSACL, DMU_OT_FUID,
  DMU_OT_FUID_SIZE, DMU_OT_NEXT_CLONES, DMU_OT_SCAN_QUEUE, DMU_OT_USERGROUP_USED,
  DMU_OT_USERGROUP_QUOTA, DMU_OT_USERREFS, DMU_OT_DDT_ZAP, DMU_OT_DDT_STATS,
  DMU_OT_SA, DMU_OT_SA_MASTER_NODE, DMU_OT_SA_ATTR_REGISTRATION, DMU_OT_SA_ATTR_LAYOUTS,
  DMU_OT_SCAN_XLATE, DMU_OT_DEDUP, DMU_OT_DEADLIST, DMU_OT_DEADLIST_HDR,
  DMU_OT_DSL_CLONES, DMU_OT_BPOBJ_SUBOBJ, DMU_OT_NUMTYPES, DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE),
  DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE), DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE), DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE), DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE),
  DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE), DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE), DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE), DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE),
  DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE)
}
enum  dmu_objset_type {
  DMU_OST_NONE, DMU_OST_META, DMU_OST_ZFS, DMU_OST_ZVOL,
  DMU_OST_OTHER, DMU_OST_ANY, DMU_OST_NUMTYPES
}

Functions

void byteswap_uint64_array (void *buf, size_t size)
void byteswap_uint32_array (void *buf, size_t size)
void byteswap_uint16_array (void *buf, size_t size)
void byteswap_uint8_array (void *buf, size_t size)
void zap_byteswap (void *buf, size_t size)
void zfs_oldacl_byteswap (void *buf, size_t size)
void zfs_acl_byteswap (void *buf, size_t size)
void zfs_znode_byteswap (void *buf, size_t size)
int dmu_objset_hold (const char *name, void *tag, objset_t **osp)
int dmu_objset_own (const char *name, dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp)
void dmu_objset_rele (objset_t *os, void *tag)
void dmu_objset_disown (objset_t *os, void *tag)
int dmu_objset_open_ds (struct dsl_dataset *ds, objset_t **osp)
int dmu_objset_evict_dbufs (objset_t *os)
int dmu_objset_create (const char *name, dmu_objset_type_t type, uint64_t flags, void(*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg)
int dmu_objset_clone (const char *name, struct dsl_dataset *clone_origin, uint64_t flags)
int dmu_objset_destroy (const char *name, boolean_t defer)
int dmu_get_recursive_snaps_nvl (const char *fsname, const char *snapname, struct nvlist *snaps)
int dmu_snapshots_destroy_nvl (struct nvlist *snaps, boolean_t defer, char *)
int dmu_objset_snapshot (char *fsname, char *snapname, char *tag, struct nvlist *props, boolean_t recursive, boolean_t temporary, int fd)
int dmu_objset_rename (const char *name, const char *newname, boolean_t recursive)
int dmu_objset_find (const char *name, int func(const char *, void *), void *arg, int flags)
 Find all objsets under name, and for each, call 'func(child_name, arg)'.
void dmu_objset_byteswap (void *buf, size_t size)
uint64_t dmu_object_alloc (objset_t *os, dmu_object_type_t ot, int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx)
 Chooses an unallocated object number and returns a new object that uses it in *objectp.
int dmu_object_claim (objset_t *os, uint64_t object, dmu_object_type_t ot, int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx)
 Allocates an object for the specified object number.
int dmu_object_reclaim (objset_t *os, uint64_t object, dmu_object_type_t ot, int blocksize, dmu_object_type_t bonustype, int bonuslen)
int dmu_object_free (objset_t *os, uint64_t object, dmu_tx_t *tx)
 Free an object from this objset.
int dmu_object_next (objset_t *os, uint64_t *objectp, boolean_t hole, uint64_t txg)
 Find the next allocated or free object.
int dmu_object_set_blocksize (objset_t *os, uint64_t object, uint64_t size, int ibs, dmu_tx_t *tx)
 Set the data blocksize for an object.
void dmu_object_set_checksum (objset_t *os, uint64_t object, uint8_t checksum, dmu_tx_t *tx)
 Set the checksum property on a dnode.
void dmu_object_set_compress (objset_t *os, uint64_t object, uint8_t compress, dmu_tx_t *tx)
 Set the compress property on a dnode.
void dmu_write_policy (objset_t *os, struct dnode *dn, int level, int wp, struct zio_prop *zp)
 Decide how to write a block.
int dmu_bonus_hold (objset_t *os, uint64_t object, void *tag, dmu_buf_t **)
 The bonus data is accessed more or less like a regular buffer.
int dmu_bonus_max (void)
int dmu_set_bonus (dmu_buf_t *, int, dmu_tx_t *)
int dmu_set_bonustype (dmu_buf_t *, dmu_object_type_t, dmu_tx_t *)
dmu_object_type_t dmu_get_bonustype (dmu_buf_t *)
int dmu_rm_spill (objset_t *, uint64_t, dmu_tx_t *)
int dmu_spill_hold_by_bonus (dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp)
int dmu_spill_hold_by_dnode (struct dnode *dn, uint32_t flags, void *tag, dmu_buf_t **dbp)
 This interface will allocate a blank spill dbuf when a spill blk doesn't already exist on the dnode.
int dmu_spill_hold_existing (dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp)
int dmu_buf_hold (objset_t *os, uint64_t object, uint64_t offset, void *tag, dmu_buf_t **, int flags)
 Obtain the DMU buffer from the specified object which contains the specified offset.
void dmu_buf_add_ref (dmu_buf_t *db, void *tag)
void dmu_buf_rele (dmu_buf_t *db, void *tag)
uint64_t dmu_buf_refcount (dmu_buf_t *db)
int dmu_buf_hold_array_by_bonus (dmu_buf_t *db, uint64_t offset, uint64_t length, int read, void *tag, int *numbufsp, dmu_buf_t ***dbpp)
 Holds the DMU buffers which contain all bytes in a range of an object.
void dmu_buf_rele_array (dmu_buf_t **, int numbufs, void *tag)
 Releases the hold on an array of dmu_buf_t*'s, and frees the array.
void * dmu_buf_set_user (dmu_buf_t *db, void *user_ptr, void *user_data_ptr_ptr, dmu_buf_evict_func_t *evict_func)
void * dmu_buf_set_user_ie (dmu_buf_t *db, void *user_ptr, void *user_data_ptr_ptr, dmu_buf_evict_func_t *pageout_func)
 The same as set_user, but request immediate eviction when hold count goes to zero.
void * dmu_buf_update_user (dmu_buf_t *db_fake, void *old_user_ptr, void *user_ptr, void *user_data_ptr_ptr, dmu_buf_evict_func_t *pageout_func)
void dmu_evict_user (objset_t *os, dmu_buf_evict_func_t *func)
void * dmu_buf_get_user (dmu_buf_t *db)
void dmu_buf_will_dirty (dmu_buf_t *db, dmu_tx_t *tx)
 Indicate that you are going to modify the buffer's data (db_data).
boolean_t dmu_buf_freeable (dmu_buf_t *)
 Tells if the given dbuf is freeable.
dmu_tx_tdmu_tx_create (objset_t *os)
void dmu_tx_hold_write (dmu_tx_t *tx, uint64_t object, uint64_t off, int len)
void dmu_tx_hold_free (dmu_tx_t *tx, uint64_t object, uint64_t off, uint64_t len)
void dmu_tx_hold_zap (dmu_tx_t *tx, uint64_t object, int add, const char *name)
void dmu_tx_hold_bonus (dmu_tx_t *tx, uint64_t object)
void dmu_tx_hold_spill (dmu_tx_t *tx, uint64_t object)
void dmu_tx_hold_sa (dmu_tx_t *tx, struct sa_handle *hdl, boolean_t may_grow)
 Hold SA attribute.
void dmu_tx_hold_sa_create (dmu_tx_t *tx, int total_size)
 Interface to hold a bunch of attributes.
void dmu_tx_abort (dmu_tx_t *tx)
int dmu_tx_assign (dmu_tx_t *tx, uint64_t txg_how)
 Assign tx to a transaction group.
void dmu_tx_wait (dmu_tx_t *tx)
void dmu_tx_commit (dmu_tx_t *tx)
void dmu_tx_callback_register (dmu_tx_t *tx, dmu_tx_callback_func_t *func, void *data)
 Registers a commit callback.
int dmu_free_range (objset_t *os, uint64_t object, uint64_t offset, uint64_t size, dmu_tx_t *tx)
 Free up the data blocks for a defined range of a file.
int dmu_free_long_range (objset_t *os, uint64_t object, uint64_t offset, uint64_t size)
int dmu_free_object (objset_t *os, uint64_t object)
int dmu_read (objset_t *os, uint64_t object, uint64_t offset, uint64_t size, void *buf, uint32_t flags)
void dmu_write (objset_t *os, uint64_t object, uint64_t offset, uint64_t size, const void *buf, dmu_tx_t *tx)
void dmu_prealloc (objset_t *os, uint64_t object, uint64_t offset, uint64_t size, dmu_tx_t *tx)
int dmu_read_uio (objset_t *os, uint64_t object, struct uio *uio, uint64_t size)
int dmu_write_uio (objset_t *os, uint64_t object, struct uio *uio, uint64_t size, dmu_tx_t *tx)
int dmu_write_uio_dbuf (dmu_buf_t *zdb, struct uio *uio, uint64_t size, dmu_tx_t *tx)
int dmu_write_pages (objset_t *os, uint64_t object, uint64_t offset, uint64_t size, struct page *pp, dmu_tx_t *tx)
struct arc_bufdmu_request_arcbuf (dmu_buf_t *handle, int size)
 Allocate a loaned anonymous arc buffer.
void dmu_return_arcbuf (struct arc_buf *buf)
 Free a loaned arc buffer.
void dmu_assign_arcbuf (dmu_buf_t *handle, uint64_t offset, struct arc_buf *buf, dmu_tx_t *tx)
 When possible directly assign passed loaned arc buffer to a dbuf.
int dmu_xuio_init (struct xuio *uio, int niov)
void dmu_xuio_fini (struct xuio *uio)
int dmu_xuio_add (struct xuio *uio, struct arc_buf *abuf, offset_t off, size_t n)
int dmu_xuio_cnt (struct xuio *uio)
struct arc_bufdmu_xuio_arcbuf (struct xuio *uio, int i)
void dmu_xuio_clear (struct xuio *uio, int i)
void xuio_stat_wbuf_copied ()
void xuio_stat_wbuf_nocopy ()
void dmu_prefetch (objset_t *os, uint64_t object, uint64_t offset, uint64_t len)
 Asynchronously try to read in the data.
int dmu_object_info (objset_t *os, uint64_t object, dmu_object_info_t *doi)
 Get information on a DMU object.
void dmu_object_info_from_dnode (struct dnode *dn, dmu_object_info_t *doi)
 Get information on a DMU object.
void dmu_object_info_from_db (dmu_buf_t *db, dmu_object_info_t *doi)
 Like dmu_object_info, but faster.
void dmu_object_size_from_db (dmu_buf_t *db, uint32_t *blksize, u_longlong_t *nblk512)
 Like dmu_object_info_from_db, but faster still.
void dmu_objset_fast_stat (objset_t *os, dmu_objset_stats_t *stat)
 Get stats on a dataset.
void dmu_objset_stats (objset_t *os, struct nvlist *nv)
 Add entries to the nvlist for all the objset's properties.
void dmu_objset_space (objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, uint64_t *usedobjsp, uint64_t *availobjsp)
 Get the space usage statistics for statvfs().
uint64_t dmu_objset_fsid_guid (objset_t *os)
 The fsid_guid is a 56-bit ID that can change to avoid collisions.
timestruc_t dmu_objset_snap_cmtime (objset_t *os)
int dmu_objset_is_snapshot (objset_t *os)
struct spadmu_objset_spa (objset_t *os)
struct zilogdmu_objset_zil (objset_t *os)
struct dsl_pooldmu_objset_pool (objset_t *os)
struct dsl_datasetdmu_objset_ds (objset_t *os)
void dmu_objset_name (objset_t *os, char *buf)
dmu_objset_type_t dmu_objset_type (objset_t *os)
uint64_t dmu_objset_id (objset_t *os)
uint64_t dmu_objset_syncprop (objset_t *os)
uint64_t dmu_objset_logbias (objset_t *os)
int dmu_snapshot_list_next (objset_t *os, int namelen, char *name, uint64_t *id, uint64_t *offp, boolean_t *case_conflict)
int dmu_snapshot_realname (objset_t *os, char *name, char *real, int maxlen, boolean_t *conflict)
int dmu_dir_list_next (objset_t *os, int namelen, char *name, uint64_t *idp, uint64_t *offp)
void dmu_objset_register_type (dmu_objset_type_t ost, objset_used_cb_t *cb)
void dmu_objset_set_user (objset_t *os, void *user_ptr)
void * dmu_objset_get_user (objset_t *os)
uint64_t dmu_tx_get_txg (dmu_tx_t *tx)
 Return the txg number for the given assigned transaction.
int dmu_sync (struct zio *zio, uint64_t txg, dmu_sync_cb_t *done, zgd_t *zgd)
 Intent log support: sync the block associated with db to disk.
int dmu_offset_next (objset_t *os, uint64_t object, boolean_t hole, uint64_t *off)
 Find the next hole or data block in file starting at *off.
void dmu_init (void)
 Initial setup.
void dmu_fini (void)
 Final teardown.
void dmu_traverse_objset (objset_t *os, uint64_t txg_start, dmu_traverse_cb_t cb, void *arg)
int dmu_send (objset_t *tosnap, objset_t *fromsnap, boolean_t fromorigin, int outfd, struct file *fp, offset_t *off)
int dmu_send_estimate (objset_t *tosnap, objset_t *fromsnap, boolean_t fromorigin, uint64_t *sizep)
int dmu_recv_begin (char *tofs, char *tosnap, char *topds, struct drr_begin *, boolean_t force, objset_t *origin, dmu_recv_cookie_t *)
 NB: callers *MUST* call dmu_recv_stream() if dmu_recv_begin() succeeds; otherwise we will leak the holds on the datasets.
int dmu_recv_stream (dmu_recv_cookie_t *drc, struct file *fp, offset_t *voffp, int cleanup_fd, uint64_t *action_handlep)
 NB: callers *must* call dmu_recv_end() if this succeeds.
int dmu_recv_end (dmu_recv_cookie_t *drc)
int dmu_diff (objset_t *tosnap, objset_t *fromsnap, struct file *fp, offset_t *off)

Variables

int zfs_prefetch_disable
const dmu_object_type_info_t dmu_ot [DMU_OT_NUMTYPES]
const dmu_object_byteswap_info_t dmu_ot_byteswap [DMU_BSWAP_NUMFUNCS]
uint64_t zfs_crc64_table [256]

Detailed Description

This file describes the interface that the DMU provides for its consumers.

The DMU also interacts with the SPA. That interface is described in dmu_spa.h.

Transactions

You must create a transaction, then hold the objects which you will (or might) modify as part of this transaction. Then you must assign the transaction to a transaction group. Once the transaction has been assigned, you can modify buffers which belong to held objects as part of this transaction. You can't modify buffers before the transaction has been assigned; you can't modify buffers which don't belong to objects which this transaction holds; you can't hold objects once the transaction has been assigned. You may hold an object which you are going to free (with dmu_object_free()), but you don't have to.

You can abort the transaction before it has been assigned.

Note that you may hold buffers (with dmu_buf_hold) at any time, regardless of transaction state.

Definition in file dmu.h.


Define Documentation

#define DMU_BONUS_BLKID   (-1ULL)

Artificial blkid for bonus blocks.

Definition at line 257 of file dmu.h.

#define DMU_DEADLIST_OBJECT   (-3ULL)

Definition at line 252 of file dmu.h.

#define DMU_GROUPUSED_OBJECT   (-2ULL)

Definition at line 251 of file dmu.h.

#define DMU_MAX_ACCESS   (10<<20)

The maximum number of bytes that can be accessed as part of one operation, including metadata.

Definition at line 247 of file dmu.h.

#define DMU_MAX_DELETEBLKCNT   (20480)

Definition at line 248 of file dmu.h.

#define DMU_NEW_OBJECT   (-1ULL)

Definition at line 564 of file dmu.h.

#define DMU_OBJECT_END   (-1ULL)

Definition at line 565 of file dmu.h.

#define DMU_OT (   byteswap,
  metadata 
)
Value:
(DMU_OT_NEWTYPE | \
        ((metadata) ? DMU_OT_METADATA : 0) | \
        ((byteswap) & DMU_OT_BYTESWAP_MASK))

Defines a uint8_t object type.

Object types specify if the data in the object is metadata (boolean) and how to byteswap the data (dmu_object_byteswap_t).

Definition at line 109 of file dmu.h.

#define DMU_OT_BYTESWAP (   ot)
Value:
(((ot) & DMU_OT_NEWTYPE) ? \
        ((ot) & DMU_OT_BYTESWAP_MASK) : \
        dmu_ot[(ot)].ot_byteswap)

Definition at line 122 of file dmu.h.

#define DMU_OT_BYTESWAP_MASK   0x3f

Definition at line 102 of file dmu.h.

#define DMU_OT_IS_METADATA (   ot)
Value:
(((ot) & DMU_OT_NEWTYPE) ? \
        ((ot) & DMU_OT_METADATA) : \
        dmu_ot[(ot)].ot_metadata)

Definition at line 118 of file dmu.h.

#define DMU_OT_IS_VALID (   ot)
Value:

Definition at line 114 of file dmu.h.

#define DMU_OT_METADATA   0x40

Definition at line 101 of file dmu.h.

#define DMU_OT_NEWTYPE   0x80

Definition at line 100 of file dmu.h.

#define DMU_POOL_BPTREE_OBJ   "bptree_obj"

Definition at line 321 of file dmu.h.

#define DMU_POOL_CONFIG   "config"

Definition at line 302 of file dmu.h.

#define DMU_POOL_CREATION_VERSION   "creation_version"

Definition at line 318 of file dmu.h.

#define DMU_POOL_DDT   "DDT-%s-%s-%s"

Definition at line 316 of file dmu.h.

#define DMU_POOL_DDT_STATS   "DDT-statistics"

Definition at line 317 of file dmu.h.

#define DMU_POOL_DEFLATE   "deflate"

Definition at line 311 of file dmu.h.

#define DMU_POOL_DIRECTORY_OBJECT   1

Definition at line 301 of file dmu.h.

#define DMU_POOL_EMPTY_BPOBJ   "empty_bpobj"

Definition at line 322 of file dmu.h.

#define DMU_POOL_ERRLOG_LAST   "errlog_last"

Definition at line 309 of file dmu.h.

#define DMU_POOL_ERRLOG_SCRUB   "errlog_scrub"

Definition at line 308 of file dmu.h.

#define DMU_POOL_FEATURE_DESCRIPTIONS   "feature_descriptions"

Definition at line 305 of file dmu.h.

#define DMU_POOL_FEATURES_FOR_READ   "features_for_read"

Definition at line 304 of file dmu.h.

#define DMU_POOL_FEATURES_FOR_WRITE   "features_for_write"

Definition at line 303 of file dmu.h.

#define DMU_POOL_FREE_BPOBJ   "free_bpobj"

Definition at line 320 of file dmu.h.

#define DMU_POOL_HISTORY   "history"

Definition at line 312 of file dmu.h.

#define DMU_POOL_L2CACHE   "l2cache"

Definition at line 314 of file dmu.h.

#define DMU_POOL_PROPS   "pool_props"

Definition at line 313 of file dmu.h.

#define DMU_POOL_ROOT_DATASET   "root_dataset"

Definition at line 306 of file dmu.h.

#define DMU_POOL_SCAN   "scan"

Definition at line 319 of file dmu.h.

#define DMU_POOL_SPARES   "spares"

Definition at line 310 of file dmu.h.

#define DMU_POOL_SYNC_BPOBJ   "sync_bplist"

Definition at line 307 of file dmu.h.

#define DMU_POOL_TMP_USERREFS   "tmp_userrefs"

Definition at line 315 of file dmu.h.

#define DMU_READ_NO_PREFETCH   1

Definition at line 620 of file dmu.h.

#define DMU_READ_PREFETCH   0

Definition at line 619 of file dmu.h.

#define DMU_SPILL_BLKID   (-2ULL)

Artificial blkid for spill blocks.

Definition at line 261 of file dmu.h.

#define DMU_USERUSED_OBJECT   (-1ULL)

Definition at line 250 of file dmu.h.

#define DS_FIND_CHILDREN   (1<<1)

Definition at line 241 of file dmu.h.

#define DS_FIND_SNAPSHOTS   (1<<0)

Definition at line 240 of file dmu.h.

#define WP_DMU_SYNC   0x2

Definition at line 413 of file dmu.h.

#define WP_NOFILL   0x1

Definition at line 412 of file dmu.h.

#define WP_SPILL   0x4

Definition at line 414 of file dmu.h.

#define ZFS_CRC64_POLY   0xC96C5795D7870F42ULL

ECMA-182, reflected form.

Definition at line 898 of file dmu.h.


Typedef Documentation

typedef void arc_byteswap_func_t(void *buf, size_t size)

Definition at line 672 of file dmu.h.

typedef void dmu_buf_evict_func_t(struct dmu_buf *db, void *user_ptr)

Definition at line 296 of file dmu.h.

typedef struct dmu_buf dmu_buf_t

All sizes are in bytes unless otherwise indicated.

This structure is opaque!

If logical and real are different, we are recving the stream into the "real" temporary clone, and then switching it with the "logical" target.

typedef void dmu_sync_cb_t(zgd_t *arg, int error)

Definition at line 811 of file dmu.h.

typedef void(* dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp, uint64_t object, uint64_t offset, int len)

Definition at line 861 of file dmu.h.

typedef void dmu_tx_callback_func_t(void *dcb_data, int error)

Definition at line 581 of file dmu.h.

typedef struct dmu_tx dmu_tx_t

Definition at line 76 of file dmu.h.

typedef struct dsl_dir dsl_dir_t

Definition at line 77 of file dmu.h.

typedef struct objset objset_t

Definition at line 75 of file dmu.h.

typedef int objset_used_cb_t(dmu_object_type_t bonustype, void *bonus, uint64_t *userp, uint64_t *groupp)

Definition at line 788 of file dmu.h.

typedef struct zgd zgd_t

{zfs,zvol,ztest}_get_done() args


Enumeration Type Documentation

Enumerator:
DMU_BSWAP_UINT8 
DMU_BSWAP_UINT16 
DMU_BSWAP_UINT32 
DMU_BSWAP_UINT64 
DMU_BSWAP_ZAP 
DMU_BSWAP_DNODE 
DMU_BSWAP_OBJSET 
DMU_BSWAP_ZNODE 
DMU_BSWAP_OLDACL 
DMU_BSWAP_ACL 
DMU_BSWAP_NUMFUNCS 

Definition at line 79 of file dmu.h.

Enumerator:
DMU_OT_NONE 
DMU_OT_OBJECT_DIRECTORY 

ZAP.

DMU_OT_OBJECT_ARRAY 

UINT64.

DMU_OT_PACKED_NVLIST 

UINT8 (XDR by nvlist_pack/unpack)

DMU_OT_PACKED_NVLIST_SIZE 

UINT64.

DMU_OT_BPOBJ 

UINT64.

DMU_OT_BPOBJ_HDR 

UINT64.

DMU_OT_SPACE_MAP_HEADER 

UINT64.

DMU_OT_SPACE_MAP 

UINT64.

DMU_OT_INTENT_LOG 

UINT64.

DMU_OT_DNODE 

DNODE.

DMU_OT_OBJSET 

OBJSET.

DMU_OT_DSL_DIR 

UINT64.

DMU_OT_DSL_DIR_CHILD_MAP 

ZAP.

DMU_OT_DSL_DS_SNAP_MAP 

ZAP.

DMU_OT_DSL_PROPS 

ZAP.

DMU_OT_DSL_DATASET 

UINT64.

DMU_OT_ZNODE 

ZNODE.

DMU_OT_OLDACL 

Old ACL.

DMU_OT_PLAIN_FILE_CONTENTS 

UINT8.

DMU_OT_DIRECTORY_CONTENTS 

ZAP.

DMU_OT_MASTER_NODE 

ZAP.

DMU_OT_UNLINKED_SET 

ZAP.

DMU_OT_ZVOL 

UINT8.

DMU_OT_ZVOL_PROP 

ZAP.

DMU_OT_PLAIN_OTHER 

UINT8.

DMU_OT_UINT64_OTHER 

UINT64.

DMU_OT_ZAP_OTHER 

ZAP.

DMU_OT_ERROR_LOG 

ZAP.

DMU_OT_SPA_HISTORY 

UINT8.

DMU_OT_SPA_HISTORY_OFFSETS 

spa_his_phys_t

DMU_OT_POOL_PROPS 

ZAP.

DMU_OT_DSL_PERMS 

ZAP.

DMU_OT_ACL 

ACL.

DMU_OT_SYSACL 

SYSACL.

DMU_OT_FUID 

FUID table (Packed NVLIST UINT8)

DMU_OT_FUID_SIZE 

FUID table size UINT64.

DMU_OT_NEXT_CLONES 

ZAP.

DMU_OT_SCAN_QUEUE 

ZAP.

DMU_OT_USERGROUP_USED 

ZAP.

DMU_OT_USERGROUP_QUOTA 

ZAP.

DMU_OT_USERREFS 

ZAP.

DMU_OT_DDT_ZAP 

ZAP.

DMU_OT_DDT_STATS 

ZAP.

DMU_OT_SA 

System attr.

DMU_OT_SA_MASTER_NODE 

ZAP.

DMU_OT_SA_ATTR_REGISTRATION 

ZAP.

DMU_OT_SA_ATTR_LAYOUTS 

ZAP.

DMU_OT_SCAN_XLATE 

ZAP.

DMU_OT_DEDUP 

fake dedup BP from ddt_bp_create()

DMU_OT_DEADLIST 

ZAP.

DMU_OT_DEADLIST_HDR 

UINT64.

DMU_OT_DSL_CLONES 

ZAP.

DMU_OT_BPOBJ_SUBOBJ 

UINT64.

DMU_OT_NUMTYPES 
DMU_OTN_UINT8_DATA 
DMU_OTN_UINT8_METADATA 
DMU_OTN_UINT16_DATA 
DMU_OTN_UINT16_METADATA 
DMU_OTN_UINT32_DATA 
DMU_OTN_UINT32_METADATA 
DMU_OTN_UINT64_DATA 
DMU_OTN_UINT64_METADATA 
DMU_OTN_ZAP_DATA 
DMU_OTN_ZAP_METADATA 

Definition at line 126 of file dmu.h.

Enumerator:
DMU_OST_NONE 
DMU_OST_META 
DMU_OST_ZFS 
DMU_OST_ZVOL 
DMU_OST_OTHER 
DMU_OST_ANY 

For testing only!

DMU_OST_NUMTYPES 

Be careful!

Definition at line 221 of file dmu.h.


Function Documentation

void byteswap_uint16_array ( void *  buf,
size_t  size 
)

Definition at line 1705 of file dmu.c.

void byteswap_uint32_array ( void *  buf,
size_t  size 
)

Definition at line 1692 of file dmu.c.

void byteswap_uint64_array ( void *  buf,
size_t  size 
)

Definition at line 1679 of file dmu.c.

void byteswap_uint8_array ( void *  buf,
size_t  size 
)

Definition at line 1719 of file dmu.c.

void dmu_assign_arcbuf ( dmu_buf_t handle,
uint64_t  offset,
arc_buf_t buf,
dmu_tx_t tx 
)

When possible directly assign passed loaned arc buffer to a dbuf.

If this is not possible copy the contents of passed arc buf via dmu_write().

Definition at line 1204 of file dmu.c.

int dmu_bonus_hold ( objset_t os,
uint64_t  object,
void *  tag,
dmu_buf_t **   
)

The bonus data is accessed more or less like a regular buffer.

You must dmu_bonus_hold() to get the buffer, which will give you a dmu_buf_t with db_offset==-1ULL, and db_size = the size of the bonus data. As with any normal buffer, you must call dmu_buf_read() to read db_data, dmu_buf_will_dirty() before modifying it, and the object must be held in an assigned transaction before calling dmu_buf_will_dirty. You may use dmu_buf_set_user() on the bonus buffer as well. You must release your hold with dmu_buf_rele().

Returns:
ENOENT, EIO, or 0.

Definition at line 236 of file dmu.c.

int dmu_bonus_max ( void  )

Definition at line 154 of file dmu.c.

void dmu_buf_add_ref ( dmu_buf_t db,
void *  tag 
)
boolean_t dmu_buf_freeable ( dmu_buf_t )

Tells if the given dbuf is freeable.

Definition at line 2222 of file dbuf.c.

void* dmu_buf_get_user ( dmu_buf_t db)
Returns:
The user_ptr set with dmu_buf_set_user(), or NULL if not set.

Definition at line 2213 of file dbuf.c.

int dmu_buf_hold ( objset_t os,
uint64_t  object,
uint64_t  offset,
void *  tag,
dmu_buf_t **  ,
int  flags 
)

Obtain the DMU buffer from the specified object which contains the specified offset.

dmu_buf_hold() puts a "hold" on the buffer, so that it will remain in memory. You must release the hold with dmu_buf_rele(). You musn't access the dmu_buf_t after releasing your hold. You must have a hold on any dmu_buf_t* you pass to the DMU.

You must call dmu_buf_read, dmu_buf_will_dirty, or dmu_buf_will_fill on the returned buffer before reading or writing the buffer's db_data. The comments for those routines describe what particular operations are valid after calling them.

The object number must be a valid, allocated object number.

Definition at line 119 of file dmu.c.

int dmu_buf_hold_array_by_bonus ( dmu_buf_t db,
uint64_t  offset,
uint64_t  length,
int  read,
void *  tag,
int *  numbufsp,
dmu_buf_t ***  dbpp 
)

Holds the DMU buffers which contain all bytes in a range of an object.

A pointer to an array of dmu_buf_t*'s is returned (in *dbpp).

Definition at line 474 of file dmu.c.

uint64_t dmu_buf_refcount ( dmu_buf_t db)
void dmu_buf_rele ( dmu_buf_t db,
void *  tag 
)
void dmu_buf_rele_array ( dmu_buf_t **  ,
int  numbufs,
void *  tag 
)

Releases the hold on an array of dmu_buf_t*'s, and frees the array.

The hold on the array of buffers MUST be released with dmu_buf_rele_array. You can NOT release the hold on each buffer individually with dmu_buf_rele.

Definition at line 491 of file dmu.c.

void* dmu_buf_set_user ( dmu_buf_t db,
void *  user_ptr,
void *  user_data_ptr_ptr,
dmu_buf_evict_func_t evict_func 
)
Parameters:
user_ptrFor use by the user and can be obtained via dmu_buf_get_user()
user_data_ptr_ptrShould be NULL, or a pointer to a pointer which will be set to db->db_data when the caller is allowed to access it. Note that db->db_data can change when dmu_buf_read, dmu_buf_tryupgrade, dmu_buf_will_dirty, or dmu_buf_will_fill are called. *user_data_ptr_ptr will be set to the new value when it changes.
evict_funcIf not NULL, evict_func will be called when this buffer is being excised from the cache, so that the data structure pointed to by user_data_ptr_ptr can be cleaned up.
Returns:
NULL on success, or the existing user ptr if it's already been set.

dmu_evict_user() will call the evict_func for all buffers in a objset with a given pageout func.

Definition at line 2169 of file dbuf.c.

void* dmu_buf_set_user_ie ( dmu_buf_t db,
void *  user_ptr,
void *  user_data_ptr_ptr,
dmu_buf_evict_func_t pageout_func 
)

The same as set_user, but request immediate eviction when hold count goes to zero.

Definition at line 2177 of file dbuf.c.

void* dmu_buf_update_user ( dmu_buf_t db_fake,
void *  old_user_ptr,
void *  user_ptr,
void *  user_data_ptr_ptr,
dmu_buf_evict_func_t pageout_func 
)

Definition at line 2188 of file dbuf.c.

void dmu_buf_will_dirty ( dmu_buf_t db,
dmu_tx_t tx 
)

Indicate that you are going to modify the buffer's data (db_data).

The transaction (tx) must be assigned to a txg (ie. you've called dmu_tx_assign()). The buffer's object must be held in the tx (ie. you've called dmu_tx_hold_object(tx, db->db_object)).

int dmu_diff ( objset_t tosnap,
objset_t fromsnap,
struct file *  fp,
offset_t *  off 
)

Definition at line 181 of file dmu_diff.c.

int dmu_dir_list_next ( objset_t os,
int  namelen,
char *  name,
uint64_t *  idp,
uint64_t *  offp 
)

Definition at line 1582 of file dmu_objset.c.

void dmu_evict_user ( objset_t os,
dmu_buf_evict_func_t func 
)
void dmu_fini ( void  )

Final teardown.

Definition at line 1738 of file dmu.c.

int dmu_free_long_range ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  size 
)

Definition at line 661 of file dmu.c.

int dmu_free_object ( objset_t os,
uint64_t  object 
)

Definition at line 676 of file dmu.c.

int dmu_free_range ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  size,
dmu_tx_t tx 
)

Free up the data blocks for a defined range of a file.

If size is -1, the range from offset to end-of-file is freed.

Definition at line 706 of file dmu.c.

dmu_object_type_t dmu_get_bonustype ( dmu_buf_t )

Definition at line 206 of file dmu.c.

int dmu_get_recursive_snaps_nvl ( const char *  fsname,
const char *  snapname,
struct nvlist *  snaps 
)
void dmu_init ( void  )

Initial setup.

Definition at line 1724 of file dmu.c.

uint64_t dmu_object_alloc ( objset_t os,
dmu_object_type_t  ot,
int  blocksize,
dmu_object_type_t  bonus_type,
int  bonus_len,
dmu_tx_t tx 
)

Chooses an unallocated object number and returns a new object that uses it in *objectp.

Allocate an object from this objset. The range of object numbers available is (0, DN_MAX_OBJECT). Object 0 is the meta-dnode.

The transaction must be assigned to a txg. The newly allocated object will be "held" in the transaction (ie. you can modify the newly allocated object in this transaction).

Returns:
0 on success or an errno on failure

Definition at line 31 of file dmu_object.c.

int dmu_object_claim ( objset_t os,
uint64_t  object,
dmu_object_type_t  ot,
int  blocksize,
dmu_object_type_t  bonus_type,
int  bonus_len,
dmu_tx_t tx 
)

Allocates an object for the specified object number.

Return values:
0Success
EEXISTThe object number is already allocated

Definition at line 86 of file dmu_object.c.

int dmu_object_free ( objset_t os,
uint64_t  object,
dmu_tx_t tx 
)

Free an object from this objset.

The object's data will be freed as well (ie. you don't need to call dmu_free(object, 0, -1, tx)).

The object need not be held in the transaction.

Return values:
0Success
EBUSYThere are holds on this object's buffers (via dmu_buf_hold()) or tx holds on the object (via dmu-tx_hold_object()) so it cannot be freed
ENOENTThe object is not allocated

Definition at line 164 of file dmu_object.c.

int dmu_object_info ( objset_t os,
uint64_t  object,
dmu_object_info_t doi 
)

Get information on a DMU object.

Returns:
0 on success or ENOENT if object is not allocated.

If doi is NULL, just indicates whether the object exists.

Definition at line 1636 of file dmu.c.

void dmu_object_info_from_db ( dmu_buf_t db,
dmu_object_info_t doi 
)

Like dmu_object_info, but faster.

Can be used when you have a held dbuf in hand.

Definition at line 1652 of file dmu.c.

void dmu_object_info_from_dnode ( struct dnode dn,
dmu_object_info_t doi 
)

Get information on a DMU object.

Returns:
0 on success or ENOENT if object is not allocated.

If doi is NULL, just indicates whether the object exists.

Definition at line 1607 of file dmu.c.

int dmu_object_next ( objset_t os,
uint64_t *  objectp,
boolean_t  hole,
uint64_t  txg 
)

Find the next allocated or free object.

Parameters:
[in,out]objectpWill be updated to the next object which is allocated
[in]txgignore objects which have not been modified since txt
Invariant:
Can only be called on a objset with no dirty data.
Return values:
0Success
ENOENTThere are no more objects

Definition at line 185 of file dmu_object.c.

int dmu_object_reclaim ( objset_t os,
uint64_t  object,
dmu_object_type_t  ot,
int  blocksize,
dmu_object_type_t  bonustype,
int  bonuslen 
)

Definition at line 106 of file dmu_object.c.

int dmu_object_set_blocksize ( objset_t os,
uint64_t  object,
uint64_t  size,
int  ibs,
dmu_tx_t tx 
)

Set the data blocksize for an object.

The object cannot have any blocks allcated beyond the first. If the first block is allocated already, the new size must be greater than the current block size. If these conditions are not met, ENOTSUP will be returned.

Return values:
0Success
EBUSYThere are holds on the object contents
ENOTSUPas described above

Definition at line 1450 of file dmu.c.

void dmu_object_set_checksum ( objset_t os,
uint64_t  object,
uint8_t  checksum,
dmu_tx_t tx 
)

Set the checksum property on a dnode.

The new checksum algorithm will apply to all newly written blocks; existing blocks will not be affected.

Definition at line 1465 of file dmu.c.

void dmu_object_set_compress ( objset_t os,
uint64_t  object,
uint8_t  compress,
dmu_tx_t tx 
)

Set the compress property on a dnode.

The new compression algorithm will apply to all newly written blocks; existing blocks will not be affected.

Definition at line 1479 of file dmu.c.

void dmu_object_size_from_db ( dmu_buf_t db,
uint32_t *  blksize,
u_longlong_t *  nblk512 
)

Like dmu_object_info_from_db, but faster still.

Faster still when you only care about the size. This is specifically optimized for zfs_getattr().

Definition at line 1662 of file dmu.c.

void dmu_objset_byteswap ( void *  buf,
size_t  size 
)

Definition at line 241 of file dmu_objset.c.

int dmu_objset_clone ( const char *  name,
struct dsl_dataset clone_origin,
uint64_t  flags 
)

Definition at line 760 of file dmu_objset.c.

int dmu_objset_create ( const char *  name,
dmu_objset_type_t  type,
uint64_t  flags,
void(*)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx)  func,
void *  arg 
)

Definition at line 729 of file dmu_objset.c.

int dmu_objset_destroy ( const char *  name,
boolean_t  defer 
)

Definition at line 788 of file dmu_objset.c.

void dmu_objset_disown ( objset_t os,
void *  tag 
)

Definition at line 482 of file dmu_objset.c.

struct dsl_dataset* dmu_objset_ds ( objset_t os) [read]

Definition at line 89 of file dmu_objset.c.

int dmu_objset_evict_dbufs ( objset_t os)

Definition at line 488 of file dmu_objset.c.

void dmu_objset_fast_stat ( objset_t os,
dmu_objset_stats_t stat 
)

Get stats on a dataset.

Definition at line 1498 of file dmu_objset.c.

int dmu_objset_find ( const char *  name,
int   funcconst char *, void *,
void *  arg,
int  flags 
)

Find all objsets under name, and for each, call 'func(child_name, arg)'.

Todo:
Perhaps change all callers to use dmu_objset_find_spa()?

Definition at line 1637 of file dmu_objset.c.

uint64_t dmu_objset_fsid_guid ( objset_t os)

The fsid_guid is a 56-bit ID that can change to avoid collisions.

(Contrast with the ds_guid which is a 64-bit ID that will never change, so there is a small probability that it will collide.)

Definition at line 1492 of file dmu_objset.c.

void* dmu_objset_get_user ( objset_t os)

Definition at line 1789 of file dmu_objset.c.

int dmu_objset_hold ( const char *  name,
void *  tag,
objset_t **  osp 
)

Definition at line 434 of file dmu_objset.c.

uint64_t dmu_objset_id ( objset_t os)

Definition at line 107 of file dmu_objset.c.

int dmu_objset_is_snapshot ( objset_t os)

Definition at line 1521 of file dmu_objset.c.

uint64_t dmu_objset_logbias ( objset_t os)

Definition at line 121 of file dmu_objset.c.

void dmu_objset_name ( objset_t os,
char *  buf 
)

Definition at line 101 of file dmu_objset.c.

int dmu_objset_open_ds ( struct dsl_dataset ds,
objset_t **  osp 
)
int dmu_objset_own ( const char *  name,
dmu_objset_type_t  type,
boolean_t  readonly,
void *  tag,
objset_t **  osp 
)

Definition at line 452 of file dmu_objset.c.

struct dsl_pool* dmu_objset_pool ( objset_t os) [read]

Definition at line 78 of file dmu_objset.c.

void dmu_objset_register_type ( dmu_objset_type_t  ost,
objset_used_cb_t cb 
)

Definition at line 1193 of file dmu_objset.c.

void dmu_objset_rele ( objset_t os,
void *  tag 
)

Definition at line 476 of file dmu_objset.c.

int dmu_objset_rename ( const char *  name,
const char *  newname,
boolean_t  recursive 
)
void dmu_objset_set_user ( objset_t os,
void *  user_ptr 
)

Definition at line 1782 of file dmu_objset.c.

timestruc_t dmu_objset_snap_cmtime ( objset_t os)

Definition at line 592 of file dmu_objset.c.

int dmu_objset_snapshot ( char *  fsname,
char *  snapname,
char *  tag,
struct nvlist *  props,
boolean_t  recursive,
boolean_t  temporary,
int  fd 
)
struct spa* dmu_objset_spa ( objset_t os) [read]

Definition at line 66 of file dmu_objset.c.

void dmu_objset_space ( objset_t os,
uint64_t *  refdbytesp,
uint64_t *  availbytesp,
uint64_t *  usedobjsp,
uint64_t *  availobjsp 
)

Get the space usage statistics for statvfs().

refdbytes is the amount of space "referenced" by this objset. availbytes is the amount of space available to this objset, taking into account quotas & reservations, assuming that no other objsets use the space first. These values correspond to the 'referenced' and 'available' properties, described in the zfs(1m) manpage.

usedobjs and availobjs are the number of objects currently allocated, and available.

Definition at line 1484 of file dmu_objset.c.

void dmu_objset_stats ( objset_t os,
struct nvlist *  nv 
)

Add entries to the nvlist for all the objset's properties.

See zfs_prop_table[] and zfs(1m) for details on the properties.

uint64_t dmu_objset_syncprop ( objset_t os)

Definition at line 115 of file dmu_objset.c.

Definition at line 95 of file dmu_objset.c.

struct zilog* dmu_objset_zil ( objset_t os) [read]

Definition at line 72 of file dmu_objset.c.

int dmu_offset_next ( objset_t os,
uint64_t  object,
boolean_t  hole,
uint64_t *  off 
)

Find the next hole or data block in file starting at *off.

Returns:
Found offset in *off. Return ESRCH for end of file.

Definition at line 1576 of file dmu.c.

void dmu_prealloc ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  size,
dmu_tx_t tx 
)

Definition at line 822 of file dmu.c.

void dmu_prefetch ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  len 
)

Asynchronously try to read in the data.

Definition at line 508 of file dmu.c.

int dmu_read ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  size,
void *  buf,
uint32_t  flags 
)

Definition at line 721 of file dmu.c.

int dmu_read_uio ( objset_t os,
uint64_t  object,
struct uio *  uio,
uint64_t  size 
)
int dmu_recv_begin ( char *  tofs,
char *  tosnap,
char *  topds,
struct drr_begin ,
boolean_t  force,
objset_t origin,
dmu_recv_cookie_t  
)

NB: callers *MUST* call dmu_recv_stream() if dmu_recv_begin() succeeds; otherwise we will leak the holds on the datasets.

Definition at line 805 of file dmu_send.c.

int dmu_recv_end ( dmu_recv_cookie_t drc)

Definition at line 1719 of file dmu_send.c.

int dmu_recv_stream ( dmu_recv_cookie_t drc,
struct file *  fp,
offset_t *  voffp,
int  cleanup_fd,
uint64_t *  action_handlep 
)

NB: callers *must* call dmu_recv_end() if this succeeds.

Definition at line 1392 of file dmu_send.c.

struct arc_buf* dmu_request_arcbuf ( dmu_buf_t handle,
int  size 
) [read]

Allocate a loaned anonymous arc buffer.

Definition at line 1179 of file dmu.c.

void dmu_return_arcbuf ( struct arc_buf buf)

Free a loaned arc buffer.

Definition at line 1192 of file dmu.c.

int dmu_rm_spill ( objset_t ,
uint64_t  ,
dmu_tx_t  
)

Definition at line 221 of file dmu.c.

int dmu_send ( objset_t tosnap,
objset_t fromsnap,
boolean_t  fromorigin,
int  outfd,
struct file *  fp,
offset_t *  off 
)

Definition at line 407 of file dmu_send.c.

int dmu_send_estimate ( objset_t tosnap,
objset_t fromsnap,
boolean_t  fromorigin,
uint64_t *  sizep 
)

Definition at line 541 of file dmu_send.c.

int dmu_set_bonus ( dmu_buf_t ,
int  ,
dmu_tx_t  
)

Definition at line 160 of file dmu.c.

int dmu_set_bonustype ( dmu_buf_t ,
dmu_object_type_t  ,
dmu_tx_t  
)

Definition at line 183 of file dmu.c.

int dmu_snapshot_list_next ( objset_t os,
int  namelen,
char *  name,
uint64_t *  id,
uint64_t *  offp,
boolean_t *  case_conflict 
)

Definition at line 1545 of file dmu_objset.c.

int dmu_snapshot_realname ( objset_t os,
char *  name,
char *  real,
int  maxlen,
boolean_t *  conflict 
)

Definition at line 1530 of file dmu_objset.c.

int dmu_snapshots_destroy_nvl ( struct nvlist *  snaps,
boolean_t  defer,
char *   
)
int dmu_spill_hold_by_bonus ( dmu_buf_t bonus,
void *  tag,
dmu_buf_t **  dbp 
)

Definition at line 338 of file dmu.c.

int dmu_spill_hold_by_dnode ( dnode_t dn,
uint32_t  flags,
void *  tag,
dmu_buf_t **  dbp 
)

This interface will allocate a blank spill dbuf when a spill blk doesn't already exist on the dnode.

if you only want to find an already existing spill db, then dmu_spill_hold_existing() should be used.

Returns:
ENOENT, EIO, or 0.

Definition at line 286 of file dmu.c.

int dmu_spill_hold_existing ( dmu_buf_t bonus,
void *  tag,
dmu_buf_t **  dbp 
)

Definition at line 309 of file dmu.c.

int dmu_sync ( struct zio zio,
uint64_t  txg,
dmu_sync_cb_t done,
zgd_t zgd 
)

Intent log support: sync the block associated with db to disk.

If a parent zio is provided this function initiates a write on the provided buffer as a child of the parent zio. In the absence of a parent zio, the write is completed synchronously. At write completion, blk is filled with the bp of the written block. Note that while the data covered by this function will be on stable storage when the write completes this new data does not become a permanent part of the file until the associated transaction commits.

Invariant:
The data associated with the dbuf being committed to the intent log mux be stable while dmu_sync() is writing it.
Return values:
EEXISTThis txg has already been synced, so there's nothing to to. The caller should not log the write.
ENOENTThe block was dbuf_free_range()'d, so there's nothing to do. The caller should not log the write.
EALREADYThis block is already in the process of being synced. The caller should track its progress (somehow).
EIOCould not do the I/O. The caller should do a txg_wait_synced().
0The I/O has been initiated. The caller should log this blkptr in the done callback. It is possible that the I/O will fail, in which case the error will be reported to the done callback and propagated to pio from zio_done().

Definition at line 1351 of file dmu.c.

void dmu_traverse_objset ( objset_t os,
uint64_t  txg_start,
dmu_traverse_cb_t  cb,
void *  arg 
)
void dmu_tx_abort ( dmu_tx_t tx)

Definition at line 1191 of file dmu_tx.c.

int dmu_tx_assign ( dmu_tx_t tx,
uint64_t  txg_how 
)

Assign tx to a transaction group.

txg_how can be one of:

  1. TXG_WAIT. If the current open txg is full, waits until there's a new one. This should be used when you're not holding locks. If will only fail if we're truly out of space (or over quota).
  2. TXG_NOWAIT. If we can't assign into the current open txg without blocking, returns immediately with ERESTART. This should be used whenever you're holding locks. On an ERESTART error, the caller should drop locks, do a dmu_tx_wait(tx), and try again.
  3. A specific txg. Use this if you need to ensure that multiple transactions all sync in the same txg. Like TXG_NOWAIT, it returns ERESTART if it can't assign you into the requested txg.

Definition at line 1072 of file dmu_tx.c.

void dmu_tx_callback_register ( dmu_tx_t tx,
dmu_tx_callback_func_t func,
void *  data 
)

Registers a commit callback.

When registering a callback, the transaction must be already created, but it cannot be committed or aborted. It can be assigned to a txg or not.

The callback will be called after the transaction has been safely written to stable storage and will also be called if the dmu_tx is aborted. If there is any error which prevents the transaction from being committed to disk, the callback will be called with a value of error != 0.

Parameters:
[in]func
[in,out]dataA pointer to caller private data that is passed on as a callback parameter. The caller is responsible for properly allocating and freeing it.

Definition at line 1231 of file dmu_tx.c.

void dmu_tx_commit ( dmu_tx_t tx)

Definition at line 1139 of file dmu_tx.c.

dmu_tx_t* dmu_tx_create ( objset_t os)

Definition at line 65 of file dmu_tx.c.

uint64_t dmu_tx_get_txg ( dmu_tx_t tx)

Return the txg number for the given assigned transaction.

Definition at line 1224 of file dmu_tx.c.

void dmu_tx_hold_bonus ( dmu_tx_t tx,
uint64_t  object 
)

Definition at line 749 of file dmu_tx.c.

void dmu_tx_hold_free ( dmu_tx_t tx,
uint64_t  object,
uint64_t  off,
uint64_t  len 
)

Definition at line 592 of file dmu_tx.c.

void dmu_tx_hold_sa ( dmu_tx_t tx,
sa_handle_t hdl,
boolean_t  may_grow 
)

Hold SA attribute.

dmu_tx_hold_sa(dmu_tx_t *tx, sa_handle_t *, attribute, add, size)

variable_size is the total size of all variable sized attributes passed to this function. It is not the total size of all variable size attributes that *may* exist on this object.

Definition at line 1362 of file dmu_tx.c.

void dmu_tx_hold_sa_create ( dmu_tx_t tx,
int  attrsize 
)

Interface to hold a bunch of attributes.

Used for creating new files.

For updating/adding a single attribute dmu_tx_hold_sa() should be used.

Parameters:
[in]attrsizeThe total size of all attributes to be added during object creation.

Definition at line 1325 of file dmu_tx.c.

void dmu_tx_hold_spill ( dmu_tx_t tx,
uint64_t  object 
)

Definition at line 1285 of file dmu_tx.c.

void dmu_tx_hold_write ( dmu_tx_t tx,
uint64_t  object,
uint64_t  off,
int  len 
)

Definition at line 406 of file dmu_tx.c.

void dmu_tx_hold_zap ( dmu_tx_t tx,
uint64_t  object,
int  add,
const char *  name 
)

Definition at line 663 of file dmu_tx.c.

void dmu_tx_wait ( dmu_tx_t tx)

Definition at line 1095 of file dmu_tx.c.

void dmu_write ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  size,
const void *  buf,
dmu_tx_t tx 
)

Definition at line 780 of file dmu.c.

int dmu_write_pages ( objset_t os,
uint64_t  object,
uint64_t  offset,
uint64_t  size,
struct page *  pp,
dmu_tx_t tx 
)
void dmu_write_policy ( objset_t os,
struct dnode dn,
int  level,
int  wp,
struct zio_prop zp 
)

Decide how to write a block.

Set the policy for checksum, compression, number of copies, etc.

Definition at line 1499 of file dmu.c.

int dmu_write_uio ( objset_t os,
uint64_t  object,
struct uio *  uio,
uint64_t  size,
dmu_tx_t tx 
)
int dmu_write_uio_dbuf ( dmu_buf_t zdb,
struct uio *  uio,
uint64_t  size,
dmu_tx_t tx 
)
int dmu_xuio_add ( struct xuio *  uio,
struct arc_buf abuf,
offset_t  off,
size_t  n 
)
struct arc_buf* dmu_xuio_arcbuf ( struct xuio *  uio,
int  i 
) [read]
void dmu_xuio_clear ( struct xuio *  uio,
int  i 
)
int dmu_xuio_cnt ( struct xuio *  uio)
void dmu_xuio_fini ( struct xuio *  uio)
int dmu_xuio_init ( struct xuio *  uio,
int  niov 
)
void xuio_stat_wbuf_copied ( )

Definition at line 954 of file dmu.c.

void xuio_stat_wbuf_nocopy ( )

Definition at line 960 of file dmu.c.

void zap_byteswap ( void *  buf,
size_t  size 
)

Definition at line 235 of file zap_micro.c.

void zfs_acl_byteswap ( void *  buf,
size_t  size 
)

Definition at line 153 of file zfs_byteswap.c.

void zfs_oldacl_byteswap ( void *  buf,
size_t  size 
)

Definition at line 137 of file zfs_byteswap.c.

void zfs_znode_byteswap ( void *  buf,
size_t  size 
)

Definition at line 159 of file zfs_byteswap.c.


Variable Documentation

const dmu_object_type_info_t dmu_ot[DMU_OT_NUMTYPES]

Definition at line 48 of file dmu.c.

const dmu_object_byteswap_info_t dmu_ot_byteswap[DMU_BSWAP_NUMFUNCS]

Definition at line 105 of file dmu.c.

uint64_t zfs_crc64_table[256]

Definition at line 643 of file arc.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines