writeback: Fix lock imbalance in writeback_sb_inodes()
authorJan Kara <jack@suse.cz>
Fri, 8 Jun 2012 15:07:36 +0000 (17:07 +0200)
committerFengguang Wu <fengguang.wu@intel.com>
Fri, 8 Jun 2012 23:32:15 +0000 (08:32 +0900)
commitead188f9f930fb5d7f0c49315a7fce3d8bd16b7e
tree1d5630f3b49814f89720624d4269ccf2b25e4974
parentf8f5701bdaf9134b1f90e5044a82c66324d2073f
writeback: Fix lock imbalance in writeback_sb_inodes()

Fix bug introduced by 169ebd90.  We have to have wb_list_lock locked when
restarting writeback loop after having waited for inode writeback.

Bug description by Ted Tso:

  I can reproduce this fairly easily by using ext4 w/o a journal, running
  under KVM with 1024megs memory, with fsstress (xfstests #13):

  [   45.153294] =====================================
  [   45.154784] [ BUG: bad unlock balance detected! ]
  [   45.155591] 3.5.0-rc1-00002-gb22b1f1 #124 Not tainted
  [   45.155591] -------------------------------------
  [   45.155591] flush-254:16/2499 is trying to release lock (&(&wb->list_lock)->rlock) at:
  [   45.155591] [<c022c3da>] writeback_sb_inodes+0x160/0x327
  [   45.155591] but there are no more locks to release!

Reported-by: Theodore Ts'o <tytso@mit.edu>
Tested-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
fs/fs-writeback.c