From fe6498c9361bf09ca14f9da281283a8216c09710 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Tue, 3 Feb 2004 18:44:29 -0800 Subject: [PATCH] [PATCH] md: Collect device IO statistics for MD personalities. From: NeilBrown Update {read,write}{s,_sectors} on each request to an MD array. --- drivers/md/linear.c | 8 ++++++++ drivers/md/multipath.c | 7 +++++++ drivers/md/raid0.c | 8 ++++++++ drivers/md/raid1.c | 8 ++++++++ drivers/md/raid5.c | 8 ++++++++ drivers/md/raid6main.c | 8 ++++++++ 6 files changed, 47 insertions(+) diff --git a/drivers/md/linear.c b/drivers/md/linear.c index b42d6d8506661..587d1a8287ed9 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c @@ -208,6 +208,14 @@ static int linear_make_request (request_queue_t *q, struct bio *bio) dev_info_t *tmp_dev; sector_t block; + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } + tmp_dev = which_dev(mddev, bio->bi_sector); block = bio->bi_sector >> 1; diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c index 85304b0efbc1c..e78c2b580cf3d 100644 --- a/drivers/md/multipath.c +++ b/drivers/md/multipath.c @@ -167,6 +167,13 @@ static int multipath_make_request (request_queue_t *q, struct bio * bio) mp_bh->master_bio = bio; mp_bh->mddev = mddev; + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } /* * read balancing logic: */ diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 1c4600f4b7fe2..5f472b5466d64 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c @@ -365,6 +365,14 @@ static int raid0_make_request (request_queue_t *q, struct bio *bio) unsigned long chunk; sector_t block, rsect; + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } + chunk_size = mddev->chunk_size >> 10; chunk_sects = mddev->chunk_size >> 9; chunksize_bits = ffz(~chunk_size); diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 280a0ef776694..f0540dc72f369 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -474,6 +474,14 @@ static int make_request(request_queue_t *q, struct bio * bio) conf->nr_pending++; spin_unlock_irq(&conf->resync_lock); + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } + /* * make_request() can abort the operation when READA is being * used and no empty request is available. diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 3adb76cdd6299..20a71af43e336 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -1326,6 +1326,14 @@ static int make_request (request_queue_t *q, struct bio * bi) sector_t logical_sector, last_sector; struct stripe_head *sh; + if (bio_data_dir(bi)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bi)); + } + logical_sector = bi->bi_sector & ~(STRIPE_SECTORS-1); last_sector = bi->bi_sector + (bi->bi_size>>9); diff --git a/drivers/md/raid6main.c b/drivers/md/raid6main.c index 5b9e4a1f5e437..c138686c73daa 100644 --- a/drivers/md/raid6main.c +++ b/drivers/md/raid6main.c @@ -1488,6 +1488,14 @@ static int make_request (request_queue_t *q, struct bio * bi) sector_t logical_sector, last_sector; struct stripe_head *sh; + if (bio_data_dir(bi)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bi)); + } + logical_sector = bi->bi_sector & ~(STRIPE_SECTORS-1); last_sector = bi->bi_sector + (bi->bi_size>>9); -- 2.53.0