On Fri, 12 Jan 2024 09:23:52 +0800 Zhiguo Jiang <justinjiang@xxxxxxxx> wrote: > It is needed to ensure sc->nr.unqueued_dirty > 0, which can avoid to > set PGDAT_DIRTY flag when sc->nr.unqueued_dirty and sc->nr.file_taken > are both zero at the same time. > > ... > > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -5957,7 +5957,8 @@ static void shrink_node(pg_data_t *pgdat, struct scan_control *sc) > set_bit(PGDAT_WRITEBACK, &pgdat->flags); > > /* Allow kswapd to start writing pages during reclaim.*/ > - if (sc->nr.unqueued_dirty == sc->nr.file_taken) > + if (sc->nr.unqueued_dirty && > + sc->nr.unqueued_dirty == sc->nr.file_taken) > set_bit(PGDAT_DIRTY, &pgdat->flags); > Seems sensible. Was this discovered by code inspection, or is there some observable runtime effect? If the latter, can you please describe that effect?