From: Christoph Hellwig Date: Thu, 9 Dec 2021 06:31:22 +0000 (+0100) Subject: block: simplify struct io_context refcounting X-Git-Tag: for-5.17/block-2022-01-11~33 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=0aed2f162bbc7853fe91c0d70492ea73c4e9cb07;p=linux-block.git block: simplify struct io_context refcounting Don't hold a reference to ->refcount for each active reference, but just one for all active references. Signed-off-by: Christoph Hellwig Reviewed-by: Jan Kara Link: https://lore.kernel.org/r/20211209063131.18537-3-hch@lst.de Signed-off-by: Jens Axboe --- diff --git a/block/blk-ioc.c b/block/blk-ioc.c index 96336c2134ef..9cde3906be3c 100644 --- a/block/blk-ioc.c +++ b/block/blk-ioc.c @@ -180,10 +180,8 @@ static void put_io_context_active(struct io_context *ioc) { struct io_cq *icq; - if (!atomic_dec_and_test(&ioc->active_ref)) { - put_io_context(ioc); + if (!atomic_dec_and_test(&ioc->active_ref)) return; - } spin_lock_irq(&ioc->lock); hlist_for_each_entry(icq, &ioc->icq_list, ioc_node) { @@ -335,7 +333,6 @@ int __copy_io(unsigned long clone_flags, struct task_struct *tsk) * Share io context with parent, if CLONE_IO is set */ if (clone_flags & CLONE_IO) { - atomic_long_inc(&ioc->refcount); atomic_inc(&ioc->active_ref); tsk->io_context = ioc; } else if (ioprio_valid(ioc->ioprio)) {