Skip to content

Commit

Permalink
md: use generic io stats accounting functions to simplify io stat acc…
Browse files Browse the repository at this point in the history
…ounting

Use generic io stats accounting help functions (generic_{start,end}_io_acct)
to simplify io stat accounting.

Signed-off-by: Gu Zheng <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Gu Zheng authored and axboe committed Nov 24, 2014
1 parent 2448085 commit 18c0b22
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 15 deletions.
13 changes: 3 additions & 10 deletions drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,13 +602,10 @@ static void end_io_acct(struct dm_io *io)
struct mapped_device *md = io->md;
struct bio *bio = io->bio;
unsigned long duration = jiffies - io->start_time;
int pending, cpu;
int pending;
int rw = bio_data_dir(bio);

cpu = part_stat_lock();
part_round_stats(cpu, &dm_disk(md)->part0);
part_stat_add(cpu, &dm_disk(md)->part0, ticks[rw], duration);
part_stat_unlock();
generic_end_io_acct(rw, &dm_disk(md)->part0, io->start_time);

if (unlikely(dm_stats_used(&md->stats)))
dm_stats_account_io(&md->stats, bio->bi_rw, bio->bi_iter.bi_sector,
Expand Down Expand Up @@ -1648,16 +1645,12 @@ static void _dm_request(struct request_queue *q, struct bio *bio)
{
int rw = bio_data_dir(bio);
struct mapped_device *md = q->queuedata;
int cpu;
int srcu_idx;
struct dm_table *map;

map = dm_get_live_table(md, &srcu_idx);

cpu = part_stat_lock();
part_stat_inc(cpu, &dm_disk(md)->part0, ios[rw]);
part_stat_add(cpu, &dm_disk(md)->part0, sectors[rw], bio_sectors(bio));
part_stat_unlock();
generic_start_io_acct(rw, bio_sectors(bio), &dm_disk(md)->part0);

/* if we're suspended, we have to queue this io for later */
if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags))) {
Expand Down
6 changes: 1 addition & 5 deletions drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,6 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
{
const int rw = bio_data_dir(bio);
struct mddev *mddev = q->queuedata;
int cpu;
unsigned int sectors;

if (mddev == NULL || mddev->pers == NULL
Expand Down Expand Up @@ -284,10 +283,7 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
sectors = bio_sectors(bio);
mddev->pers->make_request(mddev, bio);

cpu = part_stat_lock();
part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);
part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw], sectors);
part_stat_unlock();
generic_start_io_acct(rw, sectors, &mddev->gendisk->part0);

if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended)
wake_up(&mddev->sb_wait);
Expand Down

0 comments on commit 18c0b22

Please sign in to comment.