FreeBSD ZFS
The Zettabyte File System
|
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>
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_t * | dmu_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_buf * | dmu_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_buf * | dmu_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 spa * | dmu_objset_spa (objset_t *os) |
struct zilog * | dmu_objset_zil (objset_t *os) |
struct dsl_pool * | dmu_objset_pool (objset_t *os) |
struct dsl_dataset * | dmu_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] |
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.
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 DMU_BONUS_BLKID (-1ULL) |
#define DMU_MAX_ACCESS (10<<20) |
#define DMU_OT | ( | byteswap, | |
metadata | |||
) |
(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).
#define DMU_OT_BYTESWAP | ( | ot | ) |
(((ot) & DMU_OT_NEWTYPE) ? \ ((ot) & DMU_OT_BYTESWAP_MASK) : \ dmu_ot[(ot)].ot_byteswap)
#define DMU_OT_IS_METADATA | ( | ot | ) |
(((ot) & DMU_OT_NEWTYPE) ? \ ((ot) & DMU_OT_METADATA) : \ dmu_ot[(ot)].ot_metadata)
#define DMU_OT_IS_VALID | ( | ot | ) |
(((ot) & DMU_OT_NEWTYPE) ? \ ((ot) & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS : \ (ot) < DMU_OT_NUMTYPES)
#define DMU_SPILL_BLKID (-2ULL) |
#define ZFS_CRC64_POLY 0xC96C5795D7870F42ULL |
typedef void arc_byteswap_func_t(void *buf, size_t size) |
typedef void dmu_buf_evict_func_t(struct dmu_buf *db, void *user_ptr) |
typedef struct dmu_object_byteswap_info dmu_object_byteswap_info_t |
typedef enum dmu_object_byteswap dmu_object_byteswap_t |
typedef struct dmu_object_info dmu_object_info_t |
All sizes are in bytes unless otherwise indicated.
typedef struct dmu_object_type_info dmu_object_type_info_t |
typedef enum dmu_object_type dmu_object_type_t |
typedef struct dmu_objset_stats dmu_objset_stats_t |
typedef enum dmu_objset_type dmu_objset_type_t |
typedef struct dmu_recv_cookie dmu_recv_cookie_t |
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) |
typedef void(* dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp, uint64_t object, uint64_t offset, int len) |
typedef void dmu_tx_callback_func_t(void *dcb_data, int error) |
typedef int objset_used_cb_t(dmu_object_type_t bonustype, void *bonus, uint64_t *userp, uint64_t *groupp) |
enum dmu_object_byteswap |
enum dmu_object_type |
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 |
enum dmu_objset_type |
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().
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().
void dmu_buf_add_ref | ( | dmu_buf_t * | db, |
void * | tag | ||
) |
boolean_t dmu_buf_freeable | ( | dmu_buf_t * | ) |
void* dmu_buf_get_user | ( | dmu_buf_t * | db | ) |
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.
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 | ||
) |
void* dmu_buf_set_user | ( | dmu_buf_t * | db, |
void * | user_ptr, | ||
void * | user_data_ptr_ptr, | ||
dmu_buf_evict_func_t * | evict_func | ||
) |
user_ptr | For use by the user and can be obtained via dmu_buf_get_user() |
user_data_ptr_ptr | Should 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_func | If 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. |
dmu_evict_user() will call the evict_func for all buffers in a objset with a given pageout 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 | ||
) |
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 | ||
) |
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)).
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 | ||
) |
int dmu_free_long_range | ( | objset_t * | os, |
uint64_t | object, | ||
uint64_t | offset, | ||
uint64_t | size | ||
) |
dmu_object_type_t dmu_get_bonustype | ( | dmu_buf_t * | ) |
int dmu_get_recursive_snaps_nvl | ( | const char * | fsname, |
const char * | snapname, | ||
struct nvlist * | snaps | ||
) |
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).
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.
0 | Success |
EEXIST | The object number is already allocated |
Definition at line 86 of file dmu_object.c.
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.
0 | Success |
EBUSY | There 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 |
ENOENT | The 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 | ||
) |
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.
void dmu_object_info_from_dnode | ( | struct dnode * | dn, |
dmu_object_info_t * | doi | ||
) |
int dmu_object_next | ( | objset_t * | os, |
uint64_t * | objectp, | ||
boolean_t | hole, | ||
uint64_t | txg | ||
) |
Find the next allocated or free object.
[in,out] | objectp | Will be updated to the next object which is allocated |
[in] | txg | ignore objects which have not been modified since txt |
0 | Success |
ENOENT | There 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.
0 | Success |
EBUSY | There are holds on the object contents |
ENOTSUP | as described above |
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().
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)'.
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.
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 | ||
) |
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.
dmu_objset_type_t dmu_objset_type | ( | objset_t * | os | ) |
Definition at line 95 of file dmu_objset.c.
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 | ||
) |
void dmu_prefetch | ( | objset_t * | os, |
uint64_t | object, | ||
uint64_t | offset, | ||
uint64_t | len | ||
) |
int dmu_read | ( | objset_t * | os, |
uint64_t | object, | ||
uint64_t | offset, | ||
uint64_t | size, | ||
void * | buf, | ||
uint32_t | flags | ||
) |
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.
void dmu_return_arcbuf | ( | struct arc_buf * | buf | ) |
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_bonustype | ( | dmu_buf_t * | , |
dmu_object_type_t | , | ||
dmu_tx_t * | |||
) |
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 * | |||
) |
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.
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.
EEXIST | This txg has already been synced, so there's nothing to to. The caller should not log the write. |
ENOENT | The block was dbuf_free_range()'d, so there's nothing to do. The caller should not log the write. |
EALREADY | This block is already in the process of being synced. The caller should track its progress (somehow). |
EIO | Could not do the I/O. The caller should do a txg_wait_synced(). |
0 | The 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(). |
void dmu_traverse_objset | ( | objset_t * | os, |
uint64_t | txg_start, | ||
dmu_traverse_cb_t | cb, | ||
void * | arg | ||
) |
int dmu_tx_assign | ( | dmu_tx_t * | tx, |
uint64_t | txg_how | ||
) |
Assign tx to a transaction group.
txg_how can be one of:
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.
[in] | func | |
[in,out] | data | A pointer to caller private data that is passed on as a callback parameter. The caller is responsible for properly allocating and freeing it. |
uint64_t dmu_tx_get_txg | ( | dmu_tx_t * | tx | ) |
void dmu_tx_hold_free | ( | dmu_tx_t * | tx, |
uint64_t | object, | ||
uint64_t | off, | ||
uint64_t | len | ||
) |
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.
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.
[in] | attrsize | The total size of all attributes to be added during object creation. |
void dmu_tx_hold_write | ( | dmu_tx_t * | tx, |
uint64_t | object, | ||
uint64_t | off, | ||
int | len | ||
) |
void dmu_tx_hold_zap | ( | dmu_tx_t * | tx, |
uint64_t | object, | ||
int | add, | ||
const char * | name | ||
) |
int dmu_write_pages | ( | objset_t * | os, |
uint64_t | object, | ||
uint64_t | offset, | ||
uint64_t | size, | ||
struct page * | pp, | ||
dmu_tx_t * | tx | ||
) |
int dmu_write_uio | ( | objset_t * | os, |
uint64_t | object, | ||
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 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.
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] |