]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow: fix two problems with new_data_offset
authorNeilBrown <neilb@suse.de>
Mon, 24 Jun 2013 03:04:38 +0000 (13:04 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 24 Jun 2013 03:04:38 +0000 (13:04 +1000)
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>
Grow.c

diff --git a/Grow.c b/Grow.c
index 556bdafea5a1a575c40caa29d8799877e4726f8f..7bfb3ceb7916303c77ea423c03d4767f10a9b792 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -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) {