From owner-svn-src-stable-10@freebsd.org Wed Jun 24 19:06:55 2015 Return-Path: Delivered-To: svn-src-stable-10@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6FE9491618A; Wed, 24 Jun 2015 19:06:55 +0000 (UTC) (envelope-from eri@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6131914CD; Wed, 24 Jun 2015 19:06:55 +0000 (UTC) (envelope-from eri@FreeBSD.org) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t5OJ6t9V021037; Wed, 24 Jun 2015 19:06:55 GMT (envelope-from eri@FreeBSD.org) Received: (from eri@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t5OJ6tg7021036; Wed, 24 Jun 2015 19:06:55 GMT (envelope-from eri@FreeBSD.org) Message-Id: <201506241906.t5OJ6tg7021036@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: eri set sender to eri@FreeBSD.org using -f From: Ermal Luçi Date: Wed, 24 Jun 2015 19:06:55 +0000 (UTC) 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 X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-10@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for only the 10-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2015 19:06:55 -0000 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! */