From f989a55539b7b29da9b8345c01fe342eb93feefc Mon Sep 17 00:00:00 2001 From: Jonathan Earl Brassow Date: Thu, 22 Sep 2011 15:36:21 +0000 Subject: [PATCH] Disallow the creation of mirrors (mirror or raid1 segtype) with only one leg. If you specify the segment type (e.g. --type mirror) and the mirrors argument as zero, it would result in a mirrored LV with only one image. While the device may be valid in theory, it should not be allowed in practice. It also makes it difficult on the conversion tools, since they react badly to single-image mirrors. --- WHATS_NEW | 1 + tools/lvcreate.c | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/WHATS_NEW b/WHATS_NEW index b122b6834..a1f598030 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.89 - ================================== + Disallow the creation of mirrors (mirror or raid1 segtype) with only one leg. Cleanup restart clvmd code (no memory allocation, debug print passed args). Add all exclusive locks to clvmd restart option args. Always send the whole clvmd packet header in refresh commands. diff --git a/tools/lvcreate.c b/tools/lvcreate.c index ec120f593..c9897e6fa 100644 --- a/tools/lvcreate.c +++ b/tools/lvcreate.c @@ -618,8 +618,13 @@ static int _lvcreate_params(struct lvcreate_params *lp, if (arg_count(cmd, mirrors_ARG)) { lp->mirrors = arg_uint_value(cmd, mirrors_ARG, 0) + 1; - if (lp->mirrors == 1) + if (lp->mirrors == 1) { + if (segtype_is_mirrored(lp->segtype)) { + log_error("Image count for segtype \"%s\" cannot be 0.", lp->segtype->name); + return 0; + } log_print("Redundant mirrors argument: default is 0"); + } if (arg_sign_value(cmd, mirrors_ARG, 0) == SIGN_MINUS) { log_error("Mirrors argument may not be negative"); return 0;