From: NeilBrown Date: Tue, 21 May 2013 06:50:55 +0000 (+1000) Subject: Grow: allow a reshape which only changes --data-offset X-Git-Tag: mdadm-3.3-rc1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8876bf0bb66d8437cd91607417ada386add14d04;p=thirdparty%2Fmdadm.git Grow: allow a reshape which only changes --data-offset Sometimes, that is all we want to do. Signed-off-by: NeilBrown --- diff --git a/Grow.c b/Grow.c index 82f3cc17..7b9cc70e 100644 --- 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 b0742381..c6a8ebf1 100644 --- 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);