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 <gqjiang@suse.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
This commit is contained in:
Guoqing Jiang 2016-05-11 17:31:36 +08:00 committed by Jes Sorensen
parent 6ac963cef0
commit 45a87c2f31
1 changed files with 19 additions and 3 deletions

View File

@ -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