]>
Commit | Line | Data |
---|---|---|
329061d3 JA |
1 | // SPDX-License-Identifier: GPL-2.0 |
2 | ||
9b797a37 JA |
3 | #include "alloc_cache.h" |
4 | ||
329061d3 JA |
5 | enum { |
6 | IO_APOLL_OK, | |
7 | IO_APOLL_ABORTED, | |
8 | IO_APOLL_READY | |
9 | }; | |
10 | ||
11 | struct io_poll { | |
12 | struct file *file; | |
13 | struct wait_queue_head *head; | |
14 | __poll_t events; | |
c16bda37 | 15 | int retries; |
329061d3 JA |
16 | struct wait_queue_entry wait; |
17 | }; | |
18 | ||
19 | struct async_poll { | |
9b797a37 JA |
20 | union { |
21 | struct io_poll poll; | |
22 | struct io_cache_entry cache; | |
23 | }; | |
329061d3 JA |
24 | struct io_poll *double_poll; |
25 | }; | |
26 | ||
c79f52f0 JA |
27 | /* |
28 | * Must only be called inside issue_flags & IO_URING_F_MULTISHOT, or | |
29 | * potentially other cases where we already "own" this poll request. | |
30 | */ | |
31 | static inline void io_poll_multishot_retry(struct io_kiocb *req) | |
32 | { | |
33 | atomic_inc(&req->poll_refs); | |
34 | } | |
35 | ||
329061d3 JA |
36 | int io_poll_add_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); |
37 | int io_poll_add(struct io_kiocb *req, unsigned int issue_flags); | |
38 | ||
39 | int io_poll_remove_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); | |
40 | int io_poll_remove(struct io_kiocb *req, unsigned int issue_flags); | |
41 | ||
ad163a7e | 42 | struct io_cancel_data; |
5d7943d9 PB |
43 | int io_poll_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd, |
44 | unsigned issue_flags); | |
329061d3 JA |
45 | int io_arm_poll_handler(struct io_kiocb *req, unsigned issue_flags); |
46 | bool io_poll_remove_all(struct io_ring_ctx *ctx, struct task_struct *tsk, | |
47 | bool cancel_all); | |
9da7471e | 48 | |
9b797a37 | 49 | void io_apoll_cache_free(struct io_cache_entry *entry); |
c92fcfc2 JA |
50 | |
51 | void io_poll_task_func(struct io_kiocb *req, struct io_tw_state *ts); |