uint64_t pool_metadata_size; /* pools */
uint32_t pool_data_extents; /* pools */
uint64_t pool_data_size; /* pools */
+ int pool_data_vdo; /* pools */
uint32_t virtual_extents; /* snapshots, thins */
struct dm_list *pvh; /* all */
/* Not used. */
arg(pooldatasize_ARG, '\0', "pooldatasize", sizemb_VAL, 0, 0, NULL)
+arg(pooldatavdo_ARG, '\0', "pooldatavdo", bool_VAL, 0, 0,
+ "Use VDO type volume for pool data volume.\n")
+
arg(poolmetadata_ARG, '\0', "poolmetadata", lv_VAL, 0, 0,
"The name of a an LV to use for storing pool metadata.\n")
thin_discards_t discards;
thin_zero_t zero_new_blocks;
int error_when_full;
+ int data_vdo;
int is_active;
int ret = 1;
}
if (!get_pool_params(cmd, pool_segtype,
- &meta_size, &pool_metadata_spare,
+ &data_vdo, &meta_size, &pool_metadata_spare,
&chunk_size, &discards, &zero_new_blocks))
goto_bad;
#define THIN_POOL_ARGS \
discards_ARG,\
+ pooldatavdo_ARG,\
thinpool_ARG
#define VDO_POOL_ARGS \
!_read_size_params(cmd, lp, lcp) ||
!get_stripe_params(cmd, lp->segtype, &lp->stripes, &lp->stripe_size, &lp->stripes_supplied, &lp->stripe_size_supplied) ||
(lp->create_pool &&
- !get_pool_params(cmd, lp->segtype,
+ !get_pool_params(cmd, lp->segtype, &lp->pool_data_vdo,
&lp->pool_metadata_size, &lp->pool_metadata_spare,
&lp->chunk_size, &lp->discards, &lp->zero_new_blocks)) ||
!_read_cache_params(cmd, lp) ||
*/
int get_pool_params(struct cmd_context *cmd,
const struct segment_type *segtype,
+ int *pool_data_vdo,
uint64_t *pool_metadata_size,
int *pool_metadata_spare,
uint32_t *chunk_size,
thin_discards_t *discards,
thin_zero_t *zero_new_blocks)
{
- if (segtype_is_thin_pool(segtype) || segtype_is_thin(segtype)) {
+ if ((*pool_data_vdo = arg_int_value(cmd, pooldatavdo_ARG, 0))) {
+ if (!(segtype = get_segtype_from_string(cmd, SEG_TYPE_NAME_VDO)))
+ return_0;
+
+ if (activation() && segtype->ops->target_present) {
+ if (!segtype->ops->target_present(cmd, NULL, NULL)) {
+ log_error("%s: Required device-mapper target(s) not detected in your kernel.",
+ segtype->name);
+ return_0;
+ }
+ }
+ }
+
+ if (segtype_is_thin_pool(segtype) || segtype_is_thin(segtype) || *pool_data_vdo) {
if (arg_is_set(cmd, zero_ARG)) {
*zero_new_blocks = arg_int_value(cmd, zero_ARG, 0) ? THIN_ZERO_YES : THIN_ZERO_NO;
log_very_verbose("%s pool zeroing.",
} else
*pool_metadata_size = 0;
-
/* TODO: default in lvm.conf and metadata profile ? */
*pool_metadata_spare = arg_int_value(cmd, poolmetadataspare_ARG,
DEFAULT_POOL_METADATA_SPARE);
int get_pool_params(struct cmd_context *cmd,
const struct segment_type *segtype,
+ int *pool_data_vdo,
uint64_t *pool_metadata_size,
int *pool_metadata_spare,
uint32_t *chunk_size,