Add nodes option while creating md
Specifies the maximum number of nodes in the cluster that may use this device simultaneously. This is equivalent to the number of bitmaps created in the internal superblock (patches to follow). Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
95a05b37e8
commit
529e2aa573
1
Create.c
1
Create.c
|
@ -531,6 +531,7 @@ int Create(struct supertype *st, char *mddev,
|
||||||
st->ss->name);
|
st->ss->name);
|
||||||
warn = 1;
|
warn = 1;
|
||||||
}
|
}
|
||||||
|
st->nodes = c->nodes;
|
||||||
|
|
||||||
if (warn) {
|
if (warn) {
|
||||||
if (c->runstop!= 1) {
|
if (c->runstop!= 1) {
|
||||||
|
|
1
ReadMe.c
1
ReadMe.c
|
@ -140,6 +140,7 @@ struct option long_options[] = {
|
||||||
{"homehost", 1, 0, HomeHost},
|
{"homehost", 1, 0, HomeHost},
|
||||||
{"symlinks", 1, 0, Symlinks},
|
{"symlinks", 1, 0, Symlinks},
|
||||||
{"data-offset",1, 0, DataOffset},
|
{"data-offset",1, 0, DataOffset},
|
||||||
|
{"nodes",1, 0, Nodes},
|
||||||
|
|
||||||
/* For assemble */
|
/* For assemble */
|
||||||
{"uuid", 1, 0, 'u'},
|
{"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
|
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.
|
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:
|
.SH For assemble:
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
|
|
33
mdadm.c
33
mdadm.c
|
@ -588,7 +588,14 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
ident.raid_disks = s.raiddisks;
|
ident.raid_disks = s.raiddisks;
|
||||||
continue;
|
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 */
|
case O(CREATE,'x'): /* number of spare (eXtra) disks */
|
||||||
if (s.sparedisks) {
|
if (s.sparedisks) {
|
||||||
pr_err("spare-devices set twice: %d and %s\n",
|
pr_err("spare-devices set twice: %d and %s\n",
|
||||||
|
@ -1097,6 +1104,15 @@ int main(int argc, char *argv[])
|
||||||
s.bitmap_file = optarg;
|
s.bitmap_file = optarg;
|
||||||
continue;
|
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 */
|
/* probable typo */
|
||||||
pr_err("bitmap file must contain a '/', or be 'internal', or 'none'\n"
|
pr_err("bitmap file must contain a '/', or be 'internal', or 'none'\n"
|
||||||
" not '%s'\n", optarg);
|
" not '%s'\n", optarg);
|
||||||
|
@ -1377,6 +1393,21 @@ int main(int argc, char *argv[])
|
||||||
case CREATE:
|
case CREATE:
|
||||||
if (c.delay == 0)
|
if (c.delay == 0)
|
||||||
c.delay = DEFAULT_BITMAP_DELAY;
|
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) {
|
if (s.write_behind && !s.bitmap_file) {
|
||||||
pr_err("write-behind mode requires a bitmap.\n");
|
pr_err("write-behind mode requires a bitmap.\n");
|
||||||
rv = 1;
|
rv = 1;
|
||||||
|
|
3
mdadm.h
3
mdadm.h
|
@ -344,6 +344,7 @@ enum special_options {
|
||||||
Dump,
|
Dump,
|
||||||
Restore,
|
Restore,
|
||||||
Action,
|
Action,
|
||||||
|
Nodes,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum prefix_standard {
|
enum prefix_standard {
|
||||||
|
@ -418,6 +419,7 @@ struct context {
|
||||||
char *backup_file;
|
char *backup_file;
|
||||||
int invalid_backup;
|
int invalid_backup;
|
||||||
char *action;
|
char *action;
|
||||||
|
int nodes;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct shape {
|
struct shape {
|
||||||
|
@ -1029,6 +1031,7 @@ struct supertype {
|
||||||
*/
|
*/
|
||||||
int devcnt;
|
int devcnt;
|
||||||
int retry_soon;
|
int retry_soon;
|
||||||
|
int nodes;
|
||||||
|
|
||||||
struct mdinfo *devs;
|
struct mdinfo *devs;
|
||||||
|
|
||||||
|
|
1
super1.c
1
super1.c
|
@ -2144,6 +2144,7 @@ add_internal_bitmap1(struct supertype *st,
|
||||||
bms->daemon_sleep = __cpu_to_le32(delay);
|
bms->daemon_sleep = __cpu_to_le32(delay);
|
||||||
bms->sync_size = __cpu_to_le64(size);
|
bms->sync_size = __cpu_to_le64(size);
|
||||||
bms->write_behind = __cpu_to_le32(write_behind);
|
bms->write_behind = __cpu_to_le32(write_behind);
|
||||||
|
bms->nodes = __cpu_to_le32(st->nodes);
|
||||||
|
|
||||||
*chunkp = chunk;
|
*chunkp = chunk;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue