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
