blob: 35b2d845704d9175466d979138d413d85423664b [file] [log] [blame]
Jens Axboe0f212202020-09-13 13:09:39 -06001/* 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>
Jens Axboe98447d62020-10-14 10:48:51 -06007
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;
Jens Axboe4ea33a92020-10-15 13:46:44 -060018#ifdef CONFIG_AUDIT
19 kuid_t loginuid;
20 unsigned int sessionid;
21#endif
Jens Axboe1e6fa522020-10-15 08:46:24 -060022 refcount_t count;
Jens Axboe98447d62020-10-14 10:48:51 -060023};
Jens Axboe0f212202020-09-13 13:09:39 -060024
25struct io_uring_task {
26 /* submission side */
27 struct xarray xa;
28 struct wait_queue_head wait;
29 struct file *last;
Jens Axboed8a6df12020-10-15 16:24:45 -060030 struct percpu_counter inflight;
Jens Axboe500a3732020-10-15 17:38:03 -060031 struct io_identity __identity;
32 struct io_identity *identity;
Jens Axboefdaf0832020-10-30 09:37:30 -060033 atomic_t in_idle;
34 bool sqpoll;
Jens Axboe0f212202020-09-13 13:09:39 -060035};
36
37#if defined(CONFIG_IO_URING)
Jens Axboea3ec6002020-09-18 20:41:00 -060038struct sock *io_uring_get_socket(struct file *file);
Jens Axboe0f212202020-09-13 13:09:39 -060039void __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
Jens Axboea3ec6002020-09-18 20:41:00 -060059static inline struct sock *io_uring_get_socket(struct file *file)
60{
61 return NULL;
62}
Jens Axboe0f212202020-09-13 13:09:39 -060063static 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