diff options
author | NeilBrown <neilb@suse.de> | 2012-10-04 16:34:21 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-10-04 16:34:21 +1000 |
commit | 40c9a66a5c1a89d621daa2184888e66952b06a71 (patch) | |
tree | bf7dae47d213cc7629f112880a9c18cb509d8415 /mdadm.c | |
parent | 83cd1e97cbc0c4749561b72864dbaaed3a014123 (diff) |
Add --data-offset flag for Create and Grow
This can be used to over-ride the automatic assignment of
data offset.
For --create, it is useful to re-create old arrays where different
defaults applied.
For --grow it may be able to force a reshape in the reverse direction.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdadm.c')
-rw-r--r-- | mdadm.c | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -49,6 +49,7 @@ int main(int argc, char *argv[]) int i; unsigned long long array_size = 0; + unsigned long long data_offset = INVALID_SECTORS; struct mddev_ident ident; char *configfile = NULL; int devmode = 0; @@ -457,6 +458,21 @@ int main(int argc, char *argv[]) } continue; + case O(CREATE,DataOffset): + case O(GROW,DataOffset): + if (data_offset != INVALID_SECTORS) { + fprintf(stderr, Name ": data-offset may only be specified one. " + "Second value is %s.\n", optarg); + exit(2); + } + data_offset = parse_size(optarg); + if (data_offset == INVALID_SECTORS) { + fprintf(stderr, Name ": invalid data-offset: %s\n", + optarg); + exit(2); + } + continue; + case O(GROW,'l'): case O(CREATE,'l'): case O(BUILD,'l'): /* set raid level*/ @@ -1345,7 +1361,7 @@ int main(int argc, char *argv[]) rv = Create(ss, devlist->devname, ident.name, ident.uuid_set ? ident.uuid : NULL, devs_found-1, devlist->next, - &s, &c); + &s, &c, data_offset); break; case MISC: if (devmode == 'E') { @@ -1469,7 +1485,8 @@ int main(int argc, char *argv[]) else if (s.size > 0 || s.raiddisks || s.layout_str != NULL || s.chunk != 0 || s.level != UnSet) { rv = Grow_reshape(devlist->devname, mdfd, - devlist->next, &c, &s); + devlist->next, + data_offset, &c, &s); } else if (array_size == 0) pr_err("no changes to --grow\n"); break; |