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