lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 29 Oct 2018 12:27:58 -0700
From:   Bart Van Assche <bvanassche@....org>
To:     Jens Axboe <axboe@...nel.dk>, linux-block@...r.kernel.org,
        linux-scsi@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 09/14] blk-mq: ensure that plug lists don't straddle
 hardware queues

On Mon, 2018-10-29 at 10:37 -0600, Jens Axboe wrote:
>  void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
>  {
>  	struct blk_mq_ctx *this_ctx;
> @@ -1628,7 +1649,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
>  	struct request *rq;
>  	LIST_HEAD(list);
>  	LIST_HEAD(ctx_list);
> -	unsigned int depth;
> +	unsigned int depth, this_flags;
>  
>  	list_splice_init(&plug->mq_list, &list);
>  
> @@ -1636,13 +1657,14 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
>  
>  	this_q = NULL;
>  	this_ctx = NULL;
> +	this_flags = 0;
>  	depth = 0;
>  
>  	while (!list_empty(&list)) {
>  		rq = list_entry_rq(list.next);
>  		list_del_init(&rq->queuelist);
>  		BUG_ON(!rq->q);
> -		if (rq->mq_ctx != this_ctx) {
> +		if (!ctx_match(rq, this_ctx, this_flags)) {
>  			if (this_ctx) {
>  				trace_block_unplug(this_q, depth, !from_schedule);
>  				blk_mq_sched_insert_requests(this_q, this_ctx,
> @@ -1650,6 +1672,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
>  								from_schedule);
>  			}
>  
> +			this_flags = rq->cmd_flags;
>  			this_ctx = rq->mq_ctx;
>  			this_q = rq->q;
>  			depth = 0;

This patch will cause the function stored in the flags_to_type pointer to be
called 2 * (n - 1) times where n is the number of elements in 'list' when
blk_mq_sched_insert_requests() is called. Have you considered to rearrange
the code such that that number of calls is reduced to n?

Thanks,

Bart.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