summaryrefslogtreecommitdiffstats
path: root/io_uring/io_uring.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2022-05-25 14:09:18 +0200
committerJens Axboe <axboe@kernel.dk>2022-07-25 02:39:11 +0200
commita9c210cebe13c36487a239ae7f4671a389fed127 (patch)
tree3aef4833aa165b8cee9e2251043d259466309da5 /io_uring/io_uring.c
parentio_uring: add a dummy -EOPNOTSUPP prep handler (diff)
downloadlinux-a9c210cebe13c36487a239ae7f4671a389fed127.tar.xz
linux-a9c210cebe13c36487a239ae7f4671a389fed127.zip
io_uring: move epoll handler to its own file
Would be nice to sort out Kconfig for this and don't even compile epoll.c if we don't have epoll configured. Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to '')
-rw-r--r--io_uring/io_uring.c50
1 files changed, 1 insertions, 49 deletions
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
index 15d0377b7d9d..78828e294e53 100644
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -100,6 +100,7 @@
#include "advise.h"
#include "openclose.h"
#include "uring_cmd.h"
+#include "epoll.h"
#define IORING_MAX_ENTRIES 32768
#define IORING_MAX_CQ_ENTRIES (2 * IORING_MAX_ENTRIES)
@@ -374,14 +375,6 @@ struct io_rsrc_update {
u32 offset;
};
-struct io_epoll {
- struct file *file;
- int epfd;
- int op;
- int fd;
- struct epoll_event event;
-};
-
struct io_provide_buf {
struct file *file;
__u64 addr;
@@ -4040,47 +4033,6 @@ static __maybe_unused int io_eopnotsupp_prep(struct io_kiocb *kiocb,
return -EOPNOTSUPP;
}
-#if defined(CONFIG_EPOLL)
-static int io_epoll_ctl_prep(struct io_kiocb *req,
- const struct io_uring_sqe *sqe)
-{
- struct io_epoll *epoll = io_kiocb_to_cmd(req);
-
- if (sqe->buf_index || sqe->splice_fd_in)
- return -EINVAL;
-
- epoll->epfd = READ_ONCE(sqe->fd);
- epoll->op = READ_ONCE(sqe->len);
- epoll->fd = READ_ONCE(sqe->off);
-
- if (ep_op_has_event(epoll->op)) {
- struct epoll_event __user *ev;
-
- ev = u64_to_user_ptr(READ_ONCE(sqe->addr));
- if (copy_from_user(&epoll->event, ev, sizeof(*ev)))
- return -EFAULT;
- }
-
- return 0;
-}
-
-static int io_epoll_ctl(struct io_kiocb *req, unsigned int issue_flags)
-{
- struct io_epoll *ie = io_kiocb_to_cmd(req);
- int ret;
- bool force_nonblock = issue_flags & IO_URING_F_NONBLOCK;
-
- ret = do_epoll_ctl(ie->epfd, ie->op, ie->fd, &ie->event, force_nonblock);
- if (force_nonblock && ret == -EAGAIN)
- return -EAGAIN;
-
- if (ret < 0)
- req_set_fail(req);
- io_req_set_res(req, ret, 0);
- return IOU_OK;
-}
-#endif
-
static int io_statx_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
{
struct io_statx *sx = io_kiocb_to_cmd(req);