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

sys/zio.h File Reference

#include <sys/zfs_context.h>
#include <sys/spa.h>
#include <sys/txg.h>
#include <sys/avl.h>
#include <sys/kstat.h>
#include <sys/fs/zfs.h>
#include <sys/zio_impl.h>
#include <sys/txg.h>
#include <sys/zio_impl.h>
Include dependency graph for zio.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  zio_eck
struct  zio_gbh
struct  zbookmark
 A bookmark is a four-tuple <objset, object, level, blkid> that uniquely identifies any block in the pool. More...
struct  zio_prop
struct  zio_cksum_report
struct  zio_vsd_ops
struct  zio_gang_node
struct  zio_transform
struct  zio_link
struct  zio_trim_stats
struct  zio

Defines

#define ZEC_MAGIC   0x210da7ab10c7a11ULL
 Embedded checksum.
#define SPA_GANGBLOCKSIZE   SPA_MINBLOCKSIZE
#define SPA_GBH_NBLKPTRS
#define SPA_GBH_FILLER
#define ZIO_CHECKSUM_ON_VALUE   ZIO_CHECKSUM_FLETCHER_4
#define ZIO_CHECKSUM_DEFAULT   ZIO_CHECKSUM_ON
#define ZIO_CHECKSUM_MASK   0xffULL
#define ZIO_CHECKSUM_VERIFY   (1 << 8)
#define ZIO_DEDUPCHECKSUM   ZIO_CHECKSUM_SHA256
#define ZIO_DEDUPDITTO_MIN   100
#define ZIO_COMPRESS_ON_VALUE   ZIO_COMPRESS_LZJB
#define ZIO_COMPRESS_DEFAULT   ZIO_COMPRESS_OFF
#define BOOTFS_COMPRESS_VALID(compress)
#define ZIO_FAILURE_MODE_WAIT   0
#define ZIO_FAILURE_MODE_CONTINUE   1
#define ZIO_FAILURE_MODE_PANIC   2
#define ZIO_PRIORITY_NOW   (zio_priority_table[0])
#define ZIO_PRIORITY_SYNC_READ   (zio_priority_table[1])
#define ZIO_PRIORITY_SYNC_WRITE   (zio_priority_table[2])
#define ZIO_PRIORITY_LOG_WRITE   (zio_priority_table[3])
#define ZIO_PRIORITY_CACHE_FILL   (zio_priority_table[4])
#define ZIO_PRIORITY_AGG   (zio_priority_table[5])
#define ZIO_PRIORITY_FREE   (zio_priority_table[6])
#define ZIO_PRIORITY_ASYNC_WRITE   (zio_priority_table[7])
#define ZIO_PRIORITY_ASYNC_READ   (zio_priority_table[8])
#define ZIO_PRIORITY_RESILVER   (zio_priority_table[9])
#define ZIO_PRIORITY_SCRUB   (zio_priority_table[10])
#define ZIO_PRIORITY_DDT_PREFETCH   (zio_priority_table[11])
#define ZIO_PRIORITY_TRIM   (zio_priority_table[12])
#define ZIO_PRIORITY_TABLE_SIZE   13
#define ZIO_PIPELINE_CONTINUE   0x100
#define ZIO_PIPELINE_STOP   0x101
#define ZIO_FLAG_AGG_INHERIT   (ZIO_FLAG_CANFAIL - 1)
#define ZIO_FLAG_DDT_INHERIT   (ZIO_FLAG_IO_RETRY - 1)
#define ZIO_FLAG_GANG_INHERIT   (ZIO_FLAG_IO_RETRY - 1)
#define ZIO_FLAG_VDEV_INHERIT   (ZIO_FLAG_DONT_QUEUE - 1)
#define ZIO_FLAG_MUSTSUCCEED   0
#define ZIO_DDT_CHILD_FLAGS(zio)
#define ZIO_GANG_CHILD_FLAGS(zio)
#define ZIO_VDEV_CHILD_FLAGS(zio)
#define ECKSUM   122
#define EFRAGS   123
#define SET_BOOKMARK(zb, objset, object, level, blkid)
#define ZB_DESTROYED_OBJSET   (-1ULL)
#define ZB_ROOT_OBJECT   (0ULL)
#define ZB_ROOT_LEVEL   (-1LL)
#define ZB_ROOT_BLKID   (0ULL)
#define ZB_ZIL_OBJECT   (0ULL)
#define ZB_ZIL_LEVEL   (-2LL)
#define ZB_IS_ZERO(zb)
#define ZB_IS_ROOT(zb)
#define ZIO_REEXECUTE_NOW   0x01
 The io_reexecute flags are distinct from io_flags because the child must be able to propagate them to the parent.
#define ZIO_REEXECUTE_SUSPEND   0x02
#define ZIO_TRIM_STAT_INCR(stat, val)   atomic_add_64(&zio_trim_stats.stat.value.ui64, (val));
#define ZIO_TRIM_STAT_BUMP(stat)   ZIO_TRIM_STAT_INCR(stat, 1);

Typedefs

typedef struct zio_eck zio_eck_t
typedef struct zio_gbh zio_gbh_phys_t
typedef void zio_done_func_t (zio_t *zio)
typedef struct zbookmark zbookmark_t
 A bookmark is a four-tuple <objset, object, level, blkid> that uniquely identifies any block in the pool.
