diff options
-rw-r--r-- | Create.c | 1 | ||||
-rw-r--r-- | ReadMe.c | 1 | ||||
-rw-r--r-- | mdadm.8.in | 6 | ||||
-rw-r--r-- | mdadm.c | 33 | ||||
-rw-r--r-- | mdadm.h | 3 | ||||
-rw-r--r-- | super1.c | 1 |
6 files changed, 44 insertions, 1 deletions
@@ -531,6 +531,7 @@ int Create(struct supertype *st, char *mddev, st->ss->name); warn = 1; } + st->nodes = c->nodes; if (warn) { if (c->runstop!= 1) { @@ -140,6 +140,7 @@ struct option long_options[] = { {"homehost", 1, 0, HomeHost}, {"symlinks", 1, 0, Symlinks}, {"data-offset",1, 0, DataOffset}, + {"nodes",1, 0, Nodes}, /* For assemble */ {"uuid", 1, 0, 'u'}, @@ -971,6 +971,12 @@ However for RAID0, it is not possible to add spares. So to increase the number of devices in a RAID0, it is necessary to set the new number of devices, and to add the new devices, in the same command. +.TP +.BR \-\-nodes +Only works when the array is for clustered environment. It specifies +the maximum number of nodes in the cluster that will use this device +simultaneously. If not specified, this defaults to 4. + .SH For assemble: .TP @@ -588,7 +588,14 @@ int main(int argc, char *argv[]) } ident.raid_disks = s.raiddisks; continue; - + case O(CREATE, Nodes): + c.nodes = parse_num(optarg); + if (c.nodes <= 0) { + pr_err("invalid number for the number of cluster nodes: %s\n", + optarg); + exit(2); + } + continue; case O(CREATE,'x'): /* number of spare (eXtra) disks */ if (s.sparedisks) { pr_err("spare-devices set twice: %d and %s\n", @@ -1097,6 +1104,15 @@ int main(int argc, char *argv[]) s.bitmap_file = optarg; continue; } + if (strcmp(optarg, "clustered")== 0) { + s.bitmap_file = optarg; + /* Set the default number of cluster nodes + * to 4 if not already set by user + */ + if (c.nodes < 1) + c.nodes = 4; + continue; + } /* probable typo */ pr_err("bitmap file must contain a '/', or be 'internal', or 'none'\n" " not '%s'\n", optarg); @@ -1377,6 +1393,21 @@ int main(int argc, char *argv[]) case CREATE: if (c.delay == 0) c.delay = DEFAULT_BITMAP_DELAY; + + if (c.nodes) { + if (!s.bitmap_file || strcmp(s.bitmap_file, "clustered") != 0) { + pr_err("--nodes argument only compatible with --bitmap=clustered\n"); + rv = 1; + break; + } + + if (s.level != 1) { + pr_err("--bitmap=clustered is currently supported with RAID mirror only\n"); + rv = 1; + break; + } + } + if (s.write_behind && !s.bitmap_file) { pr_err("write-behind mode requires a bitmap.\n"); rv = 1; @@ -344,6 +344,7 @@ enum special_options { Dump, Restore, Action, + Nodes, }; enum prefix_standard { @@ -418,6 +419,7 @@ struct context { char *backup_file; int invalid_backup; char *action; + int nodes; }; struct shape { @@ -1029,6 +1031,7 @@ struct supertype { */ int devcnt; int retry_soon; + int nodes; struct mdinfo *devs; @@ -2144,6 +2144,7 @@ add_internal_bitmap1(struct supertype *st, bms->daemon_sleep = __cpu_to_le32(delay); bms->sync_size = __cpu_to_le64(size); bms->write_behind = __cpu_to_le32(write_behind); + bms->nodes = __cpu_to_le32(st->nodes); *chunkp = chunk; return 1; |