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_identity { 9 struct files_struct *files; 10 struct mm_struct *mm; 11 #ifdef CONFIG_BLK_CGROUP 12 struct cgroup_subsys_state *blkcg_css; 13 #endif 14 const struct cred *creds; 15 struct nsproxy *nsproxy; 16 struct fs_struct *fs; 17 unsigned long fsize; 18 #ifdef CONFIG_AUDIT 19 kuid_t loginuid; 20 unsigned int sessionid; 21 #endif 22 refcount_t count; 23 }; 24 25 struct io_uring_task { 26 /* submission side */ 27 struct xarray xa; 28 struct wait_queue_head wait; 29 struct file *last; 30 struct percpu_counter inflight; 31 struct io_identity __identity; 32 struct io_identity *identity; 33 bool in_idle; 34 }; 35 36 #if defined(CONFIG_IO_URING) 37 struct sock *io_uring_get_socket(struct file *file); 38 void __io_uring_task_cancel(void); 39 void __io_uring_files_cancel(struct files_struct *files); 40 void __io_uring_free(struct task_struct *tsk); 41 42 static inline void io_uring_task_cancel(void) 43 { 44 if (current->io_uring && !xa_empty(¤t->io_uring->xa)) 45 __io_uring_task_cancel(); 46 } 47 static inline void io_uring_files_cancel(struct files_struct *files) 48 { 49 if (current->io_uring && !xa_empty(¤t->io_uring->xa)) 50 __io_uring_files_cancel(files); 51 } 52 static inline void io_uring_free(struct task_struct *tsk) 53 { 54 if (tsk->io_uring) 55 __io_uring_free(tsk); 56 } 57 #else 58 static inline struct sock *io_uring_get_socket(struct file *file) 59 { 60 return NULL; 61 } 62 static inline void io_uring_task_cancel(void) 63 { 64 } 65 static inline void io_uring_files_cancel(struct files_struct *files) 66 { 67 } 68 static inline void io_uring_free(struct task_struct *tsk) 69 { 70 } 71 #endif 72 73 #endif 74