]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: bch2_bkey_ptr_data_type() now correctly returns cached for cached ptrs
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 7 Feb 2025 21:58:34 +0000 (16:58 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 15 Mar 2025 01:02:13 +0000 (21:02 -0400)
Necessary for adding backpointers for cached pointers.

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

index de25ba4ee94b534b45f198eddb0ccb8ee251bfb3..c556ccaffe89824bdc24578e09cfb3276f433093 100644 (file)
@@ -131,7 +131,7 @@ static inline enum bch_data_type alloc_data_type(struct bch_alloc_v4 a,
        if (a.stripe)
                return data_type == BCH_DATA_parity ? data_type : BCH_DATA_stripe;
        if (bch2_bucket_sectors_dirty(a))
-               return data_type;
+               return bucket_data_type(data_type);
        if (a.cached_sectors)
                return BCH_DATA_cached;
        if (BCH_ALLOC_V4_NEED_DISCARD(&a))
index 5c6a17c21769cec81a00737f63ea6e167633743c..7786731d4adaa735334b73088cd19a1f73527e41 100644 (file)
@@ -123,7 +123,12 @@ static inline enum bch_data_type bch2_bkey_ptr_data_type(struct bkey_s_c k,
                return BCH_DATA_btree;
        case KEY_TYPE_extent:
        case KEY_TYPE_reflink_v:
-               return p.has_ec ? BCH_DATA_stripe : BCH_DATA_user;
+               if (p.has_ec)
+                       return BCH_DATA_stripe;
+               if (p.ptr.cached)
+                       return BCH_DATA_cached;
+               else
+                       return BCH_DATA_user;
        case KEY_TYPE_stripe: {
                const struct bch_extent_ptr *ptr = &entry->ptr;
                struct bkey_s_c_stripe s = bkey_s_c_to_stripe(k);