Btrfs-progs: make btrfs-map-logical handle error gracefully
authorWang Shilong <wangsl.fnst@cn.fujitsu.com>
Fri, 19 Jul 2013 06:31:34 +0000 (14:31 +0800)
committerDavid Sterba <dsterba@suse.cz>
Fri, 9 Aug 2013 12:32:37 +0000 (14:32 +0200)
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>
btrfs-map-logical.c

index b9635f7..fce6504 100644 (file)
@@ -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++;