Re: BUG_ON in rcu_sync_func triggered

From: Oleg Nesterov
Date: Fri Sep 23 2016 - 09:53:53 EST


On 09/23, Nikolay Borisov wrote:
>
> > --- a/fs/super.c
> > +++ b/fs/super.c
> > @@ -1344,7 +1344,9 @@ int thaw_super(struct super_block *sb)
> > int error;
> >
> > down_write(&sb->s_umount);
> > - if (sb->s_writers.frozen == SB_UNFROZEN) {
> > + if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) {
> > + if (sb->s_writers.frozen != SB_UNFROZEN)
> > + pr_crit("THAW: hit the race: %d\n", sb->s_writers.frozen);
> > up_write(&sb->s_umount);
> > return -EINVAL;
> > }
> >
>
> I was away on holiday so that's why I was silent. However, with this
> patch applied I couldn't reproduce the issue nor the pr_crit
> triggered.

Great, thanks a lot.

> Have you had any moments of epiphany re. this issue?

Well, after I failed to find any problem in rcu/sync.c I started to
look at the callers and found this race.

> Should
> some FS people be involved in the discussion?

Sure. I'll send the patch with CC's. Probably next week, I am too
busy right now.

Thanks Nikolay,

Oleg.