staging: zcache: handle zcache_[eph|pers]_zpages for zero-filled page
authorWanpeng Li <liwanp@linux.vnet.ibm.com>
Tue, 2 Apr 2013 02:46:15 +0000 (10:46 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 2 Apr 2013 19:49:51 +0000 (12:49 -0700)
Increment/decrement zcache_[eph|pers]_zpages for zero-filled pages,
the main point of the counters for zpages and pageframes is to be
able to calculate density == zpages/pageframes. A zero-filled page
becomes a zpage that "compresses" to zero bytes and, as a result,
requires zero pageframes for storage. So the zpages counter should
be increased but the pageframes counter should not.

[Dan Magenheimer <dan.magenheimer@oracle.com>: patch description]
Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/zcache/zcache-main.c

index 927d5fdaa3b104659a32143274c98d37035391c5..1994cab6edf196708f679e33b11157cf8122c214 100644 (file)
@@ -648,6 +648,8 @@ static int zcache_pampd_get_data_and_free(char *data, size_t *sizep, bool raw,
        if (pampd == (void *)ZERO_FILLED) {
                handle_zero_filled_page(data);
                zero_filled = true;
+               zsize = 0;
+               zpages = 1;
                if (!raw)
                        *sizep = PAGE_SIZE;
                goto zero_fill;
@@ -696,8 +698,11 @@ static void zcache_pampd_free(void *pampd, struct tmem_pool *pool,
 
        BUG_ON(preemptible());
 
-       if (pampd == (void *)ZERO_FILLED)
+       if (pampd == (void *)ZERO_FILLED) {
                zero_filled = true;
+               zsize = 0;
+               zpages = 1;
+       }
 
        if (pampd_is_remote(pampd) && !zero_filled) {
                BUG_ON(!ramster_enabled);