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
---
tcp_splice.c | 22 +---------------------
1 file changed, 1 insertion(+), 21 deletions(-)
diff --git a/tcp_splice.c b/tcp_splice.c
index 1f969a5c..c066d689 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;
--
2.54.0