typedef struct zio_prop zio_prop_t
typedef struct zio_cksum_report zio_cksum_report_t
typedef void zio_cksum_finish_f (zio_cksum_report_t *rep, const void *good_data)
typedef void zio_cksum_free_f (void *cbdata, size_t size)
typedef void zio_vsd_cksum_report_f (zio_t *zio, zio_cksum_report_t *zcr, void *arg)
typedef struct zio_vsd_ops zio_vsd_ops_t
typedef struct zio_gang_node zio_gang_node_t
typedef zio_tzio_gang_issue_func_t (zio_t *zio, blkptr_t *bp, zio_gang_node_t *gn, void *data)
typedef void zio_transform_func_t (zio_t *zio, void *data, uint64_t size)
typedef struct zio_transform zio_transform_t
typedef int zio_pipe_stage_t (zio_t *zio)
typedef struct zio_link zio_link_t
typedef struct zio_trim_stats zio_trim_stats_t

Enumerations

enum  zio_checksum {
  ZIO_CHECKSUM_INHERIT = 0, ZIO_CHECKSUM_ON, ZIO_CHECKSUM_OFF, ZIO_CHECKSUM_LABEL,
  ZIO_CHECKSUM_GANG_HEADER, ZIO_CHECKSUM_ZILOG, ZIO_CHECKSUM_FLETCHER_2, ZIO_CHECKSUM_FLETCHER_4,
  ZIO_CHECKSUM_SHA256, ZIO_CHECKSUM_ZILOG2, ZIO_CHECKSUM_FUNCTIONS
}
enum  zio_compress {
  ZIO_COMPRESS_INHERIT = 0, ZIO_COMPRESS_ON, ZIO_COMPRESS_OFF, ZIO_COMPRESS_LZJB,
  ZIO_COMPRESS_EMPTY, ZIO_COMPRESS_GZIP_1, ZIO_COMPRESS_GZIP_2, ZIO_COMPRESS_GZIP_3,
  ZIO_COMPRESS_GZIP_4, ZIO_COMPRESS_GZIP_5, ZIO_COMPRESS_GZIP_6, ZIO_COMPRESS_GZIP_7,
  ZIO_COMPRESS_GZIP_8, ZIO_COMPRESS_GZIP_9, ZIO_COMPRESS_ZLE, ZIO_COMPRESS_FUNCTIONS
}
enum  zio_flag {
  ZIO_FLAG_DONT_AGGREGATE = 1 << 0, ZIO_FLAG_IO_REPAIR = 1 << 1, ZIO_FLAG_SELF_HEAL = 1 << 2, ZIO_FLAG_RESILVER = 1 << 3,
  ZIO_FLAG_SCRUB = 1 << 4, ZIO_FLAG_SCAN_THREAD = 1 << 5
}
enum  zio_child {
  ZIO_CHILD_VDEV = 0, ZIO_CHILD_GANG, ZIO_CHILD_DDT, ZIO_CHILD_LOGICAL,
  ZIO_CHILD_TYPES
}
enum  zio_wait_type { ZIO_WAIT_READY = 0, ZIO_WAIT_DONE, ZIO_WAIT_TYPES }

Functions

zio_tzio_null (zio_t *pio, spa_t *spa, vdev_t *vd, zio_done_func_t *done, void *priv, enum zio_flag flags)
zio_tzio_root (spa_t *spa, zio_done_func_t *done, void *priv, enum zio_flag flags)
zio_tzio_read (zio_t *pio, spa_t *spa, const blkptr_t *bp, void *data, uint64_t size, zio_done_func_t *done, void *priv, int priority, enum zio_flag flags, const zbookmark_t *zb)
zio_tzio_write (zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, void *data, uint64_t size, const zio_prop_t *zp, zio_done_func_t *ready, zio_done_func_t *done, void *priv, int priority, enum zio_flag flags, const zbookmark_t *zb)
zio_tzio_rewrite (zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, void *data, uint64_t size, zio_done_func_t *done, void *priv, int priority, enum zio_flag flags, zbookmark_t *zb)
void zio_write_override (zio_t *zio, blkptr_t *bp, int copies)
void zio_free (spa_t *spa, uint64_t txg, const blkptr_t *bp)
zio_tzio_claim (zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, zio_done_func_t *done, void *priv, enum zio_flag flags)
zio_tzio_ioctl (zio_t *pio, spa_t *spa, vdev_t *vd, int cmd, uint64_t offset, uint64_t size, zio_done_func_t *done, void *priv, int priority, enum zio_flag flags)
zio_tzio_read_phys (zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, void *data, int checksum, zio_done_func_t *done, void *priv, int priority, enum zio_flag flags, boolean_t labels)
zio_tzio_write_phys (zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, void *data, int checksum, zio_done_func_t *done, void *priv, int priority, enum zio_flag flags, boolean_t labels)
zio_tzio_free_sync (zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, uint64_t size, enum zio_flag flags)
int zio_alloc_zil (spa_t *spa, uint64_t txg, blkptr_t *new_bp, blkptr_t *old_bp, uint64_t size, boolean_t use_slog)
 Try to allocate an intent log block.
