On Fri, 26 Jun 2020, Paolo Abeni wrote:

Replace the radix tree with a hash table allocated
at boot time. The radix tree has some shortcoming:
a single lock is contented by all the mptcp operation,
the lookup currently use such lock, and traversing
all the items would require a lock, too.

With hash table instead we trade a little memory to
address all the above - a per bucket lock is used.

To hash the MPTCP sockets, we re-use the msk' sk_node
entry: the MPTCP sockets are never hashed by the stack.
Replace the existing hash proto callbacks with a dummy
implementation, annotating the above constraint.

Additionally refactor the token creation to code to:

- limit the number of consecutive attempts to a fixed
maximum. Hitting a hash bucket with a long chain is
considered a failed attempt

- accept() no longer can fail to token management.

- if token creation fails at connect() time, we do
fallback to TCP (before the connection was closed)

v1 -> v2:
- fix "no newline at end of file" - Jakub

Signed-off-by: Paolo Abeni <pab...@redhat.com>
---
net/mptcp/protocol.c |  45 ++++---
net/mptcp/protocol.h |  14 ++-
net/mptcp/subflow.c  |  19 ++-
net/mptcp/token.c    | 271 ++++++++++++++++++++++++++++++-------------
4 files changed, 236 insertions(+), 113 deletions(-)

Reviewed-by: Mat Martineau <mathew.j.martin...@linux.intel.com>

--
Mat Martineau
Intel

Reply via email to