diff options
Diffstat (limited to 'drivers/block/aoe/aoecmd.c')
-rw-r--r-- | drivers/block/aoe/aoecmd.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c index f810bd6bf87f..60beb8db4612 100644 --- a/drivers/block/aoe/aoecmd.c +++ b/drivers/block/aoe/aoecmd.c | |||
@@ -456,6 +456,20 @@ aoecmd_ata_rsp(struct sk_buff *skb) | |||
456 | if (buf) { | 456 | if (buf) { |
457 | buf->nframesout -= 1; | 457 | buf->nframesout -= 1; |
458 | if (buf->nframesout == 0 && buf->resid == 0) { | 458 | if (buf->nframesout == 0 && buf->resid == 0) { |
459 | unsigned long duration = jiffies - buf->start_time; | ||
460 | unsigned long n_sect = buf->bio->bi_size >> 9; | ||
461 | struct gendisk *disk = d->gd; | ||
462 | |||
463 | if (bio_data_dir(buf->bio) == WRITE) { | ||
464 | disk_stat_inc(disk, writes); | ||
465 | disk_stat_add(disk, write_ticks, duration); | ||
466 | disk_stat_add(disk, write_sectors, n_sect); | ||
467 | } else { | ||
468 | disk_stat_inc(disk, reads); | ||
469 | disk_stat_add(disk, read_ticks, duration); | ||
470 | disk_stat_add(disk, read_sectors, n_sect); | ||
471 | } | ||
472 | disk_stat_add(disk, io_ticks, duration); | ||
459 | n = (buf->flags & BUFFL_FAIL) ? -EIO : 0; | 473 | n = (buf->flags & BUFFL_FAIL) ? -EIO : 0; |
460 | bio_endio(buf->bio, buf->bio->bi_size, n); | 474 | bio_endio(buf->bio, buf->bio->bi_size, n); |
461 | mempool_free(buf, d->bufpool); | 475 | mempool_free(buf, d->bufpool); |