1 .\" Copyright (C) 2003 Free Software Foundation, Inc.
2 .\" and Copyright (C) 2017 Goldwyn Rodrigues <rgoldwyn@suse.de>
4 .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
5 .\" This file is distributed according to the GNU General Public License.
8 .TH IO_SUBMIT 2 2021-03-22 "Linux" "Linux Programmer's Manual"
10 io_submit \- submit asynchronous I/O blocks for processing
13 .BR "#include <linux/aio_abi.h>" " /* Defines needed types */"
15 .BI "int io_submit(aio_context_t " ctx_id ", long " nr \
16 ", struct iocb **" iocbpp );
20 There is no glibc wrapper for this system call; see NOTES.
23 this page describes the raw Linux system call interface.
24 The wrapper function provided by
26 uses a different type for the
34 queues \fInr\fP I/O request blocks for processing in
35 the AIO context \fIctx_id\fP.
38 argument should be an array of \fInr\fP AIO control blocks,
39 which will be submitted to context \fIctx_id\fP.
43 (I/O control block) structure defined in
45 defines the parameters that control the I/O operation.
49 #include <linux/aio_abi.h>
53 __u32 PADDED(aio_key, aio_rw_flags);
67 The fields of this structure are as follows:
70 This data is copied into the
74 structure upon I/O completion (see
75 .BR io_getevents (2)).
78 This is an internal field used by the kernel.
79 Do not modify this field after an
84 This defines the R/W flags passed with structure.
88 .BR RWF_APPEND " (since Linux 4.16)"
89 .\" commit e1fc742e14e01d84d9693c4aca4ab23da65811fb
90 Append data to the end of the file.
91 See the description of the flag of the same name in
93 as well as the description of
100 The file offset is not changed.
102 .BR RWF_DSYNC " (since Linux 4.13)"
103 Write operation complete according to requirement of
104 synchronized I/O data integrity.
105 See the description of the flag of the same name in
107 as well the description of
112 .BR RWF_HIPRI " (since Linux 4.13)"
113 High priority request, poll if possible
115 .BR RWF_NOWAIT " (since Linux 4.14)"
116 Don't wait if the I/O will block for operations such as
117 file block allocations, dirty page flush, mutex locks,
118 or a congested block device inside the kernel.
119 If any of these conditions are met, the control block is returned
120 immediately with a return value of
127 .BR io_getevents (2)).
129 .BR RWF_SYNC " (since Linux 4.13)"
130 Write operation complete according to requirement of
131 synchronized I/O file integrity.
132 See the description of the flag of the same name in
134 as well the description of
141 This defines the type of I/O to be performed by the
145 valid values are defined by the enum defined in
146 .IR linux/aio_abi.h :
158 IOCB_CMD_PWRITEV = 8,
164 This defines the requests priority.
167 The file descriptor on which the I/O operation is to be performed.
170 This is the buffer used to transfer data for a read or write operation.
173 This is the size of the buffer pointed to by
177 This is the file offset at which the I/O operation is to be performed.
180 This is the set of flags associated with the
183 The valid values are:
187 Asynchronous I/O control must signal the file
188 descriptor mentioned in
192 .BR IOCB_FLAG_IOPRIO " (since Linux 4.18)"
193 .\" commit d9a08a9e616beeccdbd0e7262b7225ffdfa49e92
203 The file descriptor to signal in the event of asynchronous I/O completion.
207 returns the number of \fIiocb\fPs submitted (which may be
208 less than \fInr\fP, or 0 if \fInr\fP is zero).
209 For the failure return, see NOTES.
213 Insufficient resources are available to queue any \fIiocb\fPs.
216 The file descriptor specified in the first \fIiocb\fP is invalid.
219 One of the data structures points to invalid data.
222 The AIO context specified by \fIctx_id\fP is invalid.
223 \fInr\fP is less than 0.
226 is not properly initialized, the operation specified is invalid for the file
227 descriptor in the \fIiocb\fP, or the value in the
233 is not implemented on this architecture.
238 field is set with the class
239 .BR IOPRIO_CLASS_RT ,
240 but the submitting context does not have the
244 The asynchronous I/O system calls first appeared in Linux 2.5.
247 is Linux-specific and should not be used in
248 programs that are intended to be portable.
250 Glibc does not provide a wrapper for this system call.
251 You could invoke it using
253 But instead, you probably want to use the
255 wrapper function provided by
256 .\" http://git.fedorahosted.org/git/?p=libaio.git
261 wrapper function uses a different type
263 .\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
270 wrapper does not follow the usual C library conventions for indicating errors:
271 on error it returns a negated error number
272 (the negative of one of the values listed in ERRORS).
273 If the system call is invoked via
275 then the return value follows the usual conventions for
276 indicating an error: \-1, with
278 set to a (positive) value that indicates the error.
282 .BR io_getevents (2),