diff mbox series

mm/page-flags: Check enforce parameter in PF_ONLY_HEAD()

Message ID 1553689672-28343-1-git-send-email-anshuman.khandual@arm.com (mailing list archive)
State New, archived
Headers show
Series mm/page-flags: Check enforce parameter in PF_ONLY_HEAD() | expand

Commit Message

Anshuman Khandual March 27, 2019, 12:27 p.m. UTC
Just check for enforce parameter in PF_ONLY_HEAD() wrapper before calling
VM_BUG_ON_PGFLAGS() for tail pages.

Fixes: 62906027091f ("mm: add PageWaiters indicating tasks are waiting for a page bit")
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
---
 include/linux/page-flags.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Michal Hocko March 27, 2019, 1:15 p.m. UTC | #1
[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@arm.com>
> ---
>  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
>
Anshuman Khandual March 27, 2019, 1:59 p.m. UTC | #2
On 03/27/2019 06:45 PM, Michal Hocko wrote:
> [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?

Did not hit any problem directly. Just from code inspection it seemed that
the enforce check was missing as compared to other wrappers there. I felt
that the commit could have probably omitted the check by mistake.
diff mbox series

Patch

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);	\