All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: Tejun Heo <tj@kernel.org>
Cc: Jeff Garzik <jeff@garzik.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	IDE/ATA development list <linux-ide@vger.kernel.org>,
	Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: request to revert libata-convert-to-block-tagging patches
Date: Mon, 10 Nov 2008 13:09:59 +0100	[thread overview]
Message-ID: <20081110120959.GC26778@kernel.dk> (raw)
In-Reply-To: <20081110120533.GB26778@kernel.dk>

On Mon, Nov 10 2008, Jens Axboe wrote:
> > 2. blk-tag offsets allocation for non-sync requests.  I'm not confident
> > this is safe.  Till now, if there was only single command in flight for
> > the port, it was guaranteed that the qc gets tag zero whether the device
> > is NCQ capable or not.  qc allocation is tied tightly with hardware
> > command slot allocation and I don't think it's wise to change this
> > assumption.
> > 
> > #1 is easy to fix but #2 requires either adding a spinlock or two atomic
> > variables to struct blk_queue_tag to keep the current behavior while
> > guaranteeing that tags are used in order.  Also, there's delay between
> > libata marks a request complete and the request actually gets completed
> > and the tag is freed.  If another request gets issued inbetween, the tag
> > number can't be guaranteed.  This can be worked around by re-mapping tag
> > number in libata depending on command type but, well then, it's worse
> > than the original implementation.
> 
> Or we could just change the blk-tag.c logic to stop of
> find_first_zero_bit() returns >= some_value instead of starting at an
> offset? You don't need any extra locking for that.

Something like the below.

diff --git a/block/blk-tag.c b/block/blk-tag.c
index c0d419e..451e7ce 100644
--- a/block/blk-tag.c
+++ b/block/blk-tag.c
@@ -337,7 +337,7 @@ EXPORT_SYMBOL(blk_queue_end_tag);
 int blk_queue_start_tag(struct request_queue *q, struct request *rq)
 {
 	struct blk_queue_tag *bqt = q->queue_tags;
-	unsigned max_depth, offset;
+	unsigned max_depth;
 	int tag;
 
 	if (unlikely((rq->cmd_flags & REQ_QUEUED))) {
@@ -356,13 +356,11 @@ int blk_queue_start_tag(struct request_queue *q, struct request *rq)
 	 * to starve sync IO on behalf of flooding async IO.
 	 */
 	max_depth = bqt->max_depth;
-	if (rq_is_sync(rq))
-		offset = 0;
-	else
-		offset = max_depth >> 2;
+	if (!rq_is_sync(rq))
+		max_depth = 3 * max_depth / 4;
 
 	do {
-		tag = find_next_zero_bit(bqt->tag_map, max_depth, offset);
+		tag = find_first_zero_bit(bqt->tag_map, max_depth);
 		if (tag >= max_depth)
 			return 1;
 

-- 
Jens Axboe


  reply	other threads:[~2008-11-10 12:19 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-10  5:19 request to revert libata-convert-to-block-tagging patches Tejun Heo
2008-11-10  5:19 ` Tejun Heo
2008-11-10  5:30 ` Tejun Heo
2008-11-10  5:30   ` Tejun Heo
2008-11-10  5:48   ` [PATCH] libata: revert convert-to-block-tagging patches Tejun Heo
2008-11-10  5:48     ` Tejun Heo
2008-11-10 12:05 ` request to revert libata-convert-to-block-tagging patches Jens Axboe
2008-11-10 12:09   ` Jens Axboe [this message]
2008-11-10 16:00     ` Linus Torvalds
2008-11-10 17:10       ` Jens Axboe
2008-11-10 13:24   ` Tejun Heo
2008-11-10 16:03     ` Linus Torvalds
2008-11-10 22:55 ` Jeff Garzik
2008-11-12  1:11   ` Linus Torvalds

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=20081110120959.GC26778@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=jeff@garzik.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.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.