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