On Thu 09-12-21 07:31:27, Christoph Hellwig wrote: > Keep set_task_ioprio with the other low-level code that accesses the > io_context structure. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > block/blk-ioc.c | 34 ++++++++++++++++++++++++++++++++-- > block/ioprio.c | 32 -------------------------------- > include/linux/iocontext.h | 2 -- > 3 files changed, 32 insertions(+), 36 deletions(-) > > diff --git a/block/blk-ioc.c b/block/blk-ioc.c > index f98a29ee8f362..c25ce2f3eb191 100644 > --- a/block/blk-ioc.c > +++ b/block/blk-ioc.c > @@ -8,6 +8,7 @@ > #include <linux/bio.h> > #include <linux/blkdev.h> > #include <linux/slab.h> > +#include <linux/security.h> > #include <linux/sched/task.h> > > #include "blk.h" > @@ -280,8 +281,8 @@ static struct io_context *create_task_io_context(struct task_struct *task, > * This function always goes through task_lock() and it's better to use > * %current->io_context + get_io_context() for %current. > */ > -struct io_context *get_task_io_context(struct task_struct *task, > - gfp_t gfp_flags, int node) > +static struct io_context *get_task_io_context(struct task_struct *task, > + gfp_t gfp_flags, int node) > { > struct io_context *ioc; > > @@ -298,6 +299,35 @@ struct io_context *get_task_io_context(struct task_struct *task, > return ioc; > } > > +int set_task_ioprio(struct task_struct *task, int ioprio) > +{ > + int err; > + struct io_context *ioc; > + const struct cred *cred = current_cred(), *tcred; > + > + rcu_read_lock(); > + tcred = __task_cred(task); > + if (!uid_eq(tcred->uid, cred->euid) && > + !uid_eq(tcred->uid, cred->uid) && !capable(CAP_SYS_NICE)) { > + rcu_read_unlock(); > + return -EPERM; > + } > + rcu_read_unlock(); > + > + err = security_task_setioprio(task, ioprio); > + if (err) > + return err; > + > + ioc = get_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE); > + if (ioc) { > + ioc->ioprio = ioprio; > + put_io_context(ioc); > + } > + > + return err; > +} > +EXPORT_SYMBOL_GPL(set_task_ioprio); > + > int __copy_io(unsigned long clone_flags, struct task_struct *tsk) > { > struct io_context *ioc = current->io_context; > diff --git a/block/ioprio.c b/block/ioprio.c > index 313c14a70bbd3..e118f4bf2dc65 100644 > --- a/block/ioprio.c > +++ b/block/ioprio.c > @@ -22,46 +22,14 @@ > */ > #include <linux/gfp.h> > #include <linux/kernel.h> > -#include <linux/export.h> > #include <linux/ioprio.h> > #include <linux/cred.h> > #include <linux/blkdev.h> > #include <linux/capability.h> > -#include <linux/sched/user.h> > -#include <linux/sched/task.h> > #include <linux/syscalls.h> > #include <linux/security.h> > #include <linux/pid_namespace.h> > > -int set_task_ioprio(struct task_struct *task, int ioprio) > -{ > - int err; > - struct io_context *ioc; > - const struct cred *cred = current_cred(), *tcred; > - > - rcu_read_lock(); > - tcred = __task_cred(task); > - if (!uid_eq(tcred->uid, cred->euid) && > - !uid_eq(tcred->uid, cred->uid) && !capable(CAP_SYS_NICE)) { > - rcu_read_unlock(); > - return -EPERM; > - } > - rcu_read_unlock(); > - > - err = security_task_setioprio(task, ioprio); > - if (err) > - return err; > - > - ioc = get_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE); > - if (ioc) { > - ioc->ioprio = ioprio; > - put_io_context(ioc); > - } > - > - return err; > -} > -EXPORT_SYMBOL_GPL(set_task_ioprio); > - > int ioprio_check_cap(int ioprio) > { > int class = IOPRIO_PRIO_CLASS(ioprio); > diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h > index 82c7f4f5f4f59..648331f35fc66 100644 > --- a/include/linux/iocontext.h > +++ b/include/linux/iocontext.h > @@ -116,8 +116,6 @@ struct task_struct; > #ifdef CONFIG_BLOCK > void put_io_context(struct io_context *ioc); > void exit_io_context(struct task_struct *task); > -struct io_context *get_task_io_context(struct task_struct *task, > - gfp_t gfp_flags, int node); > int __copy_io(unsigned long clone_flags, struct task_struct *tsk); > static inline int copy_io(unsigned long clone_flags, struct task_struct *tsk) > { > -- > 2.30.2 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR