diff options
author | Jens Axboe <axboe@suse.de> | 2005-11-01 03:26:16 -0500 |
---|---|---|
committer | Jens Axboe <axboe@suse.de> | 2005-11-01 03:26:16 -0500 |
commit | a362357b6cd62643d4dda3b152639303d78473da (patch) | |
tree | fe4ce823e638ded151edcb142f28a240860f0d33 | |
parent | d72d904a5367ad4ca3f2c9a2ce8c3a68f0b28bf0 (diff) |
[BLOCK] Unify the seperate read/write io stat fields into arrays
Instead of having ->read_sectors and ->write_sectors, combine the two
into ->sectors[2] and similar for the other fields. This saves a branch
several places in the io path, since we don't have to care for what the
actual io direction is. On my x86-64 box, that's 200 bytes less text in
just the core (not counting the various drivers).
Signed-off-by: Jens Axboe <axboe@suse.de>
-rw-r--r-- | drivers/block/genhd.c | 29 | ||||
-rw-r--r-- | drivers/block/ll_rw_blk.c | 40 | ||||
-rw-r--r-- | drivers/md/linear.c | 10 | ||||
-rw-r--r-- | drivers/md/md.c | 4 | ||||
-rw-r--r-- | drivers/md/multipath.c | 10 | ||||
-rw-r--r-- | drivers/md/raid0.c | 10 | ||||
-rw-r--r-- | drivers/md/raid1.c | 12 | ||||
-rw-r--r-- | drivers/md/raid10.c | 12 | ||||
-rw-r--r-- | drivers/md/raid5.c | 10 | ||||
-rw-r--r-- | drivers/md/raid6main.c | 12 | ||||
-rw-r--r-- | fs/partitions/check.c | 7 | ||||
-rw-r--r-- | include/linux/genhd.h | 10 |
12 files changed, 61 insertions, 105 deletions
diff --git a/drivers/block/genhd.c b/drivers/block/genhd.c index 486ce1fdeb8c..54aec4a1ae13 100644 --- a/drivers/block/genhd.c +++ b/drivers/block/genhd.c | |||
@@ -391,13 +391,12 @@ static ssize_t disk_stats_read(struct gendisk * disk, char *page) | |||
391 | "%8u %8u %8llu %8u " | 391 | "%8u %8u %8llu %8u " |
392 | "%8u %8u %8u" | 392 | "%8u %8u %8u" |
393 | "\n", | 393 | "\n", |
394 | disk_stat_read(disk, reads), disk_stat_read(disk, read_merges), | 394 | disk_stat_read(disk, ios[0]), disk_stat_read(disk, merges[0]), |
395 | (unsigned long long)disk_stat_read(disk, read_sectors), | 395 | (unsigned long long)disk_stat_read(disk, sectors[0]), |
396 | jiffies_to_msecs(disk_stat_read(disk, read_ticks)), | 396 | jiffies_to_msecs(disk_stat_read(disk, ticks[0])), |
397 | disk_stat_read(disk, writes), | 397 | disk_stat_read(disk, ios[1]), disk_stat_read(disk, merges[1]), |
398 | disk_stat_read(disk, write_merges), | 398 | (unsigned long long)disk_stat_read(disk, sectors[1]), |
399 | (unsigned long long)disk_stat_read(disk, write_sectors), | 399 | jiffies_to_msecs(disk_stat_read(disk, ticks[1])), |
400 | jiffies_to_msecs(disk_stat_read(disk, write_ticks)), | ||
401 | disk->in_flight, | 400 | disk->in_flight, |
402 | jiffies_to_msecs(disk_stat_read(disk, io_ticks)), | 401 | jiffies_to_msecs(disk_stat_read(disk, io_ticks)), |
403 | jiffies_to_msecs(disk_stat_read(disk, time_in_queue))); | 402 | jiffies_to_msecs(disk_stat_read(disk, time_in_queue))); |
@@ -583,12 +582,12 @@ static int diskstats_show(struct seq_file *s, void *v) | |||
583 | preempt_enable(); | 582 | preempt_enable(); |
584 | seq_printf(s, "%4d %4d %s %u %u %llu %u %u %u %llu %u %u %u %u\n", | 583 | seq_printf(s, "%4d %4d %s %u %u %llu %u %u %u %llu %u %u %u %u\n", |
585 | gp->major, n + gp->first_minor, disk_name(gp, n, buf), | 584 | gp->major, n + gp->first_minor, disk_name(gp, n, buf), |
586 | disk_stat_read(gp, reads), disk_stat_read(gp, read_merges), | 585 | disk_stat_read(gp, ios[0]), disk_stat_read(gp, merges[0]), |
587 | (unsigned long long)disk_stat_read(gp, read_sectors), | 586 | (unsigned long long)disk_stat_read(gp, sectors[0]), |
588 | jiffies_to_msecs(disk_stat_read(gp, read_ticks)), | 587 | jiffies_to_msecs(disk_stat_read(gp, ticks[0])), |
589 | disk_stat_read(gp, writes), disk_stat_read(gp, write_merges), | 588 | disk_stat_read(gp, ios[1]), disk_stat_read(gp, merges[1]), |
590 | (unsigned long long)disk_stat_read(gp, write_sectors), | 589 | (unsigned long long)disk_stat_read(gp, sectors[1]), |
591 | jiffies_to_msecs(disk_stat_read(gp, write_ticks)), | 590 | jiffies_to_msecs(disk_stat_read(gp, ticks[1])), |
592 | gp->in_flight, | 591 | gp->in_flight, |
593 | jiffies_to_msecs(disk_stat_read(gp, io_ticks)), | 592 | jiffies_to_msecs(disk_stat_read(gp, io_ticks)), |
594 | jiffies_to_msecs(disk_stat_read(gp, time_in_queue))); | 593 | jiffies_to_msecs(disk_stat_read(gp, time_in_queue))); |
@@ -601,8 +600,8 @@ static int diskstats_show(struct seq_file *s, void *v) | |||
601 | seq_printf(s, "%4d %4d %s %u %u %u %u\n", | 600 | seq_printf(s, "%4d %4d %s %u %u %u %u\n", |
602 | gp->major, n + gp->first_minor + 1, | 601 | gp->major, n + gp->first_minor + 1, |
603 | disk_name(gp, n + 1, buf), | 602 | disk_name(gp, n + 1, buf), |
604 | hd->reads, hd->read_sectors, | 603 | hd->ios[0], hd->sectors[0], |
605 | hd->writes, hd->write_sectors); | 604 | hd->ios[1], hd->sectors[1]); |
606 | } | 605 | } |
607 | 606 | ||
608 | return 0; | 607 | return 0; |
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 1b272883aadf..2747741677fb 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c | |||
@@ -2388,10 +2388,7 @@ static void drive_stat_acct(struct request *rq, int nr_sectors, int new_io) | |||
2388 | return; | 2388 | return; |
2389 | 2389 | ||
2390 | if (!new_io) { | 2390 | if (!new_io) { |
2391 | if (rw == READ) | 2391 | __disk_stat_inc(rq->rq_disk, merges[rw]); |
2392 | __disk_stat_inc(rq->rq_disk, read_merges); | ||
2393 | else | ||
2394 | __disk_stat_inc(rq->rq_disk, write_merges); | ||
2395 | } else { | 2392 | } else { |
2396 | disk_round_stats(rq->rq_disk); | 2393 | disk_round_stats(rq->rq_disk); |
2397 | rq->rq_disk->in_flight++; | 2394 | rq->rq_disk->in_flight++; |
@@ -2787,17 +2784,11 @@ static inline void blk_partition_remap(struct bio *bio) | |||
2787 | 2784 | ||
2788 | if (bdev != bdev->bd_contains) { | 2785 | if (bdev != bdev->bd_contains) { |
2789 | struct hd_struct *p = bdev->bd_part; | 2786 | struct hd_struct *p = bdev->bd_part; |
2787 | const int rw = bio_data_dir(bio); | ||
2788 | |||
2789 | p->sectors[rw] += bio_sectors(bio); | ||
2790 | p->ios[rw]++; | ||
2790 | 2791 | ||
2791 | switch (bio_data_dir(bio)) { | ||
2792 | case READ: | ||
2793 | p->read_sectors += bio_sectors(bio); | ||
2794 | p->reads++; | ||
2795 | break; | ||
2796 | case WRITE: | ||
2797 | p->write_sectors += bio_sectors(bio); | ||
2798 | p->writes++; | ||
2799 | break; | ||
2800 | } | ||
2801 | bio->bi_sector += p->start_sect; | 2792 | bio->bi_sector += p->start_sect; |
2802 | bio->bi_bdev = bdev->bd_contains; | 2793 | bio->bi_bdev = bdev->bd_contains; |
2803 | } | 2794 | } |
@@ -3045,10 +3036,9 @@ static int __end_that_request_first(struct request *req, int uptodate, | |||
3045 | } | 3036 | } |
3046 | 3037 | ||
3047 | if (blk_fs_request(req) && req->rq_disk) { | 3038 | if (blk_fs_request(req) && req->rq_disk) { |
3048 | if (rq_data_dir(req) == READ) | 3039 | const int rw = rq_data_dir(req); |
3049 | __disk_stat_add(req->rq_disk, read_sectors, nr_bytes >> 9); | 3040 | |
3050 | else | 3041 | __disk_stat_add(req->rq_disk, sectors[rw], nr_bytes >> 9); |
3051 | __disk_stat_add(req->rq_disk, write_sectors, nr_bytes >> 9); | ||
3052 | } | 3042 | } |
3053 | 3043 | ||
3054 | total_bytes = bio_nbytes = 0; | 3044 | total_bytes = bio_nbytes = 0; |
@@ -3179,16 +3169,10 @@ void end_that_request_last(struct request *req) | |||
3179 | 3169 | ||
3180 | if (disk && blk_fs_request(req)) { | 3170 | if (disk && blk_fs_request(req)) { |
3181 | unsigned long duration = jiffies - req->start_time; | 3171 | unsigned long duration = jiffies - req->start_time; |
3182 | switch (rq_data_dir(req)) { | 3172 | const int rw = rq_data_dir(req); |
3183 | case WRITE: | 3173 | |
3184 | __disk_stat_inc(disk, writes); | 3174 | __disk_stat_inc(disk, ios[rw]); |
3185 | __disk_stat_add(disk, write_ticks, duration); | 3175 | __disk_stat_add(disk, ticks[rw], duration); |
3186 | break; | ||
3187 | case READ: | ||
3188 | __disk_stat_inc(disk, reads); | ||
3189 | __disk_stat_add(disk, read_ticks, duration); | ||
3190 | break; | ||
3191 | } | ||
3192 | disk_round_stats(disk); | 3176 | disk_round_stats(disk); |
3193 | disk->in_flight--; | 3177 | disk->in_flight--; |
3194 | } | 3178 | } |
diff --git a/drivers/md/linear.c b/drivers/md/linear.c index bb279fad2fd2..946efef3a8f5 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c | |||
@@ -271,6 +271,7 @@ static int linear_stop (mddev_t *mddev) | |||
271 | 271 | ||
272 | static int linear_make_request (request_queue_t *q, struct bio *bio) | 272 | static int linear_make_request (request_queue_t *q, struct bio *bio) |
273 | { | 273 | { |
274 | const int rw = bio_data_dir(bio); | ||
274 | mddev_t *mddev = q->queuedata; | 275 | mddev_t *mddev = q->queuedata; |
275 | dev_info_t *tmp_dev; | 276 | dev_info_t *tmp_dev; |
276 | sector_t block; | 277 | sector_t block; |
@@ -280,13 +281,8 @@ static int linear_make_request (request_queue_t *q, struct bio *bio) | |||
280 | return 0; | 281 | return 0; |
281 | } | 282 | } |
282 | 283 | ||
283 | if (bio_data_dir(bio)==WRITE) { | 284 | disk_stat_inc(mddev->gendisk, ios[rw]); |
284 | disk_stat_inc(mddev->gendisk, writes); | 285 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bio)); |
285 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | ||
286 | } else { | ||
287 | disk_stat_inc(mddev->gendisk, reads); | ||
288 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); | ||
289 | } | ||
290 | 286 | ||
291 | tmp_dev = which_dev(mddev, bio->bi_sector); | 287 | tmp_dev = which_dev(mddev, bio->bi_sector); |
292 | block = bio->bi_sector >> 1; | 288 | block = bio->bi_sector >> 1; |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 2a8a5696bf8a..9ecf51ee596f 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3466,8 +3466,8 @@ static int is_mddev_idle(mddev_t *mddev) | |||
3466 | idle = 1; | 3466 | idle = 1; |
3467 | ITERATE_RDEV(mddev,rdev,tmp) { | 3467 | ITERATE_RDEV(mddev,rdev,tmp) { |
3468 | struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; | 3468 | struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; |
3469 | curr_events = disk_stat_read(disk, read_sectors) + | 3469 | curr_events = disk_stat_read(disk, sectors[0]) + |
3470 | disk_stat_read(disk, write_sectors) - | 3470 | disk_stat_read(disk, sectors[1]) - |
3471 | atomic_read(&disk->sync_io); | 3471 | atomic_read(&disk->sync_io); |
3472 | /* Allow some slack between valud of curr_events and last_events, | 3472 | /* Allow some slack between valud of curr_events and last_events, |
3473 | * as there are some uninteresting races. | 3473 | * as there are some uninteresting races. |
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c index 1151c3ed3006..c06f4474192b 100644 --- a/drivers/md/multipath.c +++ b/drivers/md/multipath.c | |||
@@ -168,6 +168,7 @@ static int multipath_make_request (request_queue_t *q, struct bio * bio) | |||
168 | multipath_conf_t *conf = mddev_to_conf(mddev); | 168 | multipath_conf_t *conf = mddev_to_conf(mddev); |
169 | struct multipath_bh * mp_bh; | 169 | struct multipath_bh * mp_bh; |
170 | struct multipath_info *multipath; | 170 | struct multipath_info *multipath; |
171 | const int rw = bio_data_dir(bio); | ||
171 | 172 | ||
172 | if (unlikely(bio_barrier(bio))) { | 173 | if (unlikely(bio_barrier(bio))) { |
173 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | 174 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); |
@@ -179,13 +180,8 @@ static int multipath_make_request (request_queue_t *q, struct bio * bio) | |||
179 | mp_bh->master_bio = bio; | 180 | mp_bh->master_bio = bio; |
180 | mp_bh->mddev = mddev; | 181 | mp_bh->mddev = mddev; |
181 | 182 | ||
182 | if (bio_data_dir(bio)==WRITE) { | 183 | disk_stat_inc(mddev->gendisk, ios[rw]); |
183 | disk_stat_inc(mddev->gendisk, writes); | 184 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bio)); |
184 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | ||
185 | } else { | ||
186 | disk_stat_inc(mddev->gendisk, reads); | ||
187 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); | ||
188 | } | ||
189 | 185 | ||
190 | mp_bh->path = multipath_map(conf); | 186 | mp_bh->path = multipath_map(conf); |
191 | if (mp_bh->path < 0) { | 187 | if (mp_bh->path < 0) { |
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index f6757259ce7f..fece3277c2a5 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c | |||
@@ -403,19 +403,15 @@ static int raid0_make_request (request_queue_t *q, struct bio *bio) | |||
403 | mdk_rdev_t *tmp_dev; | 403 | mdk_rdev_t *tmp_dev; |
404 | unsigned long chunk; | 404 | unsigned long chunk; |
405 | sector_t block, rsect; | 405 | sector_t block, rsect; |
406 | const int rw = bio_data_dir(bio); | ||
406 | 407 | ||
407 | if (unlikely(bio_barrier(bio))) { | 408 | if (unlikely(bio_barrier(bio))) { |
408 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | 409 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); |
409 | return 0; | 410 | return 0; |
410 | } | 411 | } |
411 | 412 | ||
412 | if (bio_data_dir(bio)==WRITE) { | 413 | disk_stat_inc(mddev->gendisk, ios[rw]); |
413 | disk_stat_inc(mddev->gendisk, writes); | 414 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bio)); |
414 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | ||
415 | } else { | ||
416 | disk_stat_inc(mddev->gendisk, reads); | ||
417 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); | ||
418 | } | ||
419 | 415 | ||
420 | chunk_size = mddev->chunk_size >> 10; | 416 | chunk_size = mddev->chunk_size >> 10; |
421 | chunk_sects = mddev->chunk_size >> 9; | 417 | chunk_sects = mddev->chunk_size >> 9; |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 0e1f148dd41d..e16f473bcf46 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -647,6 +647,7 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
647 | unsigned long flags; | 647 | unsigned long flags; |
648 | struct bio_list bl; | 648 | struct bio_list bl; |
649 | struct page **behind_pages = NULL; | 649 | struct page **behind_pages = NULL; |
650 | const int rw = bio_data_dir(bio); | ||
650 | 651 | ||
651 | if (unlikely(bio_barrier(bio))) { | 652 | if (unlikely(bio_barrier(bio))) { |
652 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | 653 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); |
@@ -665,13 +666,8 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
665 | conf->nr_pending++; | 666 | conf->nr_pending++; |
666 | spin_unlock_irq(&conf->resync_lock); | 667 | spin_unlock_irq(&conf->resync_lock); |
667 | 668 | ||
668 | if (bio_data_dir(bio)==WRITE) { | 669 | disk_stat_inc(mddev->gendisk, ios[rw]); |
669 | disk_stat_inc(mddev->gendisk, writes); | 670 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bio)); |
670 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | ||
671 | } else { | ||
672 | disk_stat_inc(mddev->gendisk, reads); | ||
673 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); | ||
674 | } | ||
675 | 671 | ||
676 | /* | 672 | /* |
677 | * make_request() can abort the operation when READA is being | 673 | * make_request() can abort the operation when READA is being |
@@ -686,7 +682,7 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
686 | r1_bio->mddev = mddev; | 682 | r1_bio->mddev = mddev; |
687 | r1_bio->sector = bio->bi_sector; | 683 | r1_bio->sector = bio->bi_sector; |
688 | 684 | ||
689 | if (bio_data_dir(bio) == READ) { | 685 | if (rw == READ) { |
690 | /* | 686 | /* |
691 | * read balancing logic: | 687 | * read balancing logic: |
692 | */ | 688 | */ |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 28dd028415e4..bbe40e9cf923 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -668,6 +668,7 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
668 | struct bio *read_bio; | 668 | struct bio *read_bio; |
669 | int i; | 669 | int i; |
670 | int chunk_sects = conf->chunk_mask + 1; | 670 | int chunk_sects = conf->chunk_mask + 1; |
671 | const int rw = bio_data_dir(bio); | ||
671 | 672 | ||
672 | if (unlikely(bio_barrier(bio))) { | 673 | if (unlikely(bio_barrier(bio))) { |
673 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | 674 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); |
@@ -718,13 +719,8 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
718 | conf->nr_pending++; | 719 | conf->nr_pending++; |
719 | spin_unlock_irq(&conf->resync_lock); | 720 | spin_unlock_irq(&conf->resync_lock); |
720 | 721 | ||
721 | if (bio_data_dir(bio)==WRITE) { | 722 | disk_stat_inc(mddev->gendisk, ios[rw]); |
722 | disk_stat_inc(mddev->gendisk, writes); | 723 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bio)); |
723 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | ||
724 | } else { | ||
725 | disk_stat_inc(mddev->gendisk, reads); | ||
726 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); | ||
727 | } | ||
728 | 724 | ||
729 | r10_bio = mempool_alloc(conf->r10bio_pool, GFP_NOIO); | 725 | r10_bio = mempool_alloc(conf->r10bio_pool, GFP_NOIO); |
730 | 726 | ||
@@ -734,7 +730,7 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
734 | r10_bio->mddev = mddev; | 730 | r10_bio->mddev = mddev; |
735 | r10_bio->sector = bio->bi_sector; | 731 | r10_bio->sector = bio->bi_sector; |
736 | 732 | ||
737 | if (bio_data_dir(bio) == READ) { | 733 | if (rw == READ) { |
738 | /* | 734 | /* |
739 | * read balancing logic: | 735 | * read balancing logic: |
740 | */ | 736 | */ |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 4683ca24c046..6497295ebfb9 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -1462,6 +1462,7 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1462 | sector_t new_sector; | 1462 | sector_t new_sector; |
1463 | sector_t logical_sector, last_sector; | 1463 | sector_t logical_sector, last_sector; |
1464 | struct stripe_head *sh; | 1464 | struct stripe_head *sh; |
1465 | const int rw = bio_data_dir(bi); | ||
1465 | 1466 | ||
1466 | if (unlikely(bio_barrier(bi))) { | 1467 | if (unlikely(bio_barrier(bi))) { |
1467 | bio_endio(bi, bi->bi_size, -EOPNOTSUPP); | 1468 | bio_endio(bi, bi->bi_size, -EOPNOTSUPP); |
@@ -1470,13 +1471,8 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1470 | 1471 | ||
1471 | md_write_start(mddev, bi); | 1472 | md_write_start(mddev, bi); |
1472 | 1473 | ||
1473 | if (bio_data_dir(bi)==WRITE) { | 1474 | disk_stat_inc(mddev->gendisk, ios[rw]); |
1474 | disk_stat_inc(mddev->gendisk, writes); | 1475 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bi)); |
1475 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); | ||
1476 | } else { | ||
1477 | disk_stat_inc(mddev->gendisk, reads); | ||
1478 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bi)); | ||
1479 | } | ||
1480 | 1476 | ||
1481 | logical_sector = bi->bi_sector & ~((sector_t)STRIPE_SECTORS-1); | 1477 | logical_sector = bi->bi_sector & ~((sector_t)STRIPE_SECTORS-1); |
1482 | last_sector = bi->bi_sector + (bi->bi_size>>9); | 1478 | last_sector = bi->bi_sector + (bi->bi_size>>9); |
diff --git a/drivers/md/raid6main.c b/drivers/md/raid6main.c index 267eb1430c83..6437a95ffc1c 100644 --- a/drivers/md/raid6main.c +++ b/drivers/md/raid6main.c | |||
@@ -1621,6 +1621,7 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1621 | sector_t new_sector; | 1621 | sector_t new_sector; |
1622 | sector_t logical_sector, last_sector; | 1622 | sector_t logical_sector, last_sector; |
1623 | struct stripe_head *sh; | 1623 | struct stripe_head *sh; |
1624 | const int rw = bio_data_dir(bi); | ||
1624 | 1625 | ||
1625 | if (unlikely(bio_barrier(bi))) { | 1626 | if (unlikely(bio_barrier(bi))) { |
1626 | bio_endio(bi, bi->bi_size, -EOPNOTSUPP); | 1627 | bio_endio(bi, bi->bi_size, -EOPNOTSUPP); |
@@ -1629,13 +1630,8 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1629 | 1630 | ||
1630 | md_write_start(mddev, bi); | 1631 | md_write_start(mddev, bi); |
1631 | 1632 | ||
1632 | if (bio_data_dir(bi)==WRITE) { | 1633 | disk_stat_inc(mddev->gendisk, ios[rw]); |
1633 | disk_stat_inc(mddev->gendisk, writes); | 1634 | disk_stat_add(mddev->gendisk, sectors[rw], bio_sectors(bi)); |
1634 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); | ||
1635 | } else { | ||
1636 | disk_stat_inc(mddev->gendisk, reads); | ||
1637 | disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bi)); | ||
1638 | } | ||
1639 | 1635 | ||
1640 | logical_sector = bi->bi_sector & ~((sector_t)STRIPE_SECTORS-1); | 1636 | logical_sector = bi->bi_sector & ~((sector_t)STRIPE_SECTORS-1); |
1641 | last_sector = bi->bi_sector + (bi->bi_size>>9); | 1637 | last_sector = bi->bi_sector + (bi->bi_size>>9); |
@@ -1682,7 +1678,7 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1682 | if (--bi->bi_phys_segments == 0) { | 1678 | if (--bi->bi_phys_segments == 0) { |
1683 | int bytes = bi->bi_size; | 1679 | int bytes = bi->bi_size; |
1684 | 1680 | ||
1685 | if ( bio_data_dir(bi) == WRITE ) | 1681 | if (rw == WRITE ) |
1686 | md_write_end(mddev); | 1682 | md_write_end(mddev); |
1687 | bi->bi_size = 0; | 1683 | bi->bi_size = 0; |
1688 | bi->bi_end_io(bi, bytes, 0); | 1684 | bi->bi_end_io(bi, bytes, 0); |
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 9c06c5434ec4..8dc1822a7022 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
@@ -246,8 +246,8 @@ static ssize_t part_size_read(struct hd_struct * p, char *page) | |||
246 | static ssize_t part_stat_read(struct hd_struct * p, char *page) | 246 | static ssize_t part_stat_read(struct hd_struct * p, char *page) |
247 | { | 247 | { |
248 | return sprintf(page, "%8u %8llu %8u %8llu\n", | 248 | return sprintf(page, "%8u %8llu %8u %8llu\n", |
249 | p->reads, (unsigned long long)p->read_sectors, | 249 | p->ios[0], (unsigned long long)p->sectors[0], |
250 | p->writes, (unsigned long long)p->write_sectors); | 250 | p->ios[1], (unsigned long long)p->sectors[1]); |
251 | } | 251 | } |
252 | static struct part_attribute part_attr_uevent = { | 252 | static struct part_attribute part_attr_uevent = { |
253 | .attr = {.name = "uevent", .mode = S_IWUSR }, | 253 | .attr = {.name = "uevent", .mode = S_IWUSR }, |
@@ -303,7 +303,8 @@ void delete_partition(struct gendisk *disk, int part) | |||
303 | disk->part[part-1] = NULL; | 303 | disk->part[part-1] = NULL; |
304 | p->start_sect = 0; | 304 | p->start_sect = 0; |
305 | p->nr_sects = 0; | 305 | p->nr_sects = 0; |
306 | p->reads = p->writes = p->read_sectors = p->write_sectors = 0; | 306 | p->ios[0] = p->ios[1] = 0; |
307 | p->sectors[0] = p->sectors[1] = 0; | ||
307 | devfs_remove("%s/part%d", disk->devfs_name, part); | 308 | devfs_remove("%s/part%d", disk->devfs_name, part); |
308 | kobject_unregister(&p->kobj); | 309 | kobject_unregister(&p->kobj); |
309 | } | 310 | } |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index eabdb5cce357..8eeaa53a68c9 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -78,7 +78,7 @@ struct hd_struct { | |||
78 | sector_t start_sect; | 78 | sector_t start_sect; |
79 | sector_t nr_sects; | 79 | sector_t nr_sects; |
80 | struct kobject kobj; | 80 | struct kobject kobj; |
81 | unsigned reads, read_sectors, writes, write_sectors; | 81 | unsigned ios[2], sectors[2]; |
82 | int policy, partno; | 82 | int policy, partno; |
83 | }; | 83 | }; |
84 | 84 | ||
@@ -89,10 +89,10 @@ struct hd_struct { | |||
89 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 | 89 | #define GENHD_FL_SUPPRESS_PARTITION_INFO 32 |
90 | 90 | ||
91 | struct disk_stats { | 91 | struct disk_stats { |
92 | unsigned read_sectors, write_sectors; | 92 | unsigned sectors[2]; |
93 | unsigned reads, writes; | 93 | unsigned ios[2]; |
94 | unsigned read_merges, write_merges; | 94 | unsigned merges[2]; |
95 | unsigned read_ticks, write_ticks; | 95 | unsigned ticks[2]; |
96 | unsigned io_ticks; | 96 | unsigned io_ticks; |
97 | unsigned time_in_queue; | 97 | unsigned time_in_queue; |
98 | }; | 98 | }; |