Hello, I've got just one nit, which is probably overcautious, so I don't insist: </snip> > @@ -231,8 +245,16 @@ void > pf_free_fragment(struct pf_fragment *frag) > { > struct pf_frent *frent; > + struct pf_frnode *frnode; > > - RB_REMOVE(pf_frag_tree, &pf_frag_tree, frag); > + frnode = frag->fr_node; > + RB_REMOVE(pf_frag_tree, &frnode->fn_tree, frag); > + KASSERT(frnode->fn_fragments >= 1); > + frnode->fn_fragments--; > + if (frnode->fn_fragments == 0) {
KASSERT(RB_EMPTY(&frnode->fn_tree)); > + RB_REMOVE(pf_frnode_tree, &pf_frnode_tree, frnode); > + pool_put(&pf_frnode_pl, frnode); > + } > TAILQ_REMOVE(&pf_fragqueue, frag, frag_next); > > /* Free all fragment entries */ I assume you are going to use fn_fragments as a 'timaout/aggression' factor, right? O.K. sashan@