public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeff Garzik <jgarzik@pobox.com>
To: Jens Axboe <axboe@suse.de>
Cc: Linux Kernel <linux-kernel@vger.kernel.org>,
	kenneth.w.chen@intel.com, Andrew Morton <akpm@osdl.org>,
	thornber@redhat.com
Subject: Re: [PATCH] backing dev unplugging
Date: Wed, 10 Mar 2004 15:14:31 -0500	[thread overview]
Message-ID: <404F7727.8080806@pobox.com> (raw)
In-Reply-To: <20040310124507.GU4949@suse.de>

Jens Axboe wrote:
> Hi,
> 
> Here's a first cut at killing global plugging of block devices to reduce
> the nasty contention blk_plug_lock caused. This introduceds per-queue
> plugging, controlled by the backing_dev_info. Observations:
> 
> - Most uses of blk_run_queues() without a specific context was bogus.
>   Usually the act of kicking the targets in question should be (and
>   already are) performed by other activities, such as making the vm
>   flushing run to free memory.
> 
> - Some use of blk_run_queues() really just want to kick the final queue
>   where the bio goes to. I've added bio_sync() (BIO_RW_SYNC) to manage
>   those, if the queue needs unplugging we'll do it when holding the lock
>   for the queue already.
> 
> - The dm bit needs careful examination and checking of Joe. It could be
>   more clever and maintain plug state of each target, I just added a
>   dm_table unplug all functionality.
> 
> Patch is against 2.6.4-rc2-mm1.

I like it a lot.

Any chance some of these newly-shortened functions can become static 
inline as well?


> @@ -1100,13 +1092,11 @@
>  	 * don't plug a stopped queue, it must be paired with blk_start_queue()
>  	 * which will restart the queueing
>  	 */
> -	if (!blk_queue_plugged(q)
> -	    && !test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> -		spin_lock(&blk_plug_lock);
> -		list_add_tail(&q->plug_list, &blk_plug_list);
> +	if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags))
> +		return;
> +
> +	if (!test_and_set_bit(QUEUE_FLAG_PLUGGED, &q->queue_flags))
>  		mod_timer(&q->unplug_timer, jiffies + q->unplug_delay);
> -		spin_unlock(&blk_plug_lock);
> -	}
>  }
>  
>  EXPORT_SYMBOL(blk_plug_device);
> @@ -1118,15 +1108,12 @@
>  int blk_remove_plug(request_queue_t *q)
>  {
>  	WARN_ON(!irqs_disabled());
> -	if (blk_queue_plugged(q)) {
> -		spin_lock(&blk_plug_lock);
> -		list_del_init(&q->plug_list);
> -		del_timer(&q->unplug_timer);
> -		spin_unlock(&blk_plug_lock);
> -		return 1;
> -	}
>  
> -	return 0;
> +	if (!test_and_clear_bit(QUEUE_FLAG_PLUGGED, &q->queue_flags))
> +		return 0;
> +
> +	del_timer(&q->unplug_timer);
> +	return 1;
>  }
>  
>  EXPORT_SYMBOL(blk_remove_plug);

I tend to like

	if (test_and_clear_bit())
		call_out_of_line_function()

style for small functions like this, and inline those.

	Jeff




  parent reply	other threads:[~2004-03-10 20:16 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-10 12:45 [PATCH] backing dev unplugging Jens Axboe
2004-03-10 19:55 ` Andrew Morton
2004-03-10 20:03   ` Kenneth Chen
2004-03-10 20:20     ` Jens Axboe
2004-03-10 20:45       ` Jesse Barnes
2004-03-10 20:49         ` Jens Axboe
     [not found]           ` <20040310205237.GK15087@suse.de>
2004-03-10 21:01             ` Jesse Barnes
2004-03-10 21:02               ` Jens Axboe
2004-03-10 21:35                 ` Jesse Barnes
2004-03-10 23:54                   ` Andrew Morton
2004-03-11  0:03                     ` David Mosberger
2004-03-11  6:30                       ` Jesse Barnes
2004-03-10 20:17   ` Jens Axboe
2004-03-15  5:53   ` Kenneth Chen
2004-03-10 20:14 ` Jeff Garzik [this message]
2004-03-10 20:19   ` Jens Axboe
2004-03-10 21:00 ` Andrew Morton
2004-03-10 21:02   ` Jens Axboe
2004-03-10 21:40     ` Miquel van Smoorenburg
2004-03-10 23:05       ` Andrew Morton
2004-03-11  0:05         ` Miquel van Smoorenburg
2004-03-11  0:17           ` Andrew Morton
2004-03-11  6:43         ` Jens Axboe
2004-03-10 22:22 ` Nathan Scott
2004-03-10 23:32   ` Steve Lord
2004-03-11  7:05   ` Jens Axboe
2004-03-11  9:14 ` Joe Thornber
2004-03-11  9:16   ` Jens Axboe
2004-03-11 12:17 ` Christophe Saout
2004-03-11 12:22   ` Jens Axboe
2004-03-11 13:11     ` Christophe Saout

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=404F7727.8080806@pobox.com \
    --to=jgarzik@pobox.com \
    --cc=akpm@osdl.org \
    --cc=axboe@suse.de \
    --cc=kenneth.w.chen@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=thornber@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox