52extern void vdev_close(vdev_t *); 53extern int vdev_create(vdev_t *, uint64_t txg, boolean_t isreplace); 54extern void vdev_reopen(vdev_t *); 55extern int vdev_validate_aux(vdev_t *vd); 56extern zio_t *vdev_probe(vdev_t *vd, zio_t *pio); 57 58extern boolean_t vdev_is_bootable(vdev_t *vd); 59extern vdev_t *vdev_lookup_top(spa_t *spa, uint64_t vdev); 60extern vdev_t *vdev_lookup_by_guid(vdev_t *vd, uint64_t guid); 61extern void vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t d, 62 uint64_t txg, uint64_t size); 63extern boolean_t vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t d, 64 uint64_t txg, uint64_t size); 65extern boolean_t vdev_dtl_empty(vdev_t *vd, vdev_dtl_type_t d); 66extern void vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, 67 int scrub_done); 68extern boolean_t vdev_dtl_required(vdev_t *vd); 69extern boolean_t vdev_resilver_needed(vdev_t *vd, 70 uint64_t *minp, uint64_t *maxp); 71 72extern void vdev_hold(vdev_t *); 73extern void vdev_rele(vdev_t *); 74 75extern int vdev_metaslab_init(vdev_t *vd, uint64_t txg); 76extern void vdev_metaslab_fini(vdev_t *vd); 77extern void vdev_metaslab_set_size(vdev_t *); 78extern void vdev_expand(vdev_t *vd, uint64_t txg); 79extern void vdev_split(vdev_t *vd); 80 81 82extern void vdev_get_stats(vdev_t *vd, vdev_stat_t *vs); 83extern void vdev_clear_stats(vdev_t *vd); 84extern void vdev_stat_update(zio_t *zio, uint64_t psize); 85extern void vdev_scan_stat_init(vdev_t *vd); 86extern void vdev_propagate_state(vdev_t *vd); 87extern void vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state, 88 vdev_aux_t aux); 89 90extern void vdev_space_update(vdev_t *vd, 91 int64_t alloc_delta, int64_t defer_delta, int64_t space_delta); 92 93extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize); 94 95extern int vdev_fault(spa_t *spa, uint64_t guid, vdev_aux_t aux); 96extern int vdev_degrade(spa_t *spa, uint64_t guid, vdev_aux_t aux); 97extern int vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, 98 vdev_state_t *); 99extern int vdev_offline(spa_t *spa, uint64_t guid, uint64_t flags); 100extern void vdev_clear(spa_t *spa, vdev_t *vd); 101 102extern boolean_t vdev_is_dead(vdev_t *vd); 103extern boolean_t vdev_readable(vdev_t *vd); 104extern boolean_t vdev_writeable(vdev_t *vd); 105extern boolean_t vdev_allocatable(vdev_t *vd); 106extern boolean_t vdev_accessible(vdev_t *vd, zio_t *zio); 107 108extern void vdev_cache_init(vdev_t *vd); 109extern void vdev_cache_fini(vdev_t *vd); 110extern int vdev_cache_read(zio_t *zio); 111extern void vdev_cache_write(zio_t *zio); 112extern void vdev_cache_purge(vdev_t *vd); 113 114extern void vdev_queue_init(vdev_t *vd); 115extern void vdev_queue_fini(vdev_t *vd); 116extern zio_t *vdev_queue_io(zio_t *zio); 117extern void vdev_queue_io_done(zio_t *zio); 118 119extern void vdev_config_dirty(vdev_t *vd); 120extern void vdev_config_clean(vdev_t *vd); 121extern int vdev_config_sync(vdev_t **svd, int svdcount, uint64_t txg, 122 boolean_t); 123 124extern void vdev_state_dirty(vdev_t *vd); 125extern void vdev_state_clean(vdev_t *vd); 126 127typedef enum vdev_config_flag { 128 VDEV_CONFIG_SPARE = 1 << 0, 129 VDEV_CONFIG_L2CACHE = 1 << 1, 130 VDEV_CONFIG_REMOVING = 1 << 2 131} vdev_config_flag_t; 132 133extern void vdev_top_config_generate(spa_t *spa, nvlist_t *config); 134extern nvlist_t *vdev_config_generate(spa_t *spa, vdev_t *vd, 135 boolean_t getstats, vdev_config_flag_t flags); 136 137/* 138 * Label routines 139 */ 140struct uberblock; 141extern uint64_t vdev_label_offset(uint64_t psize, int l, uint64_t offset); 142extern int vdev_label_number(uint64_t psise, uint64_t offset); 143extern nvlist_t *vdev_label_read_config(vdev_t *vd); 144extern void vdev_uberblock_load(zio_t *zio, vdev_t *vd, struct uberblock *ub); 145 146typedef enum { 147 VDEV_LABEL_CREATE, /* create/add a new device */ 148 VDEV_LABEL_REPLACE, /* replace an existing device */ 149 VDEV_LABEL_SPARE, /* add a new hot spare */ 150 VDEV_LABEL_REMOVE, /* remove an existing device */ 151 VDEV_LABEL_L2CACHE, /* add an L2ARC cache device */ 152 VDEV_LABEL_SPLIT /* generating new label for split-off dev */ 153} vdev_labeltype_t; 154 155extern int vdev_label_init(vdev_t *vd, uint64_t txg, vdev_labeltype_t reason); 156 157#ifdef __cplusplus 158} 159#endif 160 161#endif /* _SYS_VDEV_H */
| 53extern void vdev_close(vdev_t *); 54extern int vdev_create(vdev_t *, uint64_t txg, boolean_t isreplace); 55extern void vdev_reopen(vdev_t *); 56extern int vdev_validate_aux(vdev_t *vd); 57extern zio_t *vdev_probe(vdev_t *vd, zio_t *pio); 58 59extern boolean_t vdev_is_bootable(vdev_t *vd); 60extern vdev_t *vdev_lookup_top(spa_t *spa, uint64_t vdev); 61extern vdev_t *vdev_lookup_by_guid(vdev_t *vd, uint64_t guid); 62extern void vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t d, 63 uint64_t txg, uint64_t size); 64extern boolean_t vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t d, 65 uint64_t txg, uint64_t size); 66extern boolean_t vdev_dtl_empty(vdev_t *vd, vdev_dtl_type_t d); 67extern void vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, 68 int scrub_done); 69extern boolean_t vdev_dtl_required(vdev_t *vd); 70extern boolean_t vdev_resilver_needed(vdev_t *vd, 71 uint64_t *minp, uint64_t *maxp); 72 73extern void vdev_hold(vdev_t *); 74extern void vdev_rele(vdev_t *); 75 76extern int vdev_metaslab_init(vdev_t *vd, uint64_t txg); 77extern void vdev_metaslab_fini(vdev_t *vd); 78extern void vdev_metaslab_set_size(vdev_t *); 79extern void vdev_expand(vdev_t *vd, uint64_t txg); 80extern void vdev_split(vdev_t *vd); 81 82 83extern void vdev_get_stats(vdev_t *vd, vdev_stat_t *vs); 84extern void vdev_clear_stats(vdev_t *vd); 85extern void vdev_stat_update(zio_t *zio, uint64_t psize); 86extern void vdev_scan_stat_init(vdev_t *vd); 87extern void vdev_propagate_state(vdev_t *vd); 88extern void vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state, 89 vdev_aux_t aux); 90 91extern void vdev_space_update(vdev_t *vd, 92 int64_t alloc_delta, int64_t defer_delta, int64_t space_delta); 93 94extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize); 95 96extern int vdev_fault(spa_t *spa, uint64_t guid, vdev_aux_t aux); 97extern int vdev_degrade(spa_t *spa, uint64_t guid, vdev_aux_t aux); 98extern int vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, 99 vdev_state_t *); 100extern int vdev_offline(spa_t *spa, uint64_t guid, uint64_t flags); 101extern void vdev_clear(spa_t *spa, vdev_t *vd); 102 103extern boolean_t vdev_is_dead(vdev_t *vd); 104extern boolean_t vdev_readable(vdev_t *vd); 105extern boolean_t vdev_writeable(vdev_t *vd); 106extern boolean_t vdev_allocatable(vdev_t *vd); 107extern boolean_t vdev_accessible(vdev_t *vd, zio_t *zio); 108 109extern void vdev_cache_init(vdev_t *vd); 110extern void vdev_cache_fini(vdev_t *vd); 111extern int vdev_cache_read(zio_t *zio); 112extern void vdev_cache_write(zio_t *zio); 113extern void vdev_cache_purge(vdev_t *vd); 114 115extern void vdev_queue_init(vdev_t *vd); 116extern void vdev_queue_fini(vdev_t *vd); 117extern zio_t *vdev_queue_io(zio_t *zio); 118extern void vdev_queue_io_done(zio_t *zio); 119 120extern void vdev_config_dirty(vdev_t *vd); 121extern void vdev_config_clean(vdev_t *vd); 122extern int vdev_config_sync(vdev_t **svd, int svdcount, uint64_t txg, 123 boolean_t); 124 125extern void vdev_state_dirty(vdev_t *vd); 126extern void vdev_state_clean(vdev_t *vd); 127 128typedef enum vdev_config_flag { 129 VDEV_CONFIG_SPARE = 1 << 0, 130 VDEV_CONFIG_L2CACHE = 1 << 1, 131 VDEV_CONFIG_REMOVING = 1 << 2 132} vdev_config_flag_t; 133 134extern void vdev_top_config_generate(spa_t *spa, nvlist_t *config); 135extern nvlist_t *vdev_config_generate(spa_t *spa, vdev_t *vd, 136 boolean_t getstats, vdev_config_flag_t flags); 137 138/* 139 * Label routines 140 */ 141struct uberblock; 142extern uint64_t vdev_label_offset(uint64_t psize, int l, uint64_t offset); 143extern int vdev_label_number(uint64_t psise, uint64_t offset); 144extern nvlist_t *vdev_label_read_config(vdev_t *vd); 145extern void vdev_uberblock_load(zio_t *zio, vdev_t *vd, struct uberblock *ub); 146 147typedef enum { 148 VDEV_LABEL_CREATE, /* create/add a new device */ 149 VDEV_LABEL_REPLACE, /* replace an existing device */ 150 VDEV_LABEL_SPARE, /* add a new hot spare */ 151 VDEV_LABEL_REMOVE, /* remove an existing device */ 152 VDEV_LABEL_L2CACHE, /* add an L2ARC cache device */ 153 VDEV_LABEL_SPLIT /* generating new label for split-off dev */ 154} vdev_labeltype_t; 155 156extern int vdev_label_init(vdev_t *vd, uint64_t txg, vdev_labeltype_t reason); 157 158#ifdef __cplusplus 159} 160#endif 161 162#endif /* _SYS_VDEV_H */
|