Skip to content

Commit

Permalink
blkcg: drop BLKCG_STAT_{PRIV|POL|OFF} macros
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tejun Heo committed Apr 1, 2012
1 parent d366e7e commit 5bc4afb
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 84 deletions.
48 changes: 20 additions & 28 deletions block/blk-cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,43 +430,35 @@ u64 __blkg_prfill_rwstat(struct seq_file *sf, void *pdata,
return v;
}

static u64 blkg_prfill_stat(struct seq_file *sf, void *pdata, int off)
/**
* blkg_prfill_stat - prfill callback for blkg_stat
* @sf: seq_file to print to
* @pdata: policy private data of interest
* @off: offset to the blkg_stat in @pdata
*
* prfill callback for printing a blkg_stat.
*/
u64 blkg_prfill_stat(struct seq_file *sf, void *pdata, int off)
{
return __blkg_prfill_u64(sf, pdata, blkg_stat_read(pdata + off));
}
EXPORT_SYMBOL_GPL(blkg_prfill_stat);

static u64 blkg_prfill_rwstat(struct seq_file *sf, void *pdata, int off)
/**
* blkg_prfill_rwstat - prfill callback for blkg_rwstat
* @sf: seq_file to print to
* @pdata: policy private data of interest
* @off: offset to the blkg_rwstat in @pdata
*
* prfill callback for printing a blkg_rwstat.
*/
u64 blkg_prfill_rwstat(struct seq_file *sf, void *pdata, int off)
{
struct blkg_rwstat rwstat = blkg_rwstat_read(pdata + off);

return __blkg_prfill_rwstat(sf, pdata, &rwstat);
}

/* print blkg_stat specified by BLKCG_STAT_PRIV() */
int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf)
{
struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);

blkcg_print_blkgs(sf, blkcg, blkg_prfill_stat,
BLKCG_STAT_POL(cft->private),
BLKCG_STAT_OFF(cft->private), false);
return 0;
}
EXPORT_SYMBOL_GPL(blkcg_print_stat);

/* print blkg_rwstat specified by BLKCG_STAT_PRIV() */
int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf)
{
struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);

blkcg_print_blkgs(sf, blkcg, blkg_prfill_rwstat,
BLKCG_STAT_POL(cft->private),
BLKCG_STAT_OFF(cft->private), true);
return 0;
}
EXPORT_SYMBOL_GPL(blkcg_print_rwstat);
EXPORT_SYMBOL_GPL(blkg_prfill_rwstat);

/**
* blkg_conf_prep - parse and prepare for per-blkg config update
Expand Down
11 changes: 2 additions & 9 deletions block/blk-cgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ enum blkio_policy_id {
#define CFQ_WEIGHT_MAX 1000
#define CFQ_WEIGHT_DEFAULT 500

/* cft->private [un]packing for stat printing */
#define BLKCG_STAT_PRIV(pol, off) (((unsigned)(pol) << 16) | (off))
#define BLKCG_STAT_POL(prv) ((unsigned)(prv) >> 16)
#define BLKCG_STAT_OFF(prv) ((unsigned)(prv) & 0xffff)

enum blkg_rwstat_type {
BLKG_RWSTAT_READ,
BLKG_RWSTAT_WRITE,
Expand Down Expand Up @@ -131,10 +126,8 @@ void blkcg_print_blkgs(struct seq_file *sf, struct blkio_cgroup *blkcg,
u64 __blkg_prfill_u64(struct seq_file *sf, void *pdata, u64 v);
u64 __blkg_prfill_rwstat(struct seq_file *sf, void *pdata,
const struct blkg_rwstat *rwstat);
int blkcg_print_stat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf);
int blkcg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf);
u64 blkg_prfill_stat(struct seq_file *sf, void *pdata, int off);
u64 blkg_prfill_rwstat(struct seq_file *sf, void *pdata, int off);

struct blkg_conf_ctx {
struct gendisk *disk;
Expand Down
12 changes: 4 additions & 8 deletions block/blk-throttle.c
Original file line number Diff line number Diff line change
Expand Up @@ -941,15 +941,13 @@ static u64 tg_prfill_cpu_rwstat(struct seq_file *sf, void *pdata, int off)
return __blkg_prfill_rwstat(sf, pdata, &rwstat);
}

/* print per-cpu blkg_rwstat specified by BLKCG_STAT_PRIV() */
static int tg_print_cpu_rwstat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf)
{
struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);

blkcg_print_blkgs(sf, blkcg, tg_prfill_cpu_rwstat,
BLKCG_STAT_POL(cft->private),
BLKCG_STAT_OFF(cft->private), true);
blkcg_print_blkgs(sf, blkcg, tg_prfill_cpu_rwstat, BLKIO_POLICY_THROTL,
cft->private, true);
return 0;
}

