svn commit: r284776 - stable/10/sys/netinet

Ermal Luçi eri at FreeBSD.org
Wed Jun 24 19:06:55 UTC 2015


Author: eri
Date: Wed Jun 24 19:06:54 2015
New Revision: 284776
URL: https://svnweb.freebsd.org/changeset/base/284776

Log:
  MFC r284512: Properly handle locking on the ARP protocol request sending.

Modified:
  stable/10/sys/netinet/if_ether.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/netinet/if_ether.c
==============================================================================
--- stable/10/sys/netinet/if_ether.c	Wed Jun 24 18:58:42 2015	(r284775)
+++ stable/10/sys/netinet/if_ether.c	Wed Jun 24 19:06:54 2015	(r284776)
@@ -365,6 +365,7 @@ retry:
 	if ((la->la_flags & LLE_VALID) &&
 	    ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
 		bcopy(&la->ll_addr, desten, ifp->if_addrlen);
+		renew = 0;
 		/*
 		 * If entry has an expiry time and it is approaching,
 		 * see if we need to send an ARP request within this
@@ -372,13 +373,21 @@ retry:
 		 */
 		if (!(la->la_flags & LLE_STATIC) &&
 		    time_uptime + la->la_preempt > la->la_expire) {
-			arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);
+			renew = 1;
 			la->la_preempt--;
 		}
 
 		*lle = la;
-		error = 0;
-		goto done;
+
+		if (flags & LLE_EXCLUSIVE)
+			LLE_WUNLOCK(la);
+		else
+			LLE_RUNLOCK(la);
+
+		if (renew == 1)
+			arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);
+
+		return (0);
 	}
 
 	if (la->la_flags & LLE_STATIC) {   /* should not happen! */


More information about the svn-src-all mailing list