mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 12:21:37 +00:00
mm/z3fold.c: avoid modifying HEADLESS page and minor cleanup
Fix erroneous z3fold header access in a HEADLESS page in reclaim function, and change one remaining direct handle-to-buddy conversion to use the appropriate helper. Link: http://lkml.kernel.org/r/5748706F.9020208@gmail.com Signed-off-by: Vitaly Wool <vitalywool@gmail.com> Reviewed-by: Dan Streetman <ddstreet@ieee.org> Cc: Seth Jennings <sjenning@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3a06bb78ce
commit
43afc19417
24
mm/z3fold.c
24
mm/z3fold.c
@ -412,7 +412,7 @@ static void z3fold_free(struct z3fold_pool *pool, unsigned long handle)
|
||||
/* HEADLESS page stored */
|
||||
bud = HEADLESS;
|
||||
} else {
|
||||
bud = (handle - zhdr->first_num) & BUDDY_MASK;
|
||||
bud = handle_to_buddy(handle);
|
||||
|
||||
switch (bud) {
|
||||
case FIRST:
|
||||
@ -572,15 +572,19 @@ next:
|
||||
pool->pages_nr--;
|
||||
spin_unlock(&pool->lock);
|
||||
return 0;
|
||||
} else if (zhdr->first_chunks != 0 &&
|
||||
zhdr->last_chunks != 0 && zhdr->middle_chunks != 0) {
|
||||
/* Full, add to buddied list */
|
||||
list_add(&zhdr->buddy, &pool->buddied);
|
||||
} else if (!test_bit(PAGE_HEADLESS, &page->private)) {
|
||||
z3fold_compact_page(zhdr);
|
||||
/* add to unbuddied list */
|
||||
freechunks = num_free_chunks(zhdr);
|
||||
list_add(&zhdr->buddy, &pool->unbuddied[freechunks]);
|
||||
} else if (!test_bit(PAGE_HEADLESS, &page->private)) {
|
||||
if (zhdr->first_chunks != 0 &&
|
||||
zhdr->last_chunks != 0 &&
|
||||
zhdr->middle_chunks != 0) {
|
||||
/* Full, add to buddied list */
|
||||
list_add(&zhdr->buddy, &pool->buddied);
|
||||
} else {
|
||||
z3fold_compact_page(zhdr);
|
||||
/* add to unbuddied list */
|
||||
freechunks = num_free_chunks(zhdr);
|
||||
list_add(&zhdr->buddy,
|
||||
&pool->unbuddied[freechunks]);
|
||||
}
|
||||
}
|
||||
|
||||
/* add to beginning of LRU */
|
||||
|
Loading…
Reference in New Issue
Block a user