On Wed, Dec 18, 2024 at 11:56:04AM -0500, Rik van Riel wrote: [...] > > +static bool should_lru_add_drain(void) > +{ > + struct cpu_fbatches *fbatches = this_cpu_ptr(&cpu_fbatches); You will need either a local_lock or preempt_disable to access the per cpu batches. > + int pending = folio_batch_count(&fbatches->lru_add); > + pending += folio_batch_count(&fbatches->lru_deactivate); > + pending += folio_batch_count(&fbatches->lru_deactivate_file); > + pending += folio_batch_count(&fbatches->lru_lazyfree); > + > + /* Don't bother draining unless we have several pages pending. */ > + return pending > SWAP_CLUSTER_MAX; > +} > + > +void maybe_lru_add_drain(void) Later it might also make sense to see if other users of lru_add_drain() should be fine with maybe_lru_add_drain() as well. > +{ > + if (should_lru_add_drain()) > + lru_add_drain(); > +} > +