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/

Reply via email to