diff --git a/mm/filemap.c b/mm/filemap.c index 79c4b2b0b14..8ed5c5c0be5 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2343,9 +2343,17 @@ repeat: if (page) goto found; +retry: page = __page_cache_alloc(gfp_mask & ~gfp_notmask); if (!page) return NULL; + + if (is_cma_pageblock(page)) { + __free_page(page); + gfp_notmask |= __GFP_MOVABLE; + goto retry; + } + status = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL & ~gfp_notmask); if (unlikely(status)) {