Hello Shakeel, On Fri, May 13, 2022 at 10:23:36AM -0700, Shakeel Butt wrote: > On Tue, May 10, 2022 at 8:29 AM Johannes Weiner <hannes@xxxxxxxxxxx> wrote: > > > [...] > > +void obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size) > > +{ > > + struct mem_cgroup *memcg; > > + > > + VM_WARN_ON_ONCE(!(current->flags & PF_MEMALLOC)); > > + > > + /* PF_MEMALLOC context, charging must succeed */ > ) > Instead of these warnings and comment why not just explicitly use > memalloc_noreclaim_[save|restore]() ? Should the function be called from a non-reclaim context, it should warn rather than quietly turn itself into a reclaimer. That's not a very likely mistake, but the warning documents the expectations and context of this function better. > > + if (obj_cgroup_charge(objcg, GFP_KERNEL, size)) > > Can we please make this specific charging an opt-in feature or at > least provide a way to opt-out? This will impact users/providers where > swap is used transparently (in terms of memory usage). Also do you > want this change for v1 users as well? Ah, of course, memsw! Let's opt out of v1, since this is clearly in conflict with that way of accounting. I already hadn't added interface files for v1, so it's just a matter of bypassing the charging too. Signed-of-by: Johannes Weiner <hannes@xxxxxxxxxxx> --- diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 350012b93a95..3ab72b8160ee 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -7469,6 +7469,9 @@ bool obj_cgroup_may_zswap(struct obj_cgroup *objcg) struct mem_cgroup *memcg, *original_memcg; bool ret = true; + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) + return true; + original_memcg = get_mem_cgroup_from_objcg(objcg); for (memcg = original_memcg; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg)) { @@ -7505,6 +7508,9 @@ void obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size) { struct mem_cgroup *memcg; + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) + return; + VM_WARN_ON_ONCE(!(current->flags & PF_MEMALLOC)); /* PF_MEMALLOC context, charging must succeed */ @@ -7529,6 +7535,9 @@ void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size) { struct mem_cgroup *memcg; + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) + return; + obj_cgroup_uncharge(objcg, size); rcu_read_lock();