void zio_free_zil (spa_t *spa, uint64_t txg, blkptr_t *bp)
 Free an intent log block.
void zio_flush (zio_t *zio, vdev_t *vd)
zio_tzio_trim (zio_t *zio, spa_t *spa, vdev_t *vd, uint64_t offset, uint64_t size)
void zio_shrink (zio_t *zio, uint64_t size)
int zio_wait (zio_t *zio)
 Initiate I/O, either sync or async.
void zio_nowait (zio_t *zio)
void zio_execute (zio_t *zio)
 Execute the I/O pipeline until one of the following occurs:

  1. the I/O completes
  2. the pipeline stalls waiting for dependent child I/Os
  3. the I/O issues, so we're waiting for an I/O completion interrupt
  4. the I/O is delegated by vdev-level caching or aggregation
  5. the I/O is deferred due to vdev-level queueing
  6. the I/O is handed off to another thread.

void zio_interrupt (zio_t *zio)
zio_tzio_walk_parents (zio_t *cio)
zio_tzio_walk_children (zio_t *pio)
zio_tzio_unique_parent (zio_t *cio)
void zio_add_child (zio_t *pio, zio_t *cio)
void * zio_buf_alloc (size_t size)
 Use zio_buf_alloc to allocate ZFS metadata.
void zio_buf_free (void *buf, size_t size)
void * zio_data_buf_alloc (size_t size)
 Use zio_data_buf_alloc to allocate data.
void zio_data_buf_free (void *buf, size_t size)
void zio_resubmit_stage_async (void *)
zio_tzio_vdev_child_io (zio_t *zio, blkptr_t *bp, vdev_t *vd, uint64_t offset, void *data, uint64_t size, int type, int priority, enum zio_flag flags, zio_done_func_t *done, void *priv)
 Create a child I/O to do some work for us.
zio_tzio_vdev_delegated_io (vdev_t *vd, uint64_t offset, void *data, uint64_t size, int type, int priority, enum zio_flag flags, zio_done_func_t *done, void *priv)
void zio_vdev_io_bypass (zio_t *zio)
void zio_vdev_io_reissue (zio_t *zio)
void zio_vdev_io_redone (zio_t *zio)
void zio_checksum_verified (zio_t *zio)
 Called by RAID-Z to ensure we don't compute the checksum twice.
int zio_worst_error (int e1, int e2)
 Compare the severity of errors.
enum zio_checksum zio_checksum_select (enum zio_checksum child, enum zio_checksum parent)
enum zio_checksum zio_checksum_dedup_select (spa_t *spa, enum zio_checksum child, enum zio_checksum parent)
enum zio_compress zio_compress_select (enum zio_compress child, enum zio_compress parent)
void zio_suspend (spa_t *spa, zio_t *zio)
int zio_resume (spa_t *spa)
void zio_resume_wait (spa_t *spa)
void zio_init (void)
void zio_fini (void)
int zio_inject_fault (char *name, int flags, int *id, struct zinject_record *record)
 Create a new handler for the given record.
int zio_inject_list_next (int *id, char *name, size_t buflen, struct zinject_record *record)
 Returns the next record with an ID greater than that supplied to the function.
int zio_clear_fault (int id)
 Clear the fault handler with the given identifier, or return ENOENT if none exists.
void zio_handle_panic_injection (spa_t *spa, char *tag, uint64_t type)
 Panic the system when a config change happens in the function specified by tag.
int zio_handle_fault_injection (zio_t *zio, int error)
 Determine if the I/O in question should return failure.
int zio_handle_device_injection (vdev_t *vd, zio_t *zio, int error)
int zio_handle_label_injection (zio_t *zio, int error)
 Determine if the zio is part of a label update and has an injection handler associated with that portion of the label.
void zio_handle_ignored_writes (zio_t *zio)
 Simulate hardware that ignores cache flushes.
void zfs_ereport_start_checksum (spa_t *spa, vdev_t *vd, struct zio *zio, uint64_t offset, uint64_t length, void *arg, struct zio_bad_cksum *info)
void zfs_ereport_finish_checksum (zio_cksum_report_t *report, const void *good_data, const void *bad_data, boolean_t drop_if_identical)
void zfs_ereport_send_interim_checksum (zio_cksum_report_t *report)
void zfs_ereport_free_checksum (zio_cksum_report_t *report)
void zfs_ereport_post_checksum (spa_t *spa, vdev_t *vd, struct zio *zio, uint64_t offset, uint64_t length, const void *good_data, const void *bad_data, struct zio_bad_cksum *info)
 If we have the good data in hand, this function can be used.
void spa_handle_ignored_writes (spa_t *spa)
 Called from spa_sync(), but primarily an injection handler.
boolean_t zbookmark_is_before (const struct dnode_phys *dnp, const zbookmark_t *zb1, const zbookmark_t *zb2)

Variables

uint8_t zio_priority_table [ZIO_PRIORITY_TABLE_SIZE]
 I/O priority table.
char * zio_type_name [ZIO_TYPES]
 I/O type descriptions.
