btrfs-progs: extent-tree: avoid allocating tree block that crosses stripe boundary

Now find_free_extent() function won't return a metadata extent that
crosses stripe boundary.

Reported-by: Chris Murphy <lists@colorremedies.com>
Reported-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
master
Qu Wenruo 2015-07-23 17:18:09 +08:00 committed by David Sterba
parent 595c57d2f4
commit 854437ca3c
1 changed files with 5 additions and 0 deletions

View File

@ -2605,6 +2605,11 @@ check_failed:
}
if (!(data & BTRFS_BLOCK_GROUP_DATA)) {
if (check_crossing_stripes(ins->objectid, num_bytes)) {
search_start = round_down(ins->objectid + num_bytes,
BTRFS_STRIPE_LEN);
goto new_group;
}
block_group = btrfs_lookup_block_group(info, ins->objectid);
if (block_group)
trans->block_group = block_group;