On Mon, Apr 17, 2023 at 7:53 PM Lorenzo Bianconi <lorenzo@xxxxxxxxxx> wrote: > > Hi all, > > I am triggering an issue with a device running the page_pool allocator. > In particular, the device is running an iperf tcp server receiving traffic > from a remote client. On the driver I loaded a simple xdp program returning > xdp_pass. When I remove the ebpf program and destroy the pool, page_pool > allocator starts complaining in page_pool_release_retry() that not all the pages > have been returned to the allocator. In fact, the pool is not really destroyed > in this case. > Debugging the code it seems the pages are stuck softnet_data defer_list and > they are never freed in skb_defer_free_flush() since I do not have any more tcp > traffic. To prove it, I tried to set sysctl_skb_defer_max to 0 and the issue > does not occur. > I developed the poc patch below and the issue seems to be fixed: I do not see why this would be different than having buffers sitting in some tcp receive (or out or order) queues for a few minutes ? Or buffers transferred to another socket or pipe (splice() and friends)