From: Jens Axboe <jens.axboe-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: Rusty Russell <rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org>
Cc: kvm-devel
<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
lguest <lguest-mnsaURCQ41sdnm+yROfE0A@public.gmane.org>,
virtualization
<virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
Subject: Re: [PATCH 4/6] virtio block driver
Date: Thu, 20 Sep 2007 15:05:19 +0200 [thread overview]
Message-ID: <20070920130519.GL2367@kernel.dk> (raw)
In-Reply-To: <1190290606.7262.239.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
On Thu, Sep 20 2007, Rusty Russell wrote:
> +static void end_dequeued_request(struct request *req,
> + struct request_queue *q, int uptodate)
> +{
> + /* And so the insanity of the block layer infects us here. */
> + int nsectors = req->hard_nr_sectors;
> +
> + if (blk_pc_request(req)) {
> + nsectors = (req->data_len + 511) >> 9;
> + if (!nsectors)
> + nsectors = 1;
> + }
> + if (end_that_request_first(req, uptodate, nsectors))
> + BUG();
> + add_disk_randomness(req->rq_disk);
> + end_that_request_last(req, uptodate);
> +}
We have end_queued_request(), lets add end_dequeued_request(). Below.
> + vblk->sg[0].page = virt_to_page(&vbr->out_hdr);
> + vblk->sg[0].offset = offset_in_page(&vbr->out_hdr);
> + vblk->sg[0].length = sizeof(vbr->out_hdr);
> + num = blk_rq_map_sg(q, vbr->req, vblk->sg+1);
This wont work for chained sglists, but I gather (I'm so funny) that it
wont be an issue for you. How large are your sglists?
> + if (!do_req(q, vblk, req)) {
> + /* Queue full? Wait. */
> + blk_stop_queue(q);
> + break;
> + }
Personally I think this bool stuff is foul. You return false/true, but
still use ! to test. That is just more confusing than the canonical 0/1
good/bad return imho.
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c
index f6d3994..c1dc23a 100644
--- a/block/ll_rw_blk.c
+++ b/block/ll_rw_blk.c
@@ -3719,15 +3719,24 @@ void end_that_request_last(struct request *req, int uptodate)
EXPORT_SYMBOL(end_that_request_last);
static inline void __end_request(struct request *rq, int uptodate,
- unsigned int nr_bytes)
+ unsigned int nr_bytes, int dequeue)
{
if (!end_that_request_chunk(rq, uptodate, nr_bytes)) {
- blkdev_dequeue_request(rq);
+ if (dequeue)
+ blkdev_dequeue_request(rq);
add_disk_randomness(rq->rq_disk);
end_that_request_last(rq, uptodate);
}
}
+static unsigned int rq_byte_size(struct request *rq)
+{
+ if (blk_fs_request(rq))
+ return rq->hard_nr_sectors << 9;
+
+ return rq->data_len;
+}
+
/**
* end_queued_request - end all I/O on a queued request
* @rq: the request being processed
@@ -3741,18 +3750,29 @@ static inline void __end_request(struct request *rq, int uptodate,
**/
void end_queued_request(struct request *rq, int uptodate)
{
- unsigned int nr_bytes;
-
- if (blk_fs_request(rq))
- nr_bytes = rq->hard_nr_sectors << 9;
- else
- nr_bytes = rq->data_len;
-
- __end_request(rq, uptodate, nr_bytes);
+ __end_request(rq, uptodate, rq_byte_size(rq), 1);
}
EXPORT_SYMBOL(end_queued_request);
/**
+ * end_dequeued_request - end all I/O on a dequeued request
+ * @rq: the request being processed
+ * @uptodate: error value or 0/1 uptodate flag
+ *
+ * Description:
+ * Ends all I/O on a request. The request must already have been
+ * dequeued using blkdev_dequeue_request(), as is normally the case
+ * for most drivers.
+ *
+ **/
+void end_dequeued_request(struct request *rq, int uptodate)
+{
+ __end_request(rq, uptodate, rq_byte_size(rq), 0);
+}
+EXPORT_SYMBOL(end_dequeued_request);
+
+
+/**
* end_request - end I/O on the current segment of the request
* @rq: the request being processed
* @uptodate: error value or 0/1 uptodate flag
@@ -3773,7 +3793,7 @@ EXPORT_SYMBOL(end_queued_request);
**/
void end_request(struct request *req, int uptodate)
{
- __end_request(req, uptodate, req->hard_cur_sectors << 9);
+ __end_request(req, uptodate, req->hard_cur_sectors << 9, 1);
}
EXPORT_SYMBOL(end_request);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 12ab4d4..4b24265 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -732,6 +732,7 @@ extern int end_that_request_chunk(struct request *, int, int);
extern void end_that_request_last(struct request *, int);
extern void end_request(struct request *, int);
extern void end_queued_request(struct request *, int);
+extern void end_dequeued_request(struct request *, int);
extern void blk_complete_request(struct request *);
/*
--
Jens Axboe
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
next prev parent reply other threads:[~2007-09-20 13:05 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-20 12:03 [PATCH 0/6] virtio with config abstraction and ring implementation Rusty Russell
[not found] ` <1190289808.7262.223.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:09 ` [PATCH 1/6] virtio interace Rusty Russell
[not found] ` <1190290140.7262.228.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:12 ` [PATCH 2/6] virtio_config Rusty Russell
[not found] ` <1190290369.7262.231.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:14 ` [PATCH 3/6] virtio net driver Rusty Russell
[not found] ` <1190290495.7262.235.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:16 ` [PATCH 4/6] virtio block driver Rusty Russell
[not found] ` <1190290606.7262.239.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:19 ` [PATCH 5/6] virtio console driver Rusty Russell
[not found] ` <1190290761.7262.242.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:27 ` [PATCH 6/6] virtio ring helper Rusty Russell
[not found] ` <1190291234.7262.246.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-20 12:43 ` Avi Kivity
[not found] ` <46F26AF6.60904-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-21 2:04 ` Rusty Russell
[not found] ` <1190340251.19451.36.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-23 10:05 ` Avi Kivity
[not found] ` <46F63A64.9070200-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-23 11:40 ` Rusty Russell
[not found] ` <1190547607.27805.120.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-23 11:46 ` Avi Kivity
2007-09-20 12:27 ` [PATCH 4/6] virtio block driver Jens Axboe
[not found] ` <20070920122713.GK2367-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2007-09-21 12:00 ` Rusty Russell
[not found] ` <1190376007.27805.19.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-21 12:27 ` Jens Axboe
[not found] ` <20070921122746.GO2367-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2007-09-23 6:47 ` Rusty Russell
2007-09-20 13:05 ` Jens Axboe [this message]
2007-09-21 2:06 ` Rusty Russell
[not found] ` <1190340367.19451.40.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-21 11:47 ` Jens Axboe
[not found] ` <20070921114703.GN2367-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2007-09-21 12:30 ` Rusty Russell
2007-09-21 10:48 ` [PATCH 3/6] virtio net driver Christian Borntraeger
[not found] ` <200709211248.11783.borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-09-21 11:53 ` Rusty Russell
[not found] ` <1190375615.27805.9.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-21 12:36 ` Christian Borntraeger
[not found] ` <200709211436.43964.borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-09-21 14:08 ` Herbert Xu
[not found] ` <20070921140833.GA12242-lOAM2aK0SrRLBo1qDEOMRrpzq4S04n8Q@public.gmane.org>
2007-09-21 14:42 ` Christian Borntraeger
[not found] ` <200709211642.25208.borntraeger-tA70FqPdS9bQT0dZR+AlfA@public.gmane.org>
2007-09-23 7:13 ` Rusty Russell
2007-09-20 12:36 ` [PATCH 2/6] virtio_config Avi Kivity
[not found] ` <46F26958.4080102-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-20 12:55 ` Avi Kivity
[not found] ` <46F26DC7.9040001-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-21 1:50 ` Rusty Russell
[not found] ` <1190339435.19451.23.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-22 13:03 ` Avi Kivity
2007-09-20 12:27 ` [PATCH 1/6] virtio interace Avi Kivity
2007-09-21 11:37 ` [kvm-devel] " Rusty Russell
2007-09-21 12:05 ` Arnd Bergmann
[not found] ` <200709211405.32116.arnd-r2nGTMty4D4@public.gmane.org>
2007-09-21 12:45 ` Rusty Russell
[not found] ` <1190378736.27805.54.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-21 14:22 ` Arnd Bergmann
2007-09-22 9:55 ` Rusty Russell
[not found] ` <1190454934.27805.80.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-22 10:01 ` Arnd Bergmann
[not found] ` <200709221201.33865.arnd-r2nGTMty4D4@public.gmane.org>
2007-09-23 8:33 ` Rusty Russell
[not found] ` <1190536431.27805.109.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2007-09-23 11:20 ` Dor Laor
2007-09-20 13:43 ` [PATCH 0/6] virtio with config abstraction and ring implementation Dor Laor
[not found] ` <46F2791A.8070601-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-20 13:50 ` [Lguest] [PATCH 0/6] virtio with config abstraction and ringimplementation Dor Laor
2007-09-21 3:20 ` [PATCH 0/6] virtio with config abstraction and ring implementation Rusty Russell
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=20070920130519.GL2367@kernel.dk \
--to=jens.axboe-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=lguest-mnsaURCQ41sdnm+yROfE0A@public.gmane.org \
--cc=rusty-8n+1lVoiYb80n/F98K4Iww@public.gmane.org \
--cc=virtualization-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox