md/bcache: use generic io stats accounting functions to simplify io stat accounting
authorGu Zheng <guz.fnst@cn.fujitsu.com>
Mon, 24 Nov 2014 03:05:24 +0000 (11:05 +0800)
committerJens Axboe <axboe@fb.com>
Mon, 24 Nov 2014 15:05:12 +0000 (08:05 -0700)
Use generic io stats accounting help functions (generic_{start,end}_io_acct)
to simplify io stat accounting.

Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
Acked-by: Kent Overstreet <kmo@datera.io>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/md/bcache/request.c

index 62e6e98..ab43fad 100644 (file)
@@ -601,13 +601,8 @@ static void request_endio(struct bio *bio, int error)
 static void bio_complete(struct search *s)
 {
        if (s->orig_bio) {
-               int cpu, rw = bio_data_dir(s->orig_bio);
-               unsigned long duration = jiffies - s->start_time;
-
-               cpu = part_stat_lock();
-               part_round_stats(cpu, &s->d->disk->part0);
-               part_stat_add(cpu, &s->d->disk->part0, ticks[rw], duration);
-               part_stat_unlock();
+               generic_end_io_acct(bio_data_dir(s->orig_bio),
+                                   &s->d->disk->part0, s->start_time);
 
                trace_bcache_request_end(s->d, s->orig_bio);
                bio_endio(s->orig_bio, s->iop.error);
@@ -959,12 +954,9 @@ static void cached_dev_make_request(struct request_queue *q, struct bio *bio)
        struct search *s;
        struct bcache_device *d = bio->bi_bdev->bd_disk->private_data;
        struct cached_dev *dc = container_of(d, struct cached_dev, disk);
-       int cpu, rw = bio_data_dir(bio);
+       int rw = bio_data_dir(bio);
 
-       cpu = part_stat_lock();
-       part_stat_inc(cpu, &d->disk->part0, ios[rw]);
-       part_stat_add(cpu, &d->disk->part0, sectors[rw], bio_sectors(bio));
-       part_stat_unlock();
+       generic_start_io_acct(rw, bio_sectors(bio), &d->disk->part0);
 
        bio->bi_bdev = dc->bdev;
        bio->bi_iter.bi_sector += dc->sb.data_offset;
@@ -1074,12 +1066,9 @@ static void flash_dev_make_request(struct request_queue *q, struct bio *bio)
        struct search *s;
        struct closure *cl;
        struct bcache_device *d = bio->bi_bdev->bd_disk->private_data;
-       int cpu, rw = bio_data_dir(bio);
+       int rw = bio_data_dir(bio);
 
-       cpu = part_stat_lock();
-       part_stat_inc(cpu, &d->disk->part0, ios[rw]);
-       part_stat_add(cpu, &d->disk->part0, sectors[rw], bio_sectors(bio));
-       part_stat_unlock();
+       generic_start_io_acct(rw, bio_sectors(bio), &d->disk->part0);
 
        s = search_alloc(bio, d);
        cl = &s->cl;