From: Kent Overstreet Date: Mon, 20 Jun 2022 23:48:16 +0000 (-0400) Subject: bcachefs: Fix refcount leak in bch2_do_invalidates() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=1c6ff39445553f84f9a46c2c60a4768c7f4ef226;p=linux.git 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 --- 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)