Message ID | 20191114223128.GM4163745@devbig004.ftw2.facebook.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [block/for-next] blk-cgroup: cgroup_rstat_updated() shouldn't be called on cgroup1 | expand |
Hi, On 15/11/19 4:01 AM, Tejun Heo wrote: > Currently, cgroup rstat is supported only on cgroup2 hierarchy and > rstat functions shouldn't be called on cgroup1 cgroups. While > converting blk-cgroup core statistics to rstat, f73316482977 > ("blk-cgroup: reimplement basic IO stats using cgroup rstat") > accidentally ended up calling cgroup_rstat_updated() on cgroup1 > cgroups causing crashes. > > Longer term, we probably should add cgroup1 support to rstat but for > now let's mask the call directly. > > Signed-off-by: Tejun Heo <tj@kernel.org> > Fixes: f73316482977 ("blk-cgroup: reimplement basic IO stats using cgroup rstat") Tested-by: Faiz Abbas <faiz_abbas@ti.com> > --- > include/linux/blk-cgroup.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h > index 48a66738143d..19394c77ed99 100644 > --- a/include/linux/blk-cgroup.h > +++ b/include/linux/blk-cgroup.h > @@ -626,7 +626,8 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q, > bis->cur.ios[rwd]++; > > u64_stats_update_end(&bis->sync); > - cgroup_rstat_updated(blkg->blkcg->css.cgroup, cpu); > + if (cgroup_subsys_on_dfl(io_cgrp_subsys)) > + cgroup_rstat_updated(blkg->blkcg->css.cgroup, cpu); > put_cpu(); > } > > Thanks, Faiz
On 11/14/19 3:31 PM, Tejun Heo wrote: > Currently, cgroup rstat is supported only on cgroup2 hierarchy and > rstat functions shouldn't be called on cgroup1 cgroups. While > converting blk-cgroup core statistics to rstat, f73316482977 > ("blk-cgroup: reimplement basic IO stats using cgroup rstat") > accidentally ended up calling cgroup_rstat_updated() on cgroup1 > cgroups causing crashes. > > Longer term, we probably should add cgroup1 support to rstat but for > now let's mask the call directly. Applied, thanks.
diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index 48a66738143d..19394c77ed99 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -626,7 +626,8 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q, bis->cur.ios[rwd]++; u64_stats_update_end(&bis->sync); - cgroup_rstat_updated(blkg->blkcg->css.cgroup, cpu); + if (cgroup_subsys_on_dfl(io_cgrp_subsys)) + cgroup_rstat_updated(blkg->blkcg->css.cgroup, cpu); put_cpu(); }
Currently, cgroup rstat is supported only on cgroup2 hierarchy and rstat functions shouldn't be called on cgroup1 cgroups. While converting blk-cgroup core statistics to rstat, f73316482977 ("blk-cgroup: reimplement basic IO stats using cgroup rstat") accidentally ended up calling cgroup_rstat_updated() on cgroup1 cgroups causing crashes. Longer term, we probably should add cgroup1 support to rstat but for now let's mask the call directly. Signed-off-by: Tejun Heo <tj@kernel.org> Fixes: f73316482977 ("blk-cgroup: reimplement basic IO stats using cgroup rstat") --- include/linux/blk-cgroup.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)