]> err.no Git - util-linux/commitdiff
blkid: blkid_do_safeprobe() has to be tolerant to RAIDs
authorKarel Zak <kzak@redhat.com>
Thu, 14 May 2009 16:29:03 +0000 (18:29 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 27 May 2009 08:44:58 +0000 (10:44 +0200)
It's pretty generic that RAID signature is on the same device as FS
signature. We have to be tolerant and ignore filesystems signatures
on such devices. The RAID signature is always preferred.

Signed-off-by: Karel Zak <kzak@redhat.com>
libs/blkid/src/probe.c

index b0c0be80a2694b22f770d93a0ce4de4d3a5f6ddf..af22e34dacaf9a00dd5041e4d60716fbfa265e76 100644 (file)
@@ -529,6 +529,10 @@ int blkid_do_probe(blkid_probe pr)
  * This is the same function as blkid_do_probe(), but returns only one result
  * (cannot be used in while()) and checks for ambivalen results (more
  * filesystems on the device) -- in such case returns -2.
+ *
+ * The function does not check for filesystems when a RAID signature is
+ * detected.  The function also does not check for collision between RAIDs. The
+ * first detected RAID is returned.
  */
 int blkid_do_safeprobe(blkid_probe pr)
 {
@@ -544,9 +548,12 @@ int blkid_do_safeprobe(blkid_probe pr)
                        first.nvals = pr->nvals;
                        first.idx = pr->idx;
                }
+               count++;
+
+               if (idinfos[pr->idx]->usage & BLKID_USAGE_RAID)
+                       break;
                if (!(idinfos[pr->idx]->flags & BLKID_IDINFO_TOLERANT))
                        intol++;
-               count++;
        }
        if (rc < 0)
                return rc;              /* error */