diff options
Diffstat (limited to 'block/blk-cgroup.c')
-rw-r--r-- | block/blk-cgroup.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 455768a3eb9e..2bef5705ce24 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c | |||
@@ -371,12 +371,14 @@ void blkiocg_update_io_remove_stats(struct blkio_group *blkg, | |||
371 | } | 371 | } |
372 | EXPORT_SYMBOL_GPL(blkiocg_update_io_remove_stats); | 372 | EXPORT_SYMBOL_GPL(blkiocg_update_io_remove_stats); |
373 | 373 | ||
374 | void blkiocg_update_timeslice_used(struct blkio_group *blkg, unsigned long time) | 374 | void blkiocg_update_timeslice_used(struct blkio_group *blkg, unsigned long time, |
375 | unsigned long unaccounted_time) | ||
375 | { | 376 | { |
376 | unsigned long flags; | 377 | unsigned long flags; |
377 | 378 | ||
378 | spin_lock_irqsave(&blkg->stats_lock, flags); | 379 | spin_lock_irqsave(&blkg->stats_lock, flags); |
379 | blkg->stats.time += time; | 380 | blkg->stats.time += time; |
381 | blkg->stats.unaccounted_time += unaccounted_time; | ||
380 | spin_unlock_irqrestore(&blkg->stats_lock, flags); | 382 | spin_unlock_irqrestore(&blkg->stats_lock, flags); |
381 | } | 383 | } |
382 | EXPORT_SYMBOL_GPL(blkiocg_update_timeslice_used); | 384 | EXPORT_SYMBOL_GPL(blkiocg_update_timeslice_used); |
@@ -604,6 +606,9 @@ static uint64_t blkio_get_stat(struct blkio_group *blkg, | |||
604 | return blkio_fill_stat(key_str, MAX_KEY_LEN - 1, | 606 | return blkio_fill_stat(key_str, MAX_KEY_LEN - 1, |
605 | blkg->stats.sectors, cb, dev); | 607 | blkg->stats.sectors, cb, dev); |
606 | #ifdef CONFIG_DEBUG_BLK_CGROUP | 608 | #ifdef CONFIG_DEBUG_BLK_CGROUP |
609 | if (type == BLKIO_STAT_UNACCOUNTED_TIME) | ||
610 | return blkio_fill_stat(key_str, MAX_KEY_LEN - 1, | ||
611 | blkg->stats.unaccounted_time, cb, dev); | ||
607 | if (type == BLKIO_STAT_AVG_QUEUE_SIZE) { | 612 | if (type == BLKIO_STAT_AVG_QUEUE_SIZE) { |
608 | uint64_t sum = blkg->stats.avg_queue_size_sum; | 613 | uint64_t sum = blkg->stats.avg_queue_size_sum; |
609 | uint64_t samples = blkg->stats.avg_queue_size_samples; | 614 | uint64_t samples = blkg->stats.avg_queue_size_samples; |
@@ -1125,6 +1130,9 @@ static int blkiocg_file_read_map(struct cgroup *cgrp, struct cftype *cft, | |||
1125 | return blkio_read_blkg_stats(blkcg, cft, cb, | 1130 | return blkio_read_blkg_stats(blkcg, cft, cb, |
1126 | BLKIO_STAT_QUEUED, 1); | 1131 | BLKIO_STAT_QUEUED, 1); |
1127 | #ifdef CONFIG_DEBUG_BLK_CGROUP | 1132 | #ifdef CONFIG_DEBUG_BLK_CGROUP |
1133 | case BLKIO_PROP_unaccounted_time: | ||
1134 | return blkio_read_blkg_stats(blkcg, cft, cb, | ||
1135 | BLKIO_STAT_UNACCOUNTED_TIME, 0); | ||
1128 | case BLKIO_PROP_dequeue: | 1136 | case BLKIO_PROP_dequeue: |
1129 | return blkio_read_blkg_stats(blkcg, cft, cb, | 1137 | return blkio_read_blkg_stats(blkcg, cft, cb, |
1130 | BLKIO_STAT_DEQUEUE, 0); | 1138 | BLKIO_STAT_DEQUEUE, 0); |
@@ -1382,6 +1390,12 @@ struct cftype blkio_files[] = { | |||
1382 | BLKIO_PROP_dequeue), | 1390 | BLKIO_PROP_dequeue), |
1383 | .read_map = blkiocg_file_read_map, | 1391 | .read_map = blkiocg_file_read_map, |
1384 | }, | 1392 | }, |
1393 | { | ||
1394 | .name = "unaccounted_time", | ||
1395 | .private = BLKIOFILE_PRIVATE(BLKIO_POLICY_PROP, | ||
1396 | BLKIO_PROP_unaccounted_time), | ||
1397 | .read_map = blkiocg_file_read_map, | ||
1398 | }, | ||
1385 | #endif | 1399 | #endif |
1386 | }; | 1400 | }; |
1387 | 1401 | ||