tcp_splice: Improve logic deciding when to splice
This makes several tweaks to improve the logic which decides whether we're able to use the splice method for a new connection. * Rather than only calling tcp_splice_conn_from_sock() in pasta mode, we check for pasta mode within it, better localising the checks. * Previously if we got a connection from a non-loopback address we'd always fall back to the "tap" path, even if the connection was on a socket in the namespace. If we did get a non-loopback address on a namespace socket, something has gone wrong and the "tap" path certainly won't be able to handle it. Report the error and close, rather than passing it along to tap. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:

committed by
Stefano Brivio

parent
4c2d923b12
commit
ee677e0a42
3
tcp.c
3
tcp.c
@@ -2737,8 +2737,7 @@ void tcp_listen_handler(struct ctx *c, union epoll_ref ref,
|
||||
if (s < 0)
|
||||
goto cancel;
|
||||
|
||||
if (c->mode == MODE_PASTA &&
|
||||
tcp_splice_conn_from_sock(c, ref.tcp_listen, flow, s, &sa))
|
||||
if (tcp_splice_conn_from_sock(c, ref.tcp_listen, flow, s, &sa))
|
||||
return;
|
||||
|
||||
tcp_tap_conn_from_sock(c, ref.tcp_listen, flow, s, &sa, now);
|
||||
|
Reference in New Issue
Block a user