]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super-intel.c
Remove st->text_version in favour of info->text_version
[thirdparty/mdadm.git] / super-intel.c
index a72d0de4f136ab5bb3f5efe5a1d0d305212d56eb..69aef65301d06f288f3ad7717f126f1c69a328f5 100644 (file)
@@ -443,11 +443,17 @@ static void getinfo_super_imsm(struct supertype *st, struct mdinfo *info)
        info->disk.state |= s & FAILED_DISK ? (1 << MD_DISK_FAULTY) : 0;
        info->disk.state |= s & USABLE_DISK ? (1 << MD_DISK_SYNC) : 0;
        info->reshape_active = 0;
+
+       strcpy(info->text_version, "imsm");
 }
 
 static void getinfo_super_imsm_raid(struct supertype *st, struct mdinfo *info)
 {
        printf("%s\n", __FUNCTION__);
+
+       sprintf(info->text_version, "/%s/%d",
+               devnum2devname(st->container_dev),
+               info->container_member); // FIXME is this even set here?
 }
 
 static int update_super_imsm(struct supertype *st, struct mdinfo *info,
@@ -1063,6 +1069,10 @@ static struct mdinfo *container_content_imsm(struct supertype *st)
                strncpy(this->name, (char *) dev->volume, MAX_RAID_SERIAL_LEN);
                this->name[MAX_RAID_SERIAL_LEN] = 0;
 
+               sprintf(this->text_version, "/%s/%d",
+                       devnum2devname(st->container_dev),
+                       this->container_member);
+
                memset(this->uuid, 0, sizeof(this->uuid));
 
                sz = __le32_to_cpu(dev->size_high);
@@ -1124,28 +1134,18 @@ static int imsm_open_new(struct supertype *c, struct active_array *a, int inst)
        return 0;
 }
 
-static void imsm_mark_clean(struct active_array *a, unsigned long long sync_pos)
+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) {
-               fprintf(stderr, "imsm: mark clean %llu\n", sync_pos);
-               dev->vol.dirty = 0;
-               super->updates_pending++;
-       }
-}
+       if (dev->vol.dirty != dirty) {
+               fprintf(stderr, "imsm: mark '%s' (%llu)\n",
+                       dirty?"dirty":"clean", a->resync_start);
 
-static void imsm_mark_dirty(struct active_array *a)
-{
-       int inst = a->info.container_member;
-       struct intel_super *super = a->container->sb;
-       struct imsm_dev *dev = get_imsm_dev(super->mpb, inst);
-
-       if (!dev->vol.dirty) {
-               fprintf(stderr, "imsm: mark dirty\n");
-               dev->vol.dirty = 1;
+               dev->vol.dirty = dirty;
                super->updates_pending++;
        }
 }
@@ -1227,30 +1227,6 @@ static int imsm_count_failed(struct imsm_super *mpb, struct imsm_map *map)
        return failed;
 }
 
-static void imsm_mark_sync(struct active_array *a, unsigned long long resync)
-{
-       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;
-       int failed;
-       __u8 map_state;
-
-       if (resync != ~0ULL)
-               return;
-
-       fprintf(stderr, "imsm: mark sync\n");
-
-       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) {
-               map->map_state = map_state;
-               super->updates_pending++;
-       }
-}
-
 static void imsm_set_disk(struct active_array *a, int n, int state)
 {
        int inst = a->info.container_member;
@@ -1386,14 +1362,11 @@ struct superswitch super_imsm = {
        .major          = 2000,
        .swapuuid       = 0,
        .external       = 1,
-       .text_version   = "imsm",
 
 /* for mdmon */
        .open_new       = imsm_open_new,
        .load_super     = load_super_imsm,
-       .mark_clean     = imsm_mark_clean,
-       .mark_dirty     = imsm_mark_dirty,
-       .mark_sync      = imsm_mark_sync,
+       .set_array_state= imsm_set_array_state,
        .set_disk       = imsm_set_disk,
        .sync_metadata  = imsm_sync_metadata,
 };
@@ -1425,7 +1398,6 @@ struct superswitch super_imsm_container = {
        .major          = 2000,
        .swapuuid       = 0,
        .external       = 1,
-       .text_version   = "imsm",
 };
 
 struct superswitch super_imsm_raid = {
@@ -1445,5 +1417,4 @@ struct superswitch super_imsm_raid = {
        .major          = 2001,
        .swapuuid       = 0,
        .external       = 2,
-       .text_version   = "imsm",
 };