Gui Hecheng
2014-Jun-26 02:53 UTC
[PATCH 1/6] btrfs-progs: fix btrfs-image old_restore fsck failure
Steps to reproduce: # mkfs.btrfs -f <dev1> # btrfs-image <dev1> <image_file> # btrfs-image -r -o <image_file> <dev2> # btrfs check <dev2> btrfs check output: : read block failed check_tree_block : Couldn't read tree root : Couldn't open file system The btrfs-image should not mess with the chunk tree under the old_restore way. The new restore way was introduced by: commit d6f7e3da0dae7b60cb7565f8a47c3b9045c52d1d Btrfs-progs: make btrfs-image restore with a valid chunk tree V2 ... And the following commit enhanced the new restore on the valid chunk tree building stuff: commit ef2a8889ef813ba77061f6a92f4954d047a78932 Btrfs-progs: make image restore with the original device offsets ... But the second commit should not effect the old_restore way since the old_restore way doesn't try to build a valid chunk tree at all. --- btrfs-image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/btrfs-image.c b/btrfs-image.c index 02ae5d6..c90bca8 100644 --- a/btrfs-image.c +++ b/btrfs-image.c @@ -1668,7 +1668,7 @@ static void *restore_worker(void *data) if (!mdres->fixup_offset) { while (size) { u64 chunk_size = size; - if (!mdres->multi_devices) + if (!mdres->multi_devices && !mdres->old_restore) bytenr = logical_to_physical(mdres, async->start + offset, &chunk_size); @@ -2282,7 +2282,7 @@ static int __restore_metadump(const char *input, FILE *out, int old_restore, goto failed_cluster; } - if (!multi_devices) { + if (!multi_devices && !old_restore) { ret = build_chunk_tree(&mdrestore, cluster); if (ret) goto out; -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html