diff options
author | David Sterba <dsterba@suse.com> | 2016-07-15 16:46:08 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-07-15 16:46:08 +0200 |
commit | e319aa1490c8b5382fe1c3094cdec13ae1c966e0 (patch) | |
tree | c3fcd33f6ac8cb1142b762bd4a7689812bc13418 /btrfs-corrupt-block.c | |
parent | e4a2d99dfee4c88f8c4c0d5aac8d92212bf0dddd (diff) |
btrfs-progs: corrupt block: handle block mapping errors in debug_corrupt_block
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'btrfs-corrupt-block.c')
-rw-r--r-- | btrfs-corrupt-block.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/btrfs-corrupt-block.c b/btrfs-corrupt-block.c index f2cc42c7..86d4d0bf 100644 --- a/btrfs-corrupt-block.c +++ b/btrfs-corrupt-block.c @@ -34,7 +34,7 @@ #define FIELD_BUF_LEN 80 -static void debug_corrupt_block(struct extent_buffer *eb, +static int debug_corrupt_block(struct extent_buffer *eb, struct btrfs_root *root, u64 bytenr, u32 blocksize, u64 copy) { int ret; @@ -49,7 +49,13 @@ static void debug_corrupt_block(struct extent_buffer *eb, ret = btrfs_map_block(&root->fs_info->mapping_tree, READ, eb->start, &length, &multi, mirror_num, NULL); - BUG_ON(ret); + if (ret) { + error("cannot map block %llu length %llu mirror %d: %d", + (unsigned long long)eb->start, + (unsigned long long)length, + mirror_num, ret); + return ret; + } device = multi->stripes[0].dev; eb->fd = device->fd; device->total_ios++; @@ -79,6 +85,8 @@ static void debug_corrupt_block(struct extent_buffer *eb, if (mirror_num > num_copies) break; } + + return 0; } static void print_usage(int ret) |