summarylogtreecommitdiffstats
path: root/0016-ZEN-mm-Increment-kswapd_waiters-for-throttled-direct.patch
diff options
context:
space:
mode:
Diffstat (limited to '0016-ZEN-mm-Increment-kswapd_waiters-for-throttled-direct.patch')
-rw-r--r--0016-ZEN-mm-Increment-kswapd_waiters-for-throttled-direct.patch78
1 files changed, 0 insertions, 78 deletions
diff --git a/0016-ZEN-mm-Increment-kswapd_waiters-for-throttled-direct.patch b/0016-ZEN-mm-Increment-kswapd_waiters-for-throttled-direct.patch
deleted file mode 100644
index 31f070145587..000000000000
--- a/0016-ZEN-mm-Increment-kswapd_waiters-for-throttled-direct.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Sultan Alsawaf <sultan@kerneltoast.com>
-Date: Fri, 16 Jul 2021 23:35:47 -0700
-Subject: [PATCH] ZEN: mm: Increment kswapd_waiters for throttled direct
- reclaimers
-
-Throttled direct reclaimers will wake up kswapd and wait for kswapd to
-satisfy their page allocation request, even when the failed allocation
-lacks the __GFP_KSWAPD_RECLAIM flag in its gfp mask. As a result, kswapd
-may think that there are no waiters and thus exit prematurely, causing
-throttled direct reclaimers lacking __GFP_KSWAPD_RECLAIM to stall on
-waiting for kswapd to wake them up. Incrementing the kswapd_waiters
-counter when such direct reclaimers become throttled fixes the problem.
-
-Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
----
- mm/vmscan.c | 17 ++++++++++++-----
- 1 file changed, 12 insertions(+), 5 deletions(-)
-
-diff --git a/mm/vmscan.c b/mm/vmscan.c
-index c1936a256ed1e858febfe8f090f889f4a6238ff0..cd9d3535a2f757e464b3a41b24001fd51bc33aa7 100644
---- a/mm/vmscan.c
-+++ b/mm/vmscan.c
-@@ -3608,7 +3608,7 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
- return 0;
- }
-
--static bool allow_direct_reclaim(pg_data_t *pgdat)
-+static bool allow_direct_reclaim(pg_data_t *pgdat, bool using_kswapd)
- {
- struct zone *zone;
- unsigned long pfmemalloc_reserve = 0;
-@@ -3637,6 +3637,10 @@ static bool allow_direct_reclaim(pg_data_t *pgdat)
-
- wmark_ok = free_pages > pfmemalloc_reserve / 2;
-
-+ /* The throttled direct reclaimer is now a kswapd waiter */
-+ if (unlikely(!using_kswapd && !wmark_ok))
-+ atomic_long_inc(&kswapd_waiters);
-+
- /* kswapd must be awake if processes are being throttled */
- if (!wmark_ok && waitqueue_active(&pgdat->kswapd_wait)) {
- if (READ_ONCE(pgdat->kswapd_highest_zoneidx) > ZONE_NORMAL)
-@@ -3702,7 +3706,7 @@ static bool throttle_direct_reclaim(gfp_t gfp_mask, struct zonelist *zonelist,
-
- /* Throttle based on the first usable node */
- pgdat = zone->zone_pgdat;
-- if (allow_direct_reclaim(pgdat))
-+ if (allow_direct_reclaim(pgdat, gfp_mask & __GFP_KSWAPD_RECLAIM))
- goto out;
- break;
- }
-@@ -3724,11 +3728,14 @@ static bool throttle_direct_reclaim(gfp_t gfp_mask, struct zonelist *zonelist,
- */
- if (!(gfp_mask & __GFP_FS))
- wait_event_interruptible_timeout(pgdat->pfmemalloc_wait,
-- allow_direct_reclaim(pgdat), HZ);
-+ allow_direct_reclaim(pgdat, true), HZ);
- else
- /* Throttle until kswapd wakes the process */
- wait_event_killable(zone->zone_pgdat->pfmemalloc_wait,
-- allow_direct_reclaim(pgdat));
-+ allow_direct_reclaim(pgdat, true));
-+
-+ if (unlikely(!(gfp_mask & __GFP_KSWAPD_RECLAIM)))
-+ atomic_long_dec(&kswapd_waiters);
-
- if (fatal_signal_pending(current))
- return true;
-@@ -4221,7 +4228,7 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int highest_zoneidx)
- * able to safely make forward progress. Wake them
- */
- if (waitqueue_active(&pgdat->pfmemalloc_wait) &&
-- allow_direct_reclaim(pgdat))
-+ allow_direct_reclaim(pgdat, true))
- wake_up_all(&pgdat->pfmemalloc_wait);
-
- /* Check if kswapd should be suspending */