Re: [PATCH 07/11] block: move set_task_ioprio to blk-ioc.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux