]> git.karo-electronics.de Git - linux-beck.git/blobdiff - block/cfq-iosched.c
Merge git://git.infradead.org/users/eparis/audit
[linux-beck.git] / block / cfq-iosched.c
index 434944cbd761884f0f6d9ffdfe96adc00afd1e5c..744833b630c69c5b56c98c81e76c21b774be29ad 100644 (file)
@@ -1508,6 +1508,29 @@ static void cfq_init_cfqg_base(struct cfq_group *cfqg)
 }
 
 #ifdef CONFIG_CFQ_GROUP_IOSCHED
+static void cfqg_stats_init(struct cfqg_stats *stats)
+{
+       blkg_rwstat_init(&stats->service_bytes);
+       blkg_rwstat_init(&stats->serviced);
+       blkg_rwstat_init(&stats->merged);
+       blkg_rwstat_init(&stats->service_time);
+       blkg_rwstat_init(&stats->wait_time);
+       blkg_rwstat_init(&stats->queued);
+
+       blkg_stat_init(&stats->sectors);
+       blkg_stat_init(&stats->time);
+
+#ifdef CONFIG_DEBUG_BLK_CGROUP
+       blkg_stat_init(&stats->unaccounted_time);
+       blkg_stat_init(&stats->avg_queue_size_sum);
+       blkg_stat_init(&stats->avg_queue_size_samples);
+       blkg_stat_init(&stats->dequeue);
+       blkg_stat_init(&stats->group_wait_time);
+       blkg_stat_init(&stats->idle_time);
+       blkg_stat_init(&stats->empty_time);
+#endif
+}
+
 static void cfq_pd_init(struct blkcg_gq *blkg)
 {
        struct cfq_group *cfqg = blkg_to_cfqg(blkg);
@@ -1515,6 +1538,8 @@ static void cfq_pd_init(struct blkcg_gq *blkg)
        cfq_init_cfqg_base(cfqg);
        cfqg->weight = blkg->blkcg->cfq_weight;
        cfqg->leaf_weight = blkg->blkcg->cfq_leaf_weight;
+       cfqg_stats_init(&cfqg->stats);
+       cfqg_stats_init(&cfqg->dead_stats);
 }
 
 static void cfq_pd_offline(struct blkcg_gq *blkg)
@@ -1607,11 +1632,11 @@ static u64 cfqg_prfill_weight_device(struct seq_file *sf,
        return __blkg_prfill_u64(sf, pd, cfqg->dev_weight);
 }
 
-static int cfqg_print_weight_device(struct cgroup_subsys_state *css,
-                                   struct cftype *cft, struct seq_file *sf)
+static int cfqg_print_weight_device(struct seq_file *sf, void *v)
 {
-       blkcg_print_blkgs(sf, css_to_blkcg(css), cfqg_prfill_weight_device,
-                         &blkcg_policy_cfq, 0, false);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)),
+                         cfqg_prfill_weight_device, &blkcg_policy_cfq,
+                         0, false);
        return 0;
 }
 
@@ -1625,26 +1650,23 @@ static u64 cfqg_prfill_leaf_weight_device(struct seq_file *sf,
        return __blkg_prfill_u64(sf, pd, cfqg->dev_leaf_weight);
 }
 
-static int cfqg_print_leaf_weight_device(struct cgroup_subsys_state *css,
-                                        struct cftype *cft,
-                                        struct seq_file *sf)
+static int cfqg_print_leaf_weight_device(struct seq_file *sf, void *v)
 {
-       blkcg_print_blkgs(sf, css_to_blkcg(css), cfqg_prfill_leaf_weight_device,
-                         &blkcg_policy_cfq, 0, false);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)),
+                         cfqg_prfill_leaf_weight_device, &blkcg_policy_cfq,
+                         0, false);
        return 0;
 }
 
-static int cfq_print_weight(struct cgroup_subsys_state *css, struct cftype *cft,
-                           struct seq_file *sf)
+static int cfq_print_weight(struct seq_file *sf, void *v)
 {
-       seq_printf(sf, "%u\n", css_to_blkcg(css)->cfq_weight);
+       seq_printf(sf, "%u\n", css_to_blkcg(seq_css(sf))->cfq_weight);
        return 0;
 }
 
-static int cfq_print_leaf_weight(struct cgroup_subsys_state *css,
-                                struct cftype *cft, struct seq_file *sf)
+static int cfq_print_leaf_weight(struct seq_file *sf, void *v)
 {
-       seq_printf(sf, "%u\n", css_to_blkcg(css)->cfq_leaf_weight);
+       seq_printf(sf, "%u\n", css_to_blkcg(seq_css(sf))->cfq_leaf_weight);
        return 0;
 }
 
@@ -1737,23 +1759,17 @@ static int cfq_set_leaf_weight(struct cgroup_subsys_state *css,
        return __cfq_set_weight(css, cft, val, true);
 }
 
