ext4: don't call ext4_error while block group is locked
authorTheodore Ts'o <tytso@mit.edu>
Fri, 10 Aug 2012 17:57:52 +0000 (13:57 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 17 Aug 2012 13:06:06 +0000 (09:06 -0400)
commit7a4c5de27efa4c2ecca87af0a3deea63446367e2
tree9f56c68e86e9a379621ee49e0b6d05dae8b01f9e
parent7e731bc9a12339f344cddf82166b82633d99dd86
ext4: don't call ext4_error while block group is locked

While in ext4_validate_block_bitmap(), if an block allocation bitmap
is found to be invalid, we call ext4_error() while the block group is
still locked.  This causes ext4_commit_super() to call a function
which might sleep while in an atomic context.

There's no need to keep the block group locked at this point, so hoist
the ext4_error() call up to ext4_validate_block_bitmap() and release
the block group spinlock before calling ext4_error().

The reported stack trace can be found at:

http://article.gmane.org/gmane.comp.file-systems.ext4/33731

Reported-by: Dave Jones <davej@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: stable@vger.kernel.org
fs/ext4/balloc.c
fs/ext4/bitmap.c