svn commit: r211327 - head/sys/netinet
Bjoern A. Zeeb
bz at FreeBSD.org
Sun Aug 15 09:45:08 UTC 2010
On Sun, 15 Aug 2010, Andre Oppermann wrote:
> Author: andre
> Date: Sun Aug 15 09:30:13 2010
> New Revision: 211327
> URL: http://svn.freebsd.org/changeset/base/211327
>
> Log:
> 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.
>
> Logging is conditional on net.inet.tcp.log_debug being enabled.
>
> MFC after: 1 week
>
> Modified:
> head/sys/netinet/tcp_syncache.c
>
> Modified: head/sys/netinet/tcp_syncache.c
> ==============================================================================
> --- head/sys/netinet/tcp_syncache.c Sun Aug 15 08:49:07 2010 (r211326)
> +++ head/sys/netinet/tcp_syncache.c Sun Aug 15 09:30:13 2010 (r211327)
> @@ -627,6 +627,7 @@ syncache_socket(struct syncache *sc, str
> struct inpcb *inp = NULL;
> struct socket *so;
> struct tcpcb *tp;
> + int error = 0;
Is there any need to initialize here?
> 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;
> }
> }
>
--
Bjoern A. Zeeb This signature is about you not me.
More information about the svn-src-all
mailing list