All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.