No big deal, but since mem_cgroup_shrink_usage doesn't require a page to operate upon, page_cache_release the swappage before calling it, so it's not pinned across the reclaim. Signed-off-by: Hugh Dickins Acked-by: KAMEZAWA Hiroyuki Cc: Balbir Singh Cc: "Eric W. Biederman" Cc: Pavel Emelyanov Cc: Li Zefan Cc: YAMAMOTO Takashi Cc: Paul Menage Cc: David Rientjes Signed-off-by: Andrew Morton --- mm/shmem.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff -puN mm/shmem.c~memcg-helper-function-for-relcaim-from-shmem-memcg-shmem_getpage-release-page-sooner mm/shmem.c --- a/mm/shmem.c~memcg-helper-function-for-relcaim-from-shmem-memcg-shmem_getpage-release-page-sooner +++ a/mm/shmem.c @@ -1315,16 +1315,14 @@ repeat: shmem_swp_unmap(entry); spin_unlock(&info->lock); unlock_page(swappage); + page_cache_release(swappage); if (error == -ENOMEM) { /* allow reclaim from this memory cgroup */ error = mem_cgroup_shrink_usage(current->mm, - gfp & ~__GFP_HIGHMEM); - if (error) { - page_cache_release(swappage); + gfp); + if (error) goto failed; - } } - page_cache_release(swappage); goto repeat; } } else if (sgp == SGP_READ && !filepage) { _