]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Fix check_inode_hash_info_matches_root()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 15 Jan 2025 17:17:28 +0000 (12:17 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 15 Jan 2025 20:28:23 +0000 (15:28 -0500)
Can't use memcmp() when the struct contains padding.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/str_hash.c

index f5977c5c67430688c8a2a31fa39115f231d5a167..8c2c5539de2eddc10ac7c8d2d6eeda17dc6b737e 100644 (file)
@@ -167,10 +167,19 @@ found:;
                goto err;
 
        struct bch_hash_info hash2 = bch2_hash_info_init(c, &inode);
-       if (memcmp(hash_info, &hash2, sizeof(hash2))) {
+       if (hash_info->type != hash2.type ||
+           memcmp(&hash_info->siphash_key, &hash2.siphash_key, sizeof(hash2.siphash_key))) {
                ret = repair_inode_hash_info(trans, &inode);
                if (!ret) {
-                       bch_err(c, "inode hash info mismatch with root, but mismatch not found");
+                       bch_err(c, "inode hash info mismatch with root, but mismatch not found\n"
+                               "%u %llx %llx\n"
+                               "%u %llx %llx",
+                               hash_info->type,
+                               hash_info->siphash_key.k0,
+                               hash_info->siphash_key.k1,
+                               hash2.type,
+                               hash2.siphash_key.k0,
+                               hash2.siphash_key.k1);
                        ret = -BCH_ERR_fsck_repair_unimplemented;
                }
        }