projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
bc3204c
)
bcachefs: kill bch2_dev_bkey_exists() in discard_one_bucket_fast()
author
Kent Overstreet
<kent.overstreet@linux.dev>
Wed, 1 May 2024 21:08:40 +0000
(17:08 -0400)
committer
Kent 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
patch
|
blob
|
history
diff --git
a/fs/bcachefs/alloc_background.c
b/fs/bcachefs/alloc_background.c
index ef1d17fbd750cd00afa52084d392a057c3963fd5..71b727f5d432c52bd4bb5094203319ea1f22c51c 100644
(file)
--- a/
fs/bcachefs/alloc_background.c
+++ b/
fs/bcachefs/alloc_background.c
@@
-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))