diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2ce47c7e996e..d2c31f60058b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4339,6 +4339,9 @@ retry: if (current->flags & PF_MEMALLOC) goto nopage; + if (fatal_signal_pending(current) && !(gfp_mask & __GFP_NOFAIL)) + goto nopage; + /* Try direct reclaim and then allocating */ page = __alloc_pages_direct_reclaim(gfp_mask, order, alloc_flags, ac, &did_some_progress); diff --git a/mm/vmscan.c b/mm/vmscan.c index 15f97ea80b47..c3303c5bc4c8 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1970,13 +1970,13 @@ shrink_inactive_list(unsigned long nr_to_scan, struct lruvec *lruvec, if (stalled) return 0; - /* wait a bit for the reclaimer. */ - msleep(100); - stalled = true; - /* We are about to die and free our memory. Return now. */ if (fatal_signal_pending(current)) return SWAP_CLUSTER_MAX; + + /* wait a bit for the reclaimer. */ + msleep(100); + stalled = true; } lru_add_drain();