qemu-cr16/include/block
Stefan Hajnoczi 047dabef97 block/io_uring: use aio_add_sqe()
AioContext has its own io_uring instance for file descriptor monitoring.
The disk I/O io_uring code was developed separately. Originally I
thought the characteristics of file descriptor monitoring and disk I/O
were too different, requiring separate io_uring instances.

Now it has become clear to me that it's feasible to share a single
io_uring instance for file descriptor monitoring and disk I/O. We're not
using io_uring's IOPOLL feature or anything else that would require a
separate instance.

Unify block/io_uring.c and util/fdmon-io_uring.c using the new
aio_add_sqe() API that allows user-defined io_uring sqe submission. Now
block/io_uring.c just needs to submit readv/writev/fsync and most of the
io_uring-specific logic is handled by fdmon-io_uring.c.

There are two immediate advantages:
1. Fewer system calls. There is no need to monitor the disk I/O io_uring
   ring fd from the file descriptor monitoring io_uring instance. Disk
   I/O completions are now picked up directly. Also, sqes are
   accumulated in the sq ring until the end of the event loop iteration
   and there are fewer io_uring_enter(2) syscalls.
2. Less code duplication.

Note that error_setg() messages are not supposed to end with
punctuation, so I removed a '.' for the non-io_uring build error
message.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-ID: <20251104022933.618123-15-stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2025-11-11 22:06:09 +01:00
..
accounting.h block: enable stats-intervals for storage devices 2025-10-29 12:10:09 +01:00
aio-wait.h system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
aio.h block/io_uring: use aio_add_sqe() 2025-11-11 22:06:09 +01:00
aio_task.h block: Remove unused aio_task_pool_empty 2024-09-30 10:53:18 +03:00
block-common.h block: Expand block status mode from bool to flags 2025-05-14 15:33:34 -05:00
block-copy.h copy-before-write: allow specifying minimum cluster size 2024-09-30 10:52:41 +03:00
block-global-state.h block: mark bdrv_open_child_common() and its callers GRAPH_UNLOCKED 2025-07-14 15:42:27 +02:00
block-hmp-cmds.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block-io.h block: mark bdrv_drained_begin() and friends as GRAPH_UNLOCKED 2025-06-04 18:16:34 +02:00
block.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block_backup.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
block_int-common.h block: Improve comments in BlockLimits 2025-10-29 12:10:09 +01:00
block_int-global-state.h mirror: Drop redundant zero_target parameter 2025-05-14 20:10:12 -05:00
block_int-io.h block: make bdrv_co_parent_cb_resize() a proper IO API function 2025-10-29 12:10:09 +01:00
block_int.h include/block: Untangle inclusion loops 2023-01-20 07:24:28 +01:00
blockjob.h blockjob: mark block_job_remove_all_bdrv() as GRAPH_UNLOCKED 2025-07-14 15:42:28 +02:00
blockjob_int.h block: Mark block_job_add_bdrv() GRAPH_WRLOCK 2023-11-07 19:14:19 +01:00
dirty-bitmap.h block: Mark bdrv_*_dirty_bitmap() and callers GRAPH_RDLOCK 2023-02-23 19:49:32 +01:00
export.h block/export: Add option to allow export of inactive nodes 2025-02-06 14:46:40 +01:00
fuse.h fuse: Allow exporting BDSs via FUSE 2020-12-11 17:52:39 +01:00
graph-lock.h block: add bdrv_graph_wrlock_drained() convenience wrapper 2025-07-14 15:40:58 +02:00
nbd.h nbd/server: Allow users to adjust handshake limit in QMP 2025-02-11 13:45:47 -06:00
nvme.h hw/nvme: add NVMe Admin Security SPDM support 2025-10-30 07:07:14 +01:00
qapi.h qemu-img info: Optionally show block limits 2025-10-29 12:10:10 +01:00
qdict.h qapi: Move include/qapi/qmp/ to include/qobject/ 2025-02-10 15:33:16 +01:00
raw-aio.h block/io_uring: use aio_add_sqe() 2025-11-11 22:06:09 +01:00
replication.h replication: move include out of root directory 2021-05-26 14:49:46 +02:00
reqlist.h block/reqlist: add reqlist_wait_all() 2022-03-07 09:33:30 +01:00
snapshot.h block/snapshot: mark bdrv_all_delete_snapshot() as GRAPH_UNLOCKED 2025-07-14 15:42:02 +02:00
thread-pool.h thread-pool: Implement generic (non-AIO) pool support 2025-03-06 06:47:33 +01:00
throttle-groups.h block/throttle-groups: Use ThrottleDirection instread of bool is_write 2023-08-29 10:49:24 +02:00
ufs.h hw/ufs: Add temperature event notification support 2025-03-05 02:13:29 +01:00
write-threshold.h block: Clean up includes 2023-02-08 07:28:05 +01:00