Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Mar 2015 23:57:33 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r280014 - head/sys/netinet
Message-ID:  <201503142357.t2ENvXYp068080@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sat Mar 14 23:57:33 2015
New Revision: 280014
URL: https://svnweb.freebsd.org/changeset/base/280014

Log:
  Go back to using sbuf_new() with a preallocated large buffer, to avoid
  triggering an sbuf auto-drain copyout while holding a lock.
  
  Pointed out by:	   jhb
  Pointy hat: 	   ian

Modified:
  head/sys/netinet/tcp_hostcache.c

Modified: head/sys/netinet/tcp_hostcache.c
==============================================================================
--- head/sys/netinet/tcp_hostcache.c	Sat Mar 14 23:30:03 2015	(r280013)
+++ head/sys/netinet/tcp_hostcache.c	Sat Mar 14 23:57:33 2015	(r280014)
@@ -604,7 +604,8 @@ sysctl_tcp_hc_list(SYSCTL_HANDLER_ARGS)
 	char ip6buf[INET6_ADDRSTRLEN];
 #endif
 
-	sbuf_new_for_sysctl(&sb, NULL, linesize, req);
+	sbuf_new(&sb, NULL, linesize * (V_tcp_hostcache.cache_count + 1),
+		SBUF_INCLUDENUL);
 
 	sbuf_printf(&sb,
 	        "\nIP address        MTU  SSTRESH      RTT   RTTVAR BANDWIDTH "
@@ -642,6 +643,8 @@ sysctl_tcp_hc_list(SYSCTL_HANDLER_ARGS)
 	}
 #undef msec
 	error = sbuf_finish(&sb);
+	if (error == 0)
+		error = SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb));
 	sbuf_delete(&sb);
 	return(error);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503142357.t2ENvXYp068080>