]> sourceware.org Git - lvm2.git/commitdiff
thin_pool: introduce --pooldatavdo
authorZdenek Kabelac <zkabelac@redhat.com>
Thu, 7 Dec 2023 18:17:35 +0000 (19:17 +0100)
committerZdenek Kabelac <zkabelac@redhat.com>
Wed, 10 Jan 2024 13:02:22 +0000 (14:02 +0100)
Introducing new arg --pooldatavdo y|n

lib/metadata/metadata-exported.h
tools/args.h
tools/lvconvert.c
tools/lvcreate.c
tools/toollib.c
tools/toollib.h

index af756d2ce85889944519754940f671e2bc12ee77..de447fffa046c2e760e9f3cdf540302f60a1d16c 100644 (file)
@@ -1040,6 +1040,7 @@ struct lvcreate_params {
        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 */
 
index 96c7210db81b4d8fb83fa39ab16c60174a8b82d4..27759714fed863e3f461ab56643fcb5f9e034be0 100644 (file)
@@ -608,6 +608,9 @@ arg(polloperation_ARG, '\0', "polloperation", polloperation_VAL, 0, 0,
 /* 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")
 
index eaf85c20b3eb8b46e83eff75f16392d233fc975f..9a7b80ae9c17c265f6caf8950cc465b0841b7017 100644 (file)
@@ -3062,6 +3062,7 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
        thin_discards_t discards;
        thin_zero_t zero_new_blocks;
        int error_when_full;
+       int data_vdo;
        int is_active;
        int ret = 1;
 
@@ -3185,7 +3186,7 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
        }
 
        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;
 
index 990764d7de7cdc2730e7f1a0f5442742772b851b..add2d6971d26f258c1ea7a3f309ea6e961d0b505 100644 (file)
@@ -926,6 +926,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
 
 #define THIN_POOL_ARGS \
        discards_ARG,\
+       pooldatavdo_ARG,\
        thinpool_ARG
 
 #define VDO_POOL_ARGS \
@@ -1225,7 +1226,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
            !_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) ||
index 9b4a6cd4b62e2b34ab6f994f05d56726ca8c688d..1493f17e7db5757f9f37f30f215d05882a5989fa 100644 (file)
@@ -953,13 +953,27 @@ int get_activation_monitoring_mode(struct cmd_context *cmd,
  */
 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.",
@@ -1011,7 +1025,6 @@ int get_pool_params(struct cmd_context *cmd,
        } 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);
index 2b38e4e4f349df4f8e53ee3109f351024eb56e2e..c1c7c35f1794e03443bbdf056b130ef2885747ba 100644 (file)
@@ -200,6 +200,7 @@ int get_activation_monitoring_mode(struct cmd_context *cmd,
 
 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,
This page took 0.051832 seconds and 5 git commands to generate.