Date: Mon, 1 Dec 2014 22:37:37 +0000 (UTC) From: "Alexander V. Chernikov" <melifaro@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r275383 - projects/routing/sys/netinet Message-ID: <201412012237.sB1MbbQO000808@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: melifaro Date: Mon Dec 1 22:37:36 2014 New Revision: 275383 URL: https://svnweb.freebsd.org/changeset/base/275383 Log: Put bandaid on arptimer-derived crashed for 'arp -da' deleted records. The proper fix will arrive after convering lltable 'delete' method. Modified: projects/routing/sys/netinet/if_ether.c Modified: projects/routing/sys/netinet/if_ether.c ============================================================================== --- projects/routing/sys/netinet/if_ether.c Mon Dec 1 21:43:48 2014 (r275382) +++ projects/routing/sys/netinet/if_ether.c Mon Dec 1 22:37:36 2014 (r275383) @@ -192,6 +192,27 @@ arptimer(void *arg) return; } + if (lle->la_falgs & LLE_DELETED) { + /* XXX: Temporary */ + /* We have been deleted. Drop callref and return */ + if ((lle->la_flags & LLE_CALLOUTREF) != 0) { + LLE_REMREF(lle); + lle->la_flags &= ~LLE_CALLOUTREF; + } + + pkts_dropped = llentry_free(lle); + ARPSTAT_ADD(dropped, pkts_dropped); + return; + } + + /* Unlink entry */ + IF_AFDATA_RUN_WLOCK(ifp); + llentry_unlink(lle); + IF_AFDATA_RUN_WUNLOCK(ifp); + + pkts_dropped = llentry_free(lle); + ARPSTAT_ADD(dropped, pkts_dropped); + la_flags = lle->la_flags; state = (la_flags & LLE_DELETED) ? ARP_LLINFO_DELETED : lle->ln_state; ifp = lle->lle_tbl->llt_ifp;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412012237.sB1MbbQO000808>