diff options
author | Stefan Behrens <sbehrens@giantdisaster.de> | 2012-07-10 07:30:17 -0600 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2012-07-23 16:27:59 -0400 |
commit | c0901581ad077004145c9ee80e843fba71c100b8 (patch) | |
tree | 32112f1d030743f5a9ef01cade8481b906934074 /fs | |
parent | f4c738c2e7bc6d696b0d60155df7ea01684962b6 (diff) | |
download | op-kernel-dev-c0901581ad077004145c9ee80e843fba71c100b8.zip op-kernel-dev-c0901581ad077004145c9ee80e843fba71c100b8.tar.gz |
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 <sbehrens@giantdisaster.de>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/disk-io.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index dd6676b..1a4a2a9 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; |