From 1c6ff39445553f84f9a46c2c60a4768c7f4ef226 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 20 Jun 2022 19:48:16 -0400 Subject: [PATCH] bcachefs: Fix refcount leak in bch2_do_invalidates() If we fail to queue the work item because it's already in process, we need to drop the ref we just took. Signed-off-by: Kent Overstreet --- fs/bcachefs/alloc_background.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c index 3084081966b64..933334fed960b 100644 --- a/fs/bcachefs/alloc_background.c +++ b/fs/bcachefs/alloc_background.c @@ -1192,8 +1192,9 @@ static void bch2_do_invalidates_work(struct work_struct *work) void bch2_do_invalidates(struct bch_fs *c) { - if (percpu_ref_tryget_live(&c->writes)) - queue_work(system_long_wq, &c->invalidate_work); + if (percpu_ref_tryget_live(&c->writes) && + !queue_work(system_long_wq, &c->invalidate_work)) + percpu_ref_put(&c->writes); } static int bucket_freespace_init(struct btree_trans *trans, struct btree_iter *iter) -- 2.30.2