]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
wipefs: Also wipe superblocks with bad checksums
authorGabriel de Perthuis <g2p.code@gmail.com>
Fri, 6 Sep 2013 17:18:15 +0000 (19:18 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 11 Sep 2013 14:36:16 +0000 (16:36 +0200)
[kzak@redhat.com: - move BLKID_SUBLKS_BADCSUM login to
                    blkid_probe_verify_csum()]

Signed-off-by: Gabriel de Perthuis <g2p.code@gmail.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
libblkid/src/blkid.h.in
libblkid/src/probe.c
misc-utils/wipefs.c

index 2a7d6b47c3a5dea490162f24e580985dc14ad35a..c140fc6b2ce438211d26b90ac8acb99b37925020 100644 (file)
@@ -260,6 +260,7 @@ extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable);
 #define BLKID_SUBLKS_USAGE     (1 << 7) /* define USAGE result value */
 #define BLKID_SUBLKS_VERSION   (1 << 8) /* read FS type from superblock */
 #define BLKID_SUBLKS_MAGIC     (1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */
+#define BLKID_SUBLKS_BADCSUM   (1 << 10) /* allow a bad checksum */
 
 #define BLKID_SUBLKS_DEFAULT   (BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | \
                                 BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE)
index 6e3ae42dc75c9951289e3a6075e23f1f6675349c..29223a664db0a5ae5e48bda270e545dda46c0819 100644 (file)
@@ -1354,15 +1354,19 @@ int blkid_probe_set_magic(blkid_probe pr, blkid_loff_t offset,
 int blkid_probe_verify_csum(blkid_probe pr, uint64_t csum, uint64_t expected)
 {
        if (csum != expected) {
+               struct blkid_chain *chn = blkid_probe_get_chain(pr);
+
                DBG(LOWPROBE, blkid_debug(
                                "incorrect checksum for type %s,"
                                " got %jX, expected %jX",
                                blkid_probe_get_probername(pr),
                                csum, expected));
-               return 0;
+
+               if (!(chn->flags & BLKID_SUBLKS_BADCSUM))
+                       return 0;
        }
 
-       return 1;
+       return 1;       /* checksum accepted */
 }
 
 /**
index 2cfad7c1ca961f5b5b662419feb16985fdc7fd64..ff2f62fbc51986b7f073235a8013a32a02470958 100644 (file)
@@ -248,7 +248,8 @@ new_probe(const char *devname, int mode)
        blkid_probe_enable_superblocks(pr, 1);
        blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_MAGIC |
                        BLKID_SUBLKS_TYPE | BLKID_SUBLKS_USAGE |
-                       BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID);
+                       BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
+                       BLKID_SUBLKS_BADCSUM);
 
        blkid_probe_enable_partitions(pr, 1);
        blkid_probe_set_partitions_flags(pr, BLKID_PARTS_MAGIC);