[PATCH] aoe 11/12: add support for disk statistics
authorecashin@coraid.com <ecashin@coraid.com>
Tue, 19 Apr 2005 05:00:22 +0000 (22:00 -0700)
committerGreg KH <greg@press.kroah.org>
Tue, 19 Apr 2005 05:00:22 +0000 (22:00 -0700)
add support for disk statistics

Signed-off-by: Ed L. Cashin <ecashin@coraid.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/block/aoe/aoe.h
drivers/block/aoe/aoeblk.c
drivers/block/aoe/aoecmd.c

index d3b0e2c..2e92cfb 100644 (file)
@@ -90,6 +90,7 @@ enum {
 
 struct buf {
        struct list_head bufs;
+       ulong start_time;       /* for disk stats */
        ulong flags;
        ulong nframesout;
        char *bufaddr;
index 63561b2..a2735d9 100644 (file)
@@ -125,6 +125,7 @@ aoeblk_make_request(request_queue_t *q, struct bio *bio)
        }
        memset(buf, 0, sizeof(*buf));
        INIT_LIST_HEAD(&buf->bufs);
+       buf->start_time = jiffies;
        buf->bio = bio;
        buf->resid = bio->bi_size;
        buf->sector = bio->bi_sector;
index f810bd6..60beb8d 100644 (file)
@@ -456,6 +456,20 @@ aoecmd_ata_rsp(struct sk_buff *skb)
        if (buf) {
                buf->nframesout -= 1;
                if (buf->nframesout == 0 && buf->resid == 0) {
+                       unsigned long duration = jiffies - buf->start_time;
+                       unsigned long n_sect = buf->bio->bi_size >> 9;
+                       struct gendisk *disk = d->gd;
+
+                       if (bio_data_dir(buf->bio) == WRITE) {
+                               disk_stat_inc(disk, writes);
+                               disk_stat_add(disk, write_ticks, duration);
+                               disk_stat_add(disk, write_sectors, n_sect);
+                       } else {
+                               disk_stat_inc(disk, reads);
+                               disk_stat_add(disk, read_ticks, duration);
+                               disk_stat_add(disk, read_sectors, n_sect);
+                       }
+                       disk_stat_add(disk, io_ticks, duration);
                        n = (buf->flags & BUFFL_FAIL) ? -EIO : 0;
                        bio_endio(buf->bio, buf->bio->bi_size, n);
                        mempool_free(buf, d->bufpool);