It seems to be a problem with blocking reads, buffer select and READV.
My guess is that ext4/xfs are not blocking.
in b66e65f41426 ("io_uring: never call io_buffer_select() for a buffer
re-select"), this line was added in __io_iov_buffer_select
- iov[0].iov_len = len;
+ req->rw.len = iov[0].iov_len = len;
Basically stashing the buffer length in rw.len. The problem is that the
next time around that breaks at
if (req->rw.len != 1)
return -EINVAL;
The below fixes it as an example, but it's not great. Maybe someone can
figure out a better patch? Otherwise I can try tomorrow: