X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=mm%2Fzsmalloc.c;h=c1ea19478119f21afa1a3a2d27537c251f6c152d;hb=f8d4d71d8d22b39043c524e1d9f007bcd54bd2fa;hp=fc083996e40a6a1c7fb4116b1aecd3f40fab32c7;hpb=bddaf79195c4b9bae86b494fb6cfe855f8415afb;p=firefly-linux-kernel-4.4.55.git diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index fc083996e40a..c1ea19478119 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -1732,10 +1732,13 @@ static struct page *isolate_source_page(struct size_class *class) static unsigned long zs_can_compact(struct size_class *class) { unsigned long obj_wasted; + unsigned long obj_allocated = zs_stat_get(class, OBJ_ALLOCATED); + unsigned long obj_used = zs_stat_get(class, OBJ_USED); - obj_wasted = zs_stat_get(class, OBJ_ALLOCATED) - - zs_stat_get(class, OBJ_USED); + if (obj_allocated <= obj_used) + return 0; + obj_wasted = obj_allocated - obj_used; obj_wasted /= get_maxobj_per_zspage(class->size, class->pages_per_zspage);