On Fri, Oct 22, 2021 at 12:06:13PM +1100, NeilBrown wrote: > On Tue, 19 Oct 2021, Mel Gorman wrote: > ... > > + switch(reason) { > > + case VMSCAN_THROTTLE_NOPROGRESS: > > + case VMSCAN_THROTTLE_WRITEBACK: > > + timeout = HZ/10; > > + > > + if (atomic_inc_return(&pgdat->nr_writeback_throttled) == 1) { > > + WRITE_ONCE(pgdat->nr_reclaim_start, > > + node_page_state(pgdat, NR_THROTTLED_WRITTEN)); > > You have introduced a behaviour change that wasn't flagged in the commit > message. > Previously nr_writeback_throttled was only incremented for > VMSCAN_THROTTLE_WRITEBACK, now it is incremented for > VMSCAN_THROTTLE_NOPROGRESS as well. > > Some justification would be good. > This is the result of rebase near the end of a day going sideways. There is no justification, it's just wrong. I'm rerunning the entire series, will update the leader and resend the series. --8<-- mm/vmscan: Centralise timeout values for reclaim_throttle -fix Neil Brown spotted the fallthrough-logic for reclaim_throttle was wrong -- only VMSCAN_THROTTLE_WRITEBACK affects pgdat->nr_writeback_throttled. This was the result of a rebase going sideways and only happens to sometimes work by co-incidence. This is a fix to the mmotm patch mm-vmscan-centralise-timeout-values-for-reclaim_throttle.patch Signed-off-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> --- mm/vmscan.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 1f5c467dc83c..64c38979b7df 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1032,7 +1032,6 @@ void reclaim_throttle(pg_data_t *pgdat, enum vmscan_throttle_state reason) * of the inactive LRU. */ switch(reason) { - case VMSCAN_THROTTLE_NOPROGRESS: case VMSCAN_THROTTLE_WRITEBACK: timeout = HZ/10; @@ -1041,6 +1040,9 @@ void reclaim_throttle(pg_data_t *pgdat, enum vmscan_throttle_state reason) node_page_state(pgdat, NR_THROTTLED_WRITTEN)); } + break; + case VMSCAN_THROTTLE_NOPROGRESS: + timeout = HZ/10; break; case VMSCAN_THROTTLE_ISOLATED: timeout = HZ/50; @@ -1055,7 +1057,7 @@ void reclaim_throttle(pg_data_t *pgdat, enum vmscan_throttle_state reason) ret = schedule_timeout(timeout); finish_wait(wqh, &wait); - if (reason == VMSCAN_THROTTLE_ISOLATED) + if (reason == VMSCAN_THROTTLE_WRITEBACK) atomic_dec(&pgdat->nr_writeback_throttled); trace_mm_vmscan_throttled(pgdat->node_id, jiffies_to_usecs(timeout),