bcachefs: bch2_extent_normalize() -> bch2_dev_rcu()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 1 May 2024 01:12:46 +0000 (21:12 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 8 May 2024 21:29:23 +0000 (17:29 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/extents.c

index 52e79b87b4853e407fc6923fda3e2da5165ad256..7b889f93878bb4ce2ac3cf2fb2307f9f8cfc081e 100644 (file)
@@ -986,9 +986,14 @@ void bch2_extent_ptr_set_cached(struct bkey_s k, struct bch_extent_ptr *ptr)
  */
 bool bch2_extent_normalize(struct bch_fs *c, struct bkey_s k)
 {
+       struct bch_dev *ca;
+
+       rcu_read_lock();
        bch2_bkey_drop_ptrs(k, ptr,
                ptr->cached &&
-               dev_ptr_stale(bch2_dev_bkey_exists(c, ptr->dev), ptr));
+               (ca = bch2_dev_rcu(c, ptr->dev)) &&
+               dev_ptr_stale_rcu(ca, ptr));
+       rcu_read_unlock();
 
        return bkey_deleted(k.k);
 }