diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/ll_rw_blk.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 0af73512b9a8..1b272883aadf 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c | |||
@@ -2387,16 +2387,12 @@ static void drive_stat_acct(struct request *rq, int nr_sectors, int new_io) | |||
2387 | if (!blk_fs_request(rq) || !rq->rq_disk) | 2387 | if (!blk_fs_request(rq) || !rq->rq_disk) |
2388 | return; | 2388 | return; |
2389 | 2389 | ||
2390 | if (rw == READ) { | 2390 | if (!new_io) { |
2391 | __disk_stat_add(rq->rq_disk, read_sectors, nr_sectors); | 2391 | if (rw == READ) |
2392 | if (!new_io) | ||
2393 | __disk_stat_inc(rq->rq_disk, read_merges); | 2392 | __disk_stat_inc(rq->rq_disk, read_merges); |
2394 | } else if (rw == WRITE) { | 2393 | else |
2395 | __disk_stat_add(rq->rq_disk, write_sectors, nr_sectors); | ||
2396 | if (!new_io) | ||
2397 | __disk_stat_inc(rq->rq_disk, write_merges); | 2394 | __disk_stat_inc(rq->rq_disk, write_merges); |
2398 | } | 2395 | } else { |
2399 | if (new_io) { | ||
2400 | disk_round_stats(rq->rq_disk); | 2396 | disk_round_stats(rq->rq_disk); |
2401 | rq->rq_disk->in_flight++; | 2397 | rq->rq_disk->in_flight++; |
2402 | } | 2398 | } |
@@ -3048,6 +3044,13 @@ static int __end_that_request_first(struct request *req, int uptodate, | |||
3048 | (unsigned long long)req->sector); | 3044 | (unsigned long long)req->sector); |
3049 | } | 3045 | } |
3050 | 3046 | ||
3047 | if (blk_fs_request(req) && req->rq_disk) { | ||
3048 | if (rq_data_dir(req) == READ) | ||
3049 | __disk_stat_add(req->rq_disk, read_sectors, nr_bytes >> 9); | ||
3050 | else | ||
3051 | __disk_stat_add(req->rq_disk, write_sectors, nr_bytes >> 9); | ||
3052 | } | ||
3053 | |||
3051 | total_bytes = bio_nbytes = 0; | 3054 | total_bytes = bio_nbytes = 0; |
3052 | while ((bio = req->bio) != NULL) { | 3055 | while ((bio = req->bio) != NULL) { |
3053 | int nbytes; | 3056 | int nbytes; |