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

Commit 937a94c9 authored by Jacobo Giralt's avatar Jacobo Giralt Committed by Linus Torvalds
Browse files

mm: migrate: one less atomic operation



migrate_page_move_mapping() drops a reference from the old page after
unfreezing its counter.  Both operations can be merged into a single
atomic operation by directly unfreezing to one less reference.

The same applies to migrate_huge_page_move_mapping().

Signed-off-by: default avatarJacobo Giralt <jacobo.giralt@gmail.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Minchan Kim <minchan.kim@gmail.com>
Cc: Johannes Weiner <jweiner@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 90a5d5af
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -269,12 +269,12 @@ static int migrate_page_move_mapping(struct address_space *mapping,

	radix_tree_replace_slot(pslot, newpage);

	page_unfreeze_refs(page, expected_count);
	/*
	 * Drop cache reference from old page.
	 * Drop cache reference from old page by unfreezing
	 * to one less reference.
	 * We know this isn't the last reference.
	 */
	__put_page(page);
	page_unfreeze_refs(page, expected_count - 1);

	/*
	 * If moved to a different zone then also account
@@ -334,9 +334,7 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,

	radix_tree_replace_slot(pslot, newpage);

	page_unfreeze_refs(page, expected_count);

	__put_page(page);
	page_unfreeze_refs(page, expected_count - 1);

	spin_unlock_irq(&mapping->tree_lock);
	return 0;