]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super-intel.c
mdmon: cleanup resync_start
[thirdparty/mdadm.git] / super-intel.c
index 4372ab4f5565e8223c7939f53ea7481ec769db2a..4072fc87269620680b0cffe598142657ed58f384 100644 (file)
@@ -669,23 +669,24 @@ static void print_imsm_dev(struct imsm_dev *dev, char *uuid, int disk_idx)
        printf("     Chunk Size : %u KiB\n",
                __le16_to_cpu(map->blocks_per_strip) / 2);
        printf("       Reserved : %d\n", __le32_to_cpu(dev->reserved_blocks));
-       printf("  Migrate State : %s", dev->vol.migr_state ? "migrating" : "idle\n");
+       printf("  Migrate State : ");
        if (dev->vol.migr_state) {
                if (migr_type(dev) == MIGR_INIT)
-                       printf(": initializing\n");
+                       printf("initialize\n");
                else if (migr_type(dev) == MIGR_REBUILD)
-                       printf(": rebuilding\n");
+                       printf("rebuild\n");
                else if (migr_type(dev) == MIGR_VERIFY)
-                       printf("check\n");
+                       printf("check\n");
                else if (migr_type(dev) == MIGR_GEN_MIGR)
-                       printf("general migration\n");
+                       printf("general migration\n");
                else if (migr_type(dev) == MIGR_STATE_CHANGE)
-                       printf("state change\n");
+                       printf("state change\n");
                else if (migr_type(dev) == MIGR_REPAIR)
-                       printf("repair\n");
+                       printf("repair\n");
                else
-                       printf(": <unknown:%d>\n", migr_type(dev));
-       }
+                       printf("<unknown:%d>\n", migr_type(dev));
+       } else
+               printf("idle\n");
        printf("      Map State : %s", map_state_str[map->map_state]);
        if (dev->vol.migr_state) {
                struct imsm_map *map = get_imsm_map(dev, 1);
@@ -1566,6 +1567,7 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst)
                first->anchor->num_raid_devs = sec->anchor->num_raid_devs;
                first->anchor->orig_family_num = sec->anchor->orig_family_num;
                first->anchor->family_num = sec->anchor->family_num;
+               memcpy(first->anchor->sig, sec->anchor->sig, MAX_SIGNATURE_LENGTH);
                for (i = 0; i < sec->anchor->num_raid_devs; i++)
                        imsm_copy_dev(get_imsm_dev(first, i), get_imsm_dev(sec, i));
        }
@@ -2428,7 +2430,7 @@ imsm_thunderdome(struct intel_super **super_list, int len)
                        struct intel_disk *idisk;
 
                        idisk = disk_list_get(dl->serial, disk_list);
-                       if (is_spare(&idisk->disk) &&
+                       if (idisk && is_spare(&idisk->disk) &&
                            !is_failed(&idisk->disk) && !is_configured(&idisk->disk))
                                dl->index = -1;
                        else {
@@ -4106,12 +4108,12 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
        }
                
        if (consistent == 2 &&
-           (!is_resync_complete(a) ||
+           (!is_resync_complete(&a->info) ||
             map_state != IMSM_T_STATE_NORMAL ||
             dev->vol.migr_state))
                consistent = 0;
 
-       if (is_resync_complete(a)) {
+       if (is_resync_complete(&a->info)) {
                /* complete intialization / resync,
                 * recovery and interrupted recovery is completed in
                 * ->set_disk
@@ -4123,7 +4125,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
                }
        } else if (!is_resyncing(dev) && !failed) {
                /* mark the start of the init process if nothing is failed */
-               dprintf("imsm: mark resync start (%llu)\n", a->resync_start);
+               dprintf("imsm: mark resync start\n");
                if (map->map_state == IMSM_T_STATE_UNINITIALIZED)
                        migrate(dev, IMSM_T_STATE_NORMAL, MIGR_INIT);
                else
@@ -4135,8 +4137,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
 
        /* mark dirty / clean */
        if (dev->vol.dirty != !consistent) {
-               dprintf("imsm: mark '%s' (%llu)\n",
-                       consistent ? "clean" : "dirty", a->resync_start);
+               dprintf("imsm: mark '%s'\n", consistent ? "clean" : "dirty");
                if (consistent)
                        dev->vol.dirty = 0;
                else