From c2951333cc311dfed59a69343fcae5986052d3f4 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Sun, 1 Apr 2012 14:38:44 -0700 Subject: [PATCH] --- yaml --- r: 309253 b: refs/heads/master c: 9ade5ea4ce57d3596eaee6a57cd212a483674058 h: refs/heads/master i: 309251: 5483b46ffae1fdc8431dc26cba9cd4a444855c94 v: v3 --- [refs] | 2 +- trunk/block/blk-cgroup.c | 16 ++++++++++++---- trunk/block/blk-cgroup.h | 4 ++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 5073db62cdb4..4dcd455ba931 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 41b38b6d540f951c49315d8573e6f6195a6e736d +refs/heads/master: 9ade5ea4ce57d3596eaee6a57cd212a483674058 diff --git a/trunk/block/blk-cgroup.c b/trunk/block/blk-cgroup.c index 19ee29f1b7c5..2e6fb7d91805 100644 --- a/trunk/block/blk-cgroup.c +++ b/trunk/block/blk-cgroup.c @@ -131,12 +131,17 @@ static void blkg_free(struct blkio_group *blkg) return; for (i = 0; i < BLKIO_NR_POLICIES; i++) { + struct blkio_policy_type *pol = blkio_policy[i]; struct blkg_policy_data *pd = blkg->pd[i]; - if (pd) { - free_percpu(pd->stats_cpu); - kfree(pd); - } + if (!pd) + continue; + + if (pol && pol->ops.blkio_exit_group_fn) + pol->ops.blkio_exit_group_fn(blkg); + + free_percpu(pd->stats_cpu); + kfree(pd); } kfree(blkg); @@ -432,6 +437,9 @@ blkiocg_reset_stats(struct cgroup *cgroup, struct cftype *cftype, u64 val) blkg_stat_reset(&stats->empty_time); #endif blkio_reset_stats_cpu(blkg, pol->plid); + + if (pol->ops.blkio_reset_group_stats_fn) + pol->ops.blkio_reset_group_stats_fn(blkg); } } diff --git a/trunk/block/blk-cgroup.h b/trunk/block/blk-cgroup.h index c82de47ae69f..d0ee649e8bbb 100644 --- a/trunk/block/blk-cgroup.h +++ b/trunk/block/blk-cgroup.h @@ -153,9 +153,13 @@ struct blkio_group { }; typedef void (blkio_init_group_fn)(struct blkio_group *blkg); +typedef void (blkio_exit_group_fn)(struct blkio_group *blkg); +typedef void (blkio_reset_group_stats_fn)(struct blkio_group *blkg); struct blkio_policy_ops { blkio_init_group_fn *blkio_init_group_fn; + blkio_exit_group_fn *blkio_exit_group_fn; + blkio_reset_group_stats_fn *blkio_reset_group_stats_fn; }; struct blkio_policy_type {