summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2007-04-17 15:25:14 +0000
committerandre <andre@FreeBSD.org>2007-04-17 15:25:14 +0000
commit2573926e35dd20e2665d064b7acea13689ba8130 (patch)
tree68a36d7cba1225fe3110016b5a790e1004163cd2
parent99ac3651bd2fa42498b0ae9eec88e89aae117757 (diff)
downloadFreeBSD-src-2573926e35dd20e2665d064b7acea13689ba8130.zip
FreeBSD-src-2573926e35dd20e2665d064b7acea13689ba8130.tar.gz
When we run into the syncache entry limits syncache_add() tries
to free the oldest entry in the current bucket row. The global entry limit may be smaller than the bucket rows and their limit combined however. Thus only try to free a syncache entry if we found one in this bucket row. Reported by: kris
-rw-r--r--sys/netinet/tcp_syncache.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
index 128057b..4e41134 100644
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -960,8 +960,8 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
* entry and insert the new one.
*/
tcpstat.tcps_sc_zonefail++;
- sc = TAILQ_LAST(&sch->sch_bucket, sch_head);
- syncache_drop(sc, sch);
+ if ((sc = TAILQ_LAST(&sch->sch_bucket, sch_head)) != NULL)
+ syncache_drop(sc, sch);
sc = uma_zalloc(tcp_syncache.zone, M_NOWAIT | M_ZERO);
if (sc == NULL) {
if (tcp_syncookies) {
OpenPOWER on IntegriCloud