forked from luck/tmp_suning_uos_patched
[PATCH] blk: fix gendisk->in_flight accounting during barrier sequence
While executing barrrier sequence, the bar_rq which carries actual write was accounted as normal IO on completion, while it wasn't on queueing. This caused gendisk->in_flight to be decremented by 1 after each barrier thus messed up statistics. This patch makes bar_rq not accounted as normal IO. As the containing barrier request as a whole is accounted, part of it shouldn't be. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jens Axboe <axboe@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
0f04108237
commit
fd0ff8aa1d
|
@ -3452,7 +3452,12 @@ void end_that_request_last(struct request *req, int uptodate)
|
||||||
if (unlikely(laptop_mode) && blk_fs_request(req))
|
if (unlikely(laptop_mode) && blk_fs_request(req))
|
||||||
laptop_io_completion();
|
laptop_io_completion();
|
||||||
|
|
||||||
if (disk && blk_fs_request(req)) {
|
/*
|
||||||
|
* Account IO completion. bar_rq isn't accounted as a normal
|
||||||
|
* IO on queueing nor completion. Accounting the containing
|
||||||
|
* request is enough.
|
||||||
|
*/
|
||||||
|
if (disk && blk_fs_request(req) && req != &req->q->bar_rq) {
|
||||||
unsigned long duration = jiffies - req->start_time;
|
unsigned long duration = jiffies - req->start_time;
|
||||||
const int rw = rq_data_dir(req);
|
const int rw = rq_data_dir(req);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user