On Mon, Oct 28, 2024 at 7:11 PM JP Kobryn <inwardvessel@xxxxxxxxx> wrote: > > Change the name to something more consistent with others in the file and > use double unders to signify it is associated with the > mem_cgroup_flush_stats() API call. Additionally include a new flag that > call sites use to indicate a forced flush; skipping checks and flushing > unconditionally. There are no changes in functionality. > > Signed-off-by: JP Kobryn <inwardvessel@xxxxxxxxx> Reviewed-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> > --- > mm/memcontrol.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 18c3f513d766..59f6f247fc13 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -588,8 +588,11 @@ static inline void memcg_rstat_updated(struct mem_cgroup *memcg, int val) > } > } > > -static void do_flush_stats(struct mem_cgroup *memcg) > +static void __mem_cgroup_flush_stats(struct mem_cgroup *memcg, bool force) > { > + if (!force && !memcg_vmstats_needs_flush(memcg->vmstats)) > + return; > + > if (mem_cgroup_is_root(memcg)) > WRITE_ONCE(flush_last_time, jiffies_64); > > @@ -613,8 +616,7 @@ void mem_cgroup_flush_stats(struct mem_cgroup *memcg) > if (!memcg) > memcg = root_mem_cgroup; > > - if (memcg_vmstats_needs_flush(memcg->vmstats)) > - do_flush_stats(memcg); > + __mem_cgroup_flush_stats(memcg, false); > } > > void mem_cgroup_flush_stats_ratelimited(struct mem_cgroup *memcg) > @@ -630,7 +632,7 @@ static void flush_memcg_stats_dwork(struct work_struct *w) > * Deliberately ignore memcg_vmstats_needs_flush() here so that flushing > * in latency-sensitive paths is as cheap as possible. > */ > - do_flush_stats(root_mem_cgroup); > + __mem_cgroup_flush_stats(root_mem_cgroup, true); > queue_delayed_work(system_unbound_wq, &stats_flush_dwork, FLUSH_TIME); > } > > @@ -5281,11 +5283,8 @@ bool obj_cgroup_may_zswap(struct obj_cgroup *objcg) > break; > } > > - /* > - * mem_cgroup_flush_stats() ignores small changes. Use > - * do_flush_stats() directly to get accurate stats for charging. > - */ > - do_flush_stats(memcg); > + /* Force flush to get accurate stats for charging */ > + __mem_cgroup_flush_stats(memcg, true); > pages = memcg_page_state(memcg, MEMCG_ZSWAP_B) / PAGE_SIZE; > if (pages < max) > continue; > -- > 2.47.0 >