diff options
author | Wong Hoi Sing Edison <hswong3i@gmail.com> | 2006-09-13 23:30:30 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-18 02:21:09 -0400 |
commit | 3795da47e82ee0596174f52817d6d3ecd91f68ea (patch) | |
tree | 73a37568349bcefb554af606fa2363091f9828ad | |
parent | 485c2967d622449f4bbfae305a6fc4e185b5b094 (diff) |
[TCP] tcp-lp: bug fix for oops in 2.6.18-rc6
Sorry that the patch submited yesterday still contain a small bug.
This version have already been test for hours with BT connections. The
oops is now difficult to reproduce.
Signed-off-by: Wong Hoi Sing Edison <hswong3i@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/ipv4/tcp_lp.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/net/ipv4/tcp_lp.c b/net/ipv4/tcp_lp.c index 1f977b6ee9a1..48f28d617ce6 100644 --- a/net/ipv4/tcp_lp.c +++ b/net/ipv4/tcp_lp.c | |||
@@ -3,13 +3,8 @@ | |||
3 | * | 3 | * |
4 | * TCP Low Priority is a distributed algorithm whose goal is to utilize only | 4 | * TCP Low Priority is a distributed algorithm whose goal is to utilize only |
5 | * the excess network bandwidth as compared to the ``fair share`` of | 5 | * the excess network bandwidth as compared to the ``fair share`` of |
6 | * bandwidth as targeted by TCP. Available from: | 6 | * bandwidth as targeted by TCP. |
7 | * http://www.ece.rice.edu/~akuzma/Doc/akuzma/TCP-LP.pdf | ||
8 | * | 7 | * |
9 | * Original Author: | ||
10 | * Aleksandar Kuzmanovic <akuzma@northwestern.edu> | ||
11 | * | ||
12 | * See http://www-ece.rice.edu/networks/TCP-LP/ for their implementation. | ||
13 | * As of 2.6.13, Linux supports pluggable congestion control algorithms. | 8 | * As of 2.6.13, Linux supports pluggable congestion control algorithms. |
14 | * Due to the limitation of the API, we take the following changes from | 9 | * Due to the limitation of the API, we take the following changes from |
15 | * the original TCP-LP implementation: | 10 | * the original TCP-LP implementation: |
@@ -24,11 +19,20 @@ | |||
24 | * o OWD is handled in relative format, where local time stamp will in | 19 | * o OWD is handled in relative format, where local time stamp will in |
25 | * tcp_time_stamp format. | 20 | * tcp_time_stamp format. |
26 | * | 21 | * |
27 | * Port from 2.4.19 to 2.6.16 as module by: | 22 | * Original Author: |
28 | * Wong Hoi Sing Edison <hswong3i@gmail.com> | 23 | * Aleksandar Kuzmanovic <akuzma@northwestern.edu> |
29 | * Hung Hing Lun <hlhung3i@gmail.com> | 24 | * Available from: |
25 | * http://www.ece.rice.edu/~akuzma/Doc/akuzma/TCP-LP.pdf | ||
26 | * Original implementation for 2.4.19: | ||
27 | * http://www-ece.rice.edu/networks/TCP-LP/ | ||
30 | * | 28 | * |
31 | * Version: $Id: tcp_lp.c,v 1.22 2006-05-02 18:18:19 hswong3i Exp $ | 29 | * 2.6.x module Authors: |
30 | * Wong Hoi Sing, Edison <hswong3i@gmail.com> | ||
31 | * Hung Hing Lun, Mike <hlhung3i@gmail.com> | ||
32 | * SourceForge project page: | ||
33 | * http://tcp-lp-mod.sourceforge.net/ | ||
34 | * | ||
35 | * Version: $Id: tcp_lp.c,v 1.24 2006/09/05 20:22:53 hswong3i Exp $ | ||
32 | */ | 36 | */ |
33 | 37 | ||
34 | #include <linux/config.h> | 38 | #include <linux/config.h> |
@@ -153,16 +157,19 @@ static u32 tcp_lp_remote_hz_estimator(struct sock *sk) | |||
153 | if (m < 0) | 157 | if (m < 0) |
154 | m = -m; | 158 | m = -m; |
155 | 159 | ||
156 | if (rhz != 0) { | 160 | if (rhz > 0) { |
157 | m -= rhz >> 6; /* m is now error in remote HZ est */ | 161 | m -= rhz >> 6; /* m is now error in remote HZ est */ |
158 | rhz += m; /* 63/64 old + 1/64 new */ | 162 | rhz += m; /* 63/64 old + 1/64 new */ |
159 | } else | 163 | } else |
160 | rhz = m << 6; | 164 | rhz = m << 6; |
161 | 165 | ||
166 | out: | ||
162 | /* record time for successful remote HZ calc */ | 167 | /* record time for successful remote HZ calc */ |
163 | lp->flag |= LP_VALID_RHZ; | 168 | if (rhz > 0) |
169 | lp->flag |= LP_VALID_RHZ; | ||
170 | else | ||
171 | lp->flag &= ~LP_VALID_RHZ; | ||
164 | 172 | ||
165 | out: | ||
166 | /* record reference time stamp */ | 173 | /* record reference time stamp */ |
167 | lp->remote_ref_time = tp->rx_opt.rcv_tsval; | 174 | lp->remote_ref_time = tp->rx_opt.rcv_tsval; |
168 | lp->local_ref_time = tp->rx_opt.rcv_tsecr; | 175 | lp->local_ref_time = tp->rx_opt.rcv_tsecr; |
@@ -333,6 +340,6 @@ static void __exit tcp_lp_unregister(void) | |||
333 | module_init(tcp_lp_register); | 340 | module_init(tcp_lp_register); |
334 | module_exit(tcp_lp_unregister); | 341 | module_exit(tcp_lp_unregister); |
335 | 342 | ||
336 | MODULE_AUTHOR("Wong Hoi Sing Edison, Hung Hing Lun"); | 343 | MODULE_AUTHOR("Wong Hoi Sing Edison, Hung Hing Lun Mike"); |
337 | MODULE_LICENSE("GPL"); | 344 | MODULE_LICENSE("GPL"); |
338 | MODULE_DESCRIPTION("TCP Low Priority"); | 345 | MODULE_DESCRIPTION("TCP Low Priority"); |