Messages in this thread | | | Subject | Re: [RFC][PATCH 2/9] perf: Clean up ctx reference counting | From | Lin Ming <> | Date | Mon, 11 Apr 2011 14:05:48 +0800 |
| |
On Sun, 2011-04-10 at 03:17 +0800, Peter Zijlstra wrote: > Small cleanup to how we refcount in find_get_context(), this also > allows us to use put_ctx() to free things instead of using kfree(). > > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> > --- > kernel/perf_event.c | 10 +++------- > 1 file changed, 3 insertions(+), 7 deletions(-) > > Index: linux-2.6/kernel/perf_event.c > =================================================================== > --- linux-2.6.orig/kernel/perf_event.c > +++ linux-2.6/kernel/perf_event.c > @@ -2831,16 +2831,12 @@ find_get_context(struct pmu *pmu, struct > unclone_ctx(ctx); > ++ctx->pin_count; > raw_spin_unlock_irqrestore(&ctx->lock, flags); > - } > - > - if (!ctx) { > + } else { > ctx = alloc_perf_context(pmu, task); > err = -ENOMEM; > if (!ctx) > goto errout; > > - get_ctx(ctx); > - > err = 0; > mutex_lock(&task->perf_event_mutex); > /* > @@ -2852,14 +2848,14 @@ find_get_context(struct pmu *pmu, struct > else if (task->perf_event_ctxp[ctxn]) > err = -EAGAIN; > else { > + get_ctx(ctx); > ++ctx->pin_count; > rcu_assign_pointer(task->perf_event_ctxp[ctxn], ctx); > } > mutex_unlock(&task->perf_event_mutex); > > if (unlikely(err)) { > - put_task_struct(task); > - kfree(ctx); > + put_ctx(ctx);
You moved the get_ctx(), so it seems that this put_ctx is missing its relevant get_ctx.
Lin Ming
> > if (err == -EAGAIN) > goto retry; > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
| |