Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h
Show First 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | #define HDR_SET_PSIZE(hdr, x) do { \ | ||||
(hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \ | (hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \ | ||||
_NOTE(CONSTCOND) } while (0) | _NOTE(CONSTCOND) } while (0) | ||||
#define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT) | #define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT) | ||||
#define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT) | #define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT) | ||||
typedef struct arc_buf_hdr arc_buf_hdr_t; | typedef struct arc_buf_hdr arc_buf_hdr_t; | ||||
typedef struct arc_buf arc_buf_t; | typedef struct arc_buf arc_buf_t; | ||||
typedef void arc_done_func_t(zio_t *zio, arc_buf_t *buf, void *priv); | typedef void arc_read_done_func_t(zio_t *zio, const zbookmark_phys_t *zb, | ||||
const blkptr_t *bp, arc_buf_t *buf, void *priv); | |||||
typedef void arc_write_done_func_t(zio_t *zio, arc_buf_t *buf, void *priv); | |||||
/* generic arc_done_func_t's which you can use */ | /* generic arc_done_func_t's which you can use */ | ||||
arc_done_func_t arc_bcopy_func; | arc_read_done_func_t arc_bcopy_func; | ||||
arc_done_func_t arc_getbuf_func; | arc_read_done_func_t arc_getbuf_func; | ||||
typedef enum arc_flags | typedef enum arc_flags | ||||
{ | { | ||||
/* | /* | ||||
* Public flags that can be passed into the ARC by external consumers. | * Public flags that can be passed into the ARC by external consumers. | ||||
*/ | */ | ||||
ARC_FLAG_WAIT = 1 << 0, /* perform sync I/O */ | ARC_FLAG_WAIT = 1 << 0, /* perform sync I/O */ | ||||
ARC_FLAG_NOWAIT = 1 << 1, /* perform async I/O */ | ARC_FLAG_NOWAIT = 1 << 1, /* perform async I/O */ | ||||
ARC_FLAG_PREFETCH = 1 << 2, /* I/O is a prefetch */ | ARC_FLAG_PREFETCH = 1 << 2, /* I/O is a prefetch */ | ||||
ARC_FLAG_CACHED = 1 << 3, /* I/O was in cache */ | ARC_FLAG_CACHED = 1 << 3, /* I/O was in cache */ | ||||
ARC_FLAG_L2CACHE = 1 << 4, /* cache in L2ARC */ | ARC_FLAG_L2CACHE = 1 << 4, /* cache in L2ARC */ | ||||
ARC_FLAG_PREDICTIVE_PREFETCH = 1 << 5, /* I/O from zfetch */ | ARC_FLAG_PREDICTIVE_PREFETCH = 1 << 5, /* I/O from zfetch */ | ||||
ARC_FLAG_PRESCIENT_PREFETCH = 1 << 6, /* long min lifespan */ | |||||
/* | /* | ||||
* Private ARC flags. These flags are private ARC only flags that | * Private ARC flags. These flags are private ARC only flags that | ||||
* will show up in b_flags in the arc_hdr_buf_t. These flags should | * will show up in b_flags in the arc_hdr_buf_t. These flags should | ||||
* only be set by ARC code. | * only be set by ARC code. | ||||
*/ | */ | ||||
ARC_FLAG_IN_HASH_TABLE = 1 << 6, /* buffer is hashed */ | ARC_FLAG_IN_HASH_TABLE = 1 << 7, /* buffer is hashed */ | ||||
ARC_FLAG_IO_IN_PROGRESS = 1 << 7, /* I/O in progress */ | ARC_FLAG_IO_IN_PROGRESS = 1 << 8, /* I/O in progress */ | ||||
ARC_FLAG_IO_ERROR = 1 << 8, /* I/O failed for buf */ | ARC_FLAG_IO_ERROR = 1 << 9, /* I/O failed for buf */ | ||||
ARC_FLAG_INDIRECT = 1 << 9, /* indirect block */ | ARC_FLAG_INDIRECT = 1 << 10, /* indirect block */ | ||||
/* Indicates that block was read with ASYNC priority. */ | /* Indicates that block was read with ASYNC priority. */ | ||||
ARC_FLAG_PRIO_ASYNC_READ = 1 << 10, | ARC_FLAG_PRIO_ASYNC_READ = 1 << 11, | ||||
ARC_FLAG_L2_WRITING = 1 << 11, /* write in progress */ | ARC_FLAG_L2_WRITING = 1 << 12, /* write in progress */ | ||||
ARC_FLAG_L2_EVICTED = 1 << 12, /* evicted during I/O */ | ARC_FLAG_L2_EVICTED = 1 << 13, /* evicted during I/O */ | ||||
ARC_FLAG_L2_WRITE_HEAD = 1 << 13, /* head of write list */ | ARC_FLAG_L2_WRITE_HEAD = 1 << 14, /* head of write list */ | ||||
/* indicates that the buffer contains metadata (otherwise, data) */ | /* indicates that the buffer contains metadata (otherwise, data) */ | ||||
ARC_FLAG_BUFC_METADATA = 1 << 14, | ARC_FLAG_BUFC_METADATA = 1 << 15, | ||||
/* Flags specifying whether optional hdr struct fields are defined */ | /* Flags specifying whether optional hdr struct fields are defined */ | ||||
ARC_FLAG_HAS_L1HDR = 1 << 15, | ARC_FLAG_HAS_L1HDR = 1 << 16, | ||||
ARC_FLAG_HAS_L2HDR = 1 << 16, | ARC_FLAG_HAS_L2HDR = 1 << 17, | ||||
/* | /* | ||||
* Indicates the arc_buf_hdr_t's b_pdata matches the on-disk data. | * Indicates the arc_buf_hdr_t's b_pdata matches the on-disk data. | ||||
* This allows the l2arc to use the blkptr's checksum to verify | * This allows the l2arc to use the blkptr's checksum to verify | ||||
* the data without having to store the checksum in the hdr. | * the data without having to store the checksum in the hdr. | ||||
*/ | */ | ||||
ARC_FLAG_COMPRESSED_ARC = 1 << 17, | ARC_FLAG_COMPRESSED_ARC = 1 << 18, | ||||
ARC_FLAG_SHARED_DATA = 1 << 18, | ARC_FLAG_SHARED_DATA = 1 << 19, | ||||
/* | /* | ||||
* The arc buffer's compression mode is stored in the top 7 bits of the | * The arc buffer's compression mode is stored in the top 7 bits of the | ||||
* flags field, so these dummy flags are included so that MDB can | * flags field, so these dummy flags are included so that MDB can | ||||
* interpret the enum properly. | * interpret the enum properly. | ||||
*/ | */ | ||||
ARC_FLAG_COMPRESS_0 = 1 << 24, | ARC_FLAG_COMPRESS_0 = 1 << 24, | ||||
ARC_FLAG_COMPRESS_1 = 1 << 25, | ARC_FLAG_COMPRESS_1 = 1 << 25, | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
int arc_released(arc_buf_t *buf); | int arc_released(arc_buf_t *buf); | ||||
void arc_buf_freeze(arc_buf_t *buf); | void arc_buf_freeze(arc_buf_t *buf); | ||||
void arc_buf_thaw(arc_buf_t *buf); | void arc_buf_thaw(arc_buf_t *buf); | ||||
#ifdef ZFS_DEBUG | #ifdef ZFS_DEBUG | ||||
int arc_referenced(arc_buf_t *buf); | int arc_referenced(arc_buf_t *buf); | ||||
#endif | #endif | ||||
int arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, | int arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, | ||||
arc_done_func_t *done, void *priv, zio_priority_t priority, int flags, | arc_read_done_func_t *done, void *priv, zio_priority_t priority, | ||||
arc_flags_t *arc_flags, const zbookmark_phys_t *zb); | int flags, arc_flags_t *arc_flags, const zbookmark_phys_t *zb); | ||||
zio_t *arc_write(zio_t *pio, spa_t *spa, uint64_t txg, | zio_t *arc_write(zio_t *pio, spa_t *spa, uint64_t txg, | ||||
blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc, const zio_prop_t *zp, | blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc, const zio_prop_t *zp, | ||||
arc_done_func_t *ready, arc_done_func_t *child_ready, | arc_write_done_func_t *ready, arc_write_done_func_t *child_ready, | ||||
arc_done_func_t *physdone, arc_done_func_t *done, | arc_write_done_func_t *physdone, arc_write_done_func_t *done, | ||||
void *priv, zio_priority_t priority, int zio_flags, | void *priv, zio_priority_t priority, int zio_flags, | ||||
const zbookmark_phys_t *zb); | const zbookmark_phys_t *zb); | ||||
void arc_freed(spa_t *spa, const blkptr_t *bp); | void arc_freed(spa_t *spa, const blkptr_t *bp); | ||||
void arc_flush(spa_t *spa, boolean_t retry); | void arc_flush(spa_t *spa, boolean_t retry); | ||||
void arc_tempreserve_clear(uint64_t reserve); | void arc_tempreserve_clear(uint64_t reserve); | ||||
int arc_tempreserve_space(uint64_t reserve, uint64_t txg); | int arc_tempreserve_space(uint64_t reserve, uint64_t txg); | ||||
Show All 28 Lines |