From 633b5610736533f6ba49206803ad00705e6cd9bd Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Wed, 9 Mar 2011 09:03:54 +1100 Subject: [PATCH] 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 Signed-off-by: NeilBrown --- super-intel.c | 16 +++------------- 1 file 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) { -- 2.47.2