diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2005-11-07 22:51:47 -0500 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-11-07 22:51:47 -0500 |
| commit | 6b995751c2e851d2bc9c277b5884d0adb519e31d (patch) | |
| tree | 7a15b41b5d8ce612915584a0773c670d5c0ab5b8 /net/ipv4/inet_connection_sock.c | |
| parent | 6c2f4267833f453156f8f439cc32eb4c92f357b4 (diff) | |
| parent | d27ba47e7e8c466c18983a1779d611f82d6a354f (diff) | |
| download | olio-linux-3.10-6b995751c2e851d2bc9c277b5884d0adb519e31d.tar.xz olio-linux-3.10-6b995751c2e851d2bc9c277b5884d0adb519e31d.zip | |
Merge branch 'master'
Diffstat (limited to 'net/ipv4/inet_connection_sock.c')
| -rw-r--r-- | net/ipv4/inet_connection_sock.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 94468a76c5b..3fe021f1a56 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -78,17 +78,9 @@ int inet_csk_get_port(struct inet_hashinfo *hashinfo, int low = sysctl_local_port_range[0]; int high = sysctl_local_port_range[1]; int remaining = (high - low) + 1; - int rover; + int rover = net_random() % (high - low) + low; - spin_lock(&hashinfo->portalloc_lock); - if (hashinfo->port_rover < low) - rover = low; - else - rover = hashinfo->port_rover; do { - rover++; - if (rover > high) - rover = low; head = &hashinfo->bhash[inet_bhashfn(rover, hashinfo->bhash_size)]; spin_lock(&head->lock); inet_bind_bucket_for_each(tb, node, &head->chain) @@ -97,9 +89,9 @@ int inet_csk_get_port(struct inet_hashinfo *hashinfo, break; next: spin_unlock(&head->lock); + if (++rover > high) + rover = low; } while (--remaining > 0); - hashinfo->port_rover = rover; - spin_unlock(&hashinfo->portalloc_lock); /* Exhausted local port range during search? It is not * possible for us to be holding one of the bind hash |