]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: Add metadata signature check for IMSM on 4Kn drives
authorAlexey Obitotskiy <aleksey.obitotskiy@intel.com>
Fri, 24 Jun 2016 09:59:35 +0000 (11:59 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 1 Jul 2016 11:40:11 +0000 (13:40 +0200)
Drives with 512 and 4K sectors have different offset for
metadata signature. Without signature detected on 4Kn drives
those drives will not be recognized as raid member. This
patch adds checking for IMSM signature for 4Kn drives.

Signed-off-by: Alexey Obitotskiy <aleksey.obitotskiy@intel.com>
libblkid/src/superblocks/isw_raid.c

index 065c2b208d143a6699b5769b6ed3c77b4f0791de..81d53a1d0b846bfe3efb8076e5ed155b921dd2f1 100644 (file)
@@ -25,11 +25,11 @@ struct isw_metadata {
 
 #define ISW_SIGNATURE          "Intel Raid ISM Cfg Sig. "
 
-
 static int probe_iswraid(blkid_probe pr,
                const struct blkid_idmag *mag __attribute__((__unused__)))
 {
        uint64_t off;
+       unsigned int sector_size;
        struct isw_metadata *isw;
 
        if (pr->size < 0x10000)
@@ -37,16 +37,17 @@ static int probe_iswraid(blkid_probe pr,
        if (!S_ISREG(pr->mode) && !blkid_probe_is_wholedisk(pr))
                return 1;
 
-       off = ((pr->size / 0x200) - 2) * 0x200;
-       isw = (struct isw_metadata *)
-                       blkid_probe_get_buffer(pr,
-                                       off,
-                                       sizeof(struct isw_metadata));
+       sector_size = blkid_probe_get_sectorsize(pr);
+       off = ((pr->size / sector_size) - 2) * sector_size;
+
+       isw = (struct isw_metadata *)blkid_probe_get_buffer(pr,
+                       off, sizeof(struct isw_metadata));
        if (!isw)
                return errno ? -errno : 1;
 
        if (memcmp(isw->sig, ISW_SIGNATURE, sizeof(ISW_SIGNATURE)-1) != 0)
                return 1;
+
        if (blkid_probe_sprintf_version(pr, "%6s",
                        &isw->sig[sizeof(ISW_SIGNATURE)-1]) != 0)
                return 1;