Orit Wasserman <owass...@redhat.com> wrote:
> Instead of using cache_insert do the update itself
>
> Signed-off-by: Orit Wasserman <owass...@redhat.com>
> ---
>  page_cache.c | 16 ++++++----------
>  1 file changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/page_cache.c b/page_cache.c
> index 748957b..21a4cde 100644
> --- a/page_cache.c
> +++ b/page_cache.c
> @@ -192,18 +192,14 @@ 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);
> +                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;
>              }
>          }
>      }

We are missing
    if (!it->it_data) {
        cache->num_items++;
    }

in the !new_it->it_date case.

Later, Juan.

Reply via email to