]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
bcachefs: Add a comment for bucket helper types
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 31 Jul 2024 00:35:59 +0000 (20:35 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 7 Aug 2024 12:31:10 +0000 (08:31 -0400)
We've had bugs in the past with incorrect integer conversions in disk
accounting code, which is why bucket helpers now always return s64s; add
a comment explaining this.

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

index f13e619b4b2153e29a64fadba9d1175ca905bced..96a0444ea78ff98530a53e497e55d7ed73255c5f 100644 (file)
@@ -82,6 +82,14 @@ static inline bool bucket_data_type_mismatch(enum bch_data_type bucket,
                bucket_data_type(bucket) != bucket_data_type(ptr);
 }
 
+/*
+ * It is my general preference to use unsigned types for unsigned quantities -
+ * however, these helpers are used in disk accounting calculations run by
+ * triggers where the output will be negated and added to an s64. unsigned is
+ * right out even though all these quantities will fit in 32 bits, since it
+ * won't be sign extended correctly; u64 will negate "correctly", but s64 is the
+ * simpler option here.
+ */
 static inline s64 bch2_bucket_sectors_total(struct bch_alloc_v4 a)
 {
        return a.stripe_sectors + a.dirty_sectors + a.cached_sectors;