On Wed, Apr 23, 2025 at 05:41:37PM -0700, Paul E. McKenney wrote:
> On Wed, Apr 23, 2025 at 10:19:56AM +0300, Dan Carpenter wrote:
> > On Wed, Apr 23, 2025 at 10:17:16AM +0300, Dan Carpenter wrote:
> > > Hello Joel Fernandes,
> > >
> > > Commit bd57ec707441 ("rcutorture: Perform more frequent testing of
> > > ->gpwrap") from Feb 16, 2025 (linux-next), leads to the following
> > > Smatch static checker warning:
> > >
> > > kernel/rcu/rcutorture.c:4586 rcu_torture_init()
> > > warn: missing error code 'firsterr'
> > >
> > > kernel/rcu/rcutorture.c
> > > 4576 if (torture_init_error(firsterr))
> > > 4577 goto unwind;
> > > 4578 }
> > > 4579 if (object_debug)
> > > 4580 rcu_test_debug_objects();
> > > 4581 torture_init_end();
> > ^^^^^^^^^^^^^^^^^^^
> > Also:
> >
> > kernel/rcu/rcutorture.c:4591 rcu_torture_init() warn: double unlock 'global
> > &fullstop_mutex' (orig line 4581)
>
> You lost me on this one. This mutex is acquired by the earlier call to
> torture_init_begin(), but only if that function returns true. If that
> function returns false, yes, it releases fullstop_mutex, but in that case
> rcu_torture_init() returns immediately, thus avoiding this invocation
> of torture_init_end().
>
> Or am I missing something subtle here? Or missing something obvious,
> for that matter! ;-)
>
I explained it badly. Joel's patch added a goto so now we call
torture_init_end() twice in a row.
> Thanx, Paul
>
> > > 4582 if (cur_ops->gp_slow_register &&
> > > !WARN_ON_ONCE(!cur_ops->gp_slow_unregister))
> > > 4583 cur_ops->gp_slow_register(&rcu_fwd_cb_nodelay);
> > > 4584
> > > 4585 if (cur_ops->set_gpwrap_lag && rcu_gpwrap_lag_init())
> > > --> 4586 goto unwind;
> > >
> > > set an error code?
Here is the goto.
> > >
> > > 4587
> > > 4588 return 0;
> > > 4589
> > > 4590 unwind:
> > > 4591 torture_init_end();
> > ^^^^^^^^^^^^^^^^^^^
Here is the second torture_init_end().
regards,
dan carpenter