Lines Matching defs:ve
141 vdev_cache_evict(vdev_cache_t *vc, vdev_cache_entry_t *ve)
144 ASSERT(ve->ve_fill_io == NULL);
145 ASSERT(ve->ve_data != NULL);
147 avl_remove(&vc->vc_lastused_tree, ve);
148 avl_remove(&vc->vc_offset_tree, ve);
149 zio_buf_free(ve->ve_data, VCBS);
150 kmem_free(ve, sizeof (vdev_cache_entry_t));
163 vdev_cache_entry_t *ve;
176 ve = avl_first(&vc->vc_lastused_tree);
177 if (ve->ve_fill_io != NULL)
179 ASSERT(ve->ve_hits != 0);
180 vdev_cache_evict(vc, ve);
183 ve = kmem_zalloc(sizeof (vdev_cache_entry_t), KM_SLEEP);
184 ve->ve_offset = offset;
185 ve->ve_lastused = ddi_get_lbolt();
186 ve->ve_data = zio_buf_alloc(VCBS);
188 avl_add(&vc->vc_offset_tree, ve);
189 avl_add(&vc->vc_lastused_tree, ve);
191 return (ve);
195 vdev_cache_hit(vdev_cache_t *vc, vdev_cache_entry_t *ve, zio_t *zio)
200 ASSERT(ve->ve_fill_io == NULL);
202 if (ve->ve_lastused != ddi_get_lbolt()) {
203 avl_remove(&vc->vc_lastused_tree, ve);
204 ve->ve_lastused = ddi_get_lbolt();
205 avl_add(&vc->vc_lastused_tree, ve);
208 ve->ve_hits++;
209 bcopy(ve->ve_data + cache_phase, zio->io_data, zio->io_size);
220 vdev_cache_entry_t *ve = fio->io_private;
230 ASSERT(ve->ve_fill_io == fio);
231 ASSERT(ve->ve_offset == fio->io_offset);
232 ASSERT(ve->ve_data == fio->io_data);
234 ve->ve_fill_io = NULL;
243 vdev_cache_hit(vc, ve, pio);
245 if (fio->io_error || ve->ve_missed_update)
246 vdev_cache_evict(vc, ve);
258 vdev_cache_entry_t *ve, ve_search;
282 ve = avl_find(&vc->vc_offset_tree, &ve_search, NULL);
284 if (ve != NULL) {
285 if (ve->ve_missed_update) {
290 if ((fio = ve->ve_fill_io) != NULL) {
298 vdev_cache_hit(vc, ve, zio);
306 ve = vdev_cache_allocate(zio);
308 if (ve == NULL) {
314 ve->ve_data, VCBS, ZIO_TYPE_READ, ZIO_PRIORITY_NOW,
315 ZIO_FLAG_DONT_CACHE, vdev_cache_fill, ve);
317 ve->ve_fill_io = fio;
335 vdev_cache_entry_t *ve, ve_search;
347 ve = avl_find(&vc->vc_offset_tree, &ve_search, &where);
349 if (ve == NULL)
350 ve = avl_nearest(&vc->vc_offset_tree, where, AVL_AFTER);
352 while (ve != NULL && ve->ve_offset < max_offset) {
353 uint64_t start = MAX(ve->ve_offset, io_start);
354 uint64_t end = MIN(ve->ve_offset + VCBS, io_end);
356 if (ve->ve_fill_io != NULL) {
357 ve->ve_missed_update = 1;
360 ve->ve_data + start - ve->ve_offset, end - start);
362 ve = AVL_NEXT(&vc->vc_offset_tree, ve);
371 vdev_cache_entry_t *ve;
374 while ((ve = avl_first(&vc->vc_offset_tree)) != NULL)
375 vdev_cache_evict(vc, ve);