]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.c
Add --data-offset flag for Create and Grow
[thirdparty/mdadm.git] / mdadm.c
diff --git a/mdadm.c b/mdadm.c
index 51c57c5d06dabdb8a9d2c720440ba10b3095be00..5f395714e240307851b18ed51413ec8834a4c796 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -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;