On Fri, Apr 27, 2012 at 10:26:52AM -0400, Vivek Goyal wrote: > On Thu, Apr 26, 2012 at 02:59:11PM -0700, Tejun Heo wrote: > > When policy data allocation fails in the middle, blkg_alloc() invokes > > blkg_free() to destroy the half constructed blkg. This ends up > > calling pd_exit_fn() on policy datas which didn't go through > > pd_init_fn(). Fix it by making blkg_alloc() call pd_init_fn() > > immediately after each policy data allocation. > > > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > > Cc: Vivek Goyal <vgoyal@xxxxxxxxxx> > > --- > > block/blk-cgroup.c | 6 +----- > > 1 files changed, 1 insertions(+), 5 deletions(-) > > > > diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c > > index 02cf633..4ab7420 100644 > > --- a/block/blk-cgroup.c > > +++ b/block/blk-cgroup.c > > @@ -125,12 +125,8 @@ static struct blkcg_gq *blkg_alloc(struct blkcg *blkcg, struct request_queue *q) > > > > blkg->pd[i] = pd; > > pd->blkg = blkg; > > - } > > - > > - /* invoke per-policy init */ > > - for (i = 0; i < BLKCG_MAX_POLS; i++) { > > - struct blkcg_policy *pol = blkcg_policy[i]; > > > > + /* invoke per-policy init */ > > if (blkcg_policy_enabled(blkg->q, pol)) > > pol->pd_init_fn(blkg); > > Deja Vu. In one of the mails I had said that how about moving init_fn > in upper loop and get rid of for loop below. Then retracted it saying > probably you wanted to allocate all the groups first before calling > init functions of individual policies. Here we are back again for a > different reason though. :-) Heh, yeah, should have updated it then. :) -- tejun -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html