Use __GFP_ZONE_MASK to replace (__GFP_DMA32 | __GFP_HIGHMEM). In function alloc_extent_state, it is obvious that __GFP_DMA is not the expecting zone type. ___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP bitmasks, the bottom three bits of GFP mask is reserved for storing encoded zone number. __GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with each others by OR. Signed-off-by: Huaisheng Ye <yehs1@xxxxxxxxxx> Cc: Chris Mason <clm@xxxxxx> Cc: Josef Bacik <jbacik@xxxxxx> Cc: David Sterba <dsterba@xxxxxxxx> --- fs/btrfs/extent_io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index dfeb74a..6653e9a 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -220,7 +220,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask) * The given mask might be not appropriate for the slab allocator, * drop the unsupported bits */ - mask &= ~(__GFP_DMA32|__GFP_HIGHMEM); + mask &= ~__GFP_ZONE_MASK; state = kmem_cache_alloc(extent_state_cache, mask); if (!state) return state; -- 1.8.3.1