aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/aio.txt
blob: dc761f9b737869ce0286f98324d549895e9467d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <uapi/linux/aio_abi.h>

resource io_ctx[intptr]

io_setup(n int32, ctx ptr[out, io_ctx])
io_destroy(ctx io_ctx)
io_getevents(ctx io_ctx, min_nr intptr, nr len[events], events ptr[out, array[io_event]], timeout ptr[in, timespec, opt])
io_pgetevents(ctx io_ctx, min_nr intptr, nr len[events], events ptr[out, array[io_event]], timeout ptr[in, timespec, opt], usig ptr[in, sigset_size, opt])
# NEED: kernel identifies requets by address, so pointers passed to io_submit need to be forwarded to io_cancel somehow.
io_submit(ctx io_ctx, nr len[iocbpp], iocbpp ptr[in, array[ptr[in, iocb]]])
io_cancel(ctx io_ctx, iocb ptr[in, iocb], res ptr[out, io_event])

lio_opcode = IOCB_CMD_PREAD, IOCB_CMD_PWRITE, IOCB_CMD_FSYNC, IOCB_CMD_FDSYNC, IOCB_CMD_NOOP, IOCB_CMD_PREADV, IOCB_CMD_PWRITEV, IOCB_CMD_POLL
iocb_flags = IOCB_FLAG_RESFD, IOCB_FLAG_IOPRIO

io_event {
	data	int64
	obj	int64
	res	int64
	res2	int64
}

iocb {
	aio_data	const[0, int64]
	aio_key		const[0, int32]
	aio_rw_flags	const[0, int32]
	aio_lio_opcode	flags[lio_opcode, int16]
	aio_reqprio	int16
	aio_fildes	fd
	aio_buf		ptr64[inout, array[int8]]
	aio_nbytes	len[aio_buf, int64]
	aio_offset	int64
	aio_reserved2	const[0, int64]
	aio_flags	flags[iocb_flags, int32]
	aio_resfd	fd_event[opt]
}