summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2016-08-08 14:25:46 +0100
committerAlasdair G Kergon <agk@redhat.com>2016-08-08 14:39:55 +0100
commitc55134aa48644143ba398fdae30f47cb73b72ef9 (patch)
tree2747d3a15f281614d41ea8f396d1ab434180746e
parent7d6cf12554b0b6cbbee9db2f4da9439d6492a2b3 (diff)
downloadlvm2-c55134aa48644143ba398fdae30f47cb73b72ef9.tar.gz
lvconvert: Limit --corelog and --mirrorlog to mirrors.
It's an error to specify a log when the final result is not of type mirror.
-rw-r--r--WHATS_NEW1
-rw-r--r--tools/lvconvert.c13
2 files changed, 13 insertions, 1 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 4ba8a0c35..f438fc830 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.163 -
=================================
+ Limit use of --corelog and --mirrorlog to mirrors in lvconvert.
Do not refresh whole cmd context if profile dropped after processing LVM cmd.
Support straightforward lvconvert between striped and raid4 LVs.
Support straightforward lvconvert between raid1 and mirror LVs.
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 5677e9cca..e7c34f7c6 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1700,6 +1700,11 @@ static int _lvconvert_mirrors(struct cmd_context *cmd,
uint32_t new_mimage_count;
uint32_t new_log_count;
+ if (*lp->type_str && strcmp(lp->type_str, SEG_TYPE_NAME_MIRROR)) {
+ log_error("--corelog and --mirrorlog is only compatible with --type mirror");
+ return 0;
+ }
+
if (lp->merge_mirror) {
log_error("Unable to merge mirror images"
"of segment type 'mirror'.");
@@ -1888,6 +1893,11 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
}
}
+ if ((lp->corelog || lp->mirrorlog) && strcmp(lp->type_str, SEG_TYPE_NAME_MIRROR)) {
+ log_error("--corelog and --mirrorlog is only compatible with --type mirror");
+ return 0;
+ }
+
if (lp->merge_mirror)
return lv_raid_merge(lv);
@@ -1898,7 +1908,8 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
return lv_raid_split(lv, lp->lv_split_name, image_count, lp->pvh);
if (lp->mirrors_supplied) {
- if (!*lp->type_str || !strcmp(lp->type_str, SEG_TYPE_NAME_RAID1) || !strcmp(lp->type_str, SEG_TYPE_NAME_LINEAR)) {
+ if (!*lp->type_str || !strcmp(lp->type_str, SEG_TYPE_NAME_RAID1) || !strcmp(lp->type_str, SEG_TYPE_NAME_LINEAR) ||
+ (!strcmp(lp->type_str, SEG_TYPE_NAME_STRIPED) && image_count == 1)) {
if (!lv_raid_change_image_count(lv, image_count, lp->pvh))
return_0;