From: KOSAKI Motohiro <[email protected]>
Currently, set_pageblock_migratetype screw up MIGRATE_CMA and
MIGRATE_ISOLATE if page_group_by_mobility_disabled is true. It
rewrite the argument to MIGRATE_UNMOVABLE and we lost these attribute.
The problem was introduced commit 49255c619f (page allocator: move
check for disabled anti-fragmentation out of fastpath). So, 4 years
lived issue may mean that nobody uses page_group_by_mobility_disabled.
But anyway, this patch fixes the problem.
Signed-off-by: KOSAKI Motohiro <[email protected]>
Cc: Mel Gorman <[email protected]>
---
mm/page_alloc.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index dd886fa..ef44d95 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -234,8 +234,8 @@ int page_group_by_mobility_disabled __read_mostly;
void set_pageblock_migratetype(struct page *page, int migratetype)
{
-
- if (unlikely(page_group_by_mobility_disabled))
+ if (unlikely(page_group_by_mobility_disabled &&
+ migratetype < MIGRATE_PCPTYPES))
migratetype = MIGRATE_UNMOVABLE;
set_pageblock_flags_group(page, (unsigned long)migratetype,
--
1.7.1
On Fri, Oct 25, 2013 at 02:09:35PM -0400, [email protected] wrote:
> From: KOSAKI Motohiro <[email protected]>
>
> Currently, set_pageblock_migratetype screw up MIGRATE_CMA and
> MIGRATE_ISOLATE if page_group_by_mobility_disabled is true. It
> rewrite the argument to MIGRATE_UNMOVABLE and we lost these attribute.
>
> The problem was introduced commit 49255c619f (page allocator: move
> check for disabled anti-fragmentation out of fastpath). So, 4 years
> lived issue may mean that nobody uses page_group_by_mobility_disabled.
>
Nobody uses page_group_by_mobility_disabled with CMA at least.
page_group_by_mobility_disabled only kicks in automatically for small
machines so it's possible the condition is very rarely encountered.
Anyway
Acked-by: Mel Gorman <[email protected]>
--
Mel Gorman
SUSE Labs