Thread (10 messages) 10 messages, 5 authors, 2010-11-29

Re: [PATCH] net-next: Fix __inet_inherit_port() to correctly increment bsockets and num_owners

From: Jarek Poplawski <hidden>
Date: 2010-11-29 13:12:03

On Mon, Nov 29, 2010 at 03:51:02PM +0300, Evgeniy Polyakov wrote:
On Mon, Nov 29, 2010 at 12:39:09PM +0000, Jarek Poplawski (jarkao2@gmail.com) wrote:
quoted
quoted
quoted
inet sockets corresponding to passive connections are added to the bind hash
using ___inet_inherit_port(). These sockets are later removed from the bind 
hash using __inet_put_port(). These two functions are not exactly symmetrical. 
__inet_put_port() decrements hashinfo->bsockets and tb->num_owners, whereas 
___inet_inherit_port() does not increment them. This results in both of these 
going to -ve values.

This patch fixes this by calling inet_bind_hash() from ___inet_inherit_port(),
which does the right thing.

'bsockets' and 'num_owners' were introduced by commit a9d8f9110d7e953c 
(inet: Allowing more than 64k connections and heavily optimize bind(0))
Yup, things changed from that simple patch a lot.
Thanks for fixing it up.
Ack.
Probably I miss something, but since bsockets is increased by each
passive connection now, it seems it will trigger "hash table is full"
too early?
Why would it? bsockets and num_owners are supposed to be increased for each
new socket added into the table, and are used as a hint to find a bucket with
the smallest number of sockets in it.

Hash table insertion did not change, only bucket selection algorithm got
a hint.
Evgeniy & Eric,

But it's compared to the numer of available port numbers in
inet_csk_get_port():

     "if (atomic_read(&hashinfo->bsockets) > (high - low) + 1)"

Can't you have bsockets higher than this with only one port used?

Jarek P.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help