]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Assemble.c
mdmon: ping will wait for manage_mon to catch up.
[thirdparty/mdadm.git] / Assemble.c
index cb2725db5ebe6db9a48606a0b67bd852cc295690..7efa2b8c8bfc4d0526e819f49b207266b9e49f79 100644 (file)
@@ -542,8 +542,8 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
                            == devices[devcnt].i.events
                            && (devices[best[i]].i.disk.minor
                                != devices[devcnt].i.disk.minor)
-                           && st->ss->major == 0
-                           && info.array.level != -4) {
+                           && st->ss == &super0
+                           && info.array.level != LEVEL_MULTIPATH) {
                                /* two different devices with identical superblock.
                                 * Could be a mis-detection caused by overlapping
                                 * partitions.  fail-safe.
@@ -866,8 +866,8 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
                if ((vers % 100) >= 1) { /* can use different versions */
                        mdu_array_info_t inf;
                        memset(&inf, 0, sizeof(inf));
-                       inf.major_version = st->ss->major;
-                       inf.minor_version = st->minor_version;
+                       inf.major_version = info.array.major_version;
+                       inf.minor_version = info.array.minor_version;
                        rv = ioctl(mdfd, SET_ARRAY_INFO, &inf);
                } else
                        rv = ioctl(mdfd, SET_ARRAY_INFO, NULL);
@@ -914,14 +914,9 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
 
                        if (j >= 0 /* && devices[j].uptodate */) {
 #ifndef MDASSEMBLE
-                               if (st->ss->external) {
-                                       devices[j].i.disk.number =
-                                               devices[j].i.disk.raid_disk;
-                                       st->ss->getinfo_super_n(st,
-                                                               &devices[j].i);
-                                       rv = sysfs_add_disk(sra,
-                                                           &devices[j].i);
-                               } else
+                               if (st->ss->external)
+                                       rv = sysfs_add_disk(sra, &devices[j].i);
+                               else
 #endif
                                        rv = ioctl(mdfd, ADD_NEW_DISK,
                                          &devices[j].i.disk);