On 07/31, Andrii Nakryiko wrote:
>
> @@ -732,11 +776,13 @@ static struct uprobe *alloc_uprobe(struct inode *inode, 
> loff_t offset,
>       uprobe->ref_ctr_offset = ref_ctr_offset;
>       init_rwsem(&uprobe->register_rwsem);
>       init_rwsem(&uprobe->consumer_rwsem);
> +     RB_CLEAR_NODE(&uprobe->rb_node);

I guess RB_CLEAR_NODE() is not necessary?

> @@ -1286,15 +1296,19 @@ static void build_probe_list(struct inode *inode,
>                       u = rb_entry(t, struct uprobe, rb_node);
>                       if (u->inode != inode || u->offset < min)
>                               break;
> +                     u = try_get_uprobe(u);
> +                     if (!u) /* uprobe already went away, safe to ignore */
> +                             continue;
>                       list_add(&u->pending_list, head);

cosmetic nit, feel to ignore, but to me

                        if (try_get_uprobe(u))
                                list_add(&u->pending_list, head);

looks more readable.

Other than the lack of kfree() in put_uprobe() and WARN() in _unregister()
the patch looks good to me.

Oleg.


Reply via email to