Michal Hocko wrote:
> On Thu 23-11-17 22:57:06, Tetsuo Handa wrote:
> > Michal Hocko wrote:
> > > > @@ -260,9 +261,8 @@ static struct super_block *alloc_super(struct 
> > > > file_system_type *type, int flags,
> > > >         s->s_shrink.count_objects = super_cache_count;
> > > >         s->s_shrink.batch = 1024;
> > > >         s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE;
> > > > -       INIT_LIST_HEAD(&s->s_shrink.list);
> > > > -       return s;
> > > > -
> > > > +       if (register_shrinker(&s->s_shrink) == 0)
> > > > +               return s;
> > > >  fail:
> > > >         destroy_unused_super(s);
> > > >         return NULL;
> > > 
> > > But I am not sure this is correct. So what protects shrinker invocation
> > > while the object is not initialized yet?
> > 
> > Then, what protects shrinker invocation in your patch?
> 
> It is s_umount lock but that one is alreay held at the point where you
> suggested register_shrinker. My bad, I could have noticed that. Feel
> free to take over and send a patch. Considering I've screwed several
> times already I do not feel I am the right one to send the fix.
> 
I will wait for your posting. I feel we want to update the comment block
saying "this object isn't exposed yet", for it is confusing that we
already exposed the shrinker inside the object.

Reply via email to