From owner-freebsd-bugs@FreeBSD.ORG Thu Jan 11 13:50:22 2007 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3AC6316A412 for ; Thu, 11 Jan 2007 13:50:22 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id DCC7C13C467 for ; Thu, 11 Jan 2007 13:50:21 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l0BDoLDM092083 for ; Thu, 11 Jan 2007 13:50:21 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l0BDoLbP092081; Thu, 11 Jan 2007 13:50:21 GMT (envelope-from gnats) Date: Thu, 11 Jan 2007 13:50:21 GMT Message-Id: <200701111350.l0BDoLbP092081@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Dmitrij Tejblum Cc: Subject: Re: kern/107807: [patch] Spurious EHOSTDOWN errors -- ARP retransmission bug. X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Dmitrij Tejblum List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jan 2007 13:50:22 -0000 The following reply was made to PR kern/107807; it has been noted by GNATS. From: Dmitrij Tejblum To: bug-followup@freebsd.org Cc: Subject: Re: kern/107807: [patch] Spurious EHOSTDOWN errors -- ARP retransmission bug. Date: Thu, 11 Jan 2007 16:29:21 +0300 (MSK) Oops, the following version of the patch is better: --- sys/netinet/if_ether.c Tue Sep 26 14:22:07 2006 +++ sys/netinet/if_ether.c Thu Jan 11 16:23:54 2007 @@ -493,15 +493,16 @@ if (la->la_asked < arp_maxtries) error = EWOULDBLOCK; /* First request. */ else error = (rt == rt0) ? EHOSTDOWN : EHOSTUNREACH; - if (la->la_asked++ == 0 || rt->rt_expire != time_second) { + if (la->la_asked == 0 || rt->rt_expire != time_second) { struct in_addr sin = SIN(rt->rt_ifa->ifa_addr)->sin_addr; rt->rt_expire = time_second; + la->la_asked++; RT_UNLOCK(rt); arprequest(ifp, &sin, &SIN(dst)->sin_addr, IF_LLADDR(ifp)); } else