| 1 | |
| 2 |
|
| 3 | struct io_tctx_node {
|
| 4 | struct list_head ctx_node;
|
| 5 | struct task_struct *task;
|
| 6 | struct io_ring_ctx *ctx;
|
| 7 | };
|
| 8 |
|
| 9 | struct io_uring_task *io_uring_alloc_task_context(struct task_struct *task,
|
| 10 | struct io_ring_ctx *ctx);
|
| 11 | void io_uring_del_tctx_node(unsigned long index);
|
| 12 | int __io_uring_add_tctx_node(struct io_ring_ctx *ctx);
|
| 13 | int __io_uring_add_tctx_node_from_submit(struct io_ring_ctx *ctx);
|
| 14 | void io_uring_clean_tctx(struct io_uring_task *tctx);
|
| 15 | void io_uring_free_tctx(struct task_struct *tsk);
|
| 16 |
|
| 17 | void io_uring_unreg_ringfd(void);
|
| 18 | int io_ringfd_register(struct io_ring_ctx *ctx, void __user *__arg,
|
| 19 | unsigned nr_args);
|
| 20 | int io_ringfd_unregister(struct io_ring_ctx *ctx, void __user *__arg,
|
| 21 | unsigned nr_args);
|
| 22 |
|
| 23 | |
| 24 | * Note that this task has used io_uring. We use it for cancelation purposes.
|
| 25 |
|
| 26 | static inline int io_uring_add_tctx_node(struct io_ring_ctx *ctx)
|
| 27 | {
|
| 28 | struct io_uring_task *tctx = current->io_uring;
|
| 29 |
|
| 30 | if (likely(tctx && tctx->last == ctx))
|
| 31 | return 0;
|
| 32 |
|
| 33 | return __io_uring_add_tctx_node_from_submit(ctx);
|
| 34 | }
|