diff options
author | NeilBrown <neilb@suse.de> | 2013-06-24 05:04:38 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-06-24 05:04:38 +0200 |
commit | b397d7f3e08bdebcfce11ae9e281f93c5c4b9761 (patch) | |
tree | d573469e5e6d6803ee46393efd65cda085f1f950 /Grow.c | |
parent | Grow: Try hard to set new_offset. (diff) | |
download | mdadm-b397d7f3e08bdebcfce11ae9e281f93c5c4b9761.tar.xz mdadm-b397d7f3e08bdebcfce11ae9e281f93c5c4b9761.zip |
Grow: fix two problems with new_data_offset
1/ ignore failed devices - obviously
2/ We need to tell the kernel which direction the reshape should
progress even if we didn't choose the particular data_offset
to use.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Grow.c')
-rw-r--r-- | Grow.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -2267,6 +2267,8 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st, char *dn = map_dev(sd->disk.major, sd->disk.minor, 0); unsigned long long new_data_offset; + if (sd->disk.state & (1<<MD_DISK_FAULTY)) + continue; if (delta_disks < 0) { /* Don't need any space as array is shrinking * just move data_offset up by min @@ -2308,9 +2310,9 @@ static int set_new_data_offset(struct mdinfo *sra, struct supertype *st, dir = -1; else dir = 1; - sysfs_set_str(sra, NULL, "reshape_direction", - dir == 1 ? "backwards" : "forwards"); } + sysfs_set_str(sra, NULL, "reshape_direction", + dir == 1 ? "backwards" : "forwards"); if (dir > 0) { /* Increase data offset */ if (after < min) { |