zio_vsd_cksum_report_f zio_vsd_default_cksum_report
zio_trim_stats_t zio_trim_stats
 See zio.h for more information about these fields.
uint32_t zio_injection_enabled

Define Documentation

#define BOOTFS_COMPRESS_VALID (   compress)
Value:
((compress) == ZIO_COMPRESS_LZJB ||             \
        ((compress) == ZIO_COMPRESS_ON &&               \
        ZIO_COMPRESS_ON_VALUE == ZIO_COMPRESS_LZJB) ||  \
        (compress) == ZIO_COMPRESS_OFF)

Definition at line 115 of file zio.h.

#define ECKSUM   122

Definition at line 227 of file zio.h.

#define EFRAGS   123

Definition at line 228 of file zio.h.

#define SET_BOOKMARK (   zb,
  objset,
  object,
  level,
  blkid 
)
Value:
{                                                       \
        (zb)->zb_objset = objset;                       \
        (zb)->zb_object = object;                       \
        (zb)->zb_level = level;                         \
        (zb)->zb_blkid = blkid;                         \
}

Definition at line 259 of file zio.h.

#define SPA_GANGBLOCKSIZE   SPA_MINBLOCKSIZE

Definition at line 56 of file zio.h.

#define SPA_GBH_FILLER
Value:
((SPA_GANGBLOCKSIZE - \
        sizeof (zio_eck_t) - \
        (SPA_GBH_NBLKPTRS * sizeof (blkptr_t))) /\
        sizeof (uint64_t))

Definition at line 59 of file zio.h.

#define SPA_GBH_NBLKPTRS
Value:
((SPA_GANGBLOCKSIZE - \
        sizeof (zio_eck_t)) / sizeof (blkptr_t))

Definition at line 57 of file zio.h.

#define ZB_DESTROYED_OBJSET   (-1ULL)

Definition at line 267 of file zio.h.

#define ZB_IS_ROOT (   zb)
Value:
((zb)->zb_object == ZB_ROOT_OBJECT &&   \
        (zb)->zb_level == ZB_ROOT_LEVEL &&      \
        (zb)->zb_blkid == ZB_ROOT_BLKID)

Definition at line 279 of file zio.h.

#define ZB_IS_ZERO (   zb)
Value:
((zb)->zb_objset == 0 && (zb)->zb_object == 0 &&        \
        (zb)->zb_level == 0 && (zb)->zb_blkid == 0)

Definition at line 276 of file zio.h.

#define ZB_ROOT_BLKID   (0ULL)

Definition at line 271 of file zio.h.

#define ZB_ROOT_LEVEL   (-1LL)

Definition at line 270 of file zio.h.

#define ZB_ROOT_OBJECT   (0ULL)

Definition at line 269 of file zio.h.

#define ZB_ZIL_LEVEL   (-2LL)

Definition at line 274 of file zio.h.

#define ZB_ZIL_OBJECT   (0ULL)

Definition at line 273 of file zio.h.

#define ZEC_MAGIC   0x210da7ab10c7a11ULL

Embedded checksum.

Definition at line 45 of file zio.h.

#define ZIO_CHECKSUM_DEFAULT   ZIO_CHECKSUM_ON

Definition at line 85 of file zio.h.

#define ZIO_CHECKSUM_MASK   0xffULL

Definition at line 87 of file zio.h.

#define ZIO_CHECKSUM_ON_VALUE   ZIO_CHECKSUM_FLETCHER_4

Definition at line 84 of file zio.h.

#define ZIO_CHECKSUM_VERIFY   (1 << 8)

Definition at line 88 of file zio.h.

#define ZIO_COMPRESS_DEFAULT   ZIO_COMPRESS_OFF

Definition at line 113 of file zio.h.

#define ZIO_COMPRESS_ON_VALUE   ZIO_COMPRESS_LZJB

Definition at line 112 of file zio.h.

#define ZIO_DDT_CHILD_FLAGS (   zio)
Value:
(((zio)->io_flags & ZIO_FLAG_DDT_INHERIT) |             \
        ZIO_FLAG_DDT_CHILD | ZIO_FLAG_CANFAIL)

Definition at line 196 of file zio.h.

#define ZIO_DEDUPCHECKSUM   ZIO_CHECKSUM_SHA256

Definition at line 90 of file zio.h.

#define ZIO_DEDUPDITTO_MIN   100

Definition at line 91 of file zio.h.

#define ZIO_FAILURE_MODE_CONTINUE   1

Definition at line 122 of file zio.h.

#define ZIO_FAILURE_MODE_PANIC   2

Definition at line 123 of file zio.h.

#define ZIO_FAILURE_MODE_WAIT   0

Definition at line 121 of file zio.h.

#define ZIO_FLAG_AGG_INHERIT   (ZIO_FLAG_CANFAIL - 1)

Definition at line 155 of file zio.h.

#define ZIO_FLAG_DDT_INHERIT   (ZIO_FLAG_IO_RETRY - 1)

Definition at line 168 of file zio.h.

#define ZIO_FLAG_GANG_INHERIT   (ZIO_FLAG_IO_RETRY - 1)

Definition at line 169 of file zio.h.

#define ZIO_FLAG_MUSTSUCCEED   0

