imsm: set map state depending on sync state
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
5b65005fc8
commit
a862209dc3
|
@ -1649,22 +1649,6 @@ static int imsm_open_new(struct supertype *c, struct active_array *a,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void imsm_set_array_state(struct active_array *a, int consistent)
|
||||
{
|
||||
int inst = a->info.container_member;
|
||||
struct intel_super *super = a->container->sb;
|
||||
struct imsm_dev *dev = get_imsm_dev(super->mpb, inst);
|
||||
int dirty = !consistent || (a->resync_start != ~0ULL);
|
||||
|
||||
if (dev->vol.dirty != dirty) {
|
||||
fprintf(stderr, "imsm: mark '%s' (%llu)\n",
|
||||
dirty?"dirty":"clean", a->resync_start);
|
||||
|
||||
dev->vol.dirty = dirty;
|
||||
super->updates_pending++;
|
||||
}
|
||||
}
|
||||
|
||||
static __u8 imsm_check_degraded(struct imsm_super *mpb, int n, int failed)
|
||||
{
|
||||
struct imsm_dev *dev = get_imsm_dev(mpb, n);
|
||||
|
@ -1742,6 +1726,38 @@ static int imsm_count_failed(struct imsm_super *mpb, struct imsm_map *map)
|
|||
return failed;
|
||||
}
|
||||
|
||||
static void imsm_set_array_state(struct active_array *a, int consistent)
|
||||
{
|
||||
int inst = a->info.container_member;
|
||||
struct intel_super *super = a->container->sb;
|
||||
struct imsm_dev *dev = get_imsm_dev(super->mpb, inst);
|
||||
struct imsm_map *map = &dev->vol.map[0];
|
||||
int dirty = !consistent;
|
||||
int failed;
|
||||
__u8 map_state;
|
||||
|
||||
if (a->resync_start == ~0ULL) {
|
||||
failed = imsm_count_failed(super->mpb, map);
|
||||
map_state = imsm_check_degraded(super->mpb, inst, failed);
|
||||
if (!failed)
|
||||
map_state = IMSM_T_STATE_NORMAL;
|
||||
if (map->map_state != map_state) {
|
||||
fprintf(stderr, "imsm: map_state %d: %d\n",
|
||||
inst, map_state);
|
||||
map->map_state = map_state;
|
||||
super->updates_pending++;
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->vol.dirty != dirty) {
|
||||
fprintf(stderr, "imsm: mark '%s' (%llu)\n",
|
||||
dirty?"dirty":"clean", a->resync_start);
|
||||
|
||||
dev->vol.dirty = dirty;
|
||||
super->updates_pending++;
|
||||
}
|
||||
}
|
||||
|
||||
static void imsm_set_disk(struct active_array *a, int n, int state)
|
||||
{
|
||||
int inst = a->info.container_member;
|
||||
|
|
Loading…
Reference in New Issue