Lines Matching defs:sio

309 #define	SIO_SET_OFFSET(sio, x)		DVA_SET_OFFSET(&(sio)->sio_dva[0], x)
310 #define SIO_SET_ASIZE(sio, x) DVA_SET_ASIZE(&(sio)->sio_dva[0], x)
311 #define SIO_GET_OFFSET(sio) DVA_GET_OFFSET(&(sio)->sio_dva[0])
312 #define SIO_GET_ASIZE(sio) DVA_GET_ASIZE(&(sio)->sio_dva[0])
313 #define SIO_GET_END_OFFSET(sio) \
314 (SIO_GET_OFFSET(sio) + SIO_GET_ASIZE(sio))
315 #define SIO_GET_MUSED(sio) \
316 (sizeof (scan_io_t) + ((sio)->sio_nr_dvas * sizeof (dva_t)))
362 scan_io_t *sio);
369 /* sio->sio_nr_dvas must be set so we know which cache to free from */
371 sio_free(scan_io_t *sio)
373 ASSERT3U(sio->sio_nr_dvas, >, 0);
374 ASSERT3U(sio->sio_nr_dvas, <=, SPA_DVAS_PER_BP);
376 kmem_cache_free(sio_cache[sio->sio_nr_dvas - 1], sio);
379 /* It is up to the caller to set sio->sio_nr_dvas for freeing */
434 sio2bp(const scan_io_t *sio, blkptr_t *bp)
437 bp->blk_prop = sio->sio_blk_prop;
438 BP_SET_PHYSICAL_BIRTH(bp, sio->sio_phys_birth);
439 BP_SET_LOGICAL_BIRTH(bp, sio->sio_birth);
441 bp->blk_cksum = sio->sio_cksum;
443 ASSERT3U(sio->sio_nr_dvas, >, 0);
444 ASSERT3U(sio->sio_nr_dvas, <=, SPA_DVAS_PER_BP);
446 memcpy(bp->blk_dva, sio->sio_dva, sio->sio_nr_dvas * sizeof (dva_t));
450 bp2sio(const blkptr_t *bp, scan_io_t *sio, int dva_i)
452 sio->sio_blk_prop = bp->blk_prop;
453 sio->sio_phys_birth = BP_GET_PHYSICAL_BIRTH(bp);
454 sio->sio_birth = BP_GET_LOGICAL_BIRTH(bp);
455 sio->sio_cksum = bp->blk_cksum;
456 sio->sio_nr_dvas = BP_GET_NDVAS(bp);
459 * Copy the DVAs to the sio. We need all copies of the block so
462 * in the sio since this is the primary one that we want to issue.
464 for (int i = 0, j = dva_i; i < sio->sio_nr_dvas; i++, j++) {
465 sio->sio_dva[i] = bp->blk_dva[j % sio->sio_nr_dvas];
2984 * However, dsl_scan_sync() expects that no new sio's will
2987 * completed. This check ensures we do not issue new sio's
3257 scan_io_t *sio;
3260 while ((sio = list_head(io_list)) != NULL) {
3268 sio2bp(sio, &bp);
3269 scan_exec_io(scn->scn_dp, &bp, sio->sio_flags,
3270 &sio->sio_zb, queue);
3273 sio_free(sio);
3288 scan_io_t *srch_sio, *sio, *next_sio;
3304 sio = avl_find(&queue->q_sios_by_addr, srch_sio, &idx);
3307 if (sio == NULL)
3308 sio = avl_nearest(&queue->q_sios_by_addr, idx, AVL_AFTER);
3310 while (sio != NULL && SIO_GET_OFFSET(sio) < rs_get_end(rs,
3312 ASSERT3U(SIO_GET_OFFSET(sio), >=, rs_get_start(rs,
3314 ASSERT3U(SIO_GET_END_OFFSET(sio), <=, rs_get_end(rs,
3317 next_sio = AVL_NEXT(&queue->q_sios_by_addr, sio);
3318 avl_remove(&queue->q_sios_by_addr, sio);
3321 queue->q_sio_memused -= SIO_GET_MUSED(sio);
3323 bytes_issued += SIO_GET_ASIZE(sio);
3325 list_insert_tail(list, sio);
3326 sio = next_sio;
3335 if (sio != NULL && SIO_GET_OFFSET(sio) < rs_get_end(rs,
3340 SIO_GET_OFFSET(sio), rs_get_end(rs,
3341 queue->q_exts_by_addr) - SIO_GET_OFFSET(sio));
3342 queue->q_last_ext_addr = SIO_GET_OFFSET(sio);
3430 scan_io_t *sio;
3479 * queue lock. The sio queue won't be updated by
3503 while ((sio = list_remove_head(&sio_list)) != NULL)
3504 scan_io_queue_insert_impl(queue, sio);
4710 scan_io_queue_insert_impl(dsl_scan_io_queue_t *queue, scan_io_t *sio)
4719 if (avl_find(&queue->q_sios_by_addr, sio, &idx) != NULL) {
4721 sio_free(sio);
4724 avl_insert(&queue->q_sios_by_addr, sio, idx);
4725 queue->q_sio_memused += SIO_GET_MUSED(sio);
4726 range_tree_add(queue->q_exts_by_addr, SIO_GET_OFFSET(sio),
4727 SIO_GET_ASIZE(sio));
4740 scan_io_t *sio = sio_alloc(BP_GET_NDVAS(bp));
4745 bp2sio(bp, sio, dva_i);
4746 sio->sio_flags = zio_flags;
4747 sio->sio_zb = *zb;
4750 scan_io_queue_insert_impl(queue, sio);
5093 scan_io_t *sio;
5100 while ((sio = avl_destroy_nodes(&queue->q_sios_by_addr, &cookie)) !=
5103 SIO_GET_OFFSET(sio), SIO_GET_ASIZE(sio)));
5104 queue->q_sio_memused -= SIO_GET_MUSED(sio);
5105 sio_free(sio);
5162 scan_io_t *srch_sio, *sio;
5200 sio = avl_find(&queue->q_sios_by_addr, srch_sio, &idx);
5203 if (sio != NULL) {
5207 ASSERT3U(start, ==, SIO_GET_OFFSET(sio));
5208 ASSERT3U(size, ==, SIO_GET_ASIZE(sio));
5209 avl_remove(&queue->q_sios_by_addr, sio);
5212 queue->q_sio_memused -= SIO_GET_MUSED(sio);
5218 sio2bp(sio, &tmpbp);
5221 sio_free(sio);