chiark / gitweb /
volume_id: md - add metadata minor version
authorKay Sievers <kay.sievers@vrfy.org>
Fri, 7 Dec 2007 16:26:15 +0000 (17:26 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Fri, 7 Dec 2007 16:26:15 +0000 (17:26 +0100)
Thanks to Hannes.

extras/volume_id/lib/linux_raid.c

index ff2c47c..3c2e86e 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->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);
-       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;
@@ -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;
-       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;
+       }
 
        /* 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;
+       }
 
        /* 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 -1;
 }