]> git.neil.brown.name Git - mdadm.git/commitdiff
imsm: FIX: put expansion finalization in to one place
authorAdam Kwolek <adam.kwolek@intel.com>
Thu, 3 Feb 2011 06:46:17 +0000 (17:46 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 3 Feb 2011 06:46:17 +0000 (17:46 +1100)
When a->last_checkpoint variable can reach array end,
reshape finalization can be put in to single place.

There is no need to reset migration variables.
imsm_set_disk() will call end_migration() and this sets
all migration variables to required values.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
super-intel.c

index 4081071c58991d6ec696c75a9cfa78110efeff40..c29f37e613a525ca3ad6b81df9fad57d7c7b1d56 100644 (file)
@@ -5174,10 +5174,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
                        if (a->last_checkpoint >= a->info.component_size) {
                                unsigned long long array_blocks;
                                int used_disks;
-                               /* it seems the reshape is all done */
-                               dev->vol.migr_state = 0;
-                               dev->vol.migr_type = 0;
-                               dev->vol.curr_migr_unit = 0;
+                               struct mdinfo *mdi;
 
                                used_disks = imsm_num_data_members(dev, -1);
                                array_blocks = map->blocks_per_member * used_disks;
@@ -5191,8 +5188,15 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
                                                       * array size
                                                       */
                                super->updates_pending++;
+
+                               /* finalize online capacity expansion/reshape */
+                               for (mdi = a->info.devs; mdi; mdi = mdi->next)
+                                       imsm_set_disk(a,
+                                                     mdi->disk.raid_disk,
+                                                     mdi->curr_state);
+
                                imsm_progress_container_reshape(super);
-                       }                               
+                       }
                }
        }
 
@@ -5257,19 +5261,6 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
                super->updates_pending++;
        }
 
-       /* manage online capacity expansion/reshape */
-       if ((a->curr_action != reshape) &&
-           (a->prev_action == reshape)) {
-               struct mdinfo *mdi;
-
-               /* finalize online capacity expansion/reshape */
-               for (mdi = a->info.devs; mdi; mdi = mdi->next)
-                       imsm_set_disk(a, mdi->disk.raid_disk, mdi->curr_state);
-
-               /* check next volume reshape */
-               imsm_progress_container_reshape(super);
-       }
-
        return consistent;
 }