+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) {
+ dprintf("imsm: map_state %d: %d\n",
+ inst, map_state);
+ map->map_state = map_state;
+ super->updates_pending++;
+ }
+ }
+
+ if (dev->vol.dirty != dirty) {
+ dprintf("imsm: mark '%s' (%llu)\n",
+ dirty?"dirty":"clean", a->resync_start);
+
+ dev->vol.dirty = dirty;
+ super->updates_pending++;
+ }
+}
+