git: cca0fba78e5f - stable/11 - tcp: Shouldn't drain empty sbuf

Richard Scheffenegger rscheff at FreeBSD.org
Fri Apr 16 22:12:03 UTC 2021


The branch stable/11 has been updated by rscheff:

URL: https://cgit.FreeBSD.org/src/commit/?id=cca0fba78e5f299a8a42aa9f5022274179b918ef

commit cca0fba78e5f299a8a42aa9f5022274179b918ef
Author:     Richard Scheffenegger <rscheff at FreeBSD.org>
AuthorDate: 2021-04-01 15:18:04 +0000
Commit:     Richard Scheffenegger <rscheff at FreeBSD.org>
CommitDate: 2021-04-16 21:34:29 +0000

    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)
---
 sys/netinet/tcp_hostcache.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

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);


More information about the dev-commits-src-all mailing list