lkml.org 
[lkml]   [2018]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 2/2] tracing: remove igrab() iput() call from uprobes.c
    On Fri, 20 Apr 2018 09:56:25 -0700
    Song Liu <songliubraving@fb.com> wrote:

    > Caller of uprobe_register is required to keep the inode and containing
    > mount point referenced.

    I would add a little more background to why this is the case. Also a
    possible link to the conversation?

    Link: http://lkml.kernel.org/r/CAELBmZB2XX=qEOLAdvGG4cPx4GEntcSnWQquJLUK1ongRj35cA@mail.gmail.com

    ?

    -- Steve

    >
    > Cc: Steven Rostedt <rostedt@goodmis.org>
    > Cc: Ingo Molnar <mingo@redhat.com>
    > Cc: Howard McLauchlan <hmclauchlan@fb.com>
    > Cc: Josef Bacik <jbacik@fb.com>
    > Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    > Cc: Miklos Szeredi <miklos@szeredi.hu>
    > Signed-off-by: Song Liu <songliubraving@fb.com>
    > ---
    > kernel/events/uprobes.c | 6 ++----
    > 1 file changed, 2 insertions(+), 4 deletions(-)
    >
    > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
    > index ce6848e..20486bb 100644
    > --- a/kernel/events/uprobes.c
    > +++ b/kernel/events/uprobes.c
    > @@ -491,7 +491,6 @@ static struct uprobe *alloc_uprobe(struct inode *inode, loff_t offset)
    > if (!uprobe)
    > return NULL;
    >
    > - uprobe->inode = igrab(inode);
    > uprobe->offset = offset;
    > init_rwsem(&uprobe->register_rwsem);
    > init_rwsem(&uprobe->consumer_rwsem);
    > @@ -502,7 +501,6 @@ static struct uprobe *alloc_uprobe(struct inode *inode, loff_t offset)
    > if (cur_uprobe) {
    > kfree(uprobe);
    > uprobe = cur_uprobe;
    > - iput(inode);
    > }
    >
    > return uprobe;
    > @@ -701,7 +699,6 @@ static void delete_uprobe(struct uprobe *uprobe)
    > rb_erase(&uprobe->rb_node, &uprobes_tree);
    > spin_unlock(&uprobes_treelock);
    > RB_CLEAR_NODE(&uprobe->rb_node); /* for uprobe_is_active() */
    > - iput(uprobe->inode);
    > put_uprobe(uprobe);
    > }
    >
    > @@ -873,7 +870,8 @@ static void __uprobe_unregister(struct uprobe *uprobe, struct uprobe_consumer *u
    > * tuple). Creation refcount stops uprobe_unregister from freeing the
    > * @uprobe even before the register operation is complete. Creation
    > * refcount is released when the last @uc for the @uprobe
    > - * unregisters.
    > + * unregisters. Caller of uprobe_register() is required to keep @inode
    > + * (and the containing mount) referenced.
    > *
    > * Return errno if it cannot successully install probes
    > * else return 0 (success)

    \
     
     \ /
      Last update: 2018-04-20 19:51    [W:3.580 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site