-static int cfqg_print_stat(struct cgroup_subsys_state *css, struct cftype *cft,
-                          struct seq_file *sf)
+static int cfqg_print_stat(struct seq_file *sf, void *v)
 {
-       struct blkcg *blkcg = css_to_blkcg(css);
-
-       blkcg_print_blkgs(sf, blkcg, blkg_prfill_stat, &blkcg_policy_cfq,
-                         cft->private, false);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_stat,
+                         &blkcg_policy_cfq, seq_cft(sf)->private, false);
        return 0;
 }
 
-static int cfqg_print_rwstat(struct cgroup_subsys_state *css,
-                            struct cftype *cft, struct seq_file *sf)
+static int cfqg_print_rwstat(struct seq_file *sf, void *v)
 {
-       struct blkcg *blkcg = css_to_blkcg(css);
-
-       blkcg_print_blkgs(sf, blkcg, blkg_prfill_rwstat, &blkcg_policy_cfq,
-                         cft->private, true);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_rwstat,
+                         &blkcg_policy_cfq, seq_cft(sf)->private, true);
        return 0;
 }
 
@@ -1773,23 +1789,19 @@ static u64 cfqg_prfill_rwstat_recursive(struct seq_file *sf,
        return __blkg_prfill_rwstat(sf, pd, &sum);
 }
 
-static int cfqg_print_stat_recursive(struct cgroup_subsys_state *css,
-                                    struct cftype *cft, struct seq_file *sf)
+static int cfqg_print_stat_recursive(struct seq_file *sf, void *v)
 {
-       struct blkcg *blkcg = css_to_blkcg(css);
-
-       blkcg_print_blkgs(sf, blkcg, cfqg_prfill_stat_recursive,
-                         &blkcg_policy_cfq, cft->private, false);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)),
+                         cfqg_prfill_stat_recursive, &blkcg_policy_cfq,
+                         seq_cft(sf)->private, false);
        return 0;
 }
 
-static int cfqg_print_rwstat_recursive(struct cgroup_subsys_state *css,
-                                      struct cftype *cft, struct seq_file *sf)
+static int cfqg_print_rwstat_recursive(struct seq_file *sf, void *v)
 {
-       struct blkcg *blkcg = css_to_blkcg(css);
-
-       blkcg_print_blkgs(sf, blkcg, cfqg_prfill_rwstat_recursive,
-                         &blkcg_policy_cfq, cft->private, true);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)),
+                         cfqg_prfill_rwstat_recursive, &blkcg_policy_cfq,
+                         seq_cft(sf)->private, true);
        return 0;
 }
 
@@ -1810,13 +1822,11 @@ static u64 cfqg_prfill_avg_queue_size(struct seq_file *sf,
 }
 
 /* print avg_queue_size */
-static int cfqg_print_avg_queue_size(struct cgroup_subsys_state *css,
-                                    struct cftype *cft, struct seq_file *sf)
+static int cfqg_print_avg_queue_size(struct seq_file *sf, void *v)
 {
-       struct blkcg *blkcg = css_to_blkcg(css);
-
-       blkcg_print_blkgs(sf, blkcg, cfqg_prfill_avg_queue_size,
-                         &blkcg_policy_cfq, 0, false);
+       blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)),
+                         cfqg_prfill_avg_queue_size, &blkcg_policy_cfq,
+                         0, false);
        return 0;
 }
 #endif /* CONFIG_DEBUG_BLK_CGROUP */
