]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: Fix kmsan warnings in bch2_extent_crc_pack()
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 20 Mar 2025 17:24:50 +0000 (13:24 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 24 Mar 2025 13:50:36 +0000 (09:50 -0400)
We store to all fields, so the kmsan warnings were spurious - but
initializing via stores to bitfields appear to have been giving the
compiler/kmsan trouble, and they're not necessary.

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

index 04946d9911f59703cbe3c0ea046428386535de2b..ae1a1d917805b1704ad6703ac6be88217826952a 100644 (file)
@@ -592,29 +592,35 @@ static void bch2_extent_crc_pack(union bch_extent_crc *dst,
                                 struct bch_extent_crc_unpacked src,
                                 enum bch_extent_entry_type type)
 {
-#define set_common_fields(_dst, _src)                                  \
-               _dst.type               = 1 << type;                    \
-               _dst.csum_type          = _src.csum_type,               \
-               _dst.compression_type   = _src.compression_type,        \
-               _dst._compressed_size   = _src.compressed_size - 1,     \
-               _dst._uncompressed_size = _src.uncompressed_size - 1,   \
-               _dst.offset             = _src.offset
+#define common_fields(_src)                                            \
+               .type                   = BIT(type),                    \
+               .csum_type              = _src.csum_type,               \
+               .compression_type       = _src.compression_type,        \
+               ._compressed_size       = _src.compressed_size - 1,     \
+               ._uncompressed_size     = _src.uncompressed_size - 1,   \
+               .offset                 = _src.offset
 
        switch (type) {
        case BCH_EXTENT_ENTRY_crc32:
-               set_common_fields(dst->crc32, src);
-               dst->crc32.csum         = (u32 __force) *((__le32 *) &src.csum.lo);
+               dst->crc32              = (struct bch_extent_crc32) {
+                       common_fields(src),
+                       .csum           = (u32 __force) *((__le32 *) &src.csum.lo),
+               };
                break;
        case BCH_EXTENT_ENTRY_crc64:
-               set_common_fields(dst->crc64, src);
-               dst->crc64.nonce        = src.nonce;
-               dst->crc64.csum_lo      = (u64 __force) src.csum.lo;
-               dst->crc64.csum_hi      = (u64 __force) *((__le16 *) &src.csum.hi);
+               dst->crc64              = (struct bch_extent_crc64) {
+                       common_fields(src),
+                       .nonce          = src.nonce,
+                       .csum_lo        = (u64 __force) src.csum.lo,
+                       .csum_hi        = (u64 __force) *((__le16 *) &src.csum.hi),
+               };
                break;
        case BCH_EXTENT_ENTRY_crc128:
-               set_common_fields(dst->crc128, src);
-               dst->crc128.nonce       = src.nonce;
-               dst->crc128.csum        = src.csum;
+               dst->crc128             = (struct bch_extent_crc128) {
+                       common_fields(src),
+                       .nonce          = src.nonce,
+                       .csum           = src.csum,
+               };
                break;
        default:
                BUG();