virtqueue_resize() no longer calls the recycle callback to release the buffer. These bufs are reused by virtqueue_resize_* first, and if they cannot be used, the buffers that cannot be reused will be released Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> --- drivers/virtio/virtio_ring.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 730c8dded4c7..51dab35a54c9 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -2895,7 +2895,6 @@ int virtqueue_resize(struct virtqueue *_vq, u32 num, struct vring_virtqueue *vq = to_vvq(_vq); struct virtio_device *vdev = vq->vq.vdev; bool packed; - void *buf; int err; if (!vq->we_own_ring) @@ -2922,16 +2921,19 @@ int virtqueue_resize(struct virtqueue *_vq, u32 num, if (err) return err; - while ((buf = virtqueue_detach_unused_buf(_vq)) != NULL) - recycle(_vq, buf); - if (packed) err = virtqueue_resize_packed(_vq, num, recycle); else err = virtqueue_resize_split(_vq, num, recycle); - if (vdev->config->enable_reset_vq(_vq)) + if (vdev->config->enable_reset_vq(_vq)) { return -EBUSY; + } else if (!err) { + num = packed ? vq->packed.vring.num : vq->split.vring.num; + + if (num != vq->vq.num_free) + virtqueue_kick(_vq); + } return err; } -- 2.31.0 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization