> > + spin_lock_irqsave(&treelock, flags); > > + while (*p) { > > + parent = *p; > > + u = rb_entry(parent, struct uprobe, rb_node); > > + if (u->inode > uprobe->inode) > > + p = &(*p)->rb_left; > > + else if (u->inode < uprobe->inode) > > + p = &(*p)->rb_right; > > + else { > > + if (u->offset > uprobe->offset) > > + p = &(*p)->rb_left; > > + else if (u->offset < uprobe->offset) > > + p = &(*p)->rb_right; > > + else { > > + atomic_inc(&u->ref); > > If the lookup can find a 'dead' entry, then why can't we here? > If a new user of a uprobe comes up as when the last registered user was removing the uprobe, we keep the uprobe entry till the new user loses interest in that uprobe. > > + goto unlock_return; > > + } > > + } > > + } > > + u = NULL; > > + rb_link_node(&uprobe->rb_node, parent, p); > > + rb_insert_color(&uprobe->rb_node, &uprobes_tree); > > + atomic_set(&uprobe->ref, 2); > > + > > +unlock_return: > > + spin_unlock_irqrestore(&treelock, flags); > > + return u; > > +} > > It would be nice if you could merge the find and 'acquire' thing, the > lookup is basically the same in both cases. > > Also, I'm not quite sure on the name of that last function, its not a > strict insert and what's the trailing _rb_node about? That lookup isn't > called find_uprobe_rb_node() either is it? Since we already have a install_uprobe, register_uprobe, I thought insert_uprobe_rb_node would give context to that function that it was only inserting an rb_node but not installing the actual breakpoint. I am okay to rename it to insert_uprobe(). -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>