diff options
author | Wang Shilong <wangsl.fnst@cn.fujitsu.com> | 2013-07-19 14:31:34 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2013-08-09 14:32:37 +0200 |
commit | af6c1650cf38395143157a674344e195d47c0517 (patch) | |
tree | bfed2ed86ed5362fe2c51a7a7a03041a495834c2 /btrfs-map-logical.c | |
parent | 44aa9dce55b0c35dbdad584c54a72d2525157cc6 (diff) |
Btrfs-progs: make btrfs-map-logical handle error gracefully
If an overflow logical address is passed(for example),the original
code will cause segmentation, this is unfriendly to users,fix it.
Signed-off-by: Wang Shilong<wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'btrfs-map-logical.c')
-rw-r--r-- | btrfs-map-logical.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/btrfs-map-logical.c b/btrfs-map-logical.c index b9635f77..fce65047 100644 --- a/btrfs-map-logical.c +++ b/btrfs-map-logical.c @@ -57,7 +57,14 @@ struct extent_buffer *debug_read_block(struct btrfs_root *root, u64 bytenr, ret = btrfs_map_block(&root->fs_info->mapping_tree, READ, eb->start, &length, &multi, mirror_num, NULL); - BUG_ON(ret); + if (ret) { + fprintf(info_file, + "Error: fails to map mirror%d logical %llu: %s\n", + mirror_num, (unsigned long long)eb->start, + strerror(-ret)); + free_extent_buffer(eb); + return NULL; + } device = multi->stripes[0].dev; eb->fd = device->fd; device->total_ios++; |