aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2026-05-28 15:02:06 +1000
committerStefano Brivio <sbrivio@redhat.com>2026-06-04 06:35:02 +0200
commit630e9bf1decf94618a036a020b7c920c8ab6126c (patch)
tree304683fce52d4bd711e6e1e97f373911f5f01a1f
parent4b2823784aab04a70dfc295b16fd6f0592955790 (diff)
downloadpasst-630e9bf1decf94618a036a020b7c920c8ab6126c.tar
passt-630e9bf1decf94618a036a020b7c920c8ab6126c.tar.gz
passt-630e9bf1decf94618a036a020b7c920c8ab6126c.tar.bz2
passt-630e9bf1decf94618a036a020b7c920c8ab6126c.tar.lz
passt-630e9bf1decf94618a036a020b7c920c8ab6126c.tar.xz
passt-630e9bf1decf94618a036a020b7c920c8ab6126c.tar.zst
passt-630e9bf1decf94618a036a020b7c920c8ab6126c.zip
tcp_splice: Remove never-invoked SO_RCVLOWAT logic
tcp_splice_forward() contains some logic to use the SO_RCVLOWAT setsockopt(). This appears to be aimed at interrupt (epoll) mitigation, so that we're not always waking for a socket that's getting frequent small amounts of data. However, the logic is never invoked, and hasn't been since at least 2022_07_14.b86cd00: it's conditional on readlen > (long)c->tcp.pipe_size / 10 However, immediately before that we've invoked 'continue' if: readlen >= (long)c->tcp_pipe_size * 10 / 100 which is a strictly weaker condition. While it's possible we want to restore a working version of that interrupt mitigation at some point, for the time being this logic just confuses the picture and makes some other cleanups more awkward. We haven't had it for over 3 years, so it's clearly not vital. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--tcp_splice.c22
1 files changed, 1 insertions, 21 deletions
diff --git a/tcp_splice.c b/tcp_splice.c
index 1f969a5..c066d68 100644
--- a/tcp_splice.c
+++ b/tcp_splice.c
@@ -530,28 +530,8 @@ retry:
written, c->tcp.pipe_size);
/* Most common case: skip updating count of pending bytes */
- if (readlen > 0 && readlen == written) {
- if (readlen >= (long)c->tcp.pipe_size * 10 / 100)
- continue;
-
- if (!(conn->flags & lowat_set_flag) &&
- readlen > (long)c->tcp.pipe_size / 10) {
- int lowat = c->tcp.pipe_size / 4;
-
- if (setsockopt(conn->s[fromsidei], SOL_SOCKET,
- SO_RCVLOWAT,
- &lowat, sizeof(lowat))) {
- flow_trace(conn,
- "Setting SO_RCVLOWAT %i: %s",
- lowat, strerror_(errno));
- } else {
- conn_flag(conn, lowat_set_flag);
- conn_flag(conn, lowat_act_flag);
- }
- }
-
+ if (readlen > 0 && readlen == written)
continue;
- }
conn->pending[fromsidei] += readlen > 0 ? readlen : 0;
conn->pending[fromsidei] -= written > 0 ? written : 0;