| .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk> |
| .\" |
| .\" SPDX-License-Identifier: LGPL-2.0-or-later |
| .\" |
| .TH io_uring_prep_files_update 3 "March 13, 2022" "liburing-2.2" "liburing Manual" |
| .SH NAME |
| io_uring_prep_files_update \- prepare a registered file update request |
| .SH SYNOPSIS |
| .nf |
| .B #include <liburing.h> |
| .PP |
| .BI "void io_uring_prep_files_update(struct io_uring_sqe *" sqe "," |
| .BI " int *" fds "," |
| .BI " unsigned " nr_fds "," |
| .BI " int " offset ");" |
| .fi |
| .SH DESCRIPTION |
| .PP |
| The |
| .BR io_uring_prep_files_update (3) |
| function prepares a request for updating a number of previously registered file |
| descriptors. The submission queue entry |
| .I sqe |
| is setup to use the file descriptor array pointed to by |
| .I fds |
| and of |
| .I nr_fds |
| in length to update that amount of previously registered files starting at |
| offset |
| .IR offset . |
| |
| Once a previously registered file is updated with a new one, the existing |
| entry is updated and then removed from the table. This operation is equivalent to |
| first unregistering that entry and then inserting a new one, just bundled into |
| one combined operation. |
| |
| If |
| .I offset |
| is specified as IORING_FILE_INDEX_ALLOC, io_uring will allocate free direct |
| descriptors instead of having the application to pass, and store allocated |
| direct descriptors into |
| .I fds |
| array, |
| .I cqe->res |
| will return the number of direct descriptors allocated. |
| |
| .SH RETURN VALUE |
| None |
| .SH ERRORS |
| These are the errors that are reported in the CQE |
| .I res |
| field. On success, |
| .I res |
| will contain the number of successfully updated file descriptors. On error, |
| the following errors can occur. |
| .TP |
| .B -ENOMEM |
| The kernel was unable to allocate memory for the request. |
| .TP |
| .B -EINVAL |
| One of the fields set in the SQE was invalid. |
| .TP |
| .B -EFAULT |
| The kernel was unable to copy in the memory pointed to by |
| .IR fds . |
| .TP |
| .B -EBADF |
| On of the descriptors located in |
| .I fds |
| didn't refer to a valid file descriptor, or one of the file descriptors in |
| the array referred to an io_uring instance. |
| .TP |
| .B -EOVERFLOW |
| The product of |
| .I offset |
| and |
| .I nr_fds |
| exceed the valid amount or overflowed. |
| .SH NOTES |
| As with any request that passes in data in a struct, that data must remain |
| valid until the request has been successfully submitted. It need not remain |
| valid until completion. Once a request has been submitted, the in-kernel |
| state is stable. Very early kernels (5.4 and earlier) required state to be |
| stable until the completion occurred. Applications can test for this |
| behavior by inspecting the |
| .B IORING_FEAT_SUBMIT_STABLE |
| flag passed back from |
| .BR io_uring_queue_init_params (3). |
| .SH SEE ALSO |
| .BR io_uring_get_sqe (3), |
| .BR io_uring_submit (3), |
| .BR io_uring_register (2) |