On 05.07.2017 19:48, ericnetdev dumazet wrote: > > > On Jul 5, 2017 5:39 PM, "Mika Penttilä" <mika.penttila@xxxxxxxxxxxx <mailto:mika.penttila@xxxxxxxxxxxx>> wrote: > > Hi! > > > On 05.07.2017 19:00, Eric Dumazet wrote: > > From: Eric Dumazet <edumazet@xxxxxxxxxx <mailto:edumazet@xxxxxxxxxx>> > > > > As discussed in Faro during Netfilter Workshop 2017, RB trees can be > > used with RCU, using a seqlock. > > > > Note that net/rxrpc/conn_service.c is already using this. > > > > This patch converts inetpeer from AVL tree to RB tree, since it allows > > to remove private AVL code in favor of shared RB code. > > > > $ size net/ipv4/inetpeer.before net/ipv4/inetpeer.after > > text data bss dec hex filename > > 3195 40 128 3363 d23 net/ipv4/inetpeer.before > > 1562 24 0 1586 632 net/ipv4/inetpeer.after > > > > The same technique can be used to speed up > > net/netfilter/nft_set_rbtree.c > > > > Signed-off-by: Eric Dumazet <edumazet@xxxxxxxxxx <mailto:edumazet@xxxxxxxxxx>> > > --- > > > > return p; > > @@ -467,8 +231,9 @@ EXPORT_SYMBOL_GPL(inet_getpeer); > > void inet_putpeer(struct inet_peer *p) > > { > > p->dtime = (__u32)jiffies; > > - smp_mb__before_atomic(); > > - refcount_dec(&p->refcnt); > > + > > + if (refcount_dec_and_test(&p->refcnt)) > > Missing rb_erase() here... > > > > I am pretty sure it is not missing. Have you tested your suggestion ? Thanks ! Sorry I missed the fact the tree holds one reference. > > > + call_rcu(&p->rcu, inetpeer_free_rcu); > > } > > EXPORT_SYMBOL_GPL(inet_putpeer); > > > > > --Mika > > > Thanks, Mika -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html