virtio_net: fix missing dma unmap for resize
authorXuan Zhuo <xuanzhuo@linux.alibaba.com>
Tue, 26 Dec 2023 09:43:33 +0000 (17:43 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 27 Dec 2023 21:10:37 +0000 (16:10 -0500)
commitd2c4f1928a3f7f4a1f28a0cfc022e8a145ce6903
tree83590580c3a257ab6d9f78c55bc75654549fe719
parentab78ffe1ff7d17102972348bb9b1a16ec2696a2b
virtio_net: fix missing dma unmap for resize

For rq, we have three cases getting buffers from virtio core:

1. virtqueue_get_buf{,_ctx}
2. virtqueue_detach_unused_buf
3. callback for virtqueue_resize

But in commit 295525e29a5b("virtio_net: merge dma operations when
filling mergeable buffers"), I missed the dma unmap for the #3 case.

That will leak some memory, because I did not release the pages referred
by the unused buffers.

If we do such script, we will make the system OOM.

    while true
    do
            ethtool -G ens4 rx 128
            ethtool -G ens4 rx 256
            free -m
    done

Fixes: 295525e29a5b ("virtio_net: merge dma operations when filling mergeable buffers")
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Message-Id: <20231226094333.47740-1-xuanzhuo@linux.alibaba.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/net/virtio_net.c