aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2012-04-01 17:38:45 -0400
committerTejun Heo <tj@kernel.org>2012-04-01 17:38:45 -0400
commit5bc4afb1ec6aa562fac4d9aba34d957ee42f5813 (patch)
treedfef1de2dcb71beab3150ffecf6ae564d326ffba /block
parentd366e7ec41882791c970dfb7c67b737be8c3a174 (diff)
blkcg: drop BLKCG_STAT_{PRIV|POL|OFF} macros
Now that all stat handling code lives in policy implementations, there's no need to encode policy ID in cft->private. * Export blkcg_prfill_[rw]stat() from blkcg, remove blkcg_print_[rw]stat(), and implement cfqg_print_[rw]stat() which use hard-code BLKIO_POLICY_PROP. * Use cft->private for offset of the target field directly and drop BLKCG_STAT_{PRIV|POL|OFF}(). Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'block')
-rw-r--r--block/blk-cgroup.c48
-rw-r--r--block/blk-cgroup.h11
-rw-r--r--block/blk-throttle.c12
-rw-r--r--block/cfq-iosched.c85
4 files changed, 72 insertions, 84 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index 7de19d7954c7..9449c383b7ba 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -430,43 +430,35 @@ u64 __blkg_prfill_rwstat(struct seq_file *sf, void *pdata,
430 return v; 430 return v;
431} 431}
432 432
433static u64 blkg_prfill_stat(struct seq_file *sf, void *pdata, int off) 433/**
434 * blkg_prfill_stat - prfill callback for blkg_stat
435 * @sf: seq_file to print to
436 * @pdata: policy private data of interest
437 * @off: offset to the blkg_stat in @pdata
438 *
439 * prfill callback for printing a blkg_stat.
440 */
441u64 blkg_prfill_stat(struct seq_file *sf, void *pdata, int off)
434{ 442{
435 return __blkg_prfill_u64(sf, pdata, blkg_stat_read(pdata + off)); 443 return __blkg_prfill_u64(sf, pdata, blkg_stat_read(pdata + off));
436} 444}
445EXPORT_SYMBOL_GPL(blkg_prfill_stat);
437 446
438static u64 blkg_prfill_rwstat(struct seq_file *sf, void *pdata, int off) 447/**
448 * blkg_prfill_rwstat - prfill callback for blkg_rwstat
449 * @sf: seq_file to print to
450 * @pdata: policy private data of interest
451 * @off: offset to the blkg_rwstat in @pdata
452 *
453 * prfill callback for printing a blkg_rwstat.
454 */
455u64 blkg_prfill_rwstat(struct seq_file *sf, void *pdata, int off)
439{ 456{
440 struct blkg_rwstat rwstat = blkg_rwstat_read(pdata + off); 457 struct blkg_rwstat rwstat = blkg_rwstat_read(pdata + off);
441 458
442 return __blkg_prfill_rwstat(sf, pdata, &rwstat); 459 return __blkg_prfill_rwstat(sf, pdata, &rwstat);
443} 460}
444 461EXPORT_SYMBOL_GPL(blkg_prfill_rwstat);
445/* print blkg_stat specified by BLKCG_STAT_PRIV() */
446int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft,
447 struct seq_file *sf)
448{
449 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
450
451 blkcg_print_blkgs(sf, blkcg, blkg_prfill_stat,
452 BLKCG_STAT_POL(cft->private),
453 BLKCG_STAT_OFF(cft->private), false);
454 return 0;
455}
456EXPORT_SYMBOL_GPL(blkcg_print_stat);
457
458/* print blkg_rwstat specified by BLKCG_STAT_PRIV() */
459int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
460 struct seq_file *sf)
461{
462 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
463
464 blkcg_print_blkgs(sf, blkcg, blkg_prfill_rwstat,
465 BLKCG_STAT_POL(cft->private),
466 BLKCG_STAT_OFF(cft->private), true);
467 return 0;
468}
469EXPORT_SYMBOL_GPL(blkcg_print_rwstat);
470 462
471/** 463/**
472 * blkg_conf_prep - parse and prepare for per-blkg config update 464 * blkg_conf_prep - parse and prepare for per-blkg config update
diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h
index c930895bfac9..ca0ff7c0ffb6 100644
--- a/block/blk-cgroup.h
+++ b/block/blk-cgroup.h
@@ -34,11 +34,6 @@ enum blkio_policy_id {
34#define CFQ_WEIGHT_MAX 1000 34#define CFQ_WEIGHT_MAX 1000
35#define CFQ_WEIGHT_DEFAULT 500 35#define CFQ_WEIGHT_DEFAULT 500
36 36
37/* cft->private [un]packing for stat printing */
38#define BLKCG_STAT_PRIV(pol, off) (((unsigned)(pol) << 16) | (off))
39#define BLKCG_STAT_POL(prv) ((unsigned)(prv) >> 16)
40#define BLKCG_STAT_OFF(prv) ((unsigned)(prv) & 0xffff)
41
42enum blkg_rwstat_type { 37enum blkg_rwstat_type {
43 BLKG_RWSTAT_READ, 38 BLKG_RWSTAT_READ,
44 BLKG_RWSTAT_WRITE, 39 BLKG_RWSTAT_WRITE,
@@ -131,10 +126,8 @@ void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg,
131u64 __blkg_prfill_u64(struct seq_file *sf, void *pdata, u64 v); 126u64 __blkg_prfill_u64(struct seq_file *sf, void *pdata, u64 v);
132u64 __blkg_prfill_rwstat(struct seq_file *sf, void *pdata, 127u64 __blkg_prfill_rwstat(struct seq_file *sf, void *pdata,
133 const struct blkg_rwstat *rwstat); 128 const struct blkg_rwstat *rwstat);
134int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft, 129u64 blkg_prfill_stat(struct seq_file *sf, void *pdata, int off);
135 struct seq_file *sf); 130u64 blkg_prfill_rwstat(struct seq_file *sf, void *pdata, int off);
136int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
137 struct seq_file *sf);
138 131
139struct blkg_conf_ctx { 132struct blkg_conf_ctx {
140 struct gendisk *disk; 133 struct gendisk *disk;
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index bd6dbfe1e4e9..60240142f5ae 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -941,15 +941,13 @@ static u64 tg_prfill_cpu_rwstat(struct seq_file *sf, void *pdata, int off)
941 return __blkg_prfill_rwstat(sf, pdata, &rwstat); 941 return __blkg_prfill_rwstat(sf, pdata, &rwstat);
942} 942}
943 943
944/* print per-cpu blkg_rwstat specified by BLKCG_STAT_PRIV() */
945static int tg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft, 944static int tg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft,
946 struct seq_file *sf) 945 struct seq_file *sf)
947{ 946{
948 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp); 947 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
949 948
950 blkcg_print_blkgs(sf, blkcg, tg_prfill_cpu_rwstat, 949 blkcg_print_blkgs(sf, blkcg, tg_prfill_cpu_rwstat, BLKIO_POLICY_THROTL,
951 BLKCG_STAT_POL(cft->private), 950 cft->private, true);
952 BLKCG_STAT_OFF(cft->private), true);
953 return 0; 951 return 0;
954} 952}
955 953
@@ -1067,14 +1065,12 @@ static struct cftype throtl_files[] = {
1067 }, 1065 },
1068 { 1066 {
1069 .name = "throttle.io_service_bytes", 1067 .name = "throttle.io_service_bytes",
1070 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_THROTL, 1068 .private = offsetof(struct tg_stats_cpu, service_bytes),
1071 offsetof(struct tg_stats_cpu, service_bytes)),
1072 .read_seq_string = tg_print_cpu_rwstat, 1069 .read_seq_string = tg_print_cpu_rwstat,
1073 }, 1070 },
1074 { 1071 {
1075 .name = "throttle.io_serviced", 1072 .name = "throttle.io_serviced",
1076 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_THROTL, 1073 .private = offsetof(struct tg_stats_cpu, serviced),
1077 offsetof(struct tg_stats_cpu, serviced)),
1078 .read_seq_string = tg_print_cpu_rwstat, 1074 .read_seq_string = tg_print_cpu_rwstat,
1079 }, 1075 },
1080 { } /* terminate */ 1076 { } /* terminate */
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index fd505f721f61..cff8b5ba6208 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1441,6 +1441,26 @@ static int cfq_set_weight(struct cgroup *cgrp, struct cftype *cft, u64 val)
1441 return 0; 1441 return 0;
1442} 1442}
1443 1443
1444static int cfqg_print_stat(struct cgroup *cgrp, struct cftype *cft,
1445 struct seq_file *sf)
1446{
1447 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1448
1449 blkcg_print_blkgs(sf, blkcg, blkg_prfill_stat, BLKIO_POLICY_PROP,
1450 cft->private, false);
1451 return 0;
1452}
1453
1454static int cfqg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
1455 struct seq_file *sf)
1456{
1457 struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);
1458
1459 blkcg_print_blkgs(sf, blkcg, blkg_prfill_rwstat, BLKIO_POLICY_PROP,
1460 cft->private, true);
1461 return 0;
1462}
1463
1444#ifdef CONFIG_DEBUG_BLK_CGROUP 1464#ifdef CONFIG_DEBUG_BLK_CGROUP
1445static u64 cfqg_prfill_avg_queue_size(struct seq_file *sf, void *pdata, int off) 1465static u64 cfqg_prfill_avg_queue_size(struct seq_file *sf, void *pdata, int off)
1446{ 1466{
@@ -1482,51 +1502,43 @@ static struct cftype cfq_blkcg_files[] = {
1482 }, 1502 },
1483 { 1503 {
1484 .name = "time", 1504 .name = "time",
1485 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1505 .private = offsetof(struct cfq_group, stats.time),
1486 offsetof(struct cfq_group, stats.time)), 1506 .read_seq_string = cfqg_print_stat,
1487 .read_seq_string = blkcg_print_stat,
1488 }, 1507 },
1489 { 1508 {
1490 .name = "sectors", 1509 .name = "sectors",
1491 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1510 .private = offsetof(struct cfq_group, stats.sectors),
1492 offsetof(struct cfq_group, stats.sectors)), 1511 .read_seq_string = cfqg_print_stat,
1493 .read_seq_string = blkcg_print_stat,
1494 }, 1512 },
1495 { 1513 {
1496 .name = "io_service_bytes", 1514 .name = "io_service_bytes",
1497 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1515 .private = offsetof(struct cfq_group, stats.service_bytes),
1498 offsetof(struct cfq_group, stats.service_bytes)), 1516 .read_seq_string = cfqg_print_rwstat,
1499 .read_seq_string = blkcg_print_rwstat,
1500 }, 1517 },
1501 { 1518 {
1502 .name = "io_serviced", 1519 .name = "io_serviced",
1503 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1520 .private = offsetof(struct cfq_group, stats.serviced),
1504 offsetof(struct cfq_group, stats.serviced)), 1521 .read_seq_string = cfqg_print_rwstat,
1505 .read_seq_string = blkcg_print_rwstat,
1506 }, 1522 },
1507 { 1523 {
1508 .name = "io_service_time", 1524 .name = "io_service_time",
1509 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1525 .private = offsetof(struct cfq_group, stats.service_time),
1510 offsetof(struct cfq_group, stats.service_time)), 1526 .read_seq_string = cfqg_print_rwstat,
1511 .read_seq_string = blkcg_print_rwstat,
1512 }, 1527 },
1513 { 1528 {
1514 .name = "io_wait_time", 1529 .name = "io_wait_time",
1515 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1530 .private = offsetof(struct cfq_group, stats.wait_time),
1516 offsetof(struct cfq_group, stats.wait_time)), 1531 .read_seq_string = cfqg_print_rwstat,
1517 .read_seq_string = blkcg_print_rwstat,
1518 }, 1532 },
1519 { 1533 {
1520 .name = "io_merged", 1534 .name = "io_merged",
1521 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1535 .private = offsetof(struct cfq_group, stats.merged),
1522 offsetof(struct cfq_group, stats.merged)), 1536 .read_seq_string = cfqg_print_rwstat,
1523 .read_seq_string = blkcg_print_rwstat,
1524 }, 1537 },
1525 { 1538 {
1526 .name = "io_queued", 1539 .name = "io_queued",
1527 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1540 .private = offsetof(struct cfq_group, stats.queued),
1528 offsetof(struct cfq_group, stats.queued)), 1541 .read_seq_string = cfqg_print_rwstat,
1529 .read_seq_string = blkcg_print_rwstat,
1530 }, 1542 },
1531#ifdef CONFIG_DEBUG_BLK_CGROUP 1543#ifdef CONFIG_DEBUG_BLK_CGROUP
1532 { 1544 {
@@ -1535,33 +1547,28 @@ static struct cftype cfq_blkcg_files[] = {
1535 }, 1547 },
1536 { 1548 {
1537 .name = "group_wait_time", 1549 .name = "group_wait_time",
1538 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1550 .private = offsetof(struct cfq_group, stats.group_wait_time),
1539 offsetof(struct cfq_group, stats.group_wait_time)), 1551 .read_seq_string = cfqg_print_stat,
1540 .read_seq_string = blkcg_print_stat,
1541 }, 1552 },
1542 { 1553 {
1543 .name = "idle_time", 1554 .name = "idle_time",
1544 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1555 .private = offsetof(struct cfq_group, stats.idle_time),
1545 offsetof(struct cfq_group, stats.idle_time)), 1556 .read_seq_string = cfqg_print_stat,
1546 .read_seq_string = blkcg_print_stat,
1547 }, 1557 },
1548 { 1558 {
1549 .name = "empty_time", 1559 .name = "empty_time",
1550 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1560 .private = offsetof(struct cfq_group, stats.empty_time),
1551 offsetof(struct cfq_group, stats.empty_time)), 1561 .read_seq_string = cfqg_print_stat,
1552 .read_seq_string = blkcg_print_stat,
1553 }, 1562 },
1554 { 1563 {
1555 .name = "dequeue", 1564 .name = "dequeue",
1556 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1565 .private = offsetof(struct cfq_group, stats.dequeue),
1557 offsetof(struct cfq_group, stats.dequeue)), 1566 .read_seq_string = cfqg_print_stat,
1558 .read_seq_string = blkcg_print_stat,
1559 }, 1567 },
1560 { 1568 {
1561 .name = "unaccounted_time", 1569 .name = "unaccounted_time",
1562 .private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP, 1570 .private = offsetof(struct cfq_group, stats.unaccounted_time),
1563 offsetof(struct cfq_group, stats.unaccounted_time)), 1571 .read_seq_string = cfqg_print_stat,
1564 .read_seq_string = blkcg_print_stat,
1565 }, 1572 },
1566#endif /* CONFIG_DEBUG_BLK_CGROUP */ 1573#endif /* CONFIG_DEBUG_BLK_CGROUP */
1567 { } /* terminate */ 1574 { } /* terminate */