chiark / gitweb /
volume_id: md - add metadata minor version
[elogind.git] / extras / volume_id / lib / linux_raid.c
index ff2c47c4732f0a4f39f6c3a6cbff84c09d2187c1..3c2e86e422490f08ad6b4bf5deb0984442435e90 100644 (file)
@@ -131,10 +131,12 @@ static int volume_id_probe_linux_raid1(struct volume_id *id, uint64_t off, uint6
        if (le32_to_cpu(mdp1->magic) != MD_SB_MAGIC)
                return -1;
 
        if (le32_to_cpu(mdp1->magic) != MD_SB_MAGIC)
                return -1;
 
+       if (le32_to_cpu(mdp1->major_version) != 1)
+               return -1;
+
        volume_id_set_uuid(id, mdp1->set_uuid, 0, UUID_FOURINT);
        volume_id_set_label_raw(id, mdp1->set_name, 32);
        volume_id_set_label_string(id, mdp1->set_name, 32);
        volume_id_set_uuid(id, mdp1->set_uuid, 0, UUID_FOURINT);
        volume_id_set_label_raw(id, mdp1->set_name, 32);
        volume_id_set_label_string(id, mdp1->set_name, 32);
-       snprintf(id->type_version, sizeof(id->type_version)-1, "%u", le32_to_cpu(mdp1->major_version));
        volume_id_set_usage(id, VOLUME_ID_RAID);
        id->type = "linux_raid_member";
        return 0;
        volume_id_set_usage(id, VOLUME_ID_RAID);
        id->type = "linux_raid_member";
        return 0;
@@ -151,16 +153,22 @@ int volume_id_probe_linux_raid(struct volume_id *id, uint64_t off, uint64_t size
 
        /* version 1.0 at the end of the device */
        sboff = (size & ~(0x1000 - 1)) - 0x2000;
 
        /* version 1.0 at the end of the device */
        sboff = (size & ~(0x1000 - 1)) - 0x2000;
-       if (volume_id_probe_linux_raid1(id, off + sboff, size) == 0)
+       if (volume_id_probe_linux_raid1(id, off + sboff, size) == 0) {
+               strcpy(id->type_version, "1.0");
                return 0;
                return 0;
+       }
 
        /* version 1.1 at the start of the device */
 
        /* version 1.1 at the start of the device */
-       if (volume_id_probe_linux_raid1(id, off, size) == 0)
+       if (volume_id_probe_linux_raid1(id, off, size) == 0) {
+               strcpy(id->type_version, "1.1");
                return 0;
                return 0;
+       }
 
        /* version 1.2 at 4k offset from the start */
 
        /* version 1.2 at 4k offset from the start */
-       if (volume_id_probe_linux_raid1(id, off + 0x1000, size) == 0)
+       if (volume_id_probe_linux_raid1(id, off + 0x1000, size) == 0) {
+               strcpy(id->type_version, "1.2");
                return 0;
                return 0;
+       }
 
        return -1;
 }
 
        return -1;
 }