mirror of https://gitee.com/openkylin/qemu.git
Fix cache_resize to keep old entry age
Instead of using cache_insert do the update itself Signed-off-by: Orit Wasserman <owasserm@redhat.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
0db65d624e
commit
a0ee2031db
19
page_cache.c
19
page_cache.c
|
@ -192,18 +192,17 @@ int64_t cache_resize(PageCache *cache, int64_t new_num_pages)
|
|||
if (old_it->it_addr != -1) {
|
||||
/* check for collision, if there is, keep MRU page */
|
||||
new_it = cache_get_by_addr(new_cache, old_it->it_addr);
|
||||
if (new_it->it_data) {
|
||||
if (new_it->it_data && new_it->it_age >= old_it->it_age) {
|
||||
/* keep the MRU page */
|
||||
if (new_it->it_age >= old_it->it_age) {
|
||||
g_free(old_it->it_data);
|
||||
} else {
|
||||
g_free(new_it->it_data);
|
||||
new_it->it_data = old_it->it_data;
|
||||
new_it->it_age = old_it->it_age;
|
||||
new_it->it_addr = old_it->it_addr;
|
||||
}
|
||||
g_free(old_it->it_data);
|
||||
} else {
|
||||
cache_insert(new_cache, old_it->it_addr, old_it->it_data);
|
||||
if (!new_it->it_data) {
|
||||
new_cache->num_items++;
|
||||
}
|
||||
g_free(new_it->it_data);
|
||||
new_it->it_data = old_it->it_data;
|
||||
new_it->it_age = old_it->it_age;
|
||||
new_it->it_addr = old_it->it_addr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue