Hi,

v1 is here:

https://lists.nongnu.org/archive/html/qemu-block/2026-03/msg00307.html

Short reads and writes can happen.  One way to reproduce them is via
FUSE export, if you force it to limit the request length in the
read/write path (patch in the commit messages of patches 2 and 3), but
specifically short writes apparently can also happen with NFS.

For the file-posix block driver, aio=threads already takes care of them.
aio=native does not, at all, and aio=io_uring only handles short reads,
but not writes.  This series has both aio=native and aio=io_uring handle
both short reads and writes.  zone-append is not touched, as I don’t
believe resubmitting the tail (if a short append can even happen) is
safe.

v2:
- Patch 1 (kept R-b):
  - Put all 32-bit fields together
  - Removed unnecessary parentheses
- Patch 2 (kept R-b):
  - make qemu_iovec_destroy() call contingent on qiov.iov being non-NULL
  - include total_done in offset in laio_do_submit()
- Patch 3 (kept R-b):
  - make qemu_iovec_destroy() call contingent on qiov.iov being non-NULL
  - include total_done in offset in luring_prep_sqe()

git-backport-diff against v1:

Key:
[----] : patches are identical
[####] : number of functional differences between upstream/downstream patch
[down] : patch is downstream-only
The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively

001/3:[0007] [FC] 'linux-aio: Put all parameters into qemu_laiocb'
002/3:[0017] [FC] 'linux-aio: Resubmit tails of short reads/writes'
003/3:[0023] [FC] 'io-uring: Resubmit tails of short writes'

Hanna Czenczek (3):
  linux-aio: Put all parameters into qemu_laiocb
  linux-aio: Resubmit tails of short reads/writes
  io-uring: Resubmit tails of short writes

 block/io_uring.c   | 82 +++++++++++++++++++++++-------------------
 block/linux-aio.c  | 88 +++++++++++++++++++++++++++++++++++++---------
 block/trace-events |  2 +-
 3 files changed, 117 insertions(+), 55 deletions(-)

-- 
2.53.0


Reply via email to