mirror of https://gitee.com/openkylin/linux.git
mm: shmem: avoid atomic operation during shmem_getpage_gfp
shmem_getpage_gfp uses an atomic operation to set the SwapBacked field before it's even added to the LRU or visible. This is unnecessary as what could it possible race against? Use an unlocked variant. Signed-off-by: Mel Gorman <mgorman@suse.de> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Rik van Riel <riel@redhat.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Jan Kara <jack@suse.cz> Cc: Michal Hocko <mhocko@suse.cz> Cc: Hugh Dickins <hughd@google.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Theodore Ts'o <tytso@mit.edu> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b745bc85f2
commit
07a4278843
|
@ -208,6 +208,7 @@ PAGEFLAG(Pinned, pinned) TESTSCFLAG(Pinned, pinned) /* Xen */
|
||||||
PAGEFLAG(SavePinned, savepinned); /* Xen */
|
PAGEFLAG(SavePinned, savepinned); /* Xen */
|
||||||
PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)
|
PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)
|
||||||
PAGEFLAG(SwapBacked, swapbacked) __CLEARPAGEFLAG(SwapBacked, swapbacked)
|
PAGEFLAG(SwapBacked, swapbacked) __CLEARPAGEFLAG(SwapBacked, swapbacked)
|
||||||
|
__SETPAGEFLAG(SwapBacked, swapbacked)
|
||||||
|
|
||||||
__PAGEFLAG(SlobFree, slob_free)
|
__PAGEFLAG(SlobFree, slob_free)
|
||||||
|
|
||||||
|
|
|
@ -1132,7 +1132,7 @@ static int shmem_getpage_gfp(struct inode *inode, pgoff_t index,
|
||||||
goto decused;
|
goto decused;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPageSwapBacked(page);
|
__SetPageSwapBacked(page);
|
||||||
__set_page_locked(page);
|
__set_page_locked(page);
|
||||||
error = mem_cgroup_charge_file(page, current->mm,
|
error = mem_cgroup_charge_file(page, current->mm,
|
||||||
gfp & GFP_RECLAIM_MASK);
|
gfp & GFP_RECLAIM_MASK);
|
||||||
|
|
Loading…
Reference in New Issue