bcachefs: kill bch2_dev_bkey_exists() in discard_one_bucket_fast()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 1 May 2024 21:08:40 +0000 (17:08 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 8 May 2024 21:29:24 +0000 (17:29 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_background.c

index ef1d17fbd750cd00afa52084d392a057c3963fd5..71b727f5d432c52bd4bb5094203319ea1f22c51c 100644 (file)
@@ -1903,9 +1903,12 @@ static void bch2_do_discards_fast_work(struct work_struct *work)
 
 static void bch2_discard_one_bucket_fast(struct bch_fs *c, struct bpos bucket)
 {
-       struct bch_dev *ca = bch2_dev_bkey_exists(c, bucket.inode);
+       rcu_read_lock();
+       struct bch_dev *ca = bch2_dev_rcu(c, bucket.inode);
+       bool dead = !ca || percpu_ref_is_dying(&ca->io_ref);
+       rcu_read_unlock();
 
-       if (!percpu_ref_is_dying(&ca->io_ref) &&
+       if (!dead &&
            !discard_in_flight_add(c, bucket) &&
            bch2_write_ref_tryget(c, BCH_WRITE_REF_discard_fast) &&
            !queue_work(c->write_ref_wq, &c->discard_fast_work))