On Thu, Feb 06, 2020 at 11:40:37AM -0500, Josef Bacik wrote:
On 2/6/20 5:41 AM, Naohiro Aota wrote:Factor out set_parameters() from __btrfs_alloc_chunk(). This function initialises parameters of "struct alloc_chunk_ctl" for allocation. set_parameters() handles a common part of the initialisation to load the RAID parameters from btrfs_raid_array. set_parameters_regular() decides some parameters for its allocation. Signed-off-by: Naohiro Aota <naohiro.aota@xxxxxxx> --- fs/btrfs/volumes.c | 96 ++++++++++++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 37 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index cfde302bf297..a5d6f0b5ca70 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4841,6 +4841,60 @@ struct alloc_chunk_ctl { int ndevs; }; +static void set_parameters_regular(struct btrfs_fs_devices *fs_devices, + struct alloc_chunk_ctl *ctl)init_alloc_chunk_ctl_policy_regular()+{ + u64 type = ctl->type; + + if (type & BTRFS_BLOCK_GROUP_DATA) { + ctl->max_stripe_size = SZ_1G; + ctl->max_chunk_size = BTRFS_MAX_DATA_CHUNK_SIZE; + } else if (type & BTRFS_BLOCK_GROUP_METADATA) { + /* for larger filesystems, use larger metadata chunks */ + if (fs_devices->total_rw_bytes > 50ULL * SZ_1G) + ctl->max_stripe_size = SZ_1G; + else + ctl->max_stripe_size = SZ_256M; + ctl->max_chunk_size = ctl->max_stripe_size; + } else if (type & BTRFS_BLOCK_GROUP_SYSTEM) { + ctl->max_stripe_size = SZ_32M; + ctl->max_chunk_size = 2 * ctl->max_stripe_size; + ctl->devs_max = min_t(int, ctl->devs_max, + BTRFS_MAX_DEVS_SYS_CHUNK); + } else { + BUG(); + } + + /* We don't want a chunk larger than 10% of writable space */ + ctl->max_chunk_size = min(div_factor(fs_devices->total_rw_bytes, 1), + ctl->max_chunk_size); +} + +static void set_parameters(struct btrfs_fs_devices *fs_devices, + struct alloc_chunk_ctl *ctl)init_alloc_chunk_ctl(). These function names need to be more descriptive. Thanks,
I see. I renamed these two. Thanks,
