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 <o...@redhat.com> > Acked-by: Srikar Dronamraju <sri...@linux.vnet.ibm.com> Acked-by: Anton Arapov <ara...@gmail.com>
> --- > 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/