From: Guoqing Jiang Date: Wed, 11 May 2016 09:31:36 +0000 (+0800) Subject: super1: add more checks for NodeNumUpdate option X-Git-Tag: mdadm-4.0~87 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=45a87c2f31335a759190dff663a881bc78ca5443;p=mdadm.git super1: add more checks for NodeNumUpdate option There are some cases which didn't need to check the space is enough or not for NodeNumUpdate option. 1. for array which does not have clustered bitmap. 2. "--nodes" parameter is 0 (eg, add a disk to clustered raid). 3. if "--nodes" parameter is set to a smaller num than current bms->nodes. Signed-off-by: Guoqing Jiang Signed-off-by: Jes Sorensen --- diff --git a/super1.c b/super1.c index 6bf95234..879e0d5a 100644 --- a/super1.c +++ b/super1.c @@ -2394,9 +2394,25 @@ static int write_bitmap1(struct supertype *st, int fd, enum bitmap_update update return -EINVAL; } - if (bms->version == BITMAP_MAJOR_CLUSTERED && st->nodes <= 1) { - pr_err("Warning: cluster-md at least needs two nodes\n"); - return -EINVAL; + if (bms->version == BITMAP_MAJOR_CLUSTERED) { + if (st->nodes == 1) { + /* the parameter for nodes is not valid */ + pr_err("Warning: cluster-md at least needs two nodes\n"); + return -EINVAL; + } else if (st->nodes == 0) + /* --nodes is not specified */ + break; + else if (__cpu_to_le32(st->nodes) < bms->nodes) { + /* Since the nodes num is not increased, no need to check the space + * is enough or not, just update bms->nodes */ + bms->nodes = __cpu_to_le32(st->nodes); + break; + } + } else { + /* no need to change bms->nodes for other bitmap types */ + if (st->nodes) + pr_err("Warning: --nodes option is only suitable for clustered bitmap\n"); + break; } /* Each node has an independent bitmap, it is necessary to calculate the