diff options
author | NeilBrown <neilb@suse.de> | 2015-05-28 16:43:15 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2015-05-28 16:43:15 +1000 |
commit | 8e7ddc5f50af00e569ef115e25c635e2d74e90f0 (patch) | |
tree | 4eed94921039455a93790a05949dec2c4e4668d3 | |
parent | 20c993e2e5ce3131be5e11f81a51f46d4b17f0ac (diff) | |
download | mdadm-8e7ddc5f50af00e569ef115e25c635e2d74e90f0.tar.gz |
Grow: fix problem with --grow --continue
If an array is being reshaped using backup space on a 'spare' device,
then
mdadm --grow --continue
won't find it as by the time it runs, nothing looks like a spare are
more. The spare has been added to the array, but has no data yet.
So allow reshape_prepare_fdlist to find a newly-incorporated spare and
report this so it can be used.
Reported-by: Xiao Ni <xni@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | Grow.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -850,7 +850,8 @@ int reshape_prepare_fdlist(char *devname, for (sd = sra->devs; sd; sd = sd->next) { if (sd->disk.state & (1<<MD_DISK_FAULTY)) continue; - if (sd->disk.state & (1<<MD_DISK_SYNC)) { + if (sd->disk.state & (1<<MD_DISK_SYNC) && + sd->disk.raid_disk < raid_disks) { char *dn = map_dev(sd->disk.major, sd->disk.minor, 1); fdlist[sd->disk.raid_disk] @@ -3184,7 +3185,7 @@ started: d = reshape_prepare_fdlist(devname, sra, odisks, nrdisks, blocks, backup_file, fdlist, offsets); - if (d < 0) { + if (d < odisks) { goto release; } if ((st->ss->manage_reshape == NULL) || @@ -3196,7 +3197,7 @@ started: devname); pr_err(" Please provide one with \"--backup=...\"\n"); goto release; - } else if (sra->array.spare_disks == 0) { + } else if (d == odisks) { pr_err("%s: Cannot grow - need a spare or backup-file to backup critical section\n", devname); goto release; } |