On Fri, Jun 19, 2020 at 2:38 PM Roman Gushchin <guro@xxxxxx> wrote: > [snip] > > > memcg->objcg is rcu protected. > > > objcg->memcg is a raw pointer, which is always pointing at a memory > > > cgroup, but can be atomically swapped to the parent memory cgroup. So > > > the caller > > > > What type of caller? The allocator? > > Basically whoever uses the pointer. Is it better to s/caller/user? > Yes 'user' feels better. > > [...] > > > > The normal stock can go to 32*nr_cpus*PAGE_SIZE. I am wondering if > > just PAGE_SIZE is too less for obj stock. > > It works on top of the current stock of 32 pages, so it can grab these > 32 pages without any atomic operations. And it should be easy to increase > this limit if we'll see any benefits. > > Thank you for looking into the patchset! > > Andrew, can you, please, squash the following fix based on Shakeel's suggestions? > Thanks! > > -- For the following squashed into the original patch: Reviewed-by: Shakeel Butt <shakeelb@xxxxxxxxxx> > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index 7ed3af71a6fb..2499f78cf32d 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -326,7 +326,7 @@ struct mem_cgroup { > int kmemcg_id; > enum memcg_kmem_state kmem_state; > struct obj_cgroup __rcu *objcg; > - struct list_head objcg_list; > + struct list_head objcg_list; /* list of inherited objcgs */ > #endif > > #ifdef CONFIG_CGROUP_WRITEBACK > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 70cd44b28db1..9f14b91700d9 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2843,7 +2843,7 @@ __always_inline struct obj_cgroup *get_obj_cgroup_from_current(void) > struct obj_cgroup *objcg = NULL; > struct mem_cgroup *memcg; > > - if (unlikely(!current->mm)) > + if (unlikely(!current->mm && !current->active_memcg)) > return NULL; > > rcu_read_lock();