From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757118AbbGGMo4 (ORCPT ); Tue, 7 Jul 2015 08:44:56 -0400 Received: from mail-wg0-f44.google.com ([74.125.82.44]:35396 "EHLO mail-wg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756589AbbGGMor (ORCPT ); Tue, 7 Jul 2015 08:44:47 -0400 Date: Tue, 7 Jul 2015 14:44:42 +0200 From: Anton Arapov To: Oleg Nesterov Cc: Ananth Mavinakayanahalli , David Long , Denys Vlasenko , "Frank Ch. Eigler" , Ingo Molnar , Jan Willeke , Jim Keniston , Mark Wielaard , Pratyush Anand , Srikar Dronamraju , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 01/11] uprobes: Introduce get_uprobe() Message-ID: <20150707124442.GA5946@troglodyte.intinfra.com> References: <20150707012210.GA7466@redhat.com> <20150707012235.GA7490@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150707012235.GA7490@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jul 07, 2015 at 03:22:35AM +0200, Oleg Nesterov wrote: > Cosmetic. Add the new trivial helper, get_uprobe(). It matches > put_uprobe() we already have and we can simplify a couple of its > users. > > Signed-off-by: Oleg Nesterov > Acked-by: Srikar Dronamraju Acked-by: Anton Arapov > --- > kernel/events/uprobes.c | 39 ++++++++++++++++++++------------------- > 1 files changed, 20 insertions(+), 19 deletions(-) > > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index cb346f2..a9847b4 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -366,6 +366,18 @@ set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long v > return uprobe_write_opcode(mm, vaddr, *(uprobe_opcode_t *)&auprobe->insn); > } > > +static struct uprobe *get_uprobe(struct uprobe *uprobe) > +{ > + atomic_inc(&uprobe->ref); > + return uprobe; > +} > + > +static void put_uprobe(struct uprobe *uprobe) > +{ > + if (atomic_dec_and_test(&uprobe->ref)) > + kfree(uprobe); > +} > + > static int match_uprobe(struct uprobe *l, struct uprobe *r) > { > if (l->inode < r->inode) > @@ -393,10 +405,8 @@ static struct uprobe *__find_uprobe(struct inode *inode, loff_t offset) > while (n) { > uprobe = rb_entry(n, struct uprobe, rb_node); > match = match_uprobe(&u, uprobe); > - if (!match) { > - atomic_inc(&uprobe->ref); > - return uprobe; > - } > + if (!match) > + return get_uprobe(uprobe); > > if (match < 0) > n = n->rb_left; > @@ -432,10 +442,8 @@ static struct uprobe *__insert_uprobe(struct uprobe *uprobe) > parent = *p; > u = rb_entry(parent, struct uprobe, rb_node); > match = match_uprobe(uprobe, u); > - if (!match) { > - atomic_inc(&u->ref); > - return u; > - } > + if (!match) > + return get_uprobe(u); > > if (match < 0) > p = &parent->rb_left; > @@ -472,12 +480,6 @@ static struct uprobe *insert_uprobe(struct uprobe *uprobe) > return u; > } > > -static void put_uprobe(struct uprobe *uprobe) > -{ > - if (atomic_dec_and_test(&uprobe->ref)) > - kfree(uprobe); > -} > - > static struct uprobe *alloc_uprobe(struct inode *inode, loff_t offset) > { > struct uprobe *uprobe, *cur_uprobe; > @@ -1039,14 +1041,14 @@ static void build_probe_list(struct inode *inode, > if (u->inode != inode || u->offset < min) > break; > list_add(&u->pending_list, head); > - atomic_inc(&u->ref); > + get_uprobe(u); > } > for (t = n; (t = rb_next(t)); ) { > u = rb_entry(t, struct uprobe, rb_node); > if (u->inode != inode || u->offset > max) > break; > list_add(&u->pending_list, head); > - atomic_inc(&u->ref); > + get_uprobe(u); > } > } > spin_unlock(&uprobes_treelock); > @@ -1437,7 +1439,7 @@ static int dup_utask(struct task_struct *t, struct uprobe_task *o_utask) > return -ENOMEM; > > *n = *o; > - atomic_inc(&n->uprobe->ref); > + get_uprobe(n->uprobe); > n->next = NULL; > > *p = n; > @@ -1565,8 +1567,7 @@ static void prepare_uretprobe(struct uprobe *uprobe, struct pt_regs *regs) > orig_ret_vaddr = utask->return_instances->orig_ret_vaddr; > } > > - atomic_inc(&uprobe->ref); > - ri->uprobe = uprobe; > + ri->uprobe = get_uprobe(uprobe); > ri->func = instruction_pointer(regs); > ri->orig_ret_vaddr = orig_ret_vaddr; > ri->chained = chained; > -- > 1.5.5.1 >