Update API

- io_uring_sqe added a data field that's passed back at completion
- io_uring_sqe added an index field, for fixed buffer locations
- io_uring_setup(2) system call added a 'nr_iovecs' field

Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Jens Axboe
2019-01-10 09:32:41 -07:00
parent 7bf7e8e8e5
commit 6cdce17753
6 changed files with 40 additions and 30 deletions

View File

@@ -189,11 +189,12 @@ err:
* contains the necessary information to read/write to the rings.
*/
int io_uring_queue_init(unsigned entries, struct io_uring_params *p,
struct iovec *iovecs, struct io_uring *ring)
struct iovec *iovecs, unsigned nr_iovecs,
struct io_uring *ring)
{
int fd, ret;
fd = io_uring_setup(entries, iovecs, p);
fd = io_uring_setup(entries, iovecs, nr_iovecs, p);
if (fd < 0)
return fd;

View File

@@ -15,20 +15,23 @@
* IO submission data structure (Submission Queue Entry)
*/
struct io_uring_sqe {
__u8 opcode;
__u8 flags;
__u16 ioprio;
__s32 fd;
__u64 off;
__u8 opcode; /* type of operation for this sqe */
__u8 flags; /* as of now unused */
__u16 ioprio; /* ioprio for the request */
__s32 fd; /* file descriptor to do IO on */
__u64 off; /* offset into file */
union {
void *addr;
void *addr; /* buffer or iovecs */
__u64 __pad;
};
__u32 len;
__u32 len; /* buffer size or number of iovecs */
union {
__kernel_rwf_t rw_flags;
__u32 __resv;
};
__u16 index; /* index into fixed buffers, if used */
__u16 __pad2[3];
__u64 data; /* data to be passed back at completion time */
};
/*
@@ -50,7 +53,7 @@ struct io_uring_sqe {
* IO completion data structure (Completion Queue Entry)
*/
struct io_uring_cqe {
__u64 index; /* what sqe this event came from */
__u64 data; /* sqe->data submission passed back */
__s32 res; /* result code for this event */
__u32 flags;
};

View File

@@ -44,7 +44,7 @@ struct io_uring {
* System calls
*/
extern int io_uring_setup(unsigned entries, struct iovec *iovecs,
struct io_uring_params *p);
unsigned nr_iovecs, struct io_uring_params *p);
extern int io_uring_enter(unsigned fd, unsigned to_submit,
unsigned min_complete, unsigned flags);
@@ -52,7 +52,7 @@ extern int io_uring_enter(unsigned fd, unsigned to_submit,
* Library interface
*/
extern int io_uring_queue_init(unsigned entries, struct io_uring_params *p,
struct iovec *iovecs, struct io_uring *ring);
struct iovec *iovecs, unsigned nr_iovecs, struct io_uring *ring);
extern void io_uring_queue_exit(struct io_uring *ring);
extern int io_uring_get_completion(struct io_uring *ring,
struct io_uring_cqe **cqe_ptr);
@@ -61,10 +61,4 @@ extern int io_uring_wait_completion(struct io_uring *ring,
extern int io_uring_submit(struct io_uring *ring);
extern struct io_uring_sqe *io_uring_get_sqe(struct io_uring *ring);
static inline struct io_uring_sqe *
io_uring_sqe_from_cqe(struct io_uring *ring, struct io_uring_cqe *cqe)
{
return &ring->sq.sqes[cqe->index];
}
#endif

View File

@@ -18,9 +18,9 @@
#endif
int io_uring_setup(unsigned int entries, struct iovec *iovecs,
struct io_uring_params *p)
unsigned nr_iovecs, struct io_uring_params *p)
{
return syscall(__NR_sys_io_uring_setup, entries, iovecs, p);
return syscall(__NR_sys_io_uring_setup, entries, iovecs, nr_iovecs, p);
}
int io_uring_enter(int fd, unsigned int to_submit, unsigned int min_complete,