Definition at line 194 of file zio.h.

#define ZIO_FLAG_VDEV_INHERIT   (ZIO_FLAG_DONT_QUEUE - 1)

Definition at line 179 of file zio.h.

#define ZIO_GANG_CHILD_FLAGS (   zio)
Value:
(((zio)->io_flags & ZIO_FLAG_GANG_INHERIT) |            \
        ZIO_FLAG_GANG_CHILD | ZIO_FLAG_CANFAIL)

Definition at line 200 of file zio.h.

#define ZIO_PIPELINE_CONTINUE   0x100

Definition at line 140 of file zio.h.

#define ZIO_PIPELINE_STOP   0x101

Definition at line 141 of file zio.h.

#define ZIO_PRIORITY_AGG   (zio_priority_table[5])

Definition at line 130 of file zio.h.

#define ZIO_PRIORITY_ASYNC_READ   (zio_priority_table[8])

Definition at line 133 of file zio.h.

#define ZIO_PRIORITY_ASYNC_WRITE   (zio_priority_table[7])

Definition at line 132 of file zio.h.

#define ZIO_PRIORITY_CACHE_FILL   (zio_priority_table[4])

Definition at line 129 of file zio.h.

#define ZIO_PRIORITY_DDT_PREFETCH   (zio_priority_table[11])

Definition at line 136 of file zio.h.

#define ZIO_PRIORITY_FREE   (zio_priority_table[6])

Definition at line 131 of file zio.h.

#define ZIO_PRIORITY_LOG_WRITE   (zio_priority_table[3])

Definition at line 128 of file zio.h.

#define ZIO_PRIORITY_NOW   (zio_priority_table[0])

Definition at line 125 of file zio.h.

#define ZIO_PRIORITY_RESILVER   (zio_priority_table[9])

Definition at line 134 of file zio.h.

#define ZIO_PRIORITY_SCRUB   (zio_priority_table[10])

Definition at line 135 of file zio.h.

#define ZIO_PRIORITY_SYNC_READ   (zio_priority_table[1])

Definition at line 126 of file zio.h.

#define ZIO_PRIORITY_SYNC_WRITE   (zio_priority_table[2])

Definition at line 127 of file zio.h.

#define ZIO_PRIORITY_TABLE_SIZE   13

Definition at line 138 of file zio.h.

#define ZIO_PRIORITY_TRIM   (zio_priority_table[12])

Definition at line 137 of file zio.h.

#define ZIO_REEXECUTE_NOW   0x01

The io_reexecute flags are distinct from io_flags because the child must be able to propagate them to the parent.

The normal io_flags are local to the zio, not protected by any lock, and not modifiable by children; the reexecute flags are protected by io_lock, modifiable by children, and always propagated -- even when ZIO_FLAG_DONT_PROPAGATE is set.

Definition at line 355 of file zio.h.

#define ZIO_REEXECUTE_SUSPEND   0x02

Definition at line 356 of file zio.h.

#define ZIO_TRIM_STAT_BUMP (   stat)    ZIO_TRIM_STAT_INCR(stat, 1);

Definition at line 395 of file zio.h.

#define ZIO_TRIM_STAT_INCR (   stat,
  val 
)    atomic_add_64(&zio_trim_stats.stat.value.ui64, (val));

Definition at line 393 of file zio.h.

#define ZIO_VDEV_CHILD_FLAGS (   zio)
Value:
(((zio)->io_flags & ZIO_FLAG_VDEV_INHERIT) |            \
        ZIO_FLAG_CANFAIL)

Definition at line 204 of file zio.h.


Typedef Documentation

typedef struct zbookmark zbookmark_t

A bookmark is a four-tuple <objset, object, level, blkid> that uniquely identifies any block in the pool.

By convention, the meta-objset (MOS) is objset 0, and the meta-dnode is object 0. This covers all blocks except root blocks and ZIL blocks, which are defined as follows:

Root blocks (objset_phys_t) are object 0, level -1: <objset, 0, -1, 0>. ZIL blocks are bookmarked <objset, 0, -2, blkid == ZIL sequence number>. dmu_sync()ed ZIL data blocks are bookmarked <objset, object, -2, blkid>.

Note:
This structure is called a bookmark because its original purpose was to remember where to resume a pool-wide traverse.
This structure is passed between userland and the kernel. Therefore it must not change size or alignment between 32/64 bit compilation options.
typedef void zio_cksum_finish_f(zio_cksum_report_t *rep, const void *good_data)

Definition at line 296 of file zio.h.

typedef void zio_cksum_free_f(void *cbdata, size_t size)

Definition at line 298 of file zio.h.

Definition at line 294 of file zio.h.

typedef void zio_done_func_t(zio_t *zio)

Definition at line 230 of file zio.h.

typedef struct zio_eck zio_eck_t
typedef zio_t* zio_gang_issue_func_t(zio_t *zio, blkptr_t *bp, zio_gang_node_t *gn, void *data)

Definition at line 333 of file zio.h.

typedef struct zio_gbh zio_gbh_phys_t
typedef struct zio_link zio_link_t
typedef int zio_pipe_stage_t(zio_t *zio)

Definition at line 346 of file zio.h.

