Author: andre
Date: Sun Aug 22 08:47:51 2010
New Revision: 211601
URL: http://svn.freebsd.org/changeset/base/211601

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/7/sys/netinet/tcp_syncache.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/netinet/tcp_syncache.c
==============================================================================
--- stable/7/sys/netinet/tcp_syncache.c Sun Aug 22 08:47:00 2010        
(r211600)
+++ stable/7/sys/netinet/tcp_syncache.c Sun Aug 22 08:47:51 2010        
(r211601)
@@ -645,6 +645,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(&tcbinfo);
@@ -695,7 +696,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.
@@ -707,6 +708,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
@@ -741,9 +748,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. */
@@ -770,9 +783,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;
                }
        }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to