mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
vdo: support creation of compressed thin-pools
Add code to handle creation of thin-pool with VDO data backend which can be seen as compressed deduplicated thin-pool. To avoid need of changing to many internal APIs, pass the conversion parameters for create thin-pool data volume via cmd_context.
This commit is contained in:
parent
6ec2f1f44b
commit
db0de73d6e
@ -1968,6 +1968,8 @@ int refresh_toolcontext(struct cmd_context *cmd)
|
|||||||
|
|
||||||
cmd->lib_dir = NULL;
|
cmd->lib_dir = NULL;
|
||||||
|
|
||||||
|
cmd->lvcreate_vcp = NULL;
|
||||||
|
|
||||||
if (!_init_lvm_conf(cmd))
|
if (!_init_lvm_conf(cmd))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
|
@ -281,6 +281,7 @@ struct cmd_context {
|
|||||||
unsigned rand_seed;
|
unsigned rand_seed;
|
||||||
struct dm_list pending_delete; /* list of LVs for removal */
|
struct dm_list pending_delete; /* list of LVs for removal */
|
||||||
struct dm_pool *pending_delete_mem; /* memory pool for pending deletes */
|
struct dm_pool *pending_delete_mem; /* memory pool for pending deletes */
|
||||||
|
struct vdo_convert_params *lvcreate_vcp;/* params for LV to VDO conversion */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -572,6 +572,9 @@ int create_pool(struct logical_volume *pool_lv,
|
|||||||
if (!lv_add_segment(ah, 0, stripes, pool_lv, striped, stripe_size, 0, 0))
|
if (!lv_add_segment(ah, 0, stripes, pool_lv, striped, stripe_size, 0, 0))
|
||||||
goto_bad;
|
goto_bad;
|
||||||
|
|
||||||
|
if (pool_lv->vg->cmd->lvcreate_vcp && !convert_vdo_lv(pool_lv, pool_lv->vg->cmd->lvcreate_vcp))
|
||||||
|
goto_bad;
|
||||||
|
|
||||||
if (!(data_lv = insert_layer_for_lv(pool_lv->vg->cmd, pool_lv,
|
if (!(data_lv = insert_layer_for_lv(pool_lv->vg->cmd, pool_lv,
|
||||||
pool_lv->status,
|
pool_lv->status,
|
||||||
(segtype_is_cache_pool(segtype)) ?
|
(segtype_is_cache_pool(segtype)) ?
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2016 Red Hat, Inc. All rights reserved.
|
* Copyright (C) 2005-2023 Red Hat, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This file is part of LVM2.
|
* This file is part of LVM2.
|
||||||
*
|
*
|
||||||
@ -3063,6 +3063,14 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|||||||
thin_zero_t zero_new_blocks;
|
thin_zero_t zero_new_blocks;
|
||||||
int error_when_full;
|
int error_when_full;
|
||||||
int data_vdo;
|
int data_vdo;
|
||||||
|
uint64_t vdo_pool_header_size;
|
||||||
|
struct vdo_convert_params vcp = {
|
||||||
|
.activate = CHANGE_AN,
|
||||||
|
.do_zero = 1,
|
||||||
|
.do_wipe_signatures = 1,
|
||||||
|
.force = arg_count(cmd, force_ARG),
|
||||||
|
.yes = arg_count(cmd, yes_ARG),
|
||||||
|
};
|
||||||
int is_active;
|
int is_active;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
@ -3359,6 +3367,20 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data_vdo) {
|
||||||
|
if (!fill_vdo_target_params(cmd, &vcp.vdo_params, &vdo_pool_header_size, vg->profile))
|
||||||
|
goto_bad;
|
||||||
|
|
||||||
|
if (!get_vdo_settings(cmd, &vcp.vdo_params, NULL))
|
||||||
|
goto_bad;
|
||||||
|
|
||||||
|
if (data_vdo && lv_is_vdo(lv))
|
||||||
|
log_print_unless_silent("Volume %s is already VDO volume, skipping VDO conversion.",
|
||||||
|
display_lvname(lv));
|
||||||
|
else if (!convert_vdo_lv(lv, &vcp))
|
||||||
|
goto_bad;
|
||||||
|
}
|
||||||
|
|
||||||
pool_lv = lv;
|
pool_lv = lv;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4847,6 +4869,7 @@ static int _lvconvert_to_pool_or_swap_metadata_single(struct cmd_context *cmd,
|
|||||||
case striped_LVT:
|
case striped_LVT:
|
||||||
case error_LVT:
|
case error_LVT:
|
||||||
case zero_LVT:
|
case zero_LVT:
|
||||||
|
case vdo_LVT:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bad:
|
bad:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
||||||
* Copyright (C) 2004-2014 Red Hat, Inc. All rights reserved.
|
* Copyright (C) 2004-2023 Red Hat, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This file is part of LVM2.
|
* This file is part of LVM2.
|
||||||
*
|
*
|
||||||
@ -720,13 +720,23 @@ static int _read_vdo_params(struct cmd_context *cmd,
|
|||||||
struct lvcreate_params *lp,
|
struct lvcreate_params *lp,
|
||||||
struct lvcreate_cmdline_params *lcp)
|
struct lvcreate_cmdline_params *lcp)
|
||||||
{
|
{
|
||||||
if (!seg_is_vdo(lp))
|
if (!seg_is_vdo(lp) &&
|
||||||
|
!lp->pool_data_vdo)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
// prefiling settings here
|
// prefiling settings here
|
||||||
if (!fill_vdo_target_params(cmd, &lp->vcp.vdo_params, &lp->vdo_pool_header_size, NULL))
|
if (!fill_vdo_target_params(cmd, &lp->vcp.vdo_params, &lp->vdo_pool_header_size, NULL))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
|
if (lp->pool_data_vdo) {
|
||||||
|
lp->vcp.activate = CHANGE_AN;
|
||||||
|
lp->vcp.do_zero = 1;
|
||||||
|
lp->vcp.do_wipe_signatures = lp->wipe_signatures;
|
||||||
|
lp->vcp.force = lp->force;
|
||||||
|
lp->vcp.yes = lp->force;
|
||||||
|
cmd->lvcreate_vcp = &lp->vcp;
|
||||||
|
}
|
||||||
|
|
||||||
if ((lcp->virtual_size <= DM_VDO_LOGICAL_SIZE_MAXIMUM) &&
|
if ((lcp->virtual_size <= DM_VDO_LOGICAL_SIZE_MAXIMUM) &&
|
||||||
((lcp->virtual_size + lp->vdo_pool_header_size) > DM_VDO_LOGICAL_SIZE_MAXIMUM)) {
|
((lcp->virtual_size + lp->vdo_pool_header_size) > DM_VDO_LOGICAL_SIZE_MAXIMUM)) {
|
||||||
log_verbose("Dropping VDO pool header size to 0 to support maximal size %s.",
|
log_verbose("Dropping VDO pool header size to 0 to support maximal size %s.",
|
||||||
@ -1056,6 +1066,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
|
|||||||
POOL_ARGS,
|
POOL_ARGS,
|
||||||
SIZE_ARGS,
|
SIZE_ARGS,
|
||||||
THIN_POOL_ARGS,
|
THIN_POOL_ARGS,
|
||||||
|
VDO_POOL_ARGS,
|
||||||
chunksize_ARG,
|
chunksize_ARG,
|
||||||
errorwhenfull_ARG,
|
errorwhenfull_ARG,
|
||||||
snapshot_ARG,
|
snapshot_ARG,
|
||||||
|
Loading…
Reference in New Issue
Block a user