typedef struct zio_prop zio_prop_t
typedef void zio_transform_func_t(zio_t *zio, void *data, uint64_t size)

Definition at line 336 of file zio.h.

typedef void zio_vsd_cksum_report_f(zio_t *zio, zio_cksum_report_t *zcr, void *arg)

Definition at line 318 of file zio.h.

typedef struct zio_vsd_ops zio_vsd_ops_t

Enumeration Type Documentation

Enumerator:
ZIO_CHECKSUM_INHERIT 
ZIO_CHECKSUM_ON 
ZIO_CHECKSUM_OFF 
ZIO_CHECKSUM_LABEL 
ZIO_CHECKSUM_GANG_HEADER 
ZIO_CHECKSUM_ZILOG 
ZIO_CHECKSUM_FLETCHER_2 
ZIO_CHECKSUM_FLETCHER_4 
ZIO_CHECKSUM_SHA256 
ZIO_CHECKSUM_ZILOG2 
ZIO_CHECKSUM_FUNCTIONS 

Definition at line 70 of file zio.h.

enum zio_child
Enumerator:
ZIO_CHILD_VDEV 
ZIO_CHILD_GANG 
ZIO_CHILD_DDT 
ZIO_CHILD_LOGICAL 
ZIO_CHILD_TYPES 

Definition at line 208 of file zio.h.

Enumerator:
ZIO_COMPRESS_INHERIT 
ZIO_COMPRESS_ON 
ZIO_COMPRESS_OFF 
ZIO_COMPRESS_LZJB 
ZIO_COMPRESS_EMPTY 
ZIO_COMPRESS_GZIP_1 
ZIO_COMPRESS_GZIP_2 
ZIO_COMPRESS_GZIP_3 
ZIO_COMPRESS_GZIP_4 
ZIO_COMPRESS_GZIP_5 
ZIO_COMPRESS_GZIP_6 
ZIO_COMPRESS_GZIP_7 
ZIO_COMPRESS_GZIP_8 
ZIO_COMPRESS_GZIP_9 
ZIO_COMPRESS_ZLE 
ZIO_COMPRESS_FUNCTIONS 

Definition at line 93 of file zio.h.

enum zio_flag
Enumerator:
ZIO_FLAG_DONT_AGGREGATE 
ZIO_FLAG_IO_REPAIR 
ZIO_FLAG_SELF_HEAL 
ZIO_FLAG_RESILVER 
ZIO_FLAG_SCRUB 
ZIO_FLAG_SCAN_THREAD 

Definition at line 143 of file zio.h.

Enumerator:
ZIO_WAIT_READY 
ZIO_WAIT_DONE 
ZIO_WAIT_TYPES 

Definition at line 216 of file zio.h.


Function Documentation

void spa_handle_ignored_writes ( spa_t spa)

Called from spa_sync(), but primarily an injection handler.

Definition at line 347 of file zio_inject.c.

boolean_t zbookmark_is_before ( const struct dnode_phys dnp,
const zbookmark_t zb1,
const zbookmark_t zb2 
)
void zfs_ereport_finish_checksum ( zio_cksum_report_t report,
const void *  good_data,
const void *  bad_data,
boolean_t  drop_if_identical 
)

Definition at line 732 of file zfs_fm.c.

void zfs_ereport_free_checksum ( zio_cksum_report_t report)

Definition at line 753 of file zfs_fm.c.

void zfs_ereport_post_checksum ( spa_t spa,
vdev_t vd,
struct zio zio,
uint64_t  offset,
uint64_t  length,
const void *  good_data,
const void *  bad_data,
struct zio_bad_cksum info 
)

If we have the good data in hand, this function can be used.

Definition at line 780 of file zfs_fm.c.

void zfs_ereport_send_interim_checksum ( zio_cksum_report_t report)

Definition at line 772 of file zfs_fm.c.

void zfs_ereport_start_checksum ( spa_t spa,
vdev_t vd,
struct zio zio,
uint64_t  offset,
uint64_t  length,
void *  arg,
struct zio_bad_cksum info 
)

Definition at line 690 of file zfs_fm.c.

void zio_add_child ( zio_t pio,
zio_t cio 
)

Definition at line 447 of file zio.c.

int zio_alloc_zil ( spa_t spa,
uint64_t  txg,
blkptr_t new_bp,
blkptr_t old_bp,
uint64_t  size,
boolean_t  use_slog 
)

Try to allocate an intent log block.

Returns:
0 on success, errno on failure.

Definition at line 2288 of file zio.c.

void* zio_buf_alloc ( size_t  size)

Use zio_buf_alloc to allocate ZFS metadata.

This data will appear in a crashdump if the kernel panics, so use it judiciously. Obviously, it's useful to inspect ZFS metadata, but if possible, we should avoid keeping excess / transient data in-core during a crashdump.

Definition at line 261 of file zio.c.

void zio_buf_free ( void *  buf,
size_t  size 
)

Definition at line 294 of file zio.c.

enum zio_checksum zio_checksum_dedup_select ( spa_t spa,
enum zio_checksum  child,
enum zio_checksum  parent 
)

Definition at line 100 of file zio_checksum.c.

enum zio_checksum zio_checksum_select ( enum zio_checksum  child,
enum zio_checksum  parent 
)

