Skip to content

Commit ba349c7

Browse files
committed
virtio_ring: Fix error reporting in virtqueue_resize
JIRA: https://issues.redhat.com/browse/RHEL-84409 commit 45ebc7e Author: Laurent Vivier <lvivier@redhat.com> Date: Wed May 21 11:22:34 2025 +0200 virtio_ring: Fix error reporting in virtqueue_resize The virtqueue_resize() function was not correctly propagating error codes from its internal resize helper functions, specifically virtqueue_resize_packet() and virtqueue_resize_split(). If these helpers returned an error, but the subsequent call to virtqueue_enable_after_reset() succeeded, the original error from the resize operation would be masked. Consequently, virtqueue_resize() could incorrectly report success to its caller despite an underlying resize failure. This change restores the original code behavior: if (vdev->config->enable_vq_after_reset(_vq)) return -EBUSY; return err; Fix: commit ad48d53 ("virtio_ring: separate the logic of reset/enable from virtqueue_resize") Cc: xuanzhuo@linux.alibaba.com Signed-off-by: Laurent Vivier <lvivier@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Link: https://patch.msgid.link/20250521092236.661410-2-lvivier@redhat.com Tested-by: Lei Yang <leiyang@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
1 parent e67fe5a commit ba349c7

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

drivers/virtio/virtio_ring.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2741,7 +2741,7 @@ int virtqueue_resize(struct virtqueue *_vq, u32 num,
27412741
void (*recycle_done)(struct virtqueue *vq))
27422742
{
27432743
struct vring_virtqueue *vq = to_vvq(_vq);
2744-
int err;
2744+
int err, err_reset;
27452745

27462746
if (num > vq->vq.num_max)
27472747
return -E2BIG;
@@ -2763,7 +2763,11 @@ int virtqueue_resize(struct virtqueue *_vq, u32 num,
27632763
else
27642764
err = virtqueue_resize_split(_vq, num);
27652765

2766-
return virtqueue_enable_after_reset(_vq);
2766+
err_reset = virtqueue_enable_after_reset(_vq);
2767+
if (err_reset)
2768+
return err_reset;
2769+
2770+
return err;
27672771
}
27682772
EXPORT_SYMBOL_GPL(virtqueue_resize);
27692773

0 commit comments

Comments
 (0)