Expand Down Expand Up @@ -1067,14 +1065,12 @@ static struct cftype throtl_files[] = {
},
{
.name = "throttle.io_service_bytes",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_THROTL,
offsetof(struct tg_stats_cpu, service_bytes)),
.private = offsetof(struct tg_stats_cpu, service_bytes),
.read_seq_string = tg_print_cpu_rwstat,
},
{
.name = "throttle.io_serviced",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_THROTL,
offsetof(struct tg_stats_cpu, serviced)),
.private = offsetof(struct tg_stats_cpu, serviced),
.read_seq_string = tg_print_cpu_rwstat,
},
{ } /* terminate */
Expand Down
85 changes: 46 additions & 39 deletions block/cfq-iosched.c
Original file line number Diff line number Diff line change
Expand Up @@ -1441,6 +1441,26 @@ static int cfq_set_weight(struct cgroup *cgrp, struct cftype *cft, u64 val)
return 0;
}

static int cfqg_print_stat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf)
{
struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);

blkcg_print_blkgs(sf, blkcg, blkg_prfill_stat, BLKIO_POLICY_PROP,
cft->private, false);
return 0;
}

static int cfqg_print_rwstat(struct cgroup *cgrp, struct cftype *cft,
struct seq_file *sf)
{
struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgrp);

blkcg_print_blkgs(sf, blkcg, blkg_prfill_rwstat, BLKIO_POLICY_PROP,
cft->private, true);
return 0;
}

#ifdef CONFIG_DEBUG_BLK_CGROUP
static u64 cfqg_prfill_avg_queue_size(struct seq_file *sf, void *pdata, int off)
{
Expand Down Expand Up @@ -1482,51 +1502,43 @@ static struct cftype cfq_blkcg_files[] = {
},
{
.name = "time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.time)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.time),
.read_seq_string = cfqg_print_stat,
},
{
.name = "sectors",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.sectors)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.sectors),
.read_seq_string = cfqg_print_stat,
},
{
.name = "io_service_bytes",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.service_bytes)),
.read_seq_string = blkcg_print_rwstat,
.private = offsetof(struct cfq_group, stats.service_bytes),
.read_seq_string = cfqg_print_rwstat,
},
{
.name = "io_serviced",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.serviced)),
.read_seq_string = blkcg_print_rwstat,
.private = offsetof(struct cfq_group, stats.serviced),
.read_seq_string = cfqg_print_rwstat,
},
{
.name = "io_service_time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.service_time)),
.read_seq_string = blkcg_print_rwstat,
.private = offsetof(struct cfq_group, stats.service_time),
.read_seq_string = cfqg_print_rwstat,
},
{
.name = "io_wait_time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.wait_time)),
.read_seq_string = blkcg_print_rwstat,
.private = offsetof(struct cfq_group, stats.wait_time),
.read_seq_string = cfqg_print_rwstat,
},
{
.name = "io_merged",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.merged)),
.read_seq_string = blkcg_print_rwstat,
.private = offsetof(struct cfq_group, stats.merged),
.read_seq_string = cfqg_print_rwstat,
},
{
.name = "io_queued",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.queued)),
.read_seq_string = blkcg_print_rwstat,
.private = offsetof(struct cfq_group, stats.queued),
.read_seq_string = cfqg_print_rwstat,
},
#ifdef CONFIG_DEBUG_BLK_CGROUP
{
Expand All @@ -1535,33 +1547,28 @@ static struct cftype cfq_blkcg_files[] = {
},
{
.name = "group_wait_time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.group_wait_time)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.group_wait_time),
.read_seq_string = cfqg_print_stat,
},
{
.name = "idle_time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.idle_time)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.idle_time),
.read_seq_string = cfqg_print_stat,
},
{
.name = "empty_time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.empty_time)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.empty_time),
.read_seq_string = cfqg_print_stat,
},
{
.name = "dequeue",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.dequeue)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.dequeue),
.read_seq_string = cfqg_print_stat,
},
{
.name = "unaccounted_time",
.private = BLKCG_STAT_PRIV(BLKIO_POLICY_PROP,
offsetof(struct cfq_group, stats.unaccounted_time)),
.read_seq_string = blkcg_print_stat,
.private = offsetof(struct cfq_group, stats.unaccounted_time),
.read_seq_string = cfqg_print_stat,
},
#endif /* CONFIG_DEBUG_BLK_CGROUP */
{ } /* terminate */
Expand Down

0 comments on commit 5bc4afb

Please sign in to comment.