All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: Vasily Tarasov <vtaras@openvz.org>
Cc: LKML <linux-kernel@vger.kernel.org>, OVZDL <devel@openvz.org>
Subject: Re: [PATCH] cfq: get rid of cfqq hash
Date: Wed, 25 Apr 2007 12:27:49 +0200	[thread overview]
Message-ID: <20070425102748.GT9715@kernel.dk> (raw)
In-Reply-To: <20070425075725.GK9715@kernel.dk>

On Wed, Apr 25 2007, Jens Axboe wrote:
> On Wed, Apr 25 2007, Vasily Tarasov wrote:
> > >> @@ -1806,7 +1765,11 @@ static int cfq_may_queue(request_queue_t
> > >>  	 * so just lookup a possibly existing queue, or return 'may queue'
> > >>  	 * if that fails
> > >>  	 */
> > >> -	cfqq = cfq_find_cfq_hash(cfqd, key, tsk->ioprio);
> > >> +	cic = cfq_get_io_context_noalloc(cfqd, tsk);
> > >> +	if (!cic)
> > >> +		return ELV_MQUEUE_MAY; 
> > >> +
> > >> +	cfqq = cic->cfqq[rw & REQ_RW_SYNC];
> > >>  	if (cfqq) {
> > >>  		cfq_init_prio_data(cfqq);
> > >>  		cfq_prio_boost(cfqq);
> > > 
> > > Ahem, how well did you test this patch?
> > 
> > Ugh, again: bio_sync() returns not only 0/1
> > Sorry for giving so much trouble...
> 
> Right, and REQ_RW_SYNC isn't 1 either, so it returns a large number if
> set.

This is also needed, you can't just rely on bio_sync(), a check for a
READ is needed as well.

diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 17e4660..b793817 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -215,6 +215,18 @@ static inline void cic_set_cfqq(struct cfq_io_context *cic,
 }
 
 /*
+ * We regard a request as SYNC, if it's either a read or has the SYNC bit
+ * set (in which case it could also be direct WRITE).
+ */
+static inline int cfq_bio_sync(struct bio *bio)
+{
+	if (bio_data_dir(bio) == READ || bio_sync(bio))
+		return 1;
+
+	return 0;
+}
+
+/*
  * scheduler run of queue, if there are requests pending and no one in the
  * driver that will restart queueing
  */
@@ -594,7 +606,7 @@ cfq_find_rq_fmerge(struct cfq_data *cfqd, struct bio *bio)
 	if (!cic)
 		return NULL;
 
-	cfqq =  cic_to_cfqq(cic, bio_sync(bio));
+	cfqq = cic_to_cfqq(cic, cfq_bio_sync(bio));
 	if (cfqq) {
 		sector_t sector = bio->bi_sector + bio_sectors(bio);
 
@@ -694,7 +706,7 @@ static int cfq_allow_merge(request_queue_t *q, struct request *rq,
 	/*
 	 * Disallow merge of a sync bio into an async request.
 	 */
-	if ((bio_data_dir(bio) == READ || bio_sync(bio)) && !rq_is_sync(rq))
+	if (cfq_bio_sync(bio) && !rq_is_sync(rq))
 		return 0;
 
 	/*
@@ -705,7 +717,7 @@ static int cfq_allow_merge(request_queue_t *q, struct request *rq,
 	if (!cic)
 		return 0;
 
-	cfqq = cic_to_cfqq(cic, bio_sync(bio));
+	cfqq = cic_to_cfqq(cic, cfq_bio_sync(bio));
 	if (cfqq == RQ_CFQQ(rq))
 		return 1;
 

-- 
Jens Axboe


  reply	other threads:[~2007-04-25 10:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-24 13:53 [PATCH] cfq: get rid of cfqq hash Vasily Tarasov
2007-04-24 17:02 ` Jens Axboe
2007-04-24 17:22   ` Jens Axboe
2007-04-24 18:29     ` Jens Axboe
2007-04-24 18:33       ` Jens Axboe
2007-04-25 11:31     ` Vasily Tarasov
2007-04-25  6:58 ` Jens Axboe
2007-04-25  7:27   ` Jens Axboe
2007-04-25 11:50   ` Vasily Tarasov
2007-04-25  7:57     ` Jens Axboe
2007-04-25 10:27       ` Jens Axboe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-04-24 11:53 Vasily Tarasov
2007-04-24 12:27 ` Jens Axboe
2007-04-24 12:51   ` Vasily Tarasov

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=20070425102748.GT9715@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=devel@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vtaras@openvz.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.