Lines Matching refs:zs

181 dmu_zfetch_dofetch(zfetch_t *zf, zstream_t *zs)  in dmu_zfetch_dofetch()  argument
189 zs->zst_stride = MAX((int64_t)zs->zst_stride, zs->zst_len); in dmu_zfetch_dofetch()
190 zs->zst_cap = MIN(zfetch_block_cap, 2 * zs->zst_cap); in dmu_zfetch_dofetch()
192 prefetch_tail = MAX((int64_t)zs->zst_ph_offset, in dmu_zfetch_dofetch()
193 (int64_t)(zs->zst_offset + zs->zst_stride)); in dmu_zfetch_dofetch()
197 prefetch_limit = zs->zst_offset + zs->zst_len + in dmu_zfetch_dofetch()
198 (zs->zst_cap * zs->zst_stride) / zs->zst_len; in dmu_zfetch_dofetch()
201 prefetch_ofst = zs->zst_offset + zs->zst_direction * in dmu_zfetch_dofetch()
202 (prefetch_tail - zs->zst_offset); in dmu_zfetch_dofetch()
204 prefetch_len = zs->zst_len; in dmu_zfetch_dofetch()
210 if ((zs->zst_direction == ZFETCH_BACKWARD) && in dmu_zfetch_dofetch()
217 if (prefetch_len > zs->zst_len) in dmu_zfetch_dofetch()
221 prefetch_ofst, zs->zst_len); in dmu_zfetch_dofetch()
223 prefetch_tail += zs->zst_stride; in dmu_zfetch_dofetch()
225 if (blocks_fetched < zs->zst_len) in dmu_zfetch_dofetch()
228 zs->zst_ph_offset = prefetch_tail; in dmu_zfetch_dofetch()
229 zs->zst_last = ddi_get_lbolt(); in dmu_zfetch_dofetch()
332 zstream_t *zs; in dmu_zfetch_find() local
349 for (zs = list_head(&zf->zf_stream); zs; in dmu_zfetch_find()
350 zs = list_next(&zf->zf_stream, zs)) { in dmu_zfetch_find()
355 if (zs->zst_len == 0) { in dmu_zfetch_find()
365 if (zh->zst_offset >= zs->zst_offset && in dmu_zfetch_find()
366 zh->zst_offset < zs->zst_offset + zs->zst_len) { in dmu_zfetch_find()
382 if (zh->zst_offset == zs->zst_offset + zs->zst_len) { in dmu_zfetch_find()
384 reset = !prefetched && zs->zst_len > 1; in dmu_zfetch_find()
386 mutex_enter(&zs->zst_lock); in dmu_zfetch_find()
388 if (zh->zst_offset != zs->zst_offset + zs->zst_len) { in dmu_zfetch_find()
389 mutex_exit(&zs->zst_lock); in dmu_zfetch_find()
392 zs->zst_len += zh->zst_len; in dmu_zfetch_find()
393 diff = zs->zst_len - zfetch_block_cap; in dmu_zfetch_find()
395 zs->zst_offset += diff; in dmu_zfetch_find()
396 zs->zst_len = zs->zst_len > diff ? in dmu_zfetch_find()
397 zs->zst_len - diff : 0; in dmu_zfetch_find()
399 zs->zst_direction = ZFETCH_FORWARD; in dmu_zfetch_find()
406 } else if (zh->zst_offset == zs->zst_offset - zh->zst_len) { in dmu_zfetch_find()
409 reset = !prefetched && zs->zst_len > 1; in dmu_zfetch_find()
411 mutex_enter(&zs->zst_lock); in dmu_zfetch_find()
413 if (zh->zst_offset != zs->zst_offset - zh->zst_len) { in dmu_zfetch_find()
414 mutex_exit(&zs->zst_lock); in dmu_zfetch_find()
418 zs->zst_offset = zs->zst_offset > zh->zst_len ? in dmu_zfetch_find()
419 zs->zst_offset - zh->zst_len : 0; in dmu_zfetch_find()
420 zs->zst_ph_offset = zs->zst_ph_offset > zh->zst_len ? in dmu_zfetch_find()
421 zs->zst_ph_offset - zh->zst_len : 0; in dmu_zfetch_find()
422 zs->zst_len += zh->zst_len; in dmu_zfetch_find()
424 diff = zs->zst_len - zfetch_block_cap; in dmu_zfetch_find()
426 zs->zst_ph_offset = zs->zst_ph_offset > diff ? in dmu_zfetch_find()
427 zs->zst_ph_offset - diff : 0; in dmu_zfetch_find()
428 zs->zst_len = zs->zst_len > diff ? in dmu_zfetch_find()
429 zs->zst_len - diff : zs->zst_len; in dmu_zfetch_find()
431 zs->zst_direction = ZFETCH_BACKWARD; in dmu_zfetch_find()
435 } else if ((zh->zst_offset - zs->zst_offset - zs->zst_stride < in dmu_zfetch_find()
436 zs->zst_len) && (zs->zst_len != zs->zst_stride)) { in dmu_zfetch_find()
439 mutex_enter(&zs->zst_lock); in dmu_zfetch_find()
441 if ((zh->zst_offset - zs->zst_offset - zs->zst_stride >= in dmu_zfetch_find()
442 zs->zst_len) || (zs->zst_len == zs->zst_stride)) { in dmu_zfetch_find()
443 mutex_exit(&zs->zst_lock); in dmu_zfetch_find()
447 zs->zst_offset += zs->zst_stride; in dmu_zfetch_find()
448 zs->zst_direction = ZFETCH_FORWARD; in dmu_zfetch_find()
452 } else if ((zh->zst_offset - zs->zst_offset + zs->zst_stride < in dmu_zfetch_find()
453 zs->zst_len) && (zs->zst_len != zs->zst_stride)) { in dmu_zfetch_find()
456 mutex_enter(&zs->zst_lock); in dmu_zfetch_find()
458 if ((zh->zst_offset - zs->zst_offset + zs->zst_stride >= in dmu_zfetch_find()
459 zs->zst_len) || (zs->zst_len == zs->zst_stride)) { in dmu_zfetch_find()
460 mutex_exit(&zs->zst_lock); in dmu_zfetch_find()
464 zs->zst_offset = zs->zst_offset > zs->zst_stride ? in dmu_zfetch_find()
465 zs->zst_offset - zs->zst_stride : 0; in dmu_zfetch_find()
466 zs->zst_ph_offset = (zs->zst_ph_offset > in dmu_zfetch_find()
467 (2 * zs->zst_stride)) ? in dmu_zfetch_find()
468 (zs->zst_ph_offset - (2 * zs->zst_stride)) : 0; in dmu_zfetch_find()
469 zs->zst_direction = ZFETCH_BACKWARD; in dmu_zfetch_find()
475 if (zs) { in dmu_zfetch_find()
477 zstream_t *remove = zs; in dmu_zfetch_find()
481 mutex_exit(&zs->zst_lock); in dmu_zfetch_find()
488 for (zs = list_head(&zf->zf_stream); zs; in dmu_zfetch_find()
489 zs = list_next(&zf->zf_stream, zs)) { in dmu_zfetch_find()
490 if (zs == remove) { in dmu_zfetch_find()
491 dmu_zfetch_stream_remove(zf, zs); in dmu_zfetch_find()
492 mutex_destroy(&zs->zst_lock); in dmu_zfetch_find()
493 kmem_free(zs, sizeof (zstream_t)); in dmu_zfetch_find()
500 dmu_zfetch_dofetch(zf, zs); in dmu_zfetch_find()
501 mutex_exit(&zs->zst_lock); in dmu_zfetch_find()
517 zstream_t *zs; in dmu_zfetch_rele() local
522 for (zs = list_head(&zf->zf_stream); zs; zs = zs_next) { in dmu_zfetch_rele()
523 zs_next = list_next(&zf->zf_stream, zs); in dmu_zfetch_rele()
525 list_remove(&zf->zf_stream, zs); in dmu_zfetch_rele()
526 mutex_destroy(&zs->zst_lock); in dmu_zfetch_rele()
527 kmem_free(zs, sizeof (zstream_t)); in dmu_zfetch_rele()
544 dmu_zfetch_stream_insert(zfetch_t *zf, zstream_t *zs) in dmu_zfetch_stream_insert() argument
554 if (dmu_zfetch_streams_equal(zs_walk, zs)) { in dmu_zfetch_stream_insert()
559 list_insert_head(&zf->zf_stream, zs); in dmu_zfetch_stream_insert()
572 zstream_t *zs; in dmu_zfetch_stream_reclaim() local
577 for (zs = list_head(&zf->zf_stream); zs; in dmu_zfetch_stream_reclaim()
578 zs = list_next(&zf->zf_stream, zs)) { in dmu_zfetch_stream_reclaim()
580 if (((ddi_get_lbolt() - zs->zst_last)/hz) > zfetch_min_sec_reap) in dmu_zfetch_stream_reclaim()
584 if (zs) { in dmu_zfetch_stream_reclaim()
585 dmu_zfetch_stream_remove(zf, zs); in dmu_zfetch_stream_reclaim()
586 mutex_destroy(&zs->zst_lock); in dmu_zfetch_stream_reclaim()
587 bzero(zs, sizeof (zstream_t)); in dmu_zfetch_stream_reclaim()
593 return (zs); in dmu_zfetch_stream_reclaim()
601 dmu_zfetch_stream_remove(zfetch_t *zf, zstream_t *zs) in dmu_zfetch_stream_remove() argument
605 list_remove(&zf->zf_stream, zs); in dmu_zfetch_stream_remove()