aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-cgroup.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/blk-cgroup.c')
-rw-r--r--block/blk-cgroup.c54
1 files changed, 27 insertions, 27 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index aa97cd455cef..80c1261a7d38 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -219,6 +219,33 @@ void blkiocg_update_avg_queue_size_stats(struct blkio_group *blkg)
219} 219}
220EXPORT_SYMBOL_GPL(blkiocg_update_avg_queue_size_stats); 220EXPORT_SYMBOL_GPL(blkiocg_update_avg_queue_size_stats);
221 221
222void blkiocg_set_start_empty_time(struct blkio_group *blkg, bool ignore)
223{
224 unsigned long flags;
225 struct blkio_group_stats *stats;
226
227 spin_lock_irqsave(&blkg->stats_lock, flags);
228 stats = &blkg->stats;
229
230 if (stats->stat_arr[BLKIO_STAT_QUEUED][BLKIO_STAT_READ] ||
231 stats->stat_arr[BLKIO_STAT_QUEUED][BLKIO_STAT_WRITE]) {
232 spin_unlock_irqrestore(&blkg->stats_lock, flags);
233 return;
234 }
235
236 /*
237 * If ignore is set, we do not panic on the empty flag being set
238 * already. This is to avoid cases where there are superfluous timeslice
239 * complete events (for eg., forced_dispatch in CFQ) when no IOs are
240 * served which could result in triggering the empty check incorrectly.
241 */
242 BUG_ON(!ignore && blkio_blkg_empty(stats));
243 stats->start_empty_time = sched_clock();
244 blkio_mark_blkg_empty(stats);
245 spin_unlock_irqrestore(&blkg->stats_lock, flags);
246}
247EXPORT_SYMBOL_GPL(blkiocg_set_start_empty_time);
248
222void blkiocg_update_dequeue_stats(struct blkio_group *blkg, 249void blkiocg_update_dequeue_stats(struct blkio_group *blkg,
223 unsigned long dequeue) 250 unsigned long dequeue)
224{ 251{
@@ -268,33 +295,6 @@ void blkiocg_update_timeslice_used(struct blkio_group *blkg, unsigned long time)
268} 295}
269EXPORT_SYMBOL_GPL(blkiocg_update_timeslice_used); 296EXPORT_SYMBOL_GPL(blkiocg_update_timeslice_used);
270 297
271void blkiocg_set_start_empty_time(struct blkio_group *blkg, bool ignore)
272{
273 unsigned long flags;
274 struct blkio_group_stats *stats;
275
276 spin_lock_irqsave(&blkg->stats_lock, flags);
277 stats = &blkg->stats;
278
279 if (stats->stat_arr[BLKIO_STAT_QUEUED][BLKIO_STAT_READ] ||
280 stats->stat_arr[BLKIO_STAT_QUEUED][BLKIO_STAT_WRITE]) {
281 spin_unlock_irqrestore(&blkg->stats_lock, flags);
282 return;
283 }
284
285 /*
286 * If ignore is set, we do not panic on the empty flag being set
287 * already. This is to avoid cases where there are superfluous timeslice
288 * complete events (for eg., forced_dispatch in CFQ) when no IOs are
289 * served which could result in triggering the empty check incorrectly.
290 */
291 BUG_ON(!ignore && blkio_blkg_empty(stats));
292 stats->start_empty_time = sched_clock();
293 blkio_mark_blkg_empty(stats);
294 spin_unlock_irqrestore(&blkg->stats_lock, flags);
295}
296EXPORT_SYMBOL_GPL(blkiocg_set_start_empty_time);
297
298void blkiocg_update_dispatch_stats(struct blkio_group *blkg, 298void blkiocg_update_dispatch_stats(struct blkio_group *blkg,
299 uint64_t bytes, bool direction, bool sync) 299 uint64_t bytes, bool direction, bool sync)
300{ 300{