]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super1.c
ddf: Set container_member from subarray in getinfo_super.
[thirdparty/mdadm.git] / super1.c
index 0fe54e97c22fda05c350774d8ea23f8cca93440b..9c712fc4af515ec50831a7831d334b086d2afe77 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -493,7 +493,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info)
        int role;
 
        info->array.major_version = 1;
-       info->array.minor_version = __le32_to_cpu(sb->feature_map);
+       info->array.minor_version = st->minor_version;
        info->array.patch_version = 0;
        info->array.raid_disks = __le32_to_cpu(sb->raid_disks);
        info->array.level = __le32_to_cpu(sb->level);
@@ -531,6 +531,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info)
                info->disk.raid_disk = role;
        }
        info->events = __le64_to_cpu(sb->events);
+       sprintf(info->text_version, "1.%d", st->minor_version);
 
        memcpy(info->uuid, sb->set_uuid, 16);
 
@@ -696,7 +697,7 @@ static int init_super1(struct supertype *st, mdu_array_info_t *info,
        memset(sb, 0, 1024);
 
        st->sb = sb;
-       if (info->major_version == -1) {
+       if (info == NULL) {
                /* zeroing superblock */
                return 0;
        }
@@ -788,6 +789,9 @@ static void add_to_super1(struct supertype *st, mdu_disk_info_t *dk,
        else
                *rp = 0xfffe;
 
+       sb->dev_number = __cpu_to_le32(dk->number);
+       sb->sb_csum = calc_sb_1_csum(sb);
+
        dip = (struct devinfo **)&st->info;
        while (*dip)
                dip = &(*dip)->next;
@@ -900,16 +904,12 @@ static int write_init_super1(struct supertype *st)
        for (di = st->info; di && ! rv ; di = di->next) {
                if (di->disk.state == 1)
                        continue;
+               if (di->fd < 0)
+                       continue;
 
                Kill(di->devname, 0, 1, 1);
                Kill(di->devname, 0, 1, 1);
 
-               if (di->fd < 0) {
-                       fprintf(stderr,
-                               Name": Failed to open %s to write superblock\n",
-                               di->devname);
-                       return -1;
-               }
                sb->dev_number = __cpu_to_le32(di->disk.number);
                if (di->disk.state & (1<<MD_DISK_WRITEMOSTLY))
                        sb->devflags |= __cpu_to_le32(WriteMostly1);
@@ -1068,6 +1068,9 @@ static int load_super1(struct supertype *st, int fd, char *devname)
 
        free_super1(st);
 
+       if (st->subarray[0])
+               return 1;
+
        if (st->ss == NULL || st->minor_version == -1) {
                int bestvers = -1;
                struct supertype tst;
@@ -1505,7 +1508,6 @@ struct superswitch super1 = {
        .write_bitmap = write_bitmap1,
        .free_super = free_super1,
        .validate_geometry = validate_geometry1,
-       .major = 1,
 #if __BYTE_ORDER == BIG_ENDIAN
        .swapuuid = 0,
 #else