Commit 9d8c5b5284e4a0167c5f7b1193692492358b8700

Authored by Heesub Shin
Committed by Linus Torvalds
1 parent e180cf806a

mm: zbud: fix condition check on allocation size

zbud_alloc() incorrectly verifies the size of allocation limit.  It
should deny the allocation request greater than (PAGE_SIZE -
ZHDR_SIZE_ALIGNED - CHUNK_SIZE), not (PAGE_SIZE - ZHDR_SIZE_ALIGNED)
which has no remaining spaces for its buddy.  There is no point in
spending the entire zbud page storing only a single page, since we don't
have any benefits.

Signed-off-by: Heesub Shin <heesub.shin@samsung.com>
Acked-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
Cc: Bob Liu <bob.liu@oracle.com>
Cc: Dongjun Shin <d.j.shin@samsung.com>
Cc: Sunae Seo <sunae.seo@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

... ... @@ -257,7 +257,7 @@
257 257  
258 258 if (size <= 0 || gfp & __GFP_HIGHMEM)
259 259 return -EINVAL;
260   - if (size > PAGE_SIZE - ZHDR_SIZE_ALIGNED)
  260 + if (size > PAGE_SIZE - ZHDR_SIZE_ALIGNED - CHUNK_SIZE)
261 261 return -ENOSPC;
262 262 chunks = size_to_chunks(size);
263 263 spin_lock(&pool->lock);