diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/tcp_westwood.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/net/ipv4/tcp_westwood.c b/net/ipv4/tcp_westwood.c index 12a2cd976e3a..edf2ee19a8ba 100644 --- a/net/ipv4/tcp_westwood.c +++ b/net/ipv4/tcp_westwood.c | |||
@@ -82,10 +82,16 @@ static inline u32 westwood_do_filter(u32 a, u32 b) | |||
82 | return (((7 * a) + b) >> 3); | 82 | return (((7 * a) + b) >> 3); |
83 | } | 83 | } |
84 | 84 | ||
85 | static inline void westwood_filter(struct westwood *w, u32 delta) | 85 | static void westwood_filter(struct westwood *w, u32 delta) |
86 | { | 86 | { |
87 | w->bw_ns_est = westwood_do_filter(w->bw_ns_est, w->bk / delta); | 87 | /* If the filter is empty fill it with the first sample of bandwidth */ |
88 | w->bw_est = westwood_do_filter(w->bw_est, w->bw_ns_est); | 88 | if (w->bw_ns_est == 0 && w->bw_est == 0) { |
89 | w->bw_ns_est = w->bk / delta; | ||
90 | w->bw_est = w->bw_ns_est; | ||
91 | } else { | ||
92 | w->bw_ns_est = westwood_do_filter(w->bw_ns_est, w->bk / delta); | ||
93 | w->bw_est = westwood_do_filter(w->bw_est, w->bw_ns_est); | ||
94 | } | ||
89 | } | 95 | } |
90 | 96 | ||
91 | /* | 97 | /* |