Re: [PATCH] mm/page-flags: Check enforce parameter in PF_ONLY_HEAD()

From: Michal Hocko
Date: Wed Mar 27 2019 - 09:15:10 EST


[Cc Nick]

On Wed 27-03-19 17:57:52, Anshuman Khandual wrote:
> Just check for enforce parameter in PF_ONLY_HEAD() wrapper before calling
> VM_BUG_ON_PGFLAGS() for tail pages.

Why is this an actual fix? Only TESTPAGEFLAG doesn't enforce the check
but I suspect that Nick just wanted the check to be _always_ performed
as the name suggests. What kind of problem are you trying to solve?

> Fixes: 62906027091f ("mm: add PageWaiters indicating tasks are waiting for a page bit")
> Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> ---
> include/linux/page-flags.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
> index 9f8712a4b1a5..82539e287bc6 100644
> --- a/include/linux/page-flags.h
> +++ b/include/linux/page-flags.h
> @@ -229,7 +229,7 @@ static inline void page_init_poison(struct page *page, size_t size)
> #define PF_ANY(page, enforce) PF_POISONED_CHECK(page)
> #define PF_HEAD(page, enforce) PF_POISONED_CHECK(compound_head(page))
> #define PF_ONLY_HEAD(page, enforce) ({ \
> - VM_BUG_ON_PGFLAGS(PageTail(page), page); \
> + VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \
> PF_POISONED_CHECK(page); })
> #define PF_NO_TAIL(page, enforce) ({ \
> VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \
> --
> 2.20.1
>

--
Michal Hocko
SUSE Labs