linux: fix WRITEV with lots of bufs using io_uring (#4004)

In the case of trying to write more than `IOV_MAX` buffers, the
`IORING_OP_WRITEV` operation will return `EINVAL`. As a temporal fix,
fallback to the old ways. In the future we might implement this by
linking multiple `IORING_OP_WRITEV` requests using `IOSQE_IO_LINK`.
This commit is contained in:
Santiago Gimeno 2023-05-19 11:03:17 +02:00 committed by GitHub
parent d23a20f62c
commit ef6a9a624d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -782,6 +782,11 @@ int uv__iou_fs_read_or_write(uv_loop_t* loop,
struct uv__io_uring_sqe* sqe;
struct uv__iou* iou;
/* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
* threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
if (req->nbufs > IOV_MAX)
return 0;
iou = &uv__get_internal_fields(loop)->iou;
sqe = uv__iou_get_sqe(iou, loop, req);