Re: [PATCH] mm/page_alloc: fix memalloc_nocma_{save/restore} APIs

From: Matthew Wilcox
Date: Tue Jul 21 2020 - 08:05:43 EST


On Tue, Jul 21, 2020 at 12:28:49PM +0900, js1304@xxxxxxxxx wrote:
> +static inline unsigned int current_alloc_flags(gfp_t gfp_mask,
> + unsigned int alloc_flags)
> +{
> +#ifdef CONFIG_CMA
> + unsigned int pflags = current->flags;
> +
> + if (!(pflags & PF_MEMALLOC_NOCMA) &&
> + gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
> + alloc_flags |= ALLOC_CMA;

Please don't indent by one tab when splitting a line because it looks like
the second line and third line are part of the same block. Either do
this:

if (!(pflags & PF_MEMALLOC_NOCMA) &&
gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
alloc_flags |= ALLOC_CMA;

or this:
if (!(pflags & PF_MEMALLOC_NOCMA) &&
gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
alloc_flags |= ALLOC_CMA;

> @@ -4619,8 +4631,10 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
> wake_all_kswapds(order, gfp_mask, ac);
>
> reserve_flags = __gfp_pfmemalloc_flags(gfp_mask);
> - if (reserve_flags)
> + if (reserve_flags) {
> alloc_flags = reserve_flags;
> + alloc_flags = current_alloc_flags(gfp_mask, alloc_flags);
> + }

Is this right? Shouldn't you be passing reserve_flags to
current_alloc_flags() here? Also, there's no need to add { } here.