Re: [PATCH] mm: page_isolation: use compound_nr() correctly in isolate_single_pageblock()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 5/31/22 08:14, Zi Yan wrote:
> From: Zi Yan <ziy@xxxxxxxxxx>
> 
> When compound_nr(page) was used, page was not guaranteed to be the head
> of the compound page and it could cause an infinite loop. Fix it by calling
> it on the head page.
> 
> Fixes: b2c9e2fbba32 ("mm: make alloc_contig_range work at pageblock granularity")
> Reported-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> Link: https://lore.kernel.org/linux-mm/20220530115027.123341-1-anshuman.khandual@xxxxxxx/
> Signed-off-by: Zi Yan <ziy@xxxxxxxxxx>

Reviewed-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>

> ---
>  mm/page_isolation.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/page_isolation.c b/mm/page_isolation.c
> index 6021f8444b5a..d200d41ad0d3 100644
> --- a/mm/page_isolation.c
> +++ b/mm/page_isolation.c
> @@ -385,9 +385,9 @@ static int isolate_single_pageblock(unsigned long boundary_pfn, int flags,
>  		 * above do the rest. If migration is not possible, just fail.
>  		 */
>  		if (PageCompound(page)) {
> -			unsigned long nr_pages = compound_nr(page);
>  			struct page *head = compound_head(page);
>  			unsigned long head_pfn = page_to_pfn(head);
> +			unsigned long nr_pages = compound_nr(head);
>  
>  			if (head_pfn + nr_pages <= boundary_pfn) {
>  				pfn = head_pfn + nr_pages;




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux