Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43afc194 authored by Vitaly Wool's avatar Vitaly Wool Committed by Linus Torvalds
Browse files

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: default avatarVitaly Wool <vitalywool@gmail.com>
Reviewed-by: default avatarDan Streetman <ddstreet@ieee.org>
Cc: Seth Jennings <sjenning@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3a06bb78
Loading
Loading
Loading
Loading
+14 −10
Original line number Diff line number Diff line
@@ -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 @@ static int z3fold_reclaim_page(struct z3fold_pool *pool, unsigned int retries)
			pool->pages_nr--;
			spin_unlock(&pool->lock);
			return 0;
		} else if (zhdr->first_chunks != 0 &&
			   zhdr->last_chunks != 0 && zhdr->middle_chunks != 0) {
		}  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 if (!test_bit(PAGE_HEADLESS, &page->private)) {
			} else {
				z3fold_compact_page(zhdr);
				/* add to unbuddied list */
				freechunks = num_free_chunks(zhdr);
			list_add(&zhdr->buddy, &pool->unbuddied[freechunks]);
				list_add(&zhdr->buddy,
					 &pool->unbuddied[freechunks]);
			}
		}

		/* add to beginning of LRU */