[PATCH] ip_conntrack_ftp: improve performance of update_nl_seq
高昌利
xiaosuo at mail.nankai.edu.cn
Mon May 28 16:48:45 CEST 2007
[NETFILTER]: nf_conntrack_ftp: Improve the performance of update_nl_seq by using
temporary variables and changing the sequence of program.
----
Signed-off-by: xiaosuo <xiaosuo at gmail.com>
----
ip_conntrack_ftp.c | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
----
--- linux/net/ipv4/netfilter/ip_conntrack_ftp.c 2007-05-28 21:59:22.000000000
+0800
+++ linux-new/net/ipv4/netfilter/ip_conntrack_ftp.c 2007-05-28
22:36:07.000000000 +0800
@@ -264,25 +264,28 @@
static void update_nl_seq(u32 nl_seq, struct ip_ct_ftp_master *info, int dir,
struct sk_buff *skb)
{
- unsigned int i, oldest = NUM_SEQ_TO_REMEMBER;
+ unsigned int i, oldest;
+ u_int32_t *seq_aft_nl = info->seq_aft_nl[dir];
+ int seq_aft_nl_num = info->seq_aft_nl_num[dir];
- /* Look for oldest: if we find exact match, we're done. */
- for (i = 0; i < info->seq_aft_nl_num[dir]; i++) {
- if (info->seq_aft_nl[dir][i] == nl_seq)
- return;
+ if (seq_aft_nl_num < NUM_SEQ_TO_REMEMBER) {
+ seq_aft_nl[info->seq_aft_nl_num[dir]++] = nl_seq;
+ ip_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
+ return;
+ }
- if (oldest == info->seq_aft_nl_num[dir]
- || before(info->seq_aft_nl[dir][i], oldest))
+ for (oldest = 0, i = 1; i < seq_aft_nl_num; i ++) {
+ if (seq_aft_nl[oldest] == nl_seq)
+ return;
+ if (before(seq_aft_nl[i], seq_aft_nl[oldest]))
oldest = i;
}
- if (info->seq_aft_nl_num[dir] < NUM_SEQ_TO_REMEMBER) {
- info->seq_aft_nl[dir][info->seq_aft_nl_num[dir]++] = nl_seq;
- ip_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
- } else if (oldest != NUM_SEQ_TO_REMEMBER) {
- info->seq_aft_nl[dir][oldest] = nl_seq;
- ip_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
- }
+ if (nl_seq == seq_aft_nl[oldest] || before(nl_seq, seq_aft_nl[oldest]))
+ return;
+
+ seq_aft_nl[oldest] = nl_seq;
+ ip_conntrack_event_cache(IPCT_HELPINFO_VOLATILE, skb);
}
static int help(struct sk_buff **pskb,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ip_conntrack_ftp-tuning.patch
Type: application/octet-stream
Size: 1640 bytes
Desc: not available
Url : /pipermail/netfilter-devel/attachments/20070528/bd655ef8/ip_conntrack_ftp-tuning.obj
More information about the netfilter-devel
mailing list