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! */
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to