aboutsummaryrefslogtreecommitdiffstats
path: root/btrfs-image.c
diff options
context:
space:
mode:
authorGui Hecheng <guihc.fnst@cn.fujitsu.com>2014-06-26 10:53:01 +0800
committerDavid Sterba <dsterba@suse.cz>2014-08-22 14:43:11 +0200
commit72ced9950a37f217a6f2377d7c557332185c413b (patch)
treeeffa8f360ffb3ca019071d9713463505c3b800ca /btrfs-image.c
parent99ac0d5732668b95c3cab0ad20266562126d27f9 (diff)
downloadbtrfs-progs-72ced9950a37f217a6f2377d7c557332185c413b.tar.gz
btrfs-progs-72ced9950a37f217a6f2377d7c557332185c413b.tar.xz
btrfs-progs-72ced9950a37f217a6f2377d7c557332185c413b.zip
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. Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'btrfs-image.c')
-rw-r--r--btrfs-image.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/btrfs-image.c b/btrfs-image.c
index 2bf634b..c1af019 100644
--- a/btrfs-image.c
+++ b/btrfs-image.c
@@ -1686,7 +1686,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);
@@ -2300,7 +2300,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;