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>