Btrfs: enforce min_bytes parameter during extent allocation
Commit 24542bf7ea
changed preallocation of
extents to cap the max size we try to allocate. It's a valid change,
but the extent reservation code is also used by balance, and that
can't tolerate a smaller extent being allocated.
__btrfs_prealloc_file_range already has a min_size parameter, which is
used by relocation to request a specific extent size. This commit
adds an extra check to enforce that minimum extent size.
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Reported-by: Stefan Behrens <sbehrens@giantdisaster.de>
This commit is contained in:
Родитель
d7011f5b9d
Коммит
154ea28930
|
@ -8502,6 +8502,7 @@ static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
|
|||
struct btrfs_key ins;
|
||||
u64 cur_offset = start;
|
||||
u64 i_size;
|
||||
u64 cur_bytes;
|
||||
int ret = 0;
|
||||
bool own_trans = true;
|
||||
|
||||
|
@ -8516,8 +8517,9 @@ static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
|
|||
}
|
||||
}
|
||||
|
||||
ret = btrfs_reserve_extent(trans, root,
|
||||
min(num_bytes, 256ULL * 1024 * 1024),
|
||||
cur_bytes = min(num_bytes, 256ULL * 1024 * 1024);
|
||||
cur_bytes = max(cur_bytes, min_size);
|
||||
ret = btrfs_reserve_extent(trans, root, cur_bytes,
|
||||
min_size, 0, *alloc_hint, &ins, 1);
|
||||
if (ret) {
|
||||
if (own_trans)
|
||||
|
|
Загрузка…
Ссылка в новой задаче