On 4/27/22 18:06, Shakeel Butt wrote: > On Wed, Apr 27, 2022 at 5:22 AM Michal Koutný <mkoutny@xxxxxxxx> wrote: >> >> On Tue, Apr 26, 2022 at 10:23:32PM -0700, Shakeel Butt <shakeelb@xxxxxxxxxx> wrote: >>> [...] >>>> >>>> +static inline struct mem_cgroup *get_mem_cgroup_from_obj(void *p) >>>> +{ >>>> + struct mem_cgroup *memcg; >>>> + >>> >>> Do we need memcg_kmem_enabled() check here or maybe >>> mem_cgroup_from_obj() should be doing memcg_kmem_enabled() instead of >>> mem_cgroup_disabled() as we can have "cgroup.memory=nokmem" boot >>> param. Shakeel, unfortunately I'm not ready to answer this question right now. I even did not noticed that memcg_kmem_enabled() and mem_cgroup_disabled() have a different nature. If you have no objections I'm going to keep this place as is and investigate this question later. >> I reckon such a guard is on the charge side and readers should treat >> NULL and root_mem_group equally. Or is there a case when these two are >> different? >> >> (I can see it's different semantics when stored in current->active_memcg >> (and active_memcg() getter) but for such "outer" callers like here it >> seems equal.) Dear Michal, I may have misunderstood your point of view, so let me explain my vision in more detail. I do not think that NULL and root_mem_cgroup are equal here: - we have enabled cgroups and well-defined root_mem_cgroup, - this function is called from inside memcg-limited container, - we tried to get memcg from net, but without success, and as result got NULL from mem_cgroup_from_obj() (frankly speaking I do not think this situation is really possible) If we keep memcg = NULL, then current's memcg will not be masked and net_init's allocations will be accounted to current's memcg. So we need to set active_memcg to root_mem_cgroup, it helps to avoid incorrect accounting. > I was more thinking about possible shortcut optimization and unrelated > to this patch. > > Vasily, can you please add documentation for get_mem_cgroup_from_obj() > similar to get_mem_cgroup_from_mm()? Also for mem_cgroup_or_root(). > Please note that root_mem_cgroup can be NULL during early boot. Ok, thank you for the remark, I'll improve it in next patch version. Thank you, Vasily Averin