Lines Matching refs:ve

153 vdev_cache_evict(vdev_cache_t *vc, vdev_cache_entry_t *ve)
156 ASSERT(ve->ve_fill_io == NULL);
157 ASSERT(ve->ve_data != NULL);
159 avl_remove(&vc->vc_lastused_tree, ve);
160 avl_remove(&vc->vc_offset_tree, ve);
161 zio_buf_free(ve->ve_data, VCBS);
162 kmem_free(ve, sizeof (vdev_cache_entry_t));
175 vdev_cache_entry_t *ve;
188 ve = avl_first(&vc->vc_lastused_tree);
189 if (ve->ve_fill_io != NULL)
191 ASSERT(ve->ve_hits != 0);
192 vdev_cache_evict(vc, ve);
195 ve = kmem_zalloc(sizeof (vdev_cache_entry_t), KM_SLEEP);
196 ve->ve_offset = offset;
197 ve->ve_lastused = ddi_get_lbolt();
198 ve->ve_data = zio_buf_alloc(VCBS);
200 avl_add(&vc->vc_offset_tree, ve);
201 avl_add(&vc->vc_lastused_tree, ve);
203 return (ve);
207 vdev_cache_hit(vdev_cache_t *vc, vdev_cache_entry_t *ve, zio_t *zio)
212 ASSERT(ve->ve_fill_io == NULL);
214 if (ve->ve_lastused != ddi_get_lbolt()) {
215 avl_remove(&vc->vc_lastused_tree, ve);
216 ve->ve_lastused = ddi_get_lbolt();
217 avl_add(&vc->vc_lastused_tree, ve);
220 ve->ve_hits++;
221 bcopy(ve->ve_data + cache_phase, zio->io_data, zio->io_size);
232 vdev_cache_entry_t *ve = fio->io_private;
242 ASSERT(ve->ve_fill_io == fio);
243 ASSERT(ve->ve_offset == fio->io_offset);
244 ASSERT(ve->ve_data == fio->io_data);
246 ve->ve_fill_io = NULL;
254 vdev_cache_hit(vc, ve, pio);
256 if (fio->io_error || ve->ve_missed_update)
257 vdev_cache_evict(vc, ve);
269 vdev_cache_entry_t *ve, ve_search;
293 ve = avl_find(&vc->vc_offset_tree, &ve_search, NULL);
295 if (ve != NULL) {
296 if (ve->ve_missed_update) {
301 if ((fio = ve->ve_fill_io) != NULL) {
309 vdev_cache_hit(vc, ve, zio);
317 ve = vdev_cache_allocate(zio);
319 if (ve == NULL) {
325 ve->ve_data, VCBS, ZIO_TYPE_READ, ZIO_PRIORITY_NOW,
326 ZIO_FLAG_DONT_CACHE, vdev_cache_fill, ve);
328 ve->ve_fill_io = fio;
346 vdev_cache_entry_t *ve, ve_search;
358 ve = avl_find(&vc->vc_offset_tree, &ve_search, &where);
360 if (ve == NULL)
361 ve = avl_nearest(&vc->vc_offset_tree, where, AVL_AFTER);
363 while (ve != NULL && ve->ve_offset < max_offset) {
364 uint64_t start = MAX(ve->ve_offset, io_start);
365 uint64_t end = MIN(ve->ve_offset + VCBS, io_end);
367 if (ve->ve_fill_io != NULL) {
368 ve->ve_missed_update = 1;
371 ve->ve_data + start - ve->ve_offset, end - start);
373 ve = AVL_NEXT(&vc->vc_offset_tree, ve);
382 vdev_cache_entry_t *ve;
385 while ((ve = avl_first(&vc->vc_offset_tree)) != NULL)
386 vdev_cache_evict(vc, ve);