]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow: allow a reshape which only changes --data-offset
authorNeilBrown <neilb@suse.de>
Tue, 21 May 2013 06:50:55 +0000 (16:50 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 22 May 2013 02:27:40 +0000 (12:27 +1000)
Sometimes, that is all we want to do.

Signed-off-by: NeilBrown <neilb@suse.de>
Grow.c
mdadm.c

diff --git a/Grow.c b/Grow.c
index 82f3cc17723b3c7146185421b2a704651ea7a7bf..7b9cc70e2fdfe1db46d7f0088743fe166feb63bd 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -1875,6 +1875,7 @@ size_change_error:
        if ((s->level == UnSet || s->level == array.level) &&
            (s->layout_str == NULL) &&
            (s->chunk == 0 || s->chunk == array.chunk_size) &&
+           data_offset == INVALID_SECTORS &&
            (s->raiddisks == 0 || s->raiddisks == array.raid_disks)) {
                /* Nothing more to do */
                if (!changed && c->verbose >= 0)
@@ -2757,6 +2758,9 @@ static int reshape_array(char *container, int fd, char *devname,
                Manage_subdevs(devname, fd, devlist, verbose,
                               0,NULL, 0);
 
+
+       if (reshape.backup_blocks == 0 && data_offset)
+               reshape.backup_blocks = reshape.before.data_disks * info->array.chunk_size/512;
        if (reshape.backup_blocks == 0) {
                /* No restriping needed, but we might need to impose
                 * some more changes: layout, raid_disks, chunk_size
diff --git a/mdadm.c b/mdadm.c
index b074238104d0ea07d84ddb4117a9782bf7718850..c6a8ebf14c851d0e74c2d85ae952857aac6b9d41 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -1517,7 +1517,8 @@ int main(int argc, char *argv[])
                                                   mdfd, c.backup_file,
                                                   c.verbose);
                else if (s.size > 0 || s.raiddisks || s.layout_str != NULL
-                        || s.chunk != 0 || s.level != UnSet) {
+                        || s.chunk != 0 || s.level != UnSet
+                        || data_offset != INVALID_SECTORS) {
                        rv = Grow_reshape(devlist->devname, mdfd,
                                          devlist->next,
                                          data_offset, &c, &s);