Re: Btrfs: fix num_workers_starting bug and other bugs in async thread

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux