diff options
author | emax <emax@FreeBSD.org> | 2013-10-31 20:33:21 +0000 |
---|---|---|
committer | emax <emax@FreeBSD.org> | 2013-10-31 20:33:21 +0000 |
commit | 6faa9004b4a01cb72187358810ec7882c9e47bb1 (patch) | |
tree | e12c2e367e30f1879a772c96b5ac4907f6257d2b /sys/kern | |
parent | df1721bf9948c71e2078c2ca63716962ac982f9f (diff) | |
download | FreeBSD-src-6faa9004b4a01cb72187358810ec7882c9e47bb1.zip FreeBSD-src-6faa9004b4a01cb72187358810ec7882c9e47bb1.tar.gz |
Rate limit (to once per minute) "Listen queue overflow" message in
sonewconn().
Reviewed by: scottl, lstewart
Obtained from: Netflix, Inc
MFC after: 2 weeks
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/uipc_socket.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 66af181..9b5e342 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -486,6 +486,10 @@ SYSCTL_INT(_regression, OID_AUTO, sonewconn_earlytest, CTLFLAG_RW, struct socket * sonewconn(struct socket *head, int connstatus) { + static struct timeval lastover; + static struct timeval overinterval = { 60, 0 }; + static int overcount; + struct socket *so; int over; @@ -497,9 +501,17 @@ sonewconn(struct socket *head, int connstatus) #else if (over) { #endif - log(LOG_DEBUG, "%s: pcb %p: Listen queue overflow: " - "%i already in queue awaiting acceptance\n", - __func__, head->so_pcb, head->so_qlen); + overcount++; + + if (ratecheck(&lastover, &overinterval)) { + log(LOG_DEBUG, "%s: pcb %p: Listen queue overflow: " + "%i already in queue awaiting acceptance " + "(%d occurrences)\n", + __func__, head->so_pcb, head->so_qlen, overcount); + + overcount = 0; + } + return (NULL); } VNET_ASSERT(head->so_vnet != NULL, ("%s:%d so_vnet is NULL, head=%p", |