Re: [PATCH 7/7] netfilter: connlimit: use rbtree for per-host conntrack obj storage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2014-03-07 at 14:37 +0100, Florian Westphal wrote:

> +	/* no match, need to insert new node */
> +	rbconn = kmem_cache_alloc(connlimit_rb_cachep, GFP_ATOMIC);
> +	if (rbconn == NULL)
> +		goto out;
>  
>  	conn = kmem_cache_alloc(connlimit_conn_cachep, GFP_ATOMIC);
> -	if (conn == NULL)
> -		return false;
> +	if (conn == NULL) {
> +		kmem_cache_free(connlimit_rb_cachep, rbconn);
> +		goto out;
> +	}
> +
>  	conn->tuple = *tuple;
>  	conn->addr = *addr;
> -	hlist_add_head(&conn->node, head);
> -	return true;
> +	rbconn->addr = *addr;
> +
> +	INIT_HLIST_HEAD(&rbconn->hhead);
> +	hlist_add_head(&conn->node, &rbconn->hhead);
> +
> +	rb_link_node(&rbconn->node, parent, rbnode);
> +	rb_insert_color(&rbconn->node, root);
> +	count = 1;
> + out:
> +	tree_nodes_free(root, gc_nodes, gc_count);
> +	return count;
>  }

Very nice work Florian

I would call tree_nodes_free() _before_ attempting the
kmem_cache_alloc(), so that the allocation can reuse a hot object that
you freed right before allocation.



--
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




[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux