mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
thin_pool: code refactoring
Move common code into thin_pool_set_params() (just like we use cache_set_params).
This commit is contained in:
parent
f3f7f5db89
commit
a176184b7d
@ -9486,18 +9486,16 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
|||||||
first_seg(lv)->min_recovery_rate = lp->min_recovery_rate;
|
first_seg(lv)->min_recovery_rate = lp->min_recovery_rate;
|
||||||
first_seg(lv)->max_recovery_rate = lp->max_recovery_rate;
|
first_seg(lv)->max_recovery_rate = lp->max_recovery_rate;
|
||||||
} else if (lv_is_thin_pool(lv)) {
|
} else if (lv_is_thin_pool(lv)) {
|
||||||
first_seg(lv)->chunk_size = lp->chunk_size;
|
if (!thin_pool_set_params(first_seg(lv),
|
||||||
first_seg(lv)->zero_new_blocks = lp->zero_new_blocks;
|
lp->error_when_full,
|
||||||
first_seg(lv)->discards = lp->discards;
|
lp->crop_metadata,
|
||||||
if ((first_seg(lv)->crop_metadata = lp->crop_metadata) == THIN_CROP_METADATA_NO)
|
lp->thin_chunk_size_calc_policy,
|
||||||
lv->status |= LV_CROP_METADATA;
|
lp->chunk_size,
|
||||||
if (!recalculate_pool_chunk_size_with_dev_hints(lv, seg_lv(first_seg(lv), 0),
|
lp->discards,
|
||||||
lp->thin_chunk_size_calc_policy)) {
|
lp->zero_new_blocks)) {
|
||||||
stack;
|
stack;
|
||||||
goto revert_new_lv;
|
goto revert_new_lv;
|
||||||
}
|
}
|
||||||
if (lp->error_when_full)
|
|
||||||
lv->status |= LV_ERROR_WHEN_FULL;
|
|
||||||
} else if (pool_lv && lv_is_virtual(lv) && /* not yet thin LV */
|
} else if (pool_lv && lv_is_virtual(lv) && /* not yet thin LV */
|
||||||
(seg = first_seg(lv)) &&
|
(seg = first_seg(lv)) &&
|
||||||
seg_is_thin(seg)) { /* going to be a thin volume */
|
seg_is_thin(seg)) { /* going to be a thin volume */
|
||||||
|
@ -909,6 +909,13 @@ int update_thin_pool_params(struct cmd_context *cmd,
|
|||||||
thin_crop_metadata_t *crop_metadata,
|
thin_crop_metadata_t *crop_metadata,
|
||||||
int *chunk_size_calc_method, uint32_t *chunk_size,
|
int *chunk_size_calc_method, uint32_t *chunk_size,
|
||||||
thin_discards_t *discards, thin_zero_t *zero_new_blocks);
|
thin_discards_t *discards, thin_zero_t *zero_new_blocks);
|
||||||
|
int thin_pool_set_params(struct lv_segment *seg,
|
||||||
|
int error_when_full,
|
||||||
|
thin_crop_metadata_t crop_metadata,
|
||||||
|
int thin_chunk_size_calc_policy,
|
||||||
|
uint32_t chunk_size,
|
||||||
|
thin_discards_t discards,
|
||||||
|
thin_zero_t zero_new_blocks);
|
||||||
|
|
||||||
struct lv_status_thin_pool {
|
struct lv_status_thin_pool {
|
||||||
struct dm_pool *mem;
|
struct dm_pool *mem;
|
||||||
|
@ -775,6 +775,32 @@ thin_crop_metadata_t get_thin_pool_crop_metadata(struct cmd_context *cmd,
|
|||||||
return crop;
|
return crop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int thin_pool_set_params(struct lv_segment *seg,
|
||||||
|
int error_when_full,
|
||||||
|
thin_crop_metadata_t crop_metadata,
|
||||||
|
int thin_chunk_size_calc_policy,
|
||||||
|
uint32_t chunk_size,
|
||||||
|
thin_discards_t discards,
|
||||||
|
thin_zero_t zero_new_blocks)
|
||||||
|
{
|
||||||
|
if (!recalculate_pool_chunk_size_with_dev_hints(seg->lv, seg_lv(seg, 0),
|
||||||
|
thin_chunk_size_calc_policy))
|
||||||
|
return_0;
|
||||||
|
|
||||||
|
if (error_when_full)
|
||||||
|
seg->lv->status |= LV_ERROR_WHEN_FULL;
|
||||||
|
|
||||||
|
if ((seg->crop_metadata = crop_metadata) == THIN_CROP_METADATA_NO)
|
||||||
|
seg->lv->status |= LV_CROP_METADATA;
|
||||||
|
|
||||||
|
seg->chunk_size = chunk_size;
|
||||||
|
seg->discards = discards;
|
||||||
|
seg->zero_new_blocks = zero_new_blocks;
|
||||||
|
seg->transaction_id = 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int update_thin_pool_params(struct cmd_context *cmd,
|
int update_thin_pool_params(struct cmd_context *cmd,
|
||||||
struct profile *profile,
|
struct profile *profile,
|
||||||
uint32_t extent_size,
|
uint32_t extent_size,
|
||||||
|
@ -3423,23 +3423,20 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|||||||
if (!cache_set_params(seg, chunk_size, cache_metadata_format, cache_mode, policy_name, policy_settings))
|
if (!cache_set_params(seg, chunk_size, cache_metadata_format, cache_mode, policy_name, policy_settings))
|
||||||
goto_bad;
|
goto_bad;
|
||||||
} else {
|
} else {
|
||||||
seg->transaction_id = 0;
|
|
||||||
seg->crop_metadata = crop_metadata;
|
|
||||||
seg->chunk_size = chunk_size;
|
|
||||||
seg->discards = discards;
|
|
||||||
seg->zero_new_blocks = zero_new_blocks;
|
|
||||||
if (crop_metadata == THIN_CROP_METADATA_NO)
|
|
||||||
pool_lv->status |= LV_CROP_METADATA;
|
|
||||||
if (!recalculate_pool_chunk_size_with_dev_hints(pool_lv, data_lv, chunk_calc))
|
|
||||||
goto_bad;
|
|
||||||
|
|
||||||
/* Error when full */
|
/* Error when full */
|
||||||
if (arg_is_set(cmd, errorwhenfull_ARG))
|
if (arg_is_set(cmd, errorwhenfull_ARG))
|
||||||
error_when_full = arg_uint_value(cmd, errorwhenfull_ARG, 0);
|
error_when_full = arg_int_value(cmd, errorwhenfull_ARG, 0);
|
||||||
else
|
else
|
||||||
error_when_full = find_config_tree_bool(cmd, activation_error_when_full_CFG, vg->profile);
|
error_when_full = find_config_tree_bool(cmd, activation_error_when_full_CFG, vg->profile);
|
||||||
if (error_when_full)
|
|
||||||
pool_lv->status |= LV_ERROR_WHEN_FULL;
|
if (!thin_pool_set_params(seg,
|
||||||
|
error_when_full,
|
||||||
|
crop_metadata,
|
||||||
|
chunk_calc,
|
||||||
|
chunk_size,
|
||||||
|
discards,
|
||||||
|
zero_new_blocks))
|
||||||
|
goto_bad;
|
||||||
|
|
||||||
if (to_thin) {
|
if (to_thin) {
|
||||||
if (!thin_pool_prepare_metadata(metadata_lv, seg->chunk_size,
|
if (!thin_pool_prepare_metadata(metadata_lv, seg->chunk_size,
|
||||||
|
Loading…
Reference in New Issue
Block a user