diff options
author | Theodore Ts'o <tytso@mit.edu> | 2012-08-10 13:57:52 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2012-08-17 09:06:06 -0400 |
commit | 7a4c5de27efa4c2ecca87af0a3deea63446367e2 (patch) | |
tree | 9f56c68e86e9a379621ee49e0b6d05dae8b01f9e /fs/ext4/bitmap.c | |
parent | 7e731bc9a12339f344cddf82166b82633d99dd86 (diff) | |
download | linux-7a4c5de27efa4c2ecca87af0a3deea63446367e2.tar.gz linux-7a4c5de27efa4c2ecca87af0a3deea63446367e2.tar.bz2 linux-7a4c5de27efa4c2ecca87af0a3deea63446367e2.zip |
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
Diffstat (limited to 'fs/ext4/bitmap.c')
-rw-r--r-- | fs/ext4/bitmap.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/ext4/bitmap.c b/fs/ext4/bitmap.c index f8716eab9995..5c2d1813ebe9 100644 --- a/fs/ext4/bitmap.c +++ b/fs/ext4/bitmap.c @@ -79,7 +79,6 @@ int ext4_block_bitmap_csum_verify(struct super_block *sb, ext4_group_t group, if (provided == calculated) return 1; - ext4_error(sb, "Bad block bitmap checksum: block_group = %u", group); return 0; } |