ree_rbuf_ring(ifq); mutex_destroy(&ifq->pp_lock); +free: kfree(ifq); } @@ -801,10 +804,19 @@ void io_shutdown_zcrx_ifqs(struct io_ring_ctx *ctx) lockdep_assert_held(&ctx->uring_lock); xa_for_each(&ctx->zcrx_ctxs, index, ifq) { - if (refcount_read(&ifq->refs) > 1) + if (ifq->if_rxq == -1) continue; - io_zcrx_scrub(ifq); - io_close_queue(ifq); + + if (!ifq->proxy) { + if (refcount_read(&ifq->refs) > 1) + continue; + io_zcrx_scrub(ifq); + io_close_queue(ifq); + } else { + refcount_dec(&ifq->proxy->refs); + percpu_ref_put(&ifq->proxy->ctx->refs); + ifq->if_rxq = -1; + } } } -- 2.47.3[PATCH v2 5/5] io_uring/zcrx: free proxy ifqsDavid Wei undefinedio-uring@vger.kernel.org, netdev@vger.kernel.org undefined undefined undefined undefinedŒ