xref: /linux-6.15/include/linux/io_uring.h (revision eef8abda)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 #ifndef _LINUX_IO_URING_H
3 #define _LINUX_IO_URING_H
4 
5 #include <linux/sched.h>
6 #include <linux/xarray.h>
7 
8 struct io_wq_work_node {
9 	struct io_wq_work_node *next;
10 };
11 
12 struct io_wq_work_list {
13 	struct io_wq_work_node *first;
14 	struct io_wq_work_node *last;
15 };
16 
17 struct io_uring_task {
18 	/* submission side */
19 	struct xarray		xa;
20 	struct wait_queue_head	wait;
21 	struct file		*last;
22 	void			*io_wq;
23 	struct percpu_counter	inflight;
24 	atomic_t		in_idle;
25 	bool			sqpoll;
26 
27 	spinlock_t		task_lock;
28 	struct io_wq_work_list	task_list;
29 	unsigned long		task_state;
30 	struct callback_head	task_work;
31 };
32 
33 #if defined(CONFIG_IO_URING)
34 struct sock *io_uring_get_socket(struct file *file);
35 void __io_uring_task_cancel(void);
36 void __io_uring_files_cancel(struct files_struct *files);
37 void __io_uring_free(struct task_struct *tsk);
38 
39 static inline void io_uring_task_cancel(void)
40 {
41 	if (current->io_uring)
42 		__io_uring_task_cancel();
43 }
44 static inline void io_uring_files_cancel(struct files_struct *files)
45 {
46 	if (current->io_uring)
47 		__io_uring_files_cancel(files);
48 }
49 static inline void io_uring_free(struct task_struct *tsk)
50 {
51 	if (tsk->io_uring)
52 		__io_uring_free(tsk);
53 }
54 #else
55 static inline struct sock *io_uring_get_socket(struct file *file)
56 {
57 	return NULL;
58 }
59 static inline void io_uring_task_cancel(void)
60 {
61 }
62 static inline void io_uring_files_cancel(struct files_struct *files)
63 {
64 }
65 static inline void io_uring_free(struct task_struct *tsk)
66 {
67 }
68 #endif
69 
70 #endif
71