Re: [PATCH 08/11] block: fold get_task_io_context into set_task_ioprio

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

 



On Thu 09-12-21 07:31:28, Christoph Hellwig wrote:
> Fold get_task_io_context into its only caller, and simplify the code
> as no reference to the I/O context is required to just set the ioprio
> field.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

								Honza

> ---
>  block/blk-ioc.c | 52 +++++++++++++------------------------------------
>  1 file changed, 14 insertions(+), 38 deletions(-)
> 
> diff --git a/block/blk-ioc.c b/block/blk-ioc.c
> index c25ce2f3eb191..1ba7cfedca2d9 100644
> --- a/block/blk-ioc.c
> +++ b/block/blk-ioc.c
> @@ -268,41 +268,9 @@ static struct io_context *create_task_io_context(struct task_struct *task,
>  	return ioc;
>  }
>  
> -/**
> - * get_task_io_context - get io_context of a task
> - * @task: task of interest
> - * @gfp_flags: allocation flags, used if allocation is necessary
> - * @node: allocation node, used if allocation is necessary
> - *
> - * Return io_context of @task.  If it doesn't exist, it is created with
> - * @gfp_flags and @node.  The returned io_context has its reference count
> - * incremented.
> - *
> - * This function always goes through task_lock() and it's better to use
> - * %current->io_context + get_io_context() for %current.
> - */
> -static struct io_context *get_task_io_context(struct task_struct *task,
> -		gfp_t gfp_flags, int node)
> -{
> -	struct io_context *ioc;
> -
> -	might_sleep_if(gfpflags_allow_blocking(gfp_flags));
> -
> -	task_lock(task);
> -	ioc = task->io_context;
> -	if (unlikely(!ioc)) {
> -		task_unlock(task);
> -		return create_task_io_context(task, gfp_flags, node);
> -	}
> -	get_io_context(ioc);
> -	task_unlock(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();
> @@ -318,13 +286,21 @@ int set_task_ioprio(struct task_struct *task, int 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);
> -	}
> +	task_lock(task);
> +	if (unlikely(!task->io_context)) {
> +		struct io_context *ioc;
>  
> -	return err;
> +		task_unlock(task);
> +		ioc = create_task_io_context(task, GFP_ATOMIC, NUMA_NO_NODE);
> +		if (ioc) {
> +			ioc->ioprio = ioprio;
> +			put_io_context(ioc);
> +		}
> +		return 0;
> +	}
> +	task->io_context->ioprio = ioprio;
> +	task_unlock(task);
> +	return 0;
>  }
>  EXPORT_SYMBOL_GPL(set_task_ioprio);
>  
> -- 
> 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