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

Commit b66375b5 authored by Yu Zhao's avatar Yu Zhao Committed by Greg Kroah-Hartman
Browse files

mm: use swp_offset as key in shmem_replace_page()

commit c1cb20d43728aa9b5393bd8d489bc85c142949b2 upstream.

We changed the key of swap cache tree from swp_entry_t.val to
swp_offset.  We need to do so in shmem_replace_page() as well.

Hugh said:
 "shmem_replace_page() has been wrong since the day I wrote it: good
  enough to work on swap "type" 0, which is all most people ever use
  (especially those few who need shmem_replace_page() at all), but
  broken once there are any non-0 swp_type bits set in the higher order
  bits"

Link: http://lkml.kernel.org/r/20181121215442.138545-1-yuzhao@google.com


Fixes: f6ab1f7f ("mm, swap: use offset of swap entry as key of swap cache")
Signed-off-by: default avatarYu Zhao <yuzhao@google.com>
Reviewed-by: default avatarMatthew Wilcox <willy@infradead.org>
Acked-by: default avatarHugh Dickins <hughd@google.com>
Cc: <stable@vger.kernel.org>	[4.9+]
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 16a2d602
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1551,11 +1551,13 @@ static int shmem_replace_page(struct page **pagep, gfp_t gfp,
{
	struct page *oldpage, *newpage;
	struct address_space *swap_mapping;
	swp_entry_t entry;
	pgoff_t swap_index;
	int error;

	oldpage = *pagep;
	swap_index = page_private(oldpage);
	entry.val = page_private(oldpage);
	swap_index = swp_offset(entry);
	swap_mapping = page_mapping(oldpage);

	/*
@@ -1574,7 +1576,7 @@ static int shmem_replace_page(struct page **pagep, gfp_t gfp,
	__SetPageLocked(newpage);
	__SetPageSwapBacked(newpage);
	SetPageUptodate(newpage);
	set_page_private(newpage, swap_index);
	set_page_private(newpage, entry.val);
	SetPageSwapCache(newpage);

	/*