public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH linux-2.6-block/for-linus] Fix discard requests accounting in the diskstats
       [not found]   ` <20090424051612.GT4593@kernel.dk>
@ 2009-04-24  5:48     ` Nikanth Karthikesan
  2009-04-24  6:15       ` Jens Axboe
  0 siblings, 1 reply; 4+ messages in thread
From: Nikanth Karthikesan @ 2009-04-24  5:48 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Andrew Morton, dwmw2, linux-kernel

When 2 discard requests are merged, the stats gets updated, but we do not
update statistics normally when a discard request is issued or completed. For
example the in_flight counter would be decremented when 2 discard requests are
merged, but it was not at all incremented when they were issued, and in_flight
counter will not be decremented, when they are completed as well.

This patch fixes this by adding discard requests to the statistics.

Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>

---

diff --git a/block/blk-core.c b/block/blk-core.c
index 2998fe3..0175b9f 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -68,7 +68,7 @@ static void drive_stat_acct(struct request *rq, int new_io)
 	int rw = rq_data_dir(rq);
 	int cpu;
 
-	if (!blk_fs_request(rq) || !blk_do_io_stat(rq))
+	if (!rq_accountable(rq) || !blk_do_io_stat(rq))
 		return;
 
 	cpu = part_stat_lock();
@@ -1700,7 +1700,7 @@ static void blk_account_io_done(struct request *req)
 	 * IO on queueing nor completion.  Accounting the containing
 	 * request is enough.
 	 */
-	if (blk_fs_request(req) && req != &req->q->bar_rq) {
+	if (rq_accountable(req) && req != &req->q->bar_rq) {
 		unsigned long duration = jiffies - req->start_time;
 		const int rw = rq_data_dir(req);
 		struct hd_struct *part;
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 2755d5c..a54d3ba 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -670,7 +670,9 @@ static inline void blk_clear_queue_full(struct request_queue *q, int sync)
 	(REQ_NOMERGE | REQ_STARTED | REQ_HARDBARRIER | REQ_SOFTBARRIER)
 #define rq_mergeable(rq)	\
 	(!((rq)->cmd_flags & RQ_NOMERGE_FLAGS) && \
-	 (blk_discard_rq(rq) || blk_fs_request((rq))))
+	 (blk_discard_rq(rq) || blk_fs_request(rq)))
+#define rq_accountable(rq)	\
+	(blk_discard_rq(rq) || blk_fs_request(rq))
 
 /*
  * q->prep_rq_fn return values


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH linux-2.6-block/for-linus] Fix discard requests accounting in the diskstats
  2009-04-24  5:48     ` [PATCH linux-2.6-block/for-linus] Fix discard requests accounting in the diskstats Nikanth Karthikesan
@ 2009-04-24  6:15       ` Jens Axboe
  2009-04-24  7:38         ` Nikanth Karthikesan
  0 siblings, 1 reply; 4+ messages in thread
From: Jens Axboe @ 2009-04-24  6:15 UTC (permalink / raw)
  To: Nikanth Karthikesan; +Cc: Andrew Morton, dwmw2, linux-kernel

On Fri, Apr 24 2009, Nikanth Karthikesan wrote:
> When 2 discard requests are merged, the stats gets updated, but we do not
> update statistics normally when a discard request is issued or completed. For
> example the in_flight counter would be decremented when 2 discard requests are
> merged, but it was not at all incremented when they were issued, and in_flight
> counter will not be decremented, when they are completed as well.
> 
> This patch fixes this by adding discard requests to the statistics.
> 
> Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>

OK, so that's not quite what I had in mind. If we first do this as a
preparatory patch:

http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=42fd769da4edadad83a779867ff1910ec35c6de7

then the discard fix becomes this one-liner:

http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=999ae79ae7f853bb9e60e95753ebf8d1628e632a

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH linux-2.6-block/for-linus] Fix discard requests accounting in the diskstats
  2009-04-24  6:15       ` Jens Axboe
@ 2009-04-24  7:38         ` Nikanth Karthikesan
  2009-04-24  7:43           ` Jens Axboe
  0 siblings, 1 reply; 4+ messages in thread
From: Nikanth Karthikesan @ 2009-04-24  7:38 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Andrew Morton, dwmw2, linux-kernel

On Friday 24 April 2009 11:45:18 Jens Axboe wrote:
> On Fri, Apr 24 2009, Nikanth Karthikesan wrote:
> > When 2 discard requests are merged, the stats gets updated, but we do not
> > update statistics normally when a discard request is issued or completed.
> > For example the in_flight counter would be decremented when 2 discard
> > requests are merged, but it was not at all incremented when they were
> > issued, and in_flight counter will not be decremented, when they are
> > completed as well.
> >
> > This patch fixes this by adding discard requests to the statistics.
> >
> > Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>
>
> OK, so that's not quite what I had in mind. If we first do this as a
> preparatory patch:
>
> http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=42fd769da4edadad83a7
>79867ff1910ec35c6de7
>

Oh! I thought this cleanup along with the 
block-turn-some-buggy-macros-into-c-functions.patch from Andrew could be done 
on top of my original fix. But didn't, as you said, you would do it. Anyway, 
Thanks.

> then the discard fix becomes this one-liner:
>
> http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=999ae79ae7f853bb9e60
>e95753ebf8d1628e632a

Thanks
Nikanth

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH linux-2.6-block/for-linus] Fix discard requests accounting in the diskstats
  2009-04-24  7:38         ` Nikanth Karthikesan
@ 2009-04-24  7:43           ` Jens Axboe
  0 siblings, 0 replies; 4+ messages in thread
From: Jens Axboe @ 2009-04-24  7:43 UTC (permalink / raw)
  To: Nikanth Karthikesan; +Cc: Andrew Morton, dwmw2, linux-kernel

On Fri, Apr 24 2009, Nikanth Karthikesan wrote:
> On Friday 24 April 2009 11:45:18 Jens Axboe wrote:
> > On Fri, Apr 24 2009, Nikanth Karthikesan wrote:
> > > When 2 discard requests are merged, the stats gets updated, but we do not
> > > update statistics normally when a discard request is issued or completed.
> > > For example the in_flight counter would be decremented when 2 discard
> > > requests are merged, but it was not at all incremented when they were
> > > issued, and in_flight counter will not be decremented, when they are
> > > completed as well.
> > >
> > > This patch fixes this by adding discard requests to the statistics.
> > >
> > > Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>
> >
> > OK, so that's not quite what I had in mind. If we first do this as a
> > preparatory patch:
> >
> > http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=42fd769da4edadad83a7
> >79867ff1910ec35c6de7
> >
> 
> Oh! I thought this cleanup along with the 
> block-turn-some-buggy-macros-into-c-functions.patch from Andrew could be done 
> on top of my original fix. But didn't, as you said, you would do it. Anyway, 
> Thanks.

Refactor and then fix is the cleanest I think. Anyway, queued up for
2.6.31!

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-04-24  7:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <200904232013.n3NKD4PP017241@imap1.linux-foundation.org>
     [not found] ` <20090423140448.c2d34fb8.akpm@linux-foundation.org>
     [not found]   ` <20090424051612.GT4593@kernel.dk>
2009-04-24  5:48     ` [PATCH linux-2.6-block/for-linus] Fix discard requests accounting in the diskstats Nikanth Karthikesan
2009-04-24  6:15       ` Jens Axboe
2009-04-24  7:38         ` Nikanth Karthikesan
2009-04-24  7:43           ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox