Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Aug 2010 08:47:00 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r211600 - stable/8/sys/netinet
Message-ID:  <201008220847.o7M8l0kX096155@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andre
Date: Sun Aug 22 08:47:00 2010
New Revision: 211600
URL: http://svn.freebsd.org/changeset/base/211600

Log:
  MFC r211327:
  
    Add more logging points for failures in syncache_socket() to
    report when a new socket couldn't be created because one of
    in_pcbinshash(), in6_pcbconnect() or in_pcbconnect() failed.

Modified:
  stable/8/sys/netinet/tcp_syncache.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cam/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/netinet/tcp_syncache.c
==============================================================================
--- stable/8/sys/netinet/tcp_syncache.c	Sun Aug 22 08:18:32 2010	(r211599)
+++ stable/8/sys/netinet/tcp_syncache.c	Sun Aug 22 08:47:00 2010	(r211600)
@@ -627,6 +627,7 @@ syncache_socket(struct syncache *sc, str
 	struct inpcb *inp = NULL;
 	struct socket *so;
 	struct tcpcb *tp;
+	int error = 0;
 	char *s;
 
 	INP_INFO_WLOCK_ASSERT(&V_tcbinfo);
@@ -675,7 +676,7 @@ syncache_socket(struct syncache *sc, str
 	}
 #endif
 	inp->inp_lport = sc->sc_inc.inc_lport;
-	if (in_pcbinshash(inp) != 0) {
+	if ((error = in_pcbinshash(inp)) != 0) {
 		/*
 		 * Undo the assignments above if we failed to
 		 * put the PCB on the hash lists.
@@ -687,6 +688,12 @@ syncache_socket(struct syncache *sc, str
 #endif
 			inp->inp_laddr.s_addr = INADDR_ANY;
 		inp->inp_lport = 0;
+		if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) {
+			log(LOG_DEBUG, "%s; %s: in_pcbinshash failed "
+			    "with error %i\n",
+			    s, __func__, error);
+			free(s, M_TCPLOG);
+		}
 		goto abort;
 	}
 #ifdef IPSEC
@@ -721,9 +728,15 @@ syncache_socket(struct syncache *sc, str
 		laddr6 = inp->in6p_laddr;
 		if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr))
 			inp->in6p_laddr = sc->sc_inc.inc6_laddr;
-		if (in6_pcbconnect(inp, (struct sockaddr *)&sin6,
-		    thread0.td_ucred)) {
+		if ((error = in6_pcbconnect(inp, (struct sockaddr *)&sin6,
+		    thread0.td_ucred)) != 0) {
 			inp->in6p_laddr = laddr6;
+			if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) {
+				log(LOG_DEBUG, "%s; %s: in6_pcbconnect failed "
+				    "with error %i\n",
+				    s, __func__, error);
+				free(s, M_TCPLOG);
+			}
 			goto abort;
 		}
 		/* Override flowlabel from in6_pcbconnect. */
@@ -750,9 +763,15 @@ syncache_socket(struct syncache *sc, str
 		laddr = inp->inp_laddr;
 		if (inp->inp_laddr.s_addr == INADDR_ANY)
 			inp->inp_laddr = sc->sc_inc.inc_laddr;
-		if (in_pcbconnect(inp, (struct sockaddr *)&sin,
-		    thread0.td_ucred)) {
+		if ((error = in_pcbconnect(inp, (struct sockaddr *)&sin,
+		    thread0.td_ucred)) != 0) {
 			inp->inp_laddr = laddr;
+			if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) {
+				log(LOG_DEBUG, "%s; %s: in_pcbconnect failed "
+				    "with error %i\n",
+				    s, __func__, error);
+				free(s, M_TCPLOG);
+			}
 			goto abort;
 		}
 	}



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