From: Jens Axboe <axboe@suse.de>
To: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
Cc: "'Andrew Morton'" <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: Re: Cache queue_congestion_on/off_threshold
Date: Mon, 10 May 2004 16:30:24 +0200 [thread overview]
Message-ID: <20040510143024.GF14403@suse.de> (raw)
In-Reply-To: <200405072200.i47M0AF00868@unix-os.sc.intel.com>
On Fri, May 07 2004, Chen, Kenneth W wrote:
> >>>> Jens Axboe wrote on Friday, May 07, 2004 2:39 AM
> > On Thu, May 06 2004, Chen, Kenneth W wrote:
> > > (3) can we allocate request structure up front in __make_request?
> > > For I/O that cannot be merged, the elevator code executes twice
> > > in __make_request.
> > >
> >
> > Actually, with the good working batching we might get away with killing
> > freereq completely. Have you tested that (if not, could you?)
>
> Sorry, I'm clueless on "good working batching". If you could please give
> me some pointers, I will definitely test it.
Something like this.
--- linux-2.6.6/drivers/block/ll_rw_blk.c~ 2004-05-10 16:23:45.684726955 +0200
+++ linux-2.6.6/drivers/block/ll_rw_blk.c 2004-05-10 16:29:04.333792268 +0200
@@ -2138,8 +2138,8 @@
static int __make_request(request_queue_t *q, struct bio *bio)
{
- struct request *req, *freereq = NULL;
int el_ret, rw, nr_sectors, cur_nr_sectors, barrier, ra;
+ struct request *req;
sector_t sector;
sector = bio->bi_sector;
@@ -2161,15 +2161,15 @@
ra = bio->bi_rw & (1 << BIO_RW_AHEAD);
-again:
+ if (barrier)
+ goto get_rq_nolock;
+
spin_lock_irq(q->queue_lock);
if (elv_queue_empty(q)) {
blk_plug_device(q);
goto get_rq;
}
- if (barrier)
- goto get_rq;
el_ret = elv_merge(q, &req, bio);
switch (el_ret) {
@@ -2230,21 +2230,17 @@
* a free slot.
*/
get_rq:
- if (freereq) {
- req = freereq;
- freereq = NULL;
- } else {
- spin_unlock_irq(q->queue_lock);
- if ((freereq = get_request(q, rw, GFP_ATOMIC)) == NULL) {
- /*
- * READA bit set
- */
- if (ra)
- goto end_io;
+ spin_unlock_irq(q->queue_lock);
+get_rq_nolock:
+ req = get_request(q, rw, GFP_ATOMIC);
+ if (!req) {
+ /*
+ * READA bit set
+ */
+ if (ra)
+ goto end_io;
- freereq = get_request_wait(q, rw);
- }
- goto again;
+ req = get_request_wait(q, rw);
}
req->flags |= REQ_CMD;
@@ -2276,10 +2272,9 @@
req->rq_disk = bio->bi_bdev->bd_disk;
req->start_time = jiffies;
+ spin_lock_irq(q->queue_lock);
add_request(q, req);
out:
- if (freereq)
- __blk_put_request(q, freereq);
if (blk_queue_plugged(q)) {
int nrq = q->rq.count[READ] + q->rq.count[WRITE] - q->in_flight;
--
Jens Axboe
next prev parent reply other threads:[~2004-05-10 14:30 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-05 22:12 Cache queue_congestion_on/off_threshold Chen, Kenneth W
2004-05-06 6:20 ` Jens Axboe
2004-05-06 6:34 ` Andrew Morton
2004-05-06 6:43 ` Jens Axboe
2004-05-06 20:30 ` Chen, Kenneth W
2004-05-07 3:02 ` Andrew Morton
2004-05-07 9:35 ` Jens Axboe
2004-05-06 20:29 ` Chen, Kenneth W
2004-05-07 9:39 ` Jens Axboe
2004-05-07 22:00 ` Chen, Kenneth W
2004-05-10 14:30 ` Jens Axboe [this message]
2004-05-10 14:43 ` Nick Piggin
2004-05-10 14:44 ` Jens Axboe
2004-05-11 3:22 ` Nick Piggin
2004-05-12 5:32 ` Chen, Kenneth W
2004-05-12 7:05 ` Jens Axboe
2004-05-12 13:48 ` Jens Axboe
2004-05-12 14:22 ` Jens Axboe
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=20040510143024.GF14403@suse.de \
--to=axboe@suse.de \
--cc=akpm@osdl.org \
--cc=kenneth.w.chen@intel.com \
--cc=linux-kernel@vger.kernel.org \
/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.