Commit [66d2f4]  Maximize  Restore  History

shmem: fix init_page_accessed use to stop !PageLRU bug

Under shmem swapping load, I sometimes hit the VM_BUG_ON_PAGE(!PageLRU)
in isolate_lru_pages() at mm/vmscan.c:1281!

Commit 2457aec63745 ("mm: non-atomically mark page accessed during page
cache allocation where possible") looks like interrupted work-in-progress.

mm/filemap.c's call to init_page_accessed() is fine, but not mm/shmem.c's
- shmem_write_begin() is clearly wrong to use it after shmem_getpage(),
when the page is always visible in radix_tree, and often already on LRU.

Revert change to shmem_write_begin(), and use init_page_accessed() or
mark_page_accessed() appropriately for SGP_WRITE in shmem_getpage_gfp().

SGP_WRITE also covers shmem_symlink(), which did not mark_page_accessed()
before; but since many other filesystems use [__]page_symlink(), which did
and does mark the page accessed, consider this as rectifying an oversight.

Signed-off-by: Hugh Dickins <>
Acked-by: Mel Gorman <>
Cc: Johannes Weiner <>
Cc: Vlastimil Babka <>
Cc: Michal Hocko <>
Cc: Dave Hansen <>
Cc: Prabhakar Lad <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>

Hugh Dickins Hugh Dickins 2014-07-02

Linus Torvalds Linus Torvalds 2014-07-03

changed mm/shmem.c
mm/shmem.c Diff Switch to side-by-side view

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.

No, thanks