Lines Matching full:i
74 static void qcow2_cache_table_release(Qcow2Cache *c, int i, int num_tables) in qcow2_cache_table_release() argument
78 void *t = qcow2_cache_get_table_addr(c, i); in qcow2_cache_table_release()
89 static inline bool can_clean_entry(Qcow2Cache *c, int i) in can_clean_entry() argument
91 Qcow2CachedTable *t = &c->entries[i]; in can_clean_entry()
98 int i = 0; in qcow2_cache_clean_unused() local
99 while (i < c->size) { in qcow2_cache_clean_unused()
103 while (i < c->size && !can_clean_entry(c, i)) { in qcow2_cache_clean_unused()
104 i++; in qcow2_cache_clean_unused()
108 while (i < c->size && can_clean_entry(c, i)) { in qcow2_cache_clean_unused()
109 c->entries[i].offset = 0; in qcow2_cache_clean_unused()
110 c->entries[i].lru_counter = 0; in qcow2_cache_clean_unused()
111 i++; in qcow2_cache_clean_unused()
116 qcow2_cache_table_release(c, i - to_clean, to_clean); in qcow2_cache_clean_unused()
153 int i; in qcow2_cache_destroy() local
155 for (i = 0; i < c->size; i++) { in qcow2_cache_destroy()
156 assert(c->entries[i].ref == 0); in qcow2_cache_destroy()
183 qcow2_cache_entry_flush(BlockDriverState *bs, Qcow2Cache *c, int i) in qcow2_cache_entry_flush() argument
188 if (!c->entries[i].dirty || !c->entries[i].offset) { in qcow2_cache_entry_flush()
193 c == s->l2_table_cache, i); in qcow2_cache_entry_flush()
210 c->entries[i].offset, c->table_size, false); in qcow2_cache_entry_flush()
213 c->entries[i].offset, c->table_size, false); in qcow2_cache_entry_flush()
216 c->entries[i].offset, c->table_size, false); in qcow2_cache_entry_flush()
229 ret = bdrv_pwrite(bs->file, c->entries[i].offset, c->table_size, in qcow2_cache_entry_flush()
230 qcow2_cache_get_table_addr(c, i), 0); in qcow2_cache_entry_flush()
235 c->entries[i].dirty = false; in qcow2_cache_entry_flush()
245 int i; in qcow2_cache_write() local
249 for (i = 0; i < c->size; i++) { in qcow2_cache_write()
250 ret = qcow2_cache_entry_flush(bs, c, i); in qcow2_cache_write()
303 int ret, i; in qcow2_cache_empty() local
310 for (i = 0; i < c->size; i++) { in qcow2_cache_empty()
311 assert(c->entries[i].ref == 0); in qcow2_cache_empty()
312 c->entries[i].offset = 0; in qcow2_cache_empty()
313 c->entries[i].lru_counter = 0; in qcow2_cache_empty()
328 int i; in qcow2_cache_do_get() local
347 i = lookup_index = (offset / c->table_size * 4) % c->size; in qcow2_cache_do_get()
349 const Qcow2CachedTable *t = &c->entries[i]; in qcow2_cache_do_get()
355 min_lru_index = i; in qcow2_cache_do_get()
357 if (++i == c->size) { in qcow2_cache_do_get()
358 i = 0; in qcow2_cache_do_get()
360 } while (i != lookup_index); in qcow2_cache_do_get()
369 i = min_lru_index; in qcow2_cache_do_get()
371 c == s->l2_table_cache, i); in qcow2_cache_do_get()
373 ret = qcow2_cache_entry_flush(bs, c, i); in qcow2_cache_do_get()
379 c == s->l2_table_cache, i); in qcow2_cache_do_get()
380 c->entries[i].offset = 0; in qcow2_cache_do_get()
387 qcow2_cache_get_table_addr(c, i), 0); in qcow2_cache_do_get()
393 c->entries[i].offset = offset; in qcow2_cache_do_get()
397 c->entries[i].ref++; in qcow2_cache_do_get()
398 *table = qcow2_cache_get_table_addr(c, i); in qcow2_cache_do_get()
401 c == s->l2_table_cache, i); in qcow2_cache_do_get()
420 int i = qcow2_cache_get_table_idx(c, *table); in qcow2_cache_put() local
422 c->entries[i].ref--; in qcow2_cache_put()
425 if (c->entries[i].ref == 0) { in qcow2_cache_put()
426 c->entries[i].lru_counter = ++c->lru_counter; in qcow2_cache_put()
429 assert(c->entries[i].ref >= 0); in qcow2_cache_put()
434 int i = qcow2_cache_get_table_idx(c, table); in qcow2_cache_entry_mark_dirty() local
435 assert(c->entries[i].offset != 0); in qcow2_cache_entry_mark_dirty()
436 c->entries[i].dirty = true; in qcow2_cache_entry_mark_dirty()
441 int i; in qcow2_cache_is_table_offset() local
443 for (i = 0; i < c->size; i++) { in qcow2_cache_is_table_offset()
444 if (c->entries[i].offset == offset) { in qcow2_cache_is_table_offset()
445 return qcow2_cache_get_table_addr(c, i); in qcow2_cache_is_table_offset()
453 int i = qcow2_cache_get_table_idx(c, table); in qcow2_cache_discard() local
455 assert(c->entries[i].ref == 0); in qcow2_cache_discard()
457 c->entries[i].offset = 0; in qcow2_cache_discard()
458 c->entries[i].lru_counter = 0; in qcow2_cache_discard()
459 c->entries[i].dirty = false; in qcow2_cache_discard()
461 qcow2_cache_table_release(c, i, 1); in qcow2_cache_discard()