cfq-iosched: fix sysfs oops when attempting to read unconfigured weights
If none of the devices in the system are using CFQ, then attempting to
read:
/sys/fs/cgroup/blkio/blkio.leaf_weight
will results in a NULL dereference. Check for a valid cfq_group_data
struct before attempting to dereference it.
Reported-by: Andrey Wagin <avagin@gmail.com>
Fixes: e48453c3
("block, cgroup: implement policy-specific per-blkcg data")
Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
4ceab71b9d
commit
9470e4a693
|
@ -1714,16 +1714,26 @@ static int cfqg_print_leaf_weight_device(struct seq_file *sf, void *v)
|
|||
static int cfq_print_weight(struct seq_file *sf, void *v)
|
||||
{
|
||||
struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
|
||||
struct cfq_group_data *cgd = blkcg_to_cfqgd(blkcg);
|
||||
unsigned int val = 0;
|
||||
|
||||
seq_printf(sf, "%u\n", blkcg_to_cfqgd(blkcg)->weight);
|
||||
if (cgd)
|
||||
val = cgd->weight;
|
||||
|
||||
seq_printf(sf, "%u\n", val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cfq_print_leaf_weight(struct seq_file *sf, void *v)
|
||||
{
|
||||
struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
|
||||
struct cfq_group_data *cgd = blkcg_to_cfqgd(blkcg);
|
||||
unsigned int val = 0;
|
||||
|
||||
seq_printf(sf, "%u\n", blkcg_to_cfqgd(blkcg)->leaf_weight);
|
||||
if (cgd)
|
||||
val = cgd->leaf_weight;
|
||||
|
||||
seq_printf(sf, "%u\n", val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue