mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
![Jens Axboe](/assets/img/avatar_default.png)
If the io_identity doesn't completely match the task, then create a copy of it and use that. The existing copy remains valid until the last user of it has gone away. This also changes the personality lookup to be indexed by io_identity, instead of creds directly. Signed-off-by: Jens Axboe <axboe@kernel.dk>
70 lines
1.6 KiB
C
70 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#ifndef _LINUX_IO_URING_H
|
|
#define _LINUX_IO_URING_H
|
|
|
|
#include <linux/sched.h>
|
|
#include <linux/xarray.h>
|
|
|
|
struct io_identity {
|
|
struct files_struct *files;
|
|
struct mm_struct *mm;
|
|
#ifdef CONFIG_BLK_CGROUP
|
|
struct cgroup_subsys_state *blkcg_css;
|
|
#endif
|
|
const struct cred *creds;
|
|
struct nsproxy *nsproxy;
|
|
struct fs_struct *fs;
|
|
unsigned long fsize;
|
|
refcount_t count;
|
|
};
|
|
|
|
struct io_uring_task {
|
|
/* submission side */
|
|
struct xarray xa;
|
|
struct wait_queue_head wait;
|
|
struct file *last;
|
|
atomic_long_t req_issue;
|
|
|
|
/* completion side */
|
|
bool in_idle ____cacheline_aligned_in_smp;
|
|
atomic_long_t req_complete;
|
|
};
|
|
|
|
#if defined(CONFIG_IO_URING)
|
|
struct sock *io_uring_get_socket(struct file *file);
|
|
void __io_uring_task_cancel(void);
|
|
void __io_uring_files_cancel(struct files_struct *files);
|
|
void __io_uring_free(struct task_struct *tsk);
|
|
|
|
static inline void io_uring_task_cancel(void)
|
|
{
|
|
if (current->io_uring && !xa_empty(¤t->io_uring->xa))
|
|
__io_uring_task_cancel();
|
|
}
|
|
static inline void io_uring_files_cancel(struct files_struct *files)
|
|
{
|
|
if (current->io_uring && !xa_empty(¤t->io_uring->xa))
|
|
__io_uring_files_cancel(files);
|
|
}
|
|
static inline void io_uring_free(struct task_struct *tsk)
|
|
{
|
|
if (tsk->io_uring)
|
|
__io_uring_free(tsk);
|
|
}
|
|
#else
|
|
static inline struct sock *io_uring_get_socket(struct file *file)
|
|
{
|
|
return NULL;
|
|
}
|
|
static inline void io_uring_task_cancel(void)
|
|
{
|
|
}
|
|
static inline void io_uring_files_cancel(struct files_struct *files)
|
|
{
|
|
}
|
|
static inline void io_uring_free(struct task_struct *tsk)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif
|