On Thu, 16 Jan 2025 15:16:59 -0800 David Wei wrote: > +static void io_close_queue(struct io_zcrx_ifq *ifq) > +{ > + struct net_device *netdev; > + netdevice_tracker netdev_tracker; > + struct pp_memory_provider_params p = { > + .mp_ops = &io_uring_pp_zc_ops, > + .mp_priv = ifq, > + }; > + > + if (ifq->if_rxq == -1) > + return; > + > + spin_lock(&ifq->lock); > + netdev = ifq->netdev; > + netdev_tracker = ifq->netdev_tracker; > + ifq->netdev = NULL; > + spin_unlock(&ifq->lock); > + > + if (netdev) > + net_mp_close_rxq(netdev, ifq->if_rxq, &p); > + ifq->if_rxq = -1; > +} Did you mean to call netdev_put() somewhere here? :S