Btrfs: handle a bogus chunk tree nicely
If you restore a btrfs-image file system and try to mount that file system we'll panic. That's because btrfs-image restores and just makes one big chunk to envelope the whole disk, since they are really only meant to be messed with by our btrfs-progs. So fix up btrfs_rmap_block and the callers of it for mount so that we no longer panic but instead just return an error and fail to mount. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
@@ -4935,7 +4935,18 @@ int btrfs_rmap_block(struct btrfs_mapping_tree *map_tree,
|
||||
em = lookup_extent_mapping(em_tree, chunk_start, 1);
|
||||
read_unlock(&em_tree->lock);
|
||||
|
||||
BUG_ON(!em || em->start != chunk_start);
|
||||
if (!em) {
|
||||
printk(KERN_ERR "btrfs: couldn't find em for chunk %Lu\n",
|
||||
chunk_start);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (em->start != chunk_start) {
|
||||
printk(KERN_ERR "btrfs: bad chunk start, em=%Lu, wanted=%Lu\n",
|
||||
em->start, chunk_start);
|
||||
free_extent_map(em);
|
||||
return -EIO;
|
||||
}
|
||||
map = (struct map_lookup *)em->bdev;
|
||||
|
||||
length = em->len;
|
||||
|
Reference in New Issue
Block a user