linux/net/rxrpc
David Howells 245500d853 rxrpc: Rewrite the client connection manager
Rewrite the rxrpc client connection manager so that it can support multiple
connections for a given security key to a peer.  The following changes are
made:

 (1) For each open socket, the code currently maintains an rbtree with the
     connections placed into it, keyed by communications parameters.  This
     is tricky to maintain as connections can be culled from the tree or
     replaced within it.  Connections can require replacement for a number
     of reasons, e.g. their IDs span too great a range for the IDR data
     type to represent efficiently, the call ID numbers on that conn would
     overflow or the conn got aborted.

     This is changed so that there's now a connection bundle object placed
     in the tree, keyed on the same parameters.  The bundle, however, does
     not need to be replaced.

 (2) An rxrpc_bundle object can now manage the available channels for a set
     of parallel connections.  The lock that manages this is moved there
     from the rxrpc_connection struct (channel_lock).

 (3) There'a a dummy bundle for all incoming connections to share so that
     they have a channel_lock too.  It might be better to give each
     incoming connection its own bundle.  This bundle is not needed to
     manage which channels incoming calls are made on because that's the
     solely at whim of the client.

 (4) The restrictions on how many client connections are around are
     removed.  Instead, a previous patch limits the number of client calls
     that can be allocated.  Ordinarily, client connections are reaped
     after 2 minutes on the idle queue, but when more than a certain number
     of connections are in existence, the reaper starts reaping them after
     2s of idleness instead to get the numbers back down.

     It could also be made such that new call allocations are forced to
     wait until the number of outstanding connections subsides.

Signed-off-by: David Howells <dhowells@redhat.com>
2020-09-08 21:11:43 +01:00
..
af_rxrpc.c rxrpc: Impose a maximum number of client calls 2020-09-08 21:10:45 +01:00
ar-internal.h rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
call_accept.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
call_event.c rxrpc: Fix afs large storage transmission performance drop 2020-06-17 23:01:39 +01:00
call_object.c rxrpc: Impose a maximum number of client calls 2020-09-08 21:10:45 +01:00
conn_client.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
conn_event.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
conn_object.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
conn_service.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
input.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-09-03 18:50:48 -07:00
insecure.c rxrpc: Fix -Wframe-larger-than= warnings from on-stack crypto 2019-07-30 10:32:35 -07:00
Kconfig docs: networking: convert rxrpc.txt to ReST 2020-04-30 12:56:38 -07:00
key.c net: pass a sockptr_t into ->setsockopt 2020-07-24 15:41:54 -07:00
local_event.c rxrpc: Use the tx-phase skb flag to simplify tracing 2019-08-27 10:04:18 +01:00
local_object.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
Makefile rxrpc: Fix the excessive initial retransmission timeout 2020-05-11 16:42:28 +01:00
misc.c rxrpc: Fix the excessive initial retransmission timeout 2020-05-11 16:42:28 +01:00
net_ns.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
output.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
peer_event.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
peer_object.c rxrpc: Make rxrpc_kernel_get_srtt() indicate validity 2020-08-20 18:21:28 +01:00
proc.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
protocol.h rxrpc: Improve jumbo packet counting 2019-08-27 09:48:37 +01:00
recvmsg.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
rtt.c rxrpc: Remove unused macro rxrpc_min_rtt_wlen 2020-09-07 15:04:41 -07:00
rxkad.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
security.c rxrpc: Fix missing security check on incoming calls 2019-12-20 16:21:32 +00:00
sendmsg.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
skbuff.c rxrpc: Use skb_unshare() rather than skb_cow_data() 2019-08-27 10:13:46 +01:00
sysctl.c rxrpc: Rewrite the client connection manager 2020-09-08 21:11:43 +01:00
utils.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36 2019-05-24 17:27:11 +02:00