aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Scheffenegger <rscheff@FreeBSD.org>2021-04-01 15:18:04 +0000
committerRichard Scheffenegger <rscheff@FreeBSD.org>2021-04-16 21:34:29 +0000
commitcca0fba78e5f299a8a42aa9f5022274179b918ef (patch)
tree16f9f52c381daa69c42f50e78de9b85bc69cefb5
parent254b56ac2a9ee43d10b0a4f8eeb20b722bb7fd74 (diff)
downloadsrc-cca0fba78e5f299a8a42aa9f5022274179b918ef.tar.gz
src-cca0fba78e5f299a8a42aa9f5022274179b918ef.zip
tcp: Shouldn't drain empty sbuf
MFC after: 2 weeks Reviewed By: tuexen, #transport Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D29524 (cherry picked from commit 9aef4e7c2bd4371e526e4e3feb26064d361ad8ce)
-rw-r--r--sys/netinet/tcp_hostcache.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/netinet/tcp_hostcache.c b/sys/netinet/tcp_hostcache.c
index 47846040d9db..b3dbf0583cc9 100644
--- a/sys/netinet/tcp_hostcache.c
+++ b/sys/netinet/tcp_hostcache.c
@@ -622,6 +622,7 @@ sysctl_tcp_hc_list(SYSCTL_HANDLER_ARGS)
const int linesize = 128;
struct sbuf sb;
int i, error, len;
+ bool do_drain = false;
struct hc_metrics *hc_entry;
char ip4buf[INET_ADDRSTRLEN];
#ifdef INET6
@@ -679,9 +680,16 @@ sysctl_tcp_hc_list(SYSCTL_HANDLER_ARGS)
hc_entry->rmx_hits,
hc_entry->rmx_updates,
hc_entry->rmx_expire);
+ do_drain = true;
}
THC_UNLOCK(&V_tcp_hostcache.hashbase[i].hch_mtx);
- sbuf_drain(&sb);
+ /* Need to track if sbuf has data, to avoid
+ * a KASSERT when calling sbuf_drain.
+ */
+ if (do_drain) {
+ sbuf_drain(&sb);
+ do_drain = false;
+ }
}
#undef msec
error = sbuf_finish(&sb);