@@ -1826,14 +1836,14 @@ static struct cftype cfq_blkcg_files[] = {
        {
                .name = "weight_device",
                .flags = CFTYPE_ONLY_ON_ROOT,
-               .read_seq_string = cfqg_print_leaf_weight_device,
+               .seq_show = cfqg_print_leaf_weight_device,
                .write_string = cfqg_set_leaf_weight_device,
                .max_write_len = 256,
        },
        {
                .name = "weight",
                .flags = CFTYPE_ONLY_ON_ROOT,
-               .read_seq_string = cfq_print_leaf_weight,
+               .seq_show = cfq_print_leaf_weight,
                .write_u64 = cfq_set_leaf_weight,
        },
 
@@ -1841,26 +1851,26 @@ static struct cftype cfq_blkcg_files[] = {
        {
                .name = "weight_device",
                .flags = CFTYPE_NOT_ON_ROOT,
-               .read_seq_string = cfqg_print_weight_device,
+               .seq_show = cfqg_print_weight_device,
                .write_string = cfqg_set_weight_device,
                .max_write_len = 256,
        },
        {
                .name = "weight",
                .flags = CFTYPE_NOT_ON_ROOT,
-               .read_seq_string = cfq_print_weight,
+               .seq_show = cfq_print_weight,
                .write_u64 = cfq_set_weight,
        },
 
        {
                .name = "leaf_weight_device",
-               .read_seq_string = cfqg_print_leaf_weight_device,
+               .seq_show = cfqg_print_leaf_weight_device,
                .write_string = cfqg_set_leaf_weight_device,
                .max_write_len = 256,
        },
        {
                .name = "leaf_weight",
-               .read_seq_string = cfq_print_leaf_weight,
+               .seq_show = cfq_print_leaf_weight,
                .write_u64 = cfq_set_leaf_weight,
        },
 
@@ -1868,114 +1878,114 @@ static struct cftype cfq_blkcg_files[] = {
        {
                .name = "time",
                .private = offsetof(struct cfq_group, stats.time),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
        {
                .name = "sectors",
                .private = offsetof(struct cfq_group, stats.sectors),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
        {
                .name = "io_service_bytes",
                .private = offsetof(struct cfq_group, stats.service_bytes),
-               .read_seq_string = cfqg_print_rwstat,
+               .seq_show = cfqg_print_rwstat,
        },
        {
                .name = "io_serviced",
                .private = offsetof(struct cfq_group, stats.serviced),
-               .read_seq_string = cfqg_print_rwstat,
+               .seq_show = cfqg_print_rwstat,
        },
        {
                .name = "io_service_time",
                .private = offsetof(struct cfq_group, stats.service_time),
-               .read_seq_string = cfqg_print_rwstat,
+               .seq_show = cfqg_print_rwstat,
        },
        {
                .name = "io_wait_time",
                .private = offsetof(struct cfq_group, stats.wait_time),
-               .read_seq_string = cfqg_print_rwstat,
+               .seq_show = cfqg_print_rwstat,
        },
        {
                .name = "io_merged",
                .private = offsetof(struct cfq_group, stats.merged),
-               .read_seq_string = cfqg_print_rwstat,
+               .seq_show = cfqg_print_rwstat,
        },
        {
                .name = "io_queued",
                .private = offsetof(struct cfq_group, stats.queued),
-               .read_seq_string = cfqg_print_rwstat,
+               .seq_show = cfqg_print_rwstat,
        },
 
        /* the same statictics which cover the cfqg and its descendants */
        {
                .name = "time_recursive",
                .private = offsetof(struct cfq_group, stats.time),
-               .read_seq_string = cfqg_print_stat_recursive,
+               .seq_show = cfqg_print_stat_recursive,
        },
        {
                .name = "sectors_recursive",
                .private = offsetof(struct cfq_group, stats.sectors),
-               .read_seq_string = cfqg_print_stat_recursive,
+               .seq_show = cfqg_print_stat_recursive,
        },
        {
                .name = "io_service_bytes_recursive",
                .private = offsetof(struct cfq_group, stats.service_bytes),
-               .read_seq_string = cfqg_print_rwstat_recursive,
+               .seq_show = cfqg_print_rwstat_recursive,
        },
        {
                .name = "io_serviced_recursive",
                .private = offsetof(struct cfq_group, stats.serviced),
-               .read_seq_string = cfqg_print_rwstat_recursive,
+               .seq_show = cfqg_print_rwstat_recursive,
        },
        {
                .name = "io_service_time_recursive",
                .private = offsetof(struct cfq_group, stats.service_time),
-               .read_seq_string = cfqg_print_rwstat_recursive,
+               .seq_show = cfqg_print_rwstat_recursive,
        },
        {
                .name = "io_wait_time_recursive",
                .private = offsetof(struct cfq_group, stats.wait_time),
-               .read_seq_string = cfqg_print_rwstat_recursive,
+               .seq_show = cfqg_print_rwstat_recursive,
        },
        {
                .name = "io_merged_recursive",
                .private = offsetof(struct cfq_group, stats.merged),
-               .read_seq_string = cfqg_print_rwstat_recursive,
+               .seq_show = cfqg_print_rwstat_recursive,
        },
        {
                .name = "io_queued_recursive",
                .private = offsetof(struct cfq_group, stats.queued),
-               .read_seq_string = cfqg_print_rwstat_recursive,
+               .seq_show = cfqg_print_rwstat_recursive,
        },
 #ifdef CONFIG_DEBUG_BLK_CGROUP
        {
                .name = "avg_queue_size",
-               .read_seq_string = cfqg_print_avg_queue_size,
+               .seq_show = cfqg_print_avg_queue_size,
        },
        {
                .name = "group_wait_time",
                .private = offsetof(struct cfq_group, stats.group_wait_time),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
        {
                .name = "idle_time",
                .private = offsetof(struct cfq_group, stats.idle_time),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
        {
                .name = "empty_time",
                .private = offsetof(struct cfq_group, stats.empty_time),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
        {
                .name = "dequeue",
                .private = offsetof(struct cfq_group, stats.dequeue),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
        {
                .name = "unaccounted_time",
                .private = offsetof(struct cfq_group, stats.unaccounted_time),
-               .read_seq_string = cfqg_print_stat,
+               .seq_show = cfqg_print_stat,
        },
 #endif /* CONFIG_DEBUG_BLK_CGROUP */
        { }     /* terminate */