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 /drivers/md | |
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>
Diffstat (limited to 'drivers/md')
-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 |
8 files changed, 26 insertions, 54 deletions
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); |