diff mbox series

mm: migrate: use thp_order instead of HPAGE_PMD_ORDER for new page allocation.

Message ID 20220404165325.1883267-1-zi.yan@sent.com (mailing list archive)
State New
Headers show
Series mm: migrate: use thp_order instead of HPAGE_PMD_ORDER for new page allocation. | expand

Commit Message

Zi Yan April 4, 2022, 4:53 p.m. UTC
From: Zi Yan <ziy@nvidia.com>

With folios support, it is possible to have other than HPAGE_PMD_ORDER
THPs, in the form of folios, in the system. Use thp_order() to correctly
determine the source page order during migration.

Fixes: d68eccad3706 ("mm/filemap: Allow large folios to be added to the page cache")
Reported-by: Naoya Horiguchi <naoya.horiguchi@linux.dev>
Link: https://lore.kernel.org/linux-mm/20220404132908.GA785673@u2004/
Signed-off-by: Zi Yan <ziy@nvidia.com>
---
 mm/mempolicy.c | 2 +-
 mm/migrate.c   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Andrew Morton April 4, 2022, 6:28 p.m. UTC | #1
On Mon,  4 Apr 2022 12:53:25 -0400 Zi Yan <zi.yan@sent.com> wrote:

> From: Zi Yan <ziy@nvidia.com>
> 
> With folios support, it is possible to have other than HPAGE_PMD_ORDER
> THPs, in the form of folios, in the system. Use thp_order() to correctly
> determine the source page order during migration.

Changelog doesn't describe the end user visible effects of the bug. 
And it really should, because

> Link: https://lore.kernel.org/linux-mm/20220404132908.GA785673@u2004/

it fixes a kernel crash!
Zi Yan April 4, 2022, 6:37 p.m. UTC | #2
On 4 Apr 2022, at 14:28, Andrew Morton wrote:

> On Mon,  4 Apr 2022 12:53:25 -0400 Zi Yan <zi.yan@sent.com> wrote:
>
>> From: Zi Yan <ziy@nvidia.com>
>>
>> With folios support, it is possible to have other than HPAGE_PMD_ORDER
>> THPs, in the form of folios, in the system. Use thp_order() to correctly
>> determine the source page order during migration.
>
> Changelog doesn't describe the end user visible effects of the bug.
> And it really should, because
>
>> Link: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore.kernel.org%2Flinux-mm%2F20220404132908.GA785673%40u2004%2F&amp;data=04%7C01%7Cziy%40nvidia.com%7Cbf27ebf19d8a49a9b4b008da1668dc09%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637846936880192108%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=pgvzV3wv6icqkMaWY2koB9X4VqlPMaSHeB8r7%2Fv1938%3D&amp;reserved=0
>
> it fixes a kernel crash!

Thank you for adding the information.

--
Best Regards,
Yan, Zi
diff mbox series

Patch

diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 6b34c5d5e65a..88a74bc4cba5 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -1209,7 +1209,7 @@  static struct page *new_page(struct page *page, unsigned long start)
 		struct page *thp;
 
 		thp = alloc_hugepage_vma(GFP_TRANSHUGE, vma, address,
-					 HPAGE_PMD_ORDER);
+					 thp_order(page));
 		if (!thp)
 			return NULL;
 		prep_transhuge_page(thp);
diff --git a/mm/migrate.c b/mm/migrate.c
index 4639dfc2b7ee..b58b96fdb174 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1553,7 +1553,7 @@  struct page *alloc_migration_target(struct page *page, unsigned long private)
 		 */
 		gfp_mask &= ~__GFP_RECLAIM;
 		gfp_mask |= GFP_TRANSHUGE;
-		order = HPAGE_PMD_ORDER;
+		order = thp_order(page);
 	}
 	zidx = zone_idx(page_zone(page));
 	if (is_highmem_idx(zidx) || zidx == ZONE_MOVABLE)