summaryrefslogtreecommitdiff
path: root/super-intel.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-03-09 09:03:54 +1100
committerNeilBrown <neilb@suse.de>2011-03-09 09:03:54 +1100
commit633b5610736533f6ba49206803ad00705e6cd9bd (patch)
tree9b9cb39e2cae0d58e553dbd6d7e02fc7f43ae114 /super-intel.c
parent493f5dd6b249da3b92822f9e8ee0f20b17b131ce (diff)
imsm: FIX: Mark checkpoint and array state clean during reshape
Array state has to be managed during reshape based on consistent flag. To achieve this existing code will be reused. Currently existing code for blocks_per_unit calculation can be removed and existing code can be reused also. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super-intel.c')
-rw-r--r--super-intel.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/super-intel.c b/super-intel.c
index 90faf279..cd409e92 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -5243,18 +5243,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
*/
if (a->curr_action == reshape) {
/* still reshaping, maybe update curr_migr_unit */
- long long blocks_per_unit = blocks_per_migr_unit(dev);
- long long unit = a->last_checkpoint;
- if (blocks_per_unit) {
- unit /= blocks_per_unit;
- if (unit >
- __le32_to_cpu(dev->vol.curr_migr_unit)) {
- dev->vol.curr_migr_unit =
- __cpu_to_le32(unit);
- super->updates_pending++;
- }
- }
- return 0;
+ goto mark_checkpoint;
} else {
if (a->last_checkpoint == 0 && a->prev_action == reshape) {
/* for some reason we aborted the reshape.
@@ -5288,7 +5277,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
*/
a->check_reshape = 1;
-}
+ }
/* finalize online capacity expansion/reshape */
for (mdi = a->info.devs; mdi; mdi = mdi->next)
imsm_set_disk(a,
@@ -5331,6 +5320,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
super->updates_pending++;
}
+mark_checkpoint:
/* check if we can update curr_migr_unit from resync_start, recovery_start */
blocks_per_unit = blocks_per_migr_unit(dev);
if (blocks_per_unit) {