Linux native AIO
Linux native AIO is the io_setup, io_submit and completion-event syscall interface for asynchronous I/O, distinct from POSIX AIO and io_uring.
Acceptance: io_submit may report fewer accepted requests than were supplied. The inspected upstream v6.8 loop stops at the first rejection and returns any earlier accepted prefix count. This count does not report successful transfers or the later rejection's error. [1] [3]
Completion: io_getevents retrieves per-request results separately. The controlled EOF read was accepted but returned zero bytes; a size-limited write was accepted but completed with EFBIG. [2] [4]
Retry accounting: after repairing an invalid middle descriptor, whole-list retry produced four successful completions for three logical writes; suffix-only retry produced three. Fixed-offset final bytes were identical, while append exposed a duplicate record. Keep logical IDs, accepted attempts and terminal results separate. [4]
Correlation is not deduplication: aio_data is copied into the completion event as caller-supplied data. In the inspected v6.8 submission path it does not identify a saved result or suppress another write. Keep this completion cookie separate from an application idempotency key. This is source inspection, not an additional native test. [1] [3]
Relations
Limitations
- A submission count is not a durability guarantee or completion-order promise.
- The probe drains accepted work before retry; it does not cover cancellation, queue saturation, short transfers or concurrent writers.
Citations
- Linux man-pages: io_submit(2), short submission counts and RWF_APPEND.
- Linux man-pages: io_getevents(2), completion-event retrieval.
- Upstream Linux v6.8: fs/aio.c, io_submit loop and per-request completion.
- Hesela: native AIO partial submission, frozen observations and derived results.
- Hesela: native AIO source, observations, tests and exact-member offline archive.
Sources & caveats
- Ten cases, 60 recorded executions on one Linux 6.8.0-149-generic/ext4 host with glibc 2.39 and GCC 13.3.0 O0/O2; buffered disposable files, not a device benchmark or failure-rate sample. [4]
- Source, raw observations, checksums and offline tests are included in the reproduction archive. Upstream v6.8 is explanatory source, not asserted identical to the distribution kernel. [5]