> -----Original Message----- > From: Yosry Ahmed <yosryahmed@xxxxxxxxxx> > Sent: Friday, September 27, 2024 8:02 PM > To: Sridhar, Kanchana P <kanchana.p.sridhar@xxxxxxxxx> > Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-mm@xxxxxxxxx; > hannes@xxxxxxxxxxx; nphamcs@xxxxxxxxx; chengming.zhou@xxxxxxxxx; > usamaarif642@xxxxxxxxx; shakeel.butt@xxxxxxxxx; ryan.roberts@xxxxxxx; > Huang, Ying <ying.huang@xxxxxxxxx>; 21cnbao@xxxxxxxxx; akpm@linux- > foundation.org; Zou, Nanhai <nanhai.zou@xxxxxxxxx>; Feghali, Wajdi K > <wajdi.k.feghali@xxxxxxxxx>; Gopal, Vinodh <vinodh.gopal@xxxxxxxxx> > Subject: Re: [PATCH v8 4/8] mm: Provide a new count_objcg_events() API for > batch event updates. > > On Fri, Sep 27, 2024 at 7:16 PM Kanchana P Sridhar > <kanchana.p.sridhar@xxxxxxxxx> wrote: > > > > With the introduction of zswap_store() swapping out large folios, > > we need to efficiently update the objcg's memcg events once per > > successfully stored folio. For instance, the 'ZSWPOUT' event needs > > to be incremented by folio_nr_pages(). > > > > Signed-off-by: Kanchana P Sridhar <kanchana.p.sridhar@xxxxxxxxx> > > --- > > include/linux/memcontrol.h | 20 ++++++++++++++++++++ > > 1 file changed, 20 insertions(+) > > > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > > index 15c2716f9aa3..f47fd00c5eea 100644 > > --- a/include/linux/memcontrol.h > > +++ b/include/linux/memcontrol.h > > @@ -1778,6 +1778,21 @@ static inline void count_objcg_event(struct > obj_cgroup *objcg, > > rcu_read_unlock(); > > } > > > > +static inline void count_objcg_events(struct obj_cgroup *objcg, > > + enum vm_event_item idx, > > + unsigned long count) > > +{ > > + struct mem_cgroup *memcg; > > + > > + if (!memcg_kmem_online()) > > + return; > > + > > + rcu_read_lock(); > > + memcg = obj_cgroup_memcg(objcg); > > + count_memcg_events(memcg, idx, count); > > + rcu_read_unlock(); > > +} > > Instead of replicating the code in count_objcg_event(), we should > change count_objcg_event() to become count_objcg_events() (i.e. add a > count parameter). The existing callers can pass in 1, there's only 3 > of them anyway (2 after patch 6), and they are all in zswap. Thanks Yosry. This makes sense. I will incorporate this in v9. Thanks, Kanchana > > > + > > #else > > static inline bool mem_cgroup_kmem_disabled(void) > > { > > @@ -1834,6 +1849,11 @@ static inline void count_objcg_event(struct > obj_cgroup *objcg, > > { > > } > > > > +static inline void count_objcg_events(struct obj_cgroup *objcg, > > + enum vm_event_item idx, > > + unsigned long count) > > +{ > > +} > > #endif /* CONFIG_MEMCG */ > > > > #if defined(CONFIG_MEMCG) && defined(CONFIG_ZSWAP) > > -- > > 2.27.0 > >