Commit c1cb20d4 authored by Yu Zhao's avatar Yu Zhao Committed by Linus Torvalds

mm: use swp_offset as key in shmem_replace_page()

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

Fixes: f6ab1f7f ("mm, swap: use offset of swap entry as key of swap cache")
Signed-off-by: default avatarYu Zhao <>
Reviewed-by: default avatarMatthew Wilcox <>
Acked-by: default avatarHugh Dickins <>
Cc: <>	[4.9+]
Signed-off-by: default avatarAndrew Morton <>
Signed-off-by: default avatarLinus Torvalds <>
parent 6ff38bd4
......@@ -1509,11 +1509,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);
......@@ -1532,7 +1534,7 @@ static int shmem_replace_page(struct page **pagep, gfp_t gfp,
set_page_private(newpage, swap_index);
set_page_private(newpage, entry.val);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment