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;
|
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)
|
static __u8 imsm_check_degraded(struct imsm_super *mpb, int n, int failed)
|
||||||
{
|
{
|
||||||
struct imsm_dev *dev = get_imsm_dev(mpb, n);
|
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;
|
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)
|
static void imsm_set_disk(struct active_array *a, int n, int state)
|
||||||
{
|
{
|
||||||
int inst = a->info.container_member;
|
int inst = a->info.container_member;
|
||||||
|
|
Loading…
Reference in New Issue