blob: 35b2d845704d9175466d979138d413d85423664b [file] [log] [blame]
Olivier Deprez157378f2022-04-04 15:47:50 +02001/* 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
8struct 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
25struct 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)
38struct sock *io_uring_get_socket(struct file *file);
39void __io_uring_task_cancel(void);
40void __io_uring_files_cancel(struct files_struct *files);
41void __io_uring_free(struct task_struct *tsk);
42
43static 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}
48static 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}
53static inline void io_uring_free(struct task_struct *tsk)
54{
55 if (tsk->io_uring)
56 __io_uring_free(tsk);
57}
58#else
59static inline struct sock *io_uring_get_socket(struct file *file)
60{
61 return NULL;
62}
63static inline void io_uring_task_cancel(void)
64{
65}
66static inline void io_uring_files_cancel(struct files_struct *files)
67{
68}
69static inline void io_uring_free(struct task_struct *tsk)
70{
71}
72#endif
73
74#endif