aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2012-04-01 17:38:43 -0400
committerTejun Heo <tj@kernel.org>2012-04-01 17:38:43 -0400
commit829fdb50004de78f1bd187e428d72edcd9721cb8 (patch)
tree96dbdb62c97e0b7a9a31a7af6d18a6c34e820528 /block
parent726fa6945e6e5f0389bf47a790e1df734a67de54 (diff)
blkcg: export conf/stat helpers to prepare for reorganization
conf/stat handling is about to be moved to policy implementation from blkcg core. Export conf/stat helpers from blkcg core so that blk-throttle and cfq-iosched can use them. Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'block')
-rw-r--r--block/blk-cgroup.c52
-rw-r--r--block/blk-cgroup.h27
2 files changed, 52 insertions, 27 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index b07a501839e7..53976f2704a5 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -11,7 +11,6 @@
11 * Nauman Rafique <nauman@google.com> 11 * Nauman Rafique <nauman@google.com>
12 */ 12 */
13#include <linux/ioprio.h> 13#include <linux/ioprio.h>
14#include <linux/seq_file.h>
15#include <linux/kdev_t.h> 14#include <linux/kdev_t.h>
16#include <linux/module.h> 15#include <linux/module.h>
17#include <linux/err.h> 16#include <linux/err.h>
@@ -767,10 +766,9 @@ static const char *blkg_dev_name(struct blkio_group *blkg)
767 * This is to be used to construct print functions for 766 * This is to be used to construct print functions for
768 * cftype->read_seq_string method. 767 * cftype->read_seq_string method.
769 */ 768 */
770static void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg, 769void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg,
771 u64 (*prfill)(struct seq_file *, 770 u64 (*prfill)(struct seq_file *, struct blkg_policy_data *, int),
772 struct blkg_policy_data *, int), 771 int pol, int data, bool show_total)
773 int pol, int data, bool show_total)
774{ 772{
775 struct blkio_group *blkg; 773 struct blkio_group *blkg;
776 struct hlist_node *n; 774 struct hlist_node *n;
@@ -785,6 +783,7 @@ static void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg,
785 if (show_total) 783 if (show_total)
786 seq_printf(sf, "Total %llu\n", (unsigned long long)total); 784 seq_printf(sf, "Total %llu\n", (unsigned long long)total);
787} 785}
786EXPORT_SYMBOL_GPL(blkcg_print_blkgs);
788 787
789/** 788/**
790 * __blkg_prfill_u64 - prfill helper for a single u64 value 789 * __blkg_prfill_u64 - prfill helper for a single u64 value
@@ -794,8 +793,7 @@ static void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg,
794 * 793 *
795 * Print @v to @sf for the device assocaited with @pd. 794 * Print @v to @sf for the device assocaited with @pd.
796 */ 795 */
797static u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd, 796u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd, u64 v)
798 u64 v)
799{ 797{
800 const char *dname = blkg_dev_name(pd->blkg); 798 const char *dname = blkg_dev_name(pd->blkg);
801 799
@@ -805,6 +803,7 @@ static u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd,
805 seq_printf(sf, "%s %llu\n", dname, (unsigned long long)v); 803 seq_printf(sf, "%s %llu\n", dname, (unsigned long long)v);
806 return v; 804 return v;
807} 805}
806EXPORT_SYMBOL_GPL(__blkg_prfill_u64);
808 807
809/** 808/**
810 * __blkg_prfill_rwstat - prfill helper for a blkg_rwstat 809 * __blkg_prfill_rwstat - prfill helper for a blkg_rwstat
@@ -814,9 +813,8 @@ static u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd,
814 * 813 *
815 * Print @rwstat to @sf for the device assocaited with @pd. 814 * Print @rwstat to @sf for the device assocaited with @pd.
816 */ 815 */
817static u64 __blkg_prfill_rwstat(struct seq_file *sf, 816u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
818 struct blkg_policy_data *pd, 817 const struct blkg_rwstat *rwstat)
819 const struct blkg_rwstat *rwstat)
820{ 818{
821 static const char *rwstr[] = { 819 static const char *rwstr[] = {
822 [BLKG_RWSTAT_READ] = "Read", 820 [BLKG_RWSTAT_READ] = "Read",
@@ -856,8 +854,8 @@ static u64 blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
856} 854}
857 855
858/* print blkg_stat specified by BLKCG_STAT_PRIV() */ 856/* print blkg_stat specified by BLKCG_STAT_PRIV() */
859static int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft, 857int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft,
860 struct seq_file *sf) 858 struct seq_file *sf)
861{ 859{
862 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp); 860 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
863 861
@@ -866,10 +864,11 @@ static int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft,
866 BLKCG_STAT_OFF(cft->private), false); 864 BLKCG_STAT_OFF(cft->private), false);
867 return 0; 865 return 0;
868} 866}
867EXPORT_SYMBOL_GPL(blkcg_print_stat);
869 868
870/* print blkg_rwstat specified by BLKCG_STAT_PRIV() */ 869/* print blkg_rwstat specified by BLKCG_STAT_PRIV() */
871static int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft, 870int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
872 struct seq_file *sf) 871 struct seq_file *sf)
873{ 872{
874 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp); 873 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
875 874
@@ -878,6 +877,7 @@ static int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
878 BLKCG_STAT_OFF(cft->private), true); 877 BLKCG_STAT_OFF(cft->private), true);
879 return 0; 878 return 0;
880} 879}
880EXPORT_SYMBOL_GPL(blkcg_print_rwstat);
881 881
882static u64 blkg_prfill_cpu_stat(struct seq_file *sf, 882static u64 blkg_prfill_cpu_stat(struct seq_file *sf,
883 struct blkg_policy_data *pd, int off) 883 struct blkg_policy_data *pd, int off)
@@ -914,8 +914,8 @@ static u64 blkg_prfill_cpu_rwstat(struct seq_file *sf,
914} 914}
915 915
916/* print per-cpu blkg_stat specified by BLKCG_STAT_PRIV() */ 916/* print per-cpu blkg_stat specified by BLKCG_STAT_PRIV() */
917static int blkcg_print_cpu_stat(struct cgroup *cgrp, struct cftype *cft, 917int blkcg_print_cpu_stat(struct cgroup *cgrp, struct cftype *cft,
918 struct seq_file *sf) 918 struct seq_file *sf)
919{ 919{
920 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp); 920 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
921 921
@@ -924,10 +924,11 @@ static int blkcg_print_cpu_stat(struct cgroup *cgrp, struct cftype *cft,
924 BLKCG_STAT_OFF(cft->private), false); 924 BLKCG_STAT_OFF(cft->private), false);
925 return 0; 925 return 0;
926} 926}
927EXPORT_SYMBOL_GPL(blkcg_print_cpu_stat);
927 928
928/* print per-cpu blkg_rwstat specified by BLKCG_STAT_PRIV() */ 929/* print per-cpu blkg_rwstat specified by BLKCG_STAT_PRIV() */
929static int blkcg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft, 930int blkcg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft,
930 struct seq_file *sf) 931 struct seq_file *sf)
931{ 932{
932 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp); 933 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
933 934
@@ -936,6 +937,7 @@ static int blkcg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft,
936 BLKCG_STAT_OFF(cft->private), true); 937 BLKCG_STAT_OFF(cft->private), true);
937 return 0; 938 return 0;
938} 939}
940EXPORT_SYMBOL_GPL(blkcg_print_cpu_rwstat);
939 941
940#ifdef CONFIG_DEBUG_BLK_CGROUP 942#ifdef CONFIG_DEBUG_BLK_CGROUP
941static u64 blkg_prfill_avg_queue_size(struct seq_file *sf, 943static u64 blkg_prfill_avg_queue_size(struct seq_file *sf,
@@ -964,12 +966,6 @@ static int blkcg_print_avg_queue_size(struct cgroup *cgrp, struct cftype *cft,
964} 966}
965#endif /* CONFIG_DEBUG_BLK_CGROUP */ 967#endif /* CONFIG_DEBUG_BLK_CGROUP */
966 968
967struct blkg_conf_ctx {
968 struct gendisk *disk;
969 struct blkio_group *blkg;
970 u64 v;
971};
972
973/** 969/**
974 * blkg_conf_prep - parse and prepare for per-blkg config update 970 * blkg_conf_prep - parse and prepare for per-blkg config update
975 * @blkcg: target block cgroup 971 * @blkcg: target block cgroup
@@ -981,8 +977,8 @@ struct blkg_conf_ctx {
981 * value. This function returns with RCU read locked and must be paired 977 * value. This function returns with RCU read locked and must be paired
982 * with blkg_conf_finish(). 978 * with blkg_conf_finish().
983 */ 979 */
984static int blkg_conf_prep(struct blkio_cgroup *blkcg, const char *input, 980int blkg_conf_prep(struct blkio_cgroup *blkcg, const char *input,
985 struct blkg_conf_ctx *ctx) 981 struct blkg_conf_ctx *ctx)
986 __acquires(rcu) 982 __acquires(rcu)
987{ 983{
988 struct gendisk *disk; 984 struct gendisk *disk;
@@ -1026,6 +1022,7 @@ static int blkg_conf_prep(struct blkio_cgroup *blkcg, const char *input,
1026 ctx->v = v; 1022 ctx->v = v;
1027 return 0; 1023 return 0;
1028} 1024}
1025EXPORT_SYMBOL_GPL(blkg_conf_prep);
1029 1026
1030/** 1027/**
1031 * blkg_conf_finish - finish up per-blkg config update 1028 * blkg_conf_finish - finish up per-blkg config update
@@ -1034,12 +1031,13 @@ static int blkg_conf_prep(struct blkio_cgroup *blkcg, const char *input,
1034 * Finish up after per-blkg config update. This function must be paired 1031 * Finish up after per-blkg config update. This function must be paired
1035 * with blkg_conf_prep(). 1032 * with blkg_conf_prep().
1036 */ 1033 */
1037static void blkg_conf_finish(struct blkg_conf_ctx *ctx) 1034void blkg_conf_finish(struct blkg_conf_ctx *ctx)
1038 __releases(rcu) 1035 __releases(rcu)
1039{ 1036{
1040 rcu_read_unlock(); 1037 rcu_read_unlock();
1041 put_disk(ctx->disk); 1038 put_disk(ctx->disk);
1042} 1039}
1040EXPORT_SYMBOL_GPL(blkg_conf_finish);
1043 1041
1044/* for propio conf */ 1042/* for propio conf */
1045static u64 blkg_prfill_weight_device(struct seq_file *sf, 1043static u64 blkg_prfill_weight_device(struct seq_file *sf,
diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h
index 108ffbf0d184..361ecfa4d28d 100644
--- a/block/blk-cgroup.h
+++ b/block/blk-cgroup.h
@@ -15,6 +15,7 @@
15 15
16#include <linux/cgroup.h> 16#include <linux/cgroup.h>
17#include <linux/u64_stats_sync.h> 17#include <linux/u64_stats_sync.h>
18#include <linux/seq_file.h>
18 19
19enum blkio_policy_id { 20enum blkio_policy_id {
20 BLKIO_POLICY_PROP = 0, /* Proportional Bandwidth division */ 21 BLKIO_POLICY_PROP = 0, /* Proportional Bandwidth division */
@@ -193,6 +194,32 @@ extern void blkg_destroy_all(struct request_queue *q, bool destroy_root);
193extern void update_root_blkg_pd(struct request_queue *q, 194extern void update_root_blkg_pd(struct request_queue *q,
194 enum blkio_policy_id plid); 195 enum blkio_policy_id plid);
195 196
197void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg,
198 u64 (*prfill)(struct seq_file *, struct blkg_policy_data *, int),
199 int pol, int data, bool show_total);
200u64 __blkg_prfill_u64(struct seq_file *sf, struct blkg_policy_data *pd, u64 v);
201u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd,
202 const struct blkg_rwstat *rwstat);
203int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft,
204 struct seq_file *sf);
205int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
206 struct seq_file *sf);
207int blkcg_print_cpu_stat(struct cgroup *cgrp, struct cftype *cft,
208 struct seq_file *sf);
209int blkcg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft,
210 struct seq_file *sf);
211
212struct blkg_conf_ctx {
213 struct gendisk *disk;
214 struct blkio_group *blkg;
215 u64 v;
216};
217
218int blkg_conf_prep(struct blkio_cgroup *blkcg, const char *input,
219 struct blkg_conf_ctx *ctx);
220void blkg_conf_finish(struct blkg_conf_ctx *ctx);
221
222
196/** 223/**
197 * blkg_to_pdata - get policy private data 224 * blkg_to_pdata - get policy private data
198 * @blkg: blkg of interest 225 * @blkg: blkg of interest