[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1196549297779-git-send-email-ilpo.jarvinen@helsinki.fi>
Date: Sun, 2 Dec 2007 00:48:10 +0200
From: "Ilpo Järvinen" <ilpo.jarvinen@...sinki.fi>
To: David Miller <davem@...emloft.net>,
Herbert Xu <herbert@...dor.apana.org.au>
Cc: netdev@...r.kernel.org,
Stephen Hemminger <shemminger@...ux-foundation.org>,
"Ilpo Järvinen" <ilpo.jarvinen@...sinki.fi>
Subject: [PATCH 15/21] [TCP]: Use per skb fack count instead of function argument
From: =?ISO-8859-1?q?Ilpo_J=E4rvinen?= <ilpo.jarvinen@...sinki.fi>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@...sinki.fi>
---
net/ipv4/tcp_input.c | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 8a02de2..cc61916 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -1328,12 +1328,16 @@ static int tcp_sacktag_one(struct sk_buff *skb, struct sock *sk,
static struct sk_buff *tcp_sacktag_walk(struct sk_buff *skb, struct sock *sk,
struct tcp_sack_block *next_dup,
u32 start_seq, u32 end_seq,
- int dup_sack_in, int *fack_count,
- int *reord, int *flag)
+ int dup_sack_in, int *reord, int *flag)
{
+ unsigned int fack_count_base;
+
+ fack_count_base = TCP_SKB_CB(tcp_write_queue_head(sk))->fack_count;
+
tcp_for_write_queue_from(skb, sk, 0) {
int in_sack = 0;
int dup_sack = dup_sack_in;
+ unsigned int fack_count;
if (skb == tcp_send_head(sk))
break;
@@ -1356,10 +1360,10 @@ static struct sk_buff *tcp_sacktag_walk(struct sk_buff *skb, struct sock *sk,
if (unlikely(in_sack < 0))
break;
- if (in_sack)
- *flag |= tcp_sacktag_one(skb, sk, reord, dup_sack, *fack_count);
-
- *fack_count += tcp_skb_pcount(skb);
+ if (in_sack) {
+ fack_count = TCP_SKB_CB(skb)->fack_count - fack_count_base;
+ *flag |= tcp_sacktag_one(skb, sk, reord, dup_sack, fack_count);
+ }
}
return skb;
}
@@ -1384,7 +1388,7 @@ static struct sk_buff *tcp_maybe_skipping_dsack(struct sk_buff *skb,
struct sock *sk,
struct tcp_sack_block *next_dup,
u32 skip_to_seq,
- int *fack_count, int *reord,
+ int *reord,
int *flag)
{
if (next_dup == NULL)
@@ -1394,7 +1398,7 @@ static struct sk_buff *tcp_maybe_skipping_dsack(struct sk_buff *skb,
skb = tcp_sacktag_skip(skb, sk, next_dup->start_seq);
tcp_sacktag_walk(skb, sk, NULL,
next_dup->start_seq, next_dup->end_seq,
- 1, fack_count, reord, flag);
+ 1, reord, flag);
}
return skb;
@@ -1421,7 +1425,6 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
int reord = tp->packets_out;
int flag = 0;
int found_dup_sack = 0;
- int fack_count;
int i, j;
int first_sack_index;
@@ -1499,7 +1502,6 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
}
skb = tcp_write_queue_head(sk);
- fack_count = 0;
i = 0;
if (!tp->sacked_out) {
@@ -1540,7 +1542,7 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
skb = tcp_sacktag_skip(skb, sk, start_seq);
skb = tcp_sacktag_walk(skb, sk, next_dup, start_seq,
cache->start_seq, dup_sack,
- &fack_count, &reord, &flag);
+ &reord, &flag);
}
/* Rest of the block already fully processed? */
@@ -1548,7 +1550,7 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
goto advance_sp;
skb = tcp_maybe_skipping_dsack(skb, sk, next_dup, cache->end_seq,
- &fack_count, &reord, &flag);
+ &reord, &flag);
/* ...tail remains todo... */
if (tcp_highest_sack_seq(tp) == cache->end_seq) {
@@ -1556,7 +1558,6 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
skb = tcp_highest_sack(sk);
if (skb == NULL)
break;
- fack_count = tp->fackets_out;
cache++;
goto walk;
}
@@ -1571,13 +1572,12 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
skb = tcp_highest_sack(sk);
if (skb == NULL)
break;
- fack_count = tp->fackets_out;
}
skb = tcp_sacktag_skip(skb, sk, start_seq);
walk:
skb = tcp_sacktag_walk(skb, sk, next_dup, start_seq, end_seq,
- dup_sack, &fack_count, &reord, &flag);
+ dup_sack, &reord, &flag);
advance_sp:
/* SACK enhanced FRTO (RFC4138, Appendix B): Clearing correct
--
1.5.0.6
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists