From: Stefan Behrens Date: Tue, 10 Jul 2012 13:30:17 +0000 (-0600) Subject: Btrfs: avoid I/O repair BUG() from btree_read_extent_buffer_pages() X-Git-Tag: v3.6-rc1~81^2~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c0901581ad077004145c9ee80e843fba71c100b8;p=thirdparty%2Fkernel%2Flinux.git Btrfs: avoid I/O repair BUG() from btree_read_extent_buffer_pages() From btree_read_extent_buffer_pages(), currently repair_io_failure() can be called with mirror_num being zero when submit_one_bio() returned an error before. This used to cause a BUG_ON(!mirror_num) in repair_io_failure() and indeed this is not a case that needs the I/O repair code to rewrite disk blocks. This commit prevents calling repair_io_failure() in this case and thus avoids the BUG_ON() and malfunction. Signed-off-by: Stefan Behrens Signed-off-by: Josef Bacik --- diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index dd6676b446f65..1a4a2a9759267 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -407,7 +407,7 @@ static int btree_read_extent_buffer_pages(struct btrfs_root *root, break; } - if (failed && !ret) + if (failed && !ret && failed_mirror) repair_eb_io_failure(root, eb, failed_mirror); return ret;