[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <11973738392955-git-send-email-ilpo.jarvinen@helsinki.fi>
Date: Tue, 11 Dec 2007 13:50:39 +0200
From: "Ilpo Järvinen" <ilpo.jarvinen@...sinki.fi>
To: David Miller <davem@...emloft.net>
Cc: netdev@...r.kernel.org
Subject: [PATCH 2/2] [TCP]: Include __tcp_reset_fack_counts to non-__ version
This makes flow more obvious in case of short-circuit and
removes need for prev double pointer & fc recount per queue
switch.
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@...sinki.fi>
---
include/net/tcp.h | 54 ++++++++++++++++++----------------------------------
1 files changed, 19 insertions(+), 35 deletions(-)
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 2d9949e..5e6c433 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1467,38 +1467,6 @@ static inline void __tcp_add_write_queue_head(struct sock *sk, struct sk_buff *s
tcp_rb_insert(skb, &tcp_sk(sk)->write_queue_rb);
}
-static inline struct sk_buff *__tcp_reset_fack_counts(struct sock *sk,
- struct sk_buff *skb,
- struct sk_buff **prev,
- int queue)
-{
- unsigned int fc = 0;
-
- if (*prev != NULL)
- fc = TCP_SKB_CB(*prev)->fack_count + tcp_skb_pcount(*prev);
-
- BUG_ON((*prev != NULL) && !tcp_skb_adjacent(sk, *prev, skb));
-
- tcp_for_write_queue_from(skb, sk, queue) {
- if ((*prev != NULL) && !tcp_skb_adjacent(sk, *prev, skb))
- break;
-
- /* Terminate whole search? */
- if (!before(TCP_SKB_CB(skb)->seq, tcp_sk(sk)->snd_nxt) ||
- TCP_SKB_CB(skb)->fack_count == fc) {
- *prev = NULL;
- return NULL;
- }
-
- TCP_SKB_CB(skb)->fack_count = fc;
- fc += tcp_skb_pcount(skb);
-
- *prev = skb;
- }
-
- return skb;
-}
-
/* An insert into the middle of the write queue causes the fack
* counts in subsequent packets to become invalid, fix them up.
*
@@ -1509,6 +1477,7 @@ static inline void tcp_reset_fack_counts(struct sock *sk, struct sk_buff *inskb)
struct sk_buff *prev;
struct sk_buff *skb[2] = {NULL, NULL};
int queue;
+ unsigned int fc = 0;
if (!before(TCP_SKB_CB(inskb)->seq, tcp_sk(sk)->snd_nxt))
return;
@@ -1531,6 +1500,9 @@ static inline void tcp_reset_fack_counts(struct sock *sk, struct sk_buff *inskb)
skb[otherq] = prev->next;
}
+ if (prev != NULL)
+ fc = TCP_SKB_CB(prev)->fack_count + tcp_skb_pcount(prev);
+
while (skb[queue] != (struct sk_buff *)__tcp_list_select(sk, queue)) {
/* Lazy find for the other queue */
if (skb[queue] == NULL) {
@@ -1540,9 +1512,21 @@ static inline void tcp_reset_fack_counts(struct sock *sk, struct sk_buff *inskb)
break;
}
- skb[queue] = __tcp_reset_fack_counts(sk, skb[queue], &prev, queue);
- if (skb[queue] == NULL)
- break;
+ BUG_ON((prev != NULL) && !tcp_skb_adjacent(sk, prev, skb[queue]));
+
+ tcp_for_write_queue_from(skb[queue], sk, queue) {
+ if ((prev != NULL) && !tcp_skb_adjacent(sk, prev, skb[queue]))
+ break;
+
+ if (!before(TCP_SKB_CB(skb[queue])->seq, tcp_sk(sk)->snd_nxt) ||
+ TCP_SKB_CB(skb[queue])->fack_count == fc)
+ return;
+
+ TCP_SKB_CB(skb[queue])->fack_count = fc;
+ fc += tcp_skb_pcount(skb[queue]);
+
+ prev = skb[queue];
+ }
queue ^= TCP_WQ_SACKED;
}
--
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