]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Grow_continue: handle RESHAPE_NO_BACKUP correctly.
authorNeilBrown <neilb@suse.de>
Mon, 27 May 2013 05:37:30 +0000 (15:37 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 28 May 2013 06:58:18 +0000 (16:58 +1000)
If the reshape does not require a backup, Grow_continue can
abort early.

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

diff --git a/Grow.c b/Grow.c
index 5e214f12aa461893133f66ce29ee6994a2b19f55..a3c8083c60d158549164d585688631448f6d5c9c 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -2672,6 +2672,8 @@ static int reshape_array(char *container, int fd, char *devname,
                /* reshape already started. just skip to monitoring the reshape */
                if (reshape.backup_blocks == 0)
                        return 0;
+               if (restart & RESHAPE_NO_BACKUP)
+                       return 0;
                goto started;
        }
        /* The container is frozen but the array may not be.
@@ -2884,8 +2886,6 @@ static int reshape_array(char *container, int fd, char *devname,
                goto release;
        }
 
-started:
-
        if (array.level == 10) {
                /* Reshaping RAID10 does not require any data backup by
                 * user-space.  Instead it requires that the data_offset
@@ -2943,6 +2943,7 @@ started:
                break;
        }
 
+started:
        /* Decide how many blocks (sectors) for a reshape
         * unit.  The number we have so far is just a minimum
         */
@@ -4686,10 +4687,13 @@ int Grow_continue(int mdfd, struct supertype *st, struct mdinfo *info,
                close(cfd);
                ret_val = reshape_container(st->container_devnm, NULL, mdfd,
                                            st, info, 0, backup_file,
-                                           0, 1, freeze_reshape);
+                                           0,
+                                           1 | info->reshape_active,
+                                           freeze_reshape);
        } else
                ret_val = reshape_array(NULL, mdfd, "array", st, info, 1,
-                                       NULL, 0ULL, backup_file, 0, 0, 1,
+                                       NULL, 0ULL, backup_file, 0, 0,
+                                       1 | info->reshape_active,
                                        freeze_reshape);
 
        return ret_val;