On Mon, Jul 27, 2020 at 04:10:21PM -0700, Sagi Grimberg wrote: > +static void blk_mq_quiesce_blocking_queue_async_wait(struct request_queue *q) > +{ > + struct blk_mq_hw_ctx *hctx; > + unsigned int i; > + > + queue_for_each_hw_ctx(q, hctx, i) { > + WARN_ON_ONCE(!(hctx->flags & BLK_MQ_F_BLOCKING)); > + if (!hctx->rcu_sync) { > + synchronize_srcu(hctx->srcu); > + continue; > + } > + wait_for_completion(&hctx->rcu_sync->completion); > + destroy_rcu_head(&hctx->rcu_sync->head); Leaking rcu_sync, and not clearing it across quiesce contexts. Needs: kfree(hctx->rcu_sync); hctx->rcu_sync = NULL;