mm/vmscan: remove the PageDirty check after MADV_FREE pages are page_ref_freezed
Patch series "Cleanups for vmscan", v2. This series contains cleanups to remove unneeded return value, misleading setting and so on. Also this remove the PageDirty check after MADV_FREE pages are page_ref_freezed. More details can be found in the respective changelogs. This patch (of 4): If the MADV_FREE pages are redirtied before they could be reclaimed, put the pages back to anonymous LRU list by setting SwapBacked flag and the pages will be reclaimed in normal swapout way. But as Yu Zhao pointed out, "The page has only one reference left, which is from the isolation. After the caller puts the page back on lru and drops the reference, the page will be freed anyway. It doesn't matter which lru it goes." So we don't bother checking PageDirty here. [Yu Zhao's comment is also quoted in the code.] Link: https://lkml.kernel.org/r/20210717065911.61497-1-linmiaohe@huawei.com Link: https://lkml.kernel.org/r/20210717065911.61497-2-linmiaohe@huawei.com Signed-off-by: Miaohe Lin <linmiaohe@huawei.com> Reviewed-by: Yu Zhao <yuzhao@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Michal Hocko <mhocko@suse.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Alex Shi <alexs@kernel.org> Cc: Alistair Popple <apopple@nvidia.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Minchan Kim <minchan@kernel.org> Cc: David Hildenbrand <david@redhat.com> Cc: Shaohua Li <shli@fb.com> Cc: Hillf Danton <hillf.zj@alibaba-inc.com> Cc: John Hubbard <jhubbard@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9647875be5
commit
d17be2d9ff
13
mm/vmscan.c
13
mm/vmscan.c
@ -1732,11 +1732,14 @@ retry:
|
||||
/* follow __remove_mapping for reference */
|
||||
if (!page_ref_freeze(page, 1))
|
||||
goto keep_locked;
|
||||
if (PageDirty(page)) {
|
||||
page_ref_unfreeze(page, 1);
|
||||
goto keep_locked;
|
||||
}
|
||||
|
||||
/*
|
||||
* The page has only one reference left, which is
|
||||
* from the isolation. After the caller puts the
|
||||
* page back on lru and drops the reference, the
|
||||
* page will be freed anyway. It doesn't matter
|
||||
* which lru it goes. So we don't bother checking
|
||||
* PageDirty here.
|
||||
*/
|
||||
count_vm_event(PGLAZYFREED);
|
||||
count_memcg_page_event(page, PGLAZYFREED);
|
||||
} else if (!mapping || !__remove_mapping(mapping, page, true,
|
||||
|
Loading…
x
Reference in New Issue
Block a user