mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
[UDP]: Fix reversed logic in udp_get_port().
When this code was converted to use sk_for_each() the logic for the "best hash chain length" code was reversed, breaking everything. The original code was of the form: size = 0; do { if (++size >= best_size_so_far) goto next; } while ((sk = sk->next) != NULL); best_size_so_far = size; best = result; next:; and this got converted into: sk_for_each(sk2, node, head) if (++size < best_size_so_far) { best_size_so_far = size; best = result; } Which does something very very different from the original. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b23e353666
commit
5c668704b7
1 changed files with 8 additions and 5 deletions
|
@ -165,11 +165,14 @@ int __udp_lib_get_port(struct sock *sk, unsigned short snum,
|
|||
goto gotit;
|
||||
}
|
||||
size = 0;
|
||||
sk_for_each(sk2, node, head)
|
||||
if (++size < best_size_so_far) {
|
||||
best_size_so_far = size;
|
||||
best = result;
|
||||
}
|
||||
sk_for_each(sk2, node, head) {
|
||||
if (++size >= best_size_so_far)
|
||||
goto next;
|
||||
}
|
||||
best_size_so_far = size;
|
||||
best = result;
|
||||
next:
|
||||
;
|
||||
}
|
||||
result = best;
|
||||
for(i = 0; i < (1 << 16) / UDP_HTABLE_SIZE; i++, result += UDP_HTABLE_SIZE) {
|
||||
|
|
Loading…
Reference in a new issue