imsm: FIX: Add array map state transition for failures during initialization

During initialization disk failure can occur also. Add code for such case
in imsm_set_disk() to support such event.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Adam Kwolek 2011-12-07 13:58:15 +01:00 committed by NeilBrown
parent fc8ca06447
commit 6ce1fbf188
1 changed files with 25 additions and 0 deletions

View File

@ -5718,6 +5718,25 @@ static int is_rebuilding(struct imsm_dev *dev)
return 0;
}
static int is_initializing(struct imsm_dev *dev)
{
struct imsm_map *migr_map;
if (!dev->vol.migr_state)
return 0;
if (migr_type(dev) != MIGR_INIT)
return 0;
migr_map = get_imsm_map(dev, 1);
if (migr_map->map_state == IMSM_T_STATE_UNINITIALIZED)
return 1;
return 0;
}
static void update_recovery_start(struct intel_super *super,
struct imsm_dev *dev,
struct mdinfo *array)
@ -6501,6 +6520,12 @@ static void imsm_set_disk(struct active_array *a, int n, int state)
super->updates_pending++;
break;
}
if (is_initializing(dev)) {
dprintf("while initialization.");
map->map_state = map_state;
super->updates_pending++;
break;
}
break;
case IMSM_T_STATE_FAILED: /* transition to failed state */
dprintf("failed: ");