summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorOrit Wasserman <owasserm@redhat.com>2013-02-25 19:12:02 +0200
committerJuan Quintela <quintela@redhat.com>2013-03-11 13:32:03 +0100
commita0ee2031dbf5f0183412d4b20a30cbfd404616a8 (patch)
tree06b7364a8abbd528ef7847c60e49ef4f5f3ad068
parent0db65d624e0211a43c011579d6607a50d8f06082 (diff)
downloadfocaccia-qemu-a0ee2031dbf5f0183412d4b20a30cbfd404616a8.tar.gz
focaccia-qemu-a0ee2031dbf5f0183412d4b20a30cbfd404616a8.zip
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>
-rw-r--r--page_cache.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/page_cache.c b/page_cache.c
index 748957bc42..e5717d53c9 100644
--- a/page_cache.c
+++ b/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;
             }
         }
     }