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



Reply via email to