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 	atomic_t		in_idle;
34 	bool			sqpoll;
35 };
36 
37 #if defined(CONFIG_IO_URING)
38 struct sock *io_uring_get_socket(struct file *file);
39 void __io_uring_task_cancel(void);
40 void __io_uring_files_cancel(struct files_struct *files);
41 void __io_uring_free(struct task_struct *tsk);
42 
io_uring_task_cancel(void)43 static inline void io_uring_task_cancel(void)
44 {
45 	if (current->io_uring && !xa_empty(&current->io_uring->xa))
46 		__io_uring_task_cancel();
47 }
io_uring_files_cancel(struct files_struct * files)48 static inline void io_uring_files_cancel(struct files_struct *files)
49 {
50 	if (current->io_uring && !xa_empty(&current->io_uring->xa))
51 		__io_uring_files_cancel(files);
52 }
io_uring_free(struct task_struct * tsk)53 static inline void io_uring_free(struct task_struct *tsk)
54 {
55 	if (tsk->io_uring)
56 		__io_uring_free(tsk);
57 }
58 #else
io_uring_get_socket(struct file * file)59 static inline struct sock *io_uring_get_socket(struct file *file)
60 {
61 	return NULL;
62 }
io_uring_task_cancel(void)63 static inline void io_uring_task_cancel(void)
64 {
65 }
io_uring_files_cancel(struct files_struct * files)66 static inline void io_uring_files_cancel(struct files_struct *files)
67 {
68 }
io_uring_free(struct task_struct * tsk)69 static inline void io_uring_free(struct task_struct *tsk)
70 {
71 }
72 #endif
73 
74 #endif
75