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@