On Fri, Dec 23, 2011 at 08:06:03AM -0500, Chris Mason wrote:
> On Fri, Dec 23, 2011 at 01:44:53PM +0300, Dan Carpenter wrote:
> > Hi Josef,
> > 
> > Smatch complains about this change introduces a double unlock.
> > 
> > fs/btrfs/async-thread.c +608 find_worker(49) error: double unlock 
> > 'spin_lock:&workers->lock'
> > 
> >    579                          spin_unlock_irqrestore(&workers->lock, 
> > flags);
> >                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> Thanks Dan, fixing.
> >    602  found:
> >    603          /*
> >    604           * this makes sure the worker doesn't exit before it is 
> > placed
> >    605           * onto a busy/idle list
> >    606           */
> >    607          atomic_inc(&worker->num_pending);
> >    608          spin_unlock_irqrestore(&workers->lock, flags);
> >                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > And again here.
> > 
> > Btw, does find_worker() ever get called with IRQs disabled?  If so then
> > __btrfs_start_workers() enables them.  Maybe that function should use
> > spin_lock_irqsave() instead of spin_lock_irq().
> 
> Patching this too.

Read that too quickly.  __btrfs_start_workers() can't be called with
irqs off, kthread_run schedules.

-chris

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to