[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] block/file-posix: Limit max_iov to IOV_MAX
From: |
Daniel P . Berrangé |
Subject: |
Re: [PATCH] block/file-posix: Limit max_iov to IOV_MAX |
Date: |
Mon, 20 Sep 2021 10:03:34 +0100 |
User-agent: |
Mutt/2.0.7 (2021-05-04) |
CC'ing qemu-block list
On Sat, Sep 18, 2021 at 12:06:58PM +0800, lishan wrote:
> AIO read/write. The size of iocb->aio_nbytes in the kernel cannot exceed
> UIO_MAXIOV = 1024.
> max_segments read from the block device layer may be greater than UIO_MAXIOV,
> this causes the ioq_submit interface to return a -22(-EINVAL) error result.
> ---
> block/file-posix.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/block/file-posix.c b/block/file-posix.c
> index d81e15efa4..137e27e47b 100644
> --- a/block/file-posix.c
> +++ b/block/file-posix.c
> @@ -1273,7 +1273,8 @@ static void raw_refresh_limits(BlockDriverState *bs,
> Error **errp)
>
> ret = hdev_get_max_segments(s->fd, &st);
> if (ret > 0) {
> - bs->bl.max_iov = ret;
> + /* The maximum segment size allowed by the kernel is UIO_MAXIOV
> = 1024. */
> + bs->bl.max_iov = MIN(ret, IOV_MAX);
This change matches a bug fix we've done downstream for QEMU, but it
was suggested that the upstream patch would be taking a different
approach for a more comprehensive fix.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|