svn commit: r202132 - stable/8/sys/netinet

Qing Li qingli at FreeBSD.org
Tue Jan 12 00:04:14 UTC 2010


Author: qingli
Date: Tue Jan 12 00:04:13 2010
New Revision: 202132
URL: http://svn.freebsd.org/changeset/base/202132

Log:
  MFC	r201544
  
  An existing incomplete ARP entry would expire a subsequent
  statically configured entry of the same host. This bug was
  due to the expiration timer was not cancelled when installing
  the static entry. Since there exist a potential race condition
  with respect to timer cancellation, simply check for the
  LLE_STATIC bit inside the expiration function instead of
  cancelling the active timer.

Modified:
  stable/8/sys/netinet/if_ether.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (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/if_ether.c
==============================================================================
--- stable/8/sys/netinet/if_ether.c	Mon Jan 11 23:33:30 2010	(r202131)
+++ stable/8/sys/netinet/if_ether.c	Tue Jan 12 00:04:13 2010	(r202132)
@@ -168,17 +168,23 @@ arptimer(void *arg)
 	ifp = lle->lle_tbl->llt_ifp;
 	IF_AFDATA_LOCK(ifp);
 	LLE_WLOCK(lle);
-	if ((!callout_pending(&lle->la_timer) &&
-	    callout_active(&lle->la_timer))) {
-		(void) llentry_free(lle);
-	}
-#ifdef DIAGNOSTIC
+	if (lle->la_flags & LLE_STATIC)
+		LLE_WUNLOCK(lle);
 	else {
-		struct sockaddr *l3addr = L3_ADDR(lle);
-		log(LOG_INFO, "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
-		    inet_ntoa(((const struct sockaddr_in *)l3addr)->sin_addr));
-	}
+		if (!callout_pending(&lle->la_timer) &&
+		    callout_active(&lle->la_timer)) {
+			(void) llentry_free(lle);
+		} 
+#ifdef DIAGNOSTIC
+		else {
+			struct sockaddr *l3addr = L3_ADDR(lle);
+			log(LOG_INFO, 
+			    "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
+			    inet_ntoa(
+			        ((const struct sockaddr_in *)l3addr)->sin_addr));
+		}
 #endif
+	}
 	IF_AFDATA_UNLOCK(ifp);
 }
 


More information about the svn-src-stable mailing list