Re: [PATCH net-next 1/4] soreuseport: define reuseport groups
From: Craig Gallek <hidden>
Date: 2015-12-22 21:58:14
On Tue, Dec 22, 2015 at 4:40 PM, David Miller [off-list ref] wrote:
From: Craig Gallek <redacted> Date: Tue, 22 Dec 2015 15:05:07 -0500quoted
+ for (i = 0; i < reuse->num_socks; i++) { + if (reuse->socks[i] == sk) { + reuse->socks[i] = reuse->socks[reuse->num_socks - 1]; + reuse->num_socks--; + if (reuse->num_socks == 0) + kfree_rcu(reuse, rcu); + break; + } + }Don't you need to memmove() the entire rest of the array down one slot when you hit the matching 'sk' in there? I can't see how it can work to only move one entry down.
It moves the last element in the list into the slot that was just emptied. You could argue that this may cause unexpected changes in the index -> socket mapping observed by the user, but I'm not sure making many socket indexes change (by sliding everything down one) when one is removed is a desirable behavior either. I don't have a strong opinion either way though...