Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jun 2015 19:06:55 +0000 (UTC)
From:      Ermal Luçi <eri@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r284776 - stable/10/sys/netinet
Message-ID:  <201506241906.t5OJ6tg7021036@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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! */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506241906.t5OJ6tg7021036>