summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2019-01-10 09:32:41 -0700
committerJens Axboe <axboe@kernel.dk>2019-01-10 09:35:34 -0700
commit6cdce17753a3664484c907ed264e734ed5f3c2d7 (patch)
treea48587808e1b4f46b1df9e39223cb7fdf1483097 /src
parent7bf7e8e8e5cf1fe46194c6faf58e94cee815ac6a (diff)
downloadliburing-6cdce17753a3664484c907ed264e734ed5f3c2d7.tar.gz
liburing-6cdce17753a3664484c907ed264e734ed5f3c2d7.tar.bz2
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>
Diffstat (limited to 'src')
-rw-r--r--src/io_uring.c5
-rw-r--r--src/io_uring.h19
-rw-r--r--src/liburing.h10
-rw-r--r--src/syscall.c4
4 files changed, 18 insertions, 20 deletions
diff --git a/src/io_uring.c b/src/io_uring.c
index 6168b56..d9c1511 100644
--- a/src/io_uring.c
+++ b/src/io_uring.c
@@ -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;
diff --git a/src/io_uring.h b/src/io_uring.h
index 20e4c22..b07bbbb 100644
--- a/src/io_uring.h
+++ b/src/io_uring.h
@@ -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;
};
diff --git a/src/liburing.h b/src/liburing.h
index 8adc9ec..ac645f1 100644
--- a/src/liburing.h
+++ b/src/liburing.h
@@ -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
diff --git a/src/syscall.c b/src/syscall.c
index eafdd39..d06d59c 100644
--- a/src/syscall.c
+++ b/src/syscall.c
@@ -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,