Definition at line 84 of file zio_checksum.c.

void zio_checksum_verified ( zio_t zio)

Called by RAID-Z to ensure we don't compute the checksum twice.

Definition at line 2706 of file zio.c.

zio_t* zio_claim ( zio_t pio,
spa_t spa,
uint64_t  txg,
const blkptr_t bp,
zio_done_func_t done,
void *  priv,
enum zio_flag  flags 
)

Definition at line 758 of file zio.c.

int zio_clear_fault ( int  id)

Clear the fault handler with the given identifier, or return ENOENT if none exists.

Definition at line 477 of file zio_inject.c.

enum zio_compress zio_compress_select ( enum zio_compress  child,
enum zio_compress  parent 
)

Definition at line 56 of file zio_compress.c.

void* zio_data_buf_alloc ( size_t  size)

Use zio_data_buf_alloc to allocate data.

The data will not appear in a crashdump if the kernel panics. This exists so that we will limit the amount of ZFS data that shows up in a kernel crashdump. (Thus reducing the amount of kernel heap dumped to disk when the kernel panics)

Definition at line 281 of file zio.c.

void zio_data_buf_free ( void *  buf,
size_t  size 
)

Definition at line 307 of file zio.c.

void zio_execute ( zio_t zio)

Execute the I/O pipeline until one of the following occurs:

  1. the I/O completes
  2. the pipeline stalls waiting for dependent child I/Os
  3. the I/O issues, so we're waiting for an I/O completion interrupt
  4. the I/O is delegated by vdev-level caching or aggregation
  5. the I/O is deferred due to vdev-level queueing
  6. the I/O is handed off to another thread.

In all cases, the pipeline stops whenever there's no CPU work; it never burns a thread in cv_wait().

There's no locking on io_stage because there's no legitimate way for multiple threads to be attempting to process the same I/O.

Definition at line 1219 of file zio.c.

void zio_fini ( void  )

Definition at line 217 of file zio.c.

void zio_flush ( zio_t zio,
vdev_t vd 
)

Definition at line 928 of file zio.c.

void zio_free ( spa_t spa,
uint64_t  txg,
const blkptr_t bp 
)

Definition at line 732 of file zio.c.

zio_t* zio_free_sync ( zio_t pio,
spa_t spa,
uint64_t  txg,
const blkptr_t bp,
uint64_t  size,
enum zio_flag  flags 
)

Definition at line 738 of file zio.c.

void zio_free_zil ( spa_t spa,
uint64_t  txg,
blkptr_t bp 
)

Free an intent log block.

Definition at line 2332 of file zio.c.

int zio_handle_device_injection ( vdev_t vd,
zio_t zio,
int  error 
)

Definition at line 228 of file zio_inject.c.

int zio_handle_fault_injection ( zio_t zio,
int  error 
)

Determine if the I/O in question should return failure.

Returns the errno to be returned to the caller.

Definition at line 129 of file zio_inject.c.

void zio_handle_ignored_writes ( zio_t zio)

Simulate hardware that ignores cache flushes.

For requested number of seconds nix the actual writing to disk.

Definition at line 310 of file zio_inject.c.

int zio_handle_label_injection ( zio_t zio,
int  error 
)

Determine if the zio is part of a label update and has an injection handler associated with that portion of the label.

Currently, we allow error injection in either the nvlist or the uberblock region of of the vdev label.

Definition at line 182 of file zio_inject.c.

void zio_handle_panic_injection ( spa_t spa,
char *  tag,
uint64_t  type 
)

Panic the system when a config change happens in the function specified by tag.

Definition at line 104 of file zio_inject.c.

void zio_init ( void  )

Definition at line 123 of file zio.c.

int zio_inject_fault ( char *  name,
int  flags,
int *  id,
zinject_record_t record 
)

Create a new handler for the given record.

We add it to the list, adding a reference to the spa_t in the process. We increment zio_injection_enabled, which is the switch to trigger all fault injection.

Definition at line 389 of file zio_inject.c.

int zio_inject_list_next ( int *  id,
char *  name,
size_t  buflen,
zinject_record_t record 
)

Returns the next record with an ID greater than that supplied to the function.

Used to iterate over all handlers in the system.

Definition at line 443 of file zio_inject.c.

void zio_interrupt ( zio_t zio)

Definition at line 1196 of file zio.c.

zio_t* zio_ioctl ( zio_t pio,
spa_t spa,
vdev_t vd,
int  cmd,
uint64_t  offset,
uint64_t  size,
zio_done_func_t done,
void *  priv,
int  priority,
enum zio_flag  flags 
)

Definition at line 787 of file zio.c.

void zio_nowait ( zio_t zio)

Definition at line 1292 of file zio.c.

zio_t* zio_null ( zio_t pio,
spa_t spa,
vdev_t vd,
zio_done_func_t done,
void *  priv,
enum zio_flag  flags 
)

Definition at line 641 of file zio.c.

zio_t* zio_read ( zio_t pio,
spa_t spa,
const blkptr_t bp,
void *  data,
uint64_t  size,
zio_done_func_t done,
void *  priv,
int  priority,
enum zio_flag  flags,
const zbookmark_t zb 
)

Definition at line 660 of file zio.c.

zio_t* zio_read_phys ( zio_t pio,
vdev_t vd,
uint64_t  offset,
uint64_t  size,
void *  data,
int  checksum,
zio_done_func_t done,
void *  priv,
int  priority,
enum zio_flag  flags,
boolean_t  labels 
)

Definition at line 812 of file zio.c.

void zio_resubmit_stage_async ( void *  )
int zio_resume ( spa_t spa)

Definition at line 1394 of file zio.c.

void zio_resume_wait ( spa_t spa)

Definition at line 1416 of file zio.c.

zio_t* zio_rewrite ( zio_t pio,
spa_t spa,
uint64_t  txg,
blkptr_t bp,
void *  data,
uint64_t  size,
zio_done_func_t done,
void *  priv,
int  priority,
enum zio_flag  flags,
zbookmark_t zb 
)

Definition at line 706 of file zio.c.

zio_t* zio_root ( spa_t spa,
zio_done_func_t done,
void *  priv,
enum zio_flag  flags 
)

Definition at line 654 of file zio.c.

void zio_shrink ( zio_t zio,
uint64_t  size 
)

Definition at line 947 of file zio.c.

void zio_suspend ( spa_t spa,
zio_t zio 
)

Definition at line 1363 of file zio.c.

zio_t* zio_trim ( zio_t zio,
spa_t spa,
vdev_t vd,
uint64_t  offset,
uint64_t  size 
)

Definition at line 936 of file zio.c.

zio_t* zio_unique_parent ( zio_t cio)

Definition at line 438 of file zio.c.

zio_t* zio_vdev_child_io ( zio_t zio,
blkptr_t bp,
vdev_t vd,
uint64_t  offset,
void *  data,
uint64_t  size,
int  type,
int  priority,
enum zio_flag  flags,
zio_done_func_t done,
void *  priv 
)

Create a child I/O to do some work for us.

Definition at line 869 of file zio.c.

zio_t* zio_vdev_delegated_io ( vdev_t vd,
uint64_t  offset,
void *  data,
uint64_t  size,
int  type,
int  priority,
enum zio_flag  flags,
zio_done_func_t done,
void *  priv 
)

Definition at line 910 of file zio.c.

void zio_vdev_io_bypass ( zio_t zio)

Definition at line 2625 of file zio.c.

void zio_vdev_io_redone ( zio_t zio)

Definition at line 2617 of file zio.c.

void zio_vdev_io_reissue ( zio_t zio)

Definition at line 2608 of file zio.c.

int zio_wait ( zio_t zio)

Initiate I/O, either sync or async.

Definition at line 1269 of file zio.c.

zio_t* zio_walk_children ( zio_t pio)
Note:
Callers must continue calling zio_walk_children until it returns NULL. Otherwise, the next caller will pick up the list walk in some indeterminate state. (Otherwise every caller would have to pass in a cookie to keep the state represented by io_walk_link, which gets annoying.)

Definition at line 422 of file zio.c.

zio_t* zio_walk_parents ( zio_t cio)
Note:
Callers must continue calling zio_walk_parents until it returns NULL. Otherwise, the next caller will pick up the list walk in some indeterminate state. (Otherwise every caller would have to pass in a cookie to keep the state represented by io_walk_link, which gets annoying.)

Definition at line 399 of file zio.c.

int zio_worst_error ( int  e1,
int  e2 
)

Compare the severity of errors.

Errors are ranked in the order 0, ENXIO, ECKSUM, EIO, other. An error of 0 indictes success. ENXIO indicates whole-device failure, which may be transient (e.g. unplugged) or permament. ECKSUM and EIO indicate errors that are specific to one I/O, and most likely permanent. Any other error is presumed to be worse because we weren't expecting it.

Definition at line 2721 of file zio.c.

zio_t* zio_write ( zio_t pio,
spa_t spa,
uint64_t  txg,
blkptr_t bp,
void *  data,
uint64_t  size,
const zio_prop_t zp,
zio_done_func_t ready,
zio_done_func_t done,
void *  priv,
int  priority,
enum zio_flag  flags,
const zbookmark_t zb 
)

Definition at line 676 of file zio.c.

void zio_write_override ( zio_t zio,
blkptr_t bp,
int  copies 
)

Definition at line 720 of file zio.c.

zio_t* zio_write_phys ( zio_t pio,
vdev_t vd,
uint64_t  offset,
uint64_t  size,
void *  data,
int  checksum,
zio_done_func_t done,
void *  priv,
int  priority,
enum zio_flag  flags,
boolean_t  labels 
)

Definition at line 833 of file zio.c.


Variable Documentation

Definition at line 50 of file zio_inject.c.

uint8_t zio_priority_table[ZIO_PRIORITY_TABLE_SIZE]

I/O priority table.

Definition at line 69 of file zio.c.

See zio.h for more information about these fields.

Definition at line 57 of file zio.c.

char* zio_type_name[ZIO_TYPES]

I/O type descriptions.

Definition at line 88 of file zio.c.

zio_vsd_cksum_report_f zio_vsd_default_cksum_report

Definition at line 321 of file zio.h.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines