diff options
author | Gui Hecheng <guihc.fnst@cn.fujitsu.com> | 2014-06-26 10:53:01 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-08-22 14:43:11 +0200 |
commit | 72ced9950a37f217a6f2377d7c557332185c413b (patch) | |
tree | effa8f360ffb3ca019071d9713463505c3b800ca /btrfs-image.c | |
parent | 99ac0d5732668b95c3cab0ad20266562126d27f9 (diff) | |
download | btrfs-progs-72ced9950a37f217a6f2377d7c557332185c413b.tar.gz |
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.c | 4 |
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; |