]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: bcachefs: add xxhash checksum support
authorThomas Weißschuh <thomas@t-8ch.de>
Fri, 18 Nov 2022 17:42:01 +0000 (18:42 +0100)
committerThomas Weißschuh <thomas@t-8ch.de>
Thu, 19 Jan 2023 19:17:25 +0000 (19:17 +0000)
libblkid/src/superblocks/bcache.c

index 3bb909a4d93b678eea11559703e459a94ec24dbd..2c3b185b9458b2ba40bc25094dce5dfc26dc48cf 100644 (file)
@@ -14,6 +14,7 @@
 #include "superblocks.h"
 #include "crc32c.h"
 #include "crc64.h"
+#include "xxhash.h"
 
 #define SB_LABEL_SIZE      32
 
@@ -53,11 +54,13 @@ enum bcachefs_sb_csum_type {
        BCACHEFS_SB_CSUM_TYPE_NONE = 0,
        BCACHEFS_SB_CSUM_TYPE_CRC32C = 1,
        BCACHEFS_SB_CSUM_TYPE_CRC64 = 2,
+       BCACHEFS_SB_CSUM_TYPE_XXHASH = 7,
 };
 
 union bcachefs_sb_csum {
        uint32_t crc32c;
        uint64_t crc64;
+       XXH64_hash_t xxh64;
        uint8_t raw[16];
 } __attribute__((packed));
 
@@ -211,6 +214,10 @@ static int bcachefs_validate_checksum(blkid_probe pr, const struct bcachefs_supe
                        uint64_t crc = ul_crc64_we(checksummed_data_start, checksummed_data_size);
                        return blkid_probe_verify_csum(pr, crc, le64_to_cpu(bcs->csum.crc64));
                }
+               case BCACHEFS_SB_CSUM_TYPE_XXHASH: {
+                       XXH64_hash_t xxh64 = XXH64(checksummed_data_start, checksummed_data_size, 0);
+                       return blkid_probe_verify_csum(pr, xxh64, le64_to_cpu(bcs->csum.xxh64));
+               }
                default:
                        DBG(LOWPROBE, ul_debug("bcachefs: unknown checksum type %d, ignoring.", checksum_type));
                        return 1;