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 :|