diff options
| author | Harald Welte <laforge@gnumonks.org> | 2004-02-19 22:52:20 -0800 |
|---|---|---|
| committer | David Woodhouse <dwmw2@dwmw2.baythorne.internal> | 2004-02-19 22:52:20 -0800 |
| commit | 2d5f5170998c77a476445bc889a7dca2dd294aa1 (patch) | |
| tree | 31a3c58a848d6584f914a7aee8f01ca4b5375177 /include | |
| parent | eb5ade9620008172a2e4464f839467bd875bd59e (diff) | |
[NETFILTER]: Resync with 2.4.x
- Update listhelp.h to benefit from prefetching
- More efficient selective_cleanup() impl. in conntrack
- Export number of conntrack buckets via r/o sysctl.
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/netfilter_ipv4/listhelp.h | 54 | ||||
| -rw-r--r-- | include/linux/sysctl.h | 1 |
2 files changed, 25 insertions, 30 deletions
diff --git a/include/linux/netfilter_ipv4/listhelp.h b/include/linux/netfilter_ipv4/listhelp.h index f19f448889d1..f2ae7c5e57bb 100644 --- a/include/linux/netfilter_ipv4/listhelp.h +++ b/include/linux/netfilter_ipv4/listhelp.h @@ -11,48 +11,42 @@ required to allow inlining of cmpfn. */ #define LIST_FIND(head, cmpfn, type, args...) \ ({ \ - const struct list_head *__i = (head); \ + const struct list_head *__i, *__j = NULL; \ \ ASSERT_READ_LOCK(head); \ - do { \ - __i = __i->next; \ - if (__i == (head)) { \ - __i = NULL; \ + list_for_each(__i, (head)) \ + if (cmpfn((const type)__i , ## args)) { \ + __j = __i; \ break; \ } \ - } while (!cmpfn((const type)__i , ## args)); \ - (type)__i; \ + (type)__j; \ }) -#define LIST_FIND_W(head, cmpfn, type, args...) \ -({ \ - const struct list_head *__i = (head); \ - \ - ASSERT_WRITE_LOCK(head); \ - do { \ - __i = __i->next; \ - if (__i == (head)) { \ - __i = NULL; \ - break; \ - } \ - } while (!cmpfn((type)__i , ## args)); \ - (type)__i; \ +#define LIST_FIND_W(head, cmpfn, type, args...) \ +({ \ + const struct list_head *__i, *__j = NULL; \ + \ + ASSERT_WRITE_LOCK(head); \ + list_for_each(__i, (head)) \ + if (cmpfn((type)__i , ## args)) { \ + __j = __i; \ + break; \ + } \ + (type)__j; \ }) /* Just like LIST_FIND but we search backwards */ #define LIST_FIND_B(head, cmpfn, type, args...) \ ({ \ - const struct list_head *__i = (head); \ + const struct list_head *__i, *__j = NULL; \ \ ASSERT_READ_LOCK(head); \ - do { \ - __i = __i->prev; \ - if (__i == (head)) { \ - __i = NULL; \ + list_for_each_prev(__i, (head)) \ + if (cmpfn((const type)__i , ## args)) { \ + __j = __i; \ break; \ } \ - } while (!cmpfn((const type)__i , ## args)); \ - (type)__i; \ + (type)__j; \ }) static inline int @@ -100,9 +94,9 @@ list_prepend(struct list_head *head, void *new) do { \ struct list_head *__i; \ ASSERT_WRITE_LOCK(head); \ - for (__i = (head)->next; \ - !cmpfn((new), (typeof (new))__i) && __i != (head); \ - __i = __i->next); \ + list_for_each(__i, (head)) \ + if ((new), (typeof (new))__i) \ + break; \ list_add((struct list_head *)(new), __i->prev); \ } while(0) diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index b192b7f018f5..f800e292d8a1 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -382,6 +382,7 @@ enum NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11, NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12, NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13, + NET_IPV4_NF_CONNTRACK_BUCKETS=14, }; /* /proc/sys/net/ipv6 */ |
