]> www.infradead.org Git - users/hch/xfs.git/commitdiff
bcachefs: Fix RCU splat
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 9 Jul 2024 20:43:01 +0000 (16:43 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 10 Jul 2024 16:46:22 +0000 (12:46 -0400)
Reported-by: syzbot+e74fea078710bbca6f4b@syzkaller.appspotmail.com
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/buckets.c
fs/bcachefs/buckets.h

index 743d57eba760704b7d2d5b0440983041f46904f1..314ee3e0187f48a224b94a38f9ca101a97f7d59e 100644 (file)
@@ -805,7 +805,7 @@ int bch2_bucket_ref_update(struct btree_trans *trans, struct bch_dev *ca,
                        "bucket %u:%zu gen %u (mem gen %u) data type %s: stale dirty ptr (gen %u)\n"
                        "while marking %s",
                        ptr->dev, bucket_nr, b_gen,
-                       *bucket_gen(ca, bucket_nr),
+                       bucket_gen_get(ca, bucket_nr),
                        bch2_data_type_str(bucket_data_type ?: ptr_data_type),
                        ptr->gen,
                        (printbuf_reset(&buf),
index 80ee0be9793e605242f21122cadce2ab01cefd99..8ad4be73860cc049e729bbaccf5cc1da0730e106 100644 (file)
@@ -116,6 +116,14 @@ static inline u8 *bucket_gen(struct bch_dev *ca, size_t b)
        return gens->b + b;
 }
 
+static inline u8 bucket_gen_get(struct bch_dev *ca, size_t b)
+{
+       rcu_read_lock();
+       u8 gen = *bucket_gen(ca, b);
+       rcu_read_unlock();
+       return gen;
+}
+
 static inline size_t PTR_BUCKET_NR(const struct bch_dev *ca,
                                   const struct bch_extent_ptr *ptr)
 {