diff options
author | Gui Hecheng <guihc.fnst@cn.fujitsu.com> | 2014-11-26 10:43:41 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-12-09 14:32:38 +0100 |
commit | 662d1dddcad79839f1cbc13cb0be3ec326af2933 (patch) | |
tree | bec570ce3392c8ff4467a235128556662e846be7 /volumes.c | |
parent | f0b1ff4481798c877bdf8869b8f69f36124466a8 (diff) | |
download | btrfs-progs-662d1dddcad79839f1cbc13cb0be3ec326af2933.tar.gz |
btrfs-progs: convert: fix unable to rollback case with removed empty block groups
Run fstests: btrfs/012 will fail with message:
unable to do rollback
It is because the rollback function checks sequentially each piece of space
to map to a certain block group. If some piece doesn't, rollback refuses to continue.
After kernel commit:
commit 47ab2a6c689913db23ccae38349714edf8365e0a
Btrfs: remove empty block groups automatically
Empty block groups are removed, so there are possible gaps:
|--block group 1--| |--block group 2--|
^
|
gap
So the piece of space of the gap belongs to a removed empty block group,
and rollback should detect this case, and feel free to continue.
Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'volumes.c')
-rw-r--r-- | volumes.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -1318,10 +1318,12 @@ again: ce = search_cache_extent(&map_tree->cache_tree, logical); if (!ce) { kfree(multi); + *length = (u64)-1; return -ENOENT; } if (ce->start > logical) { kfree(multi); + *length = ce->start - logical; return -ENOENT; } |