svn commit: r184304 - head/sys/netinet

Robert Watson rwatson at FreeBSD.org
Sun Oct 26 15:03:53 PDT 2008


Author: rwatson
Date: Sun Oct 26 22:03:52 2008
New Revision: 184304
URL: http://svn.freebsd.org/changeset/base/184304

Log:
  In both dropwithreset paths in tcp_input.c, drop the tcbinfo lock
  sooner to decomplicate locking and eliminate the need for a rather
  chatty comment about why we have to handle the global lock in a
  special way for the benefit of ipfw and pf cred rules.
  
  MFC after:	3 days

Modified:
  head/sys/netinet/tcp_input.c

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c	Sun Oct 26 21:59:07 2008	(r184303)
+++ head/sys/netinet/tcp_input.c	Sun Oct 26 22:03:52 2008	(r184304)
@@ -896,19 +896,12 @@ findpcb:
 
 dropwithreset:
 	INP_INFO_WLOCK_ASSERT(&V_tcbinfo);
+	INP_INFO_WUNLOCK(&V_tcbinfo);
 
-	/*
-	 * If inp is non-NULL, we call tcp_dropwithreset() holding both inpcb
-	 * and global locks.  However, if NULL, we must hold neither as
-	 * firewalls may acquire the global lock in order to look for a
-	 * matching inpcb.
-	 */
 	if (inp != NULL) {
 		tcp_dropwithreset(m, th, tp, tlen, rstreason);
 		INP_WUNLOCK(inp);
-	}
-	INP_INFO_WUNLOCK(&V_tcbinfo);
-	if (inp == NULL)
+	} else
 		tcp_dropwithreset(m, th, NULL, tlen, rstreason);
 	m = NULL;	/* mbuf chain got consumed. */
 	goto drop;
@@ -2498,19 +2491,12 @@ dropafterack:
 
 dropwithreset:
 	KASSERT(headlocked, ("%s: dropwithreset: head not locked", __func__));
+	INP_INFO_WUNLOCK(&V_tcbinfo);
 
-	/*
-	 * If tp is non-NULL, we call tcp_dropwithreset() holding both inpcb
-	 * and global locks.  However, if NULL, we must hold neither as
-	 * firewalls may acquire the global lock in order to look for a
-	 * matching inpcb.
-	 */
 	if (tp != NULL) {
 		tcp_dropwithreset(m, th, tp, tlen, rstreason);
 		INP_WUNLOCK(tp->t_inpcb);
-	}
-	INP_INFO_WUNLOCK(&V_tcbinfo);
-	if (tp == NULL)
+	} else
 		tcp_dropwithreset(m, th, NULL, tlen, rstreason);
 	return;
 


More information about the svn-src-head mailing list