diff --git a/mm/swap_state.c b/mm/swap_state.c index 1273de4f60a632301a1289e6800d124367c3a456..ba7822f1cc3dc9a9fe654f0561b95b480a4ddc58 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -547,10 +547,11 @@ static unsigned long swapin_nr_pages(unsigned long offset) return 1; hits = atomic_xchg(&swapin_readahead_hits, 0); - pages = __swapin_nr_pages(prev_offset, offset, hits, max_pages, + pages = __swapin_nr_pages(READ_ONCE(prev_offset), offset, hits, + max_pages, atomic_read(&last_readahead_pages)); if (!hits) - prev_offset = offset; + WRITE_ONCE(prev_offset, offset); atomic_set(&last_readahead_pages, pages); return pages;