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>
This commit is contained in:
Adam Kwolek 2011-03-09 09:03:54 +11:00 committed by NeilBrown
parent 493f5dd6b2
commit 633b561073
1 changed files with 3 additions and 13 deletions

View File

@ -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) {