The patch titled Subject: mm: remove superfluous __ClearPageWaiters() has been added to the -mm tree. Its filename is mm-remove-superfluous-__clearpagewaiters.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-remove-superfluous-__clearpagewaiters.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-remove-superfluous-__clearpagewaiters.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Yu Zhao <yuzhao@xxxxxxxxxx> Subject: mm: remove superfluous __ClearPageWaiters() Presumably __ClearPageWaiters() was added to follow the previously removed __ClearPageActive() pattern. Only flags that are in PAGE_FLAGS_CHECK_AT_FREE needs to be properly cleared because otherwise we think there may be some kind of leak. PG_waiters is not one of those flags and leaving the clearing to PAGE_FLAGS_CHECK_AT_PREP is more appropriate. Link: http://lkml.kernel.org/r/20200818184704.3625199-3-yuzhao@xxxxxxxxxx Signed-off-by: Yu Zhao <yuzhao@xxxxxxxxxx> Cc: Alexander Duyck <alexander.h.duyck@xxxxxxxxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: Huang Ying <ying.huang@xxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: Nicholas Piggin <npiggin@xxxxxxxxx> Cc: Qian Cai <cai@xxxxxx> Cc: Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/page-flags.h | 2 +- mm/filemap.c | 2 ++ mm/memremap.c | 2 -- mm/swap.c | 3 --- 4 files changed, 3 insertions(+), 6 deletions(-) --- a/include/linux/page-flags.h~mm-remove-superfluous-__clearpagewaiters +++ a/include/linux/page-flags.h @@ -318,7 +318,7 @@ static inline int TestClearPage##uname(s TESTSETFLAG_FALSE(uname) TESTCLEARFLAG_FALSE(uname) __PAGEFLAG(Locked, locked, PF_NO_TAIL) -PAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) __CLEARPAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) +PAGEFLAG(Waiters, waiters, PF_ONLY_HEAD) PAGEFLAG(Error, error, PF_NO_TAIL) TESTCLEARFLAG(Error, error, PF_NO_TAIL) PAGEFLAG(Referenced, referenced, PF_HEAD) TESTCLEARFLAG(Referenced, referenced, PF_HEAD) --- a/mm/filemap.c~mm-remove-superfluous-__clearpagewaiters +++ a/mm/filemap.c @@ -1079,6 +1079,8 @@ static void wake_up_page_bit(struct page * other pages on it. * * That's okay, it's a rare case. The next waker will clear it. + * Otherwise the bit will be cleared by PAGE_FLAGS_CHECK_AT_PREP + * when the page is being freed. */ } spin_unlock_irqrestore(&q->lock, flags); --- a/mm/memremap.c~mm-remove-superfluous-__clearpagewaiters +++ a/mm/memremap.c @@ -471,8 +471,6 @@ void free_devmap_managed_page(struct pag return; } - __ClearPageWaiters(page); - mem_cgroup_uncharge(page); /* --- a/mm/swap.c~mm-remove-superfluous-__clearpagewaiters +++ a/mm/swap.c @@ -90,7 +90,6 @@ static void __page_cache_release(struct del_page_from_lru_list(page, lruvec, page_off_lru(page)); spin_unlock_irqrestore(&pgdat->lru_lock, flags); } - __ClearPageWaiters(page); } static void __put_single_page(struct page *page) @@ -900,8 +899,6 @@ void release_pages(struct page **pages, del_page_from_lru_list(page, lruvec, page_off_lru(page)); } - __ClearPageWaiters(page); - list_add(&page->lru, &pages_to_free); } if (locked_pgdat) _ Patches currently in -mm which might be from yuzhao@xxxxxxxxxx are mm-remove-activate_page-from-unuse_pte.patch mm-remove-superfluous-__clearpageactive.patch mm-remove-superfluous-__clearpagewaiters.patch