diff options
author | David Teigland <teigland@redhat.com> | 2016-12-09 10:08:26 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2016-12-09 10:08:26 -0600 |
commit | 2023297736cde3c7491f5e65fba8050f980b9d8e (patch) | |
tree | 3a12dd9bc389b2e66a3a8acd1527c43bac665950 | |
parent | c0a356561aab01cedcdd603e580162aea2b4e0de (diff) | |
download | lvm2-2023297736cde3c7491f5e65fba8050f980b9d8e.tar.gz |
lvconvert: use command defs for thin merge
-rw-r--r-- | test/shell/thin-merge.sh | 4 | ||||
-rw-r--r-- | test/shell/thin-vglock.sh | 2 | ||||
-rw-r--r-- | tools/args.h | 1 | ||||
-rw-r--r-- | tools/command-lines.in | 8 | ||||
-rw-r--r-- | tools/lvconvert.c | 24 | ||||
-rw-r--r-- | tools/lvmcmdline.c | 9 | ||||
-rw-r--r-- | tools/tools.h | 1 |
7 files changed, 38 insertions, 11 deletions
diff --git a/test/shell/thin-merge.sh b/test/shell/thin-merge.sh index b3ad00760..d9329247c 100644 --- a/test/shell/thin-merge.sh +++ b/test/shell/thin-merge.sh @@ -44,7 +44,7 @@ touch mntsnap/test_snap lvs -o+tags,thin_id $vg -lvconvert --merge $vg/snap +lvconvert --mergethin $vg/snap umount mnt @@ -107,7 +107,7 @@ fsck -n "$DM_DEV_DIR/$vg/$lv1" check lv_not_exists $vg oldsnapof_${lv1} # Add old snapshot to thin snapshot lvcreate -s -L10 -n oldsnapof_snap $vg/snap -lvconvert --merge $vg/snap +lvconvert --mergethin $vg/snap lvremove -f $vg/oldsnapof_snap vgremove -ff $vg diff --git a/test/shell/thin-vglock.sh b/test/shell/thin-vglock.sh index e59636dc3..381d9fa4c 100644 --- a/test/shell/thin-vglock.sh +++ b/test/shell/thin-vglock.sh @@ -34,7 +34,7 @@ mount "$DM_DEV_DIR/$vg/$lv1" mnt lvcreate -s -n snap $vg/$lv1 check lv_field $vg/snap thin_id "3" -lvconvert --merge $vg/snap +lvconvert --mergethin $vg/snap umount mnt vgchange -an $vg diff --git a/tools/args.h b/tools/args.h index 654f7189e..c90460977 100644 --- a/tools/args.h +++ b/tools/args.h @@ -61,6 +61,7 @@ arg(logonly_ARG, '\0', "logonly", 0, 0, 0) arg(maxrecoveryrate_ARG, '\0', "maxrecoveryrate", sizekb_VAL, 0, 0) arg(merge_ARG, '\0', "merge", 0, 0, 0) arg(mergesnapshot_ARG, '\0', "mergesnapshot", 0, 0, 0) +arg(mergethin_ARG, '\0', "mergethin", 0, 0, 0) arg(mergedconfig_ARG, '\0', "mergedconfig", 0, 0, 0) arg(metadatacopies_ARG, '\0', "metadatacopies", metadatacopies_VAL, 0, 0) arg(metadataignore_ARG, '\0', "metadataignore", bool_VAL, 0, 0) diff --git a/tools/command-lines.in b/tools/command-lines.in index 521dd8ded..ac4b4011b 100644 --- a/tools/command-lines.in +++ b/tools/command-lines.in @@ -892,6 +892,14 @@ DESC: (infers --type thin). --- +lvconvert --mergethin LV_thin ... +OO: --background, --interval Number, OO_LVCONVERT +ID: lvconvert_merge_thin +DESC: Merge thin LV into its origin LV. +RULE: all not lv_is_locked lv_is_pvmove lv_is_merging_origin lv_is_virtual_origin lv_is_external_origin lv_is_merging_cow + +--- + # stripes option is not intuitive when creating a thin LV, # but here it applies to creating the new thin pool that # is used for the thin LV diff --git a/tools/lvconvert.c b/tools/lvconvert.c index 0c0fbd9f5..6d3e949bc 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -2242,8 +2242,7 @@ static int _lvconvert_merge_old_snapshot(struct cmd_context *cmd, } static int _lvconvert_merge_thin_snapshot(struct cmd_context *cmd, - struct logical_volume *lv, - struct lvconvert_params *lp) + struct logical_volume *lv) { int origin_is_active = 0, r = 0; struct lv_segment *snap_seg = first_seg(lv); @@ -3698,7 +3697,7 @@ static int _lvconvert_to_pool(struct cmd_context *cmd, } if (metadata_lv && (meta_extents > metadata_lv->le_count)) { - log_error("Pool metadata LV %s is too small (%s extents) for required metadata (%s extents).", + log_error("Pool metadata LV %s is too small (%u extents) for required metadata (%u extents).", display_lvname(metadata_lv), metadata_lv->le_count, meta_extents); return 0; } @@ -4125,7 +4124,7 @@ static int _lvconvert_to_cache_vol(struct cmd_context *cmd, static int _convert_thin_volume_merge(struct cmd_context *cmd, struct logical_volume *lv, struct lvconvert_params *lp) { - return _lvconvert_merge_thin_snapshot(cmd, lv, lp); + return _lvconvert_merge_thin_snapshot(cmd, lv); } /* @@ -6078,3 +6077,20 @@ int lvconvert_swap_pool_metadata_noarg_cmd(struct cmd_context *cmd, int argc, ch return lvconvert_swap_pool_metadata_cmd(cmd, argc, argv); } #endif + +static int _lvconvert_merge_thin_single(struct cmd_context *cmd, + struct logical_volume *lv, + struct processing_handle *handle) +{ + if (!_lvconvert_merge_thin_snapshot(cmd, lv)) + return ECMD_FAILED; + + return ECMD_PROCESSED; +} + +int lvconvert_merge_thin_cmd(struct cmd_context *cmd, int argc, char **argv) +{ + return process_each_lv(cmd, cmd->position_argc, cmd->position_argv, NULL, NULL, READ_FOR_UPDATE, + NULL, NULL, &_lvconvert_merge_thin_single); +} + diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 857147768..91178014a 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -144,6 +144,11 @@ struct command_function command_functions[COMMAND_ID_COUNT] = { { lvconvert_to_cache_vol_CMD, lvconvert_to_cache_vol_cmd }, { lvconvert_swap_pool_metadata_CMD, lvconvert_swap_pool_metadata_cmd }, { lvconvert_swap_pool_metadata_deprecated_CMD, lvconvert_swap_pool_metadata_cmd }, + { lvconvert_merge_thin_CMD, lvconvert_merge_thin_cmd }, +#if 0 + { lvconvert_split_and_keep_cachepool_CMD, lvconvert_split_cachepool_cmd }, + { lvconvert_split_and_delete_cachepool_CMD, lvconvert_split_cachepool_cmd }, +#endif }; #if 0 @@ -154,10 +159,6 @@ struct command_function command_functions[COMMAND_ID_COUNT] = { { lvconvert_split_mirror_images_CMD, lvconvert_split_mirror_images_fn }, { lvconvert_change_mirrorlog_CMD, lvconvert_change_mirrorlog_fn }, - /* utilities for creating/maintaining thin and cache objects. */ - { lvconvert_split_and_keep_cachepool_CMD, lvconvert_split_and_keep_cachepool_fn }, - { lvconvert_split_and_delete_cachepool_CMD, lvconvert_split_and_delete_cachepool_fn }, - /* directed to one of the other merges (snap,thin,mirror) when all are implemented */ { lvconvert_merge_CMD, lvconvert_merge_fn }, #endif diff --git a/tools/tools.h b/tools/tools.h index de672b68a..e3094b2f4 100644 --- a/tools/tools.h +++ b/tools/tools.h @@ -265,5 +265,6 @@ int lvconvert_to_pool_noarg_cmd(struct cmd_context *cmd, int argc, char **argv); int lvconvert_to_cache_vol_cmd(struct cmd_context *cmd, int argc, char **argv); int lvconvert_to_thin_with_external_cmd(struct cmd_context *cmd, int argc, char **argv); int lvconvert_swap_pool_metadata_cmd(struct cmd_context *cmd, int argc, char **argv); +int lvconvert_merge_thin_cmd(struct cmd_context *cmd, int argc, char **argv); #endif |