Re: [PATCH v2 04/12] virtio_ring: return -ENOMEM when a packed ring mapping fails

Eugenio Perez Martin <[email protected]>
Newsgroups dev.linux.lists.virtualization,org.kernel.vger.linux-kernel
Message-ID <CAJaqyWeGaoamHzYRd1ZVUJ+6fx_4RWDim+jLO964qKtgZ=zogQ@mail.gmail.com>
On Tue, Aug 18, 2026 at 11:15 PM Alexander Graf <[email protected]> wrote:
>
> Commit f7728002c1c7 ("virtio_ring: fix return code on DMA mapping
> fails") moved virtqueue_add_split() and virtqueue_add_indirect_packed()
> to -ENOMEM, because virtio_queue_rq() maps -EIO to BLK_STS_IOERR and
> the request fails. We still return -EIO from virtqueue_add_packed(),
> and virtqueue_add_packed_in_order() copied that when it was added later.
>
> Guests that bounce their I/O through swiotlb (SEV-SNP, TDX, s390 secure
> execution) run the pool out with enough I/O in flight. On a split ring
> virtio_queue_rq() reports BLK_STS_RESOURCE and the block layer requeues
> the request. On a packed ring virtio_queue_rq() reports BLK_STS_IOERR
> instead and the error reaches the filesystem.
>
> Return -ENOMEM from the packed unmap_release paths too. Both are reached
> from a single goto on a failed mapping, which is where
> vring_map_one_sg() already produces -ENOMEM.
>
> That way every ring layout reports the same errno, and the block layer
> requeues the request instead of failing it.
>
> Fixes: f7728002c1c7 ("virtio_ring: fix return code on DMA mapping fails")
> Fixes: f6a15d854986 ("virtio_ring: add in order support")

Acked-by: Eugenio Pérez <[email protected]>

> Assisted-by: Kiro:claude-opus-5 checkpatch sparse
> Signed-off-by: Alexander Graf <[email protected]>
> ---
>  drivers/virtio/virtio_ring.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
> index ea8e774b6d8e..b7b03166a301 100644
> --- a/drivers/virtio/virtio_ring.c
> +++ b/drivers/virtio/virtio_ring.c
> @@ -1810,7 +1810,7 @@ static inline int virtqueue_add_packed(struct vring_virtqueue *vq,
>         }
>
>         END_USE(vq);
> -       return -EIO;
> +       return -ENOMEM;
>  }
>
>  static inline int virtqueue_add_packed_in_order(struct vring_virtqueue *vq,
> @@ -1966,7 +1966,7 @@ static inline int virtqueue_add_packed_in_order(struct vring_virtqueue *vq,
>         }
>
>         END_USE(vq);
> -       return -EIO;
> +       return -ENOMEM;
>  }
>
>  static bool virtqueue_kick_prepare_packed(struct vring_virtqueue *vq)
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.