From owner-freebsd-current@FreeBSD.ORG Tue Mar 24 18:15:07 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD2E91065678 for ; Tue, 24 Mar 2009 18:15:07 +0000 (UTC) (envelope-from jh@saunalahti.fi) Received: from gw01.mail.saunalahti.fi (gw01.mail.saunalahti.fi [195.197.172.115]) by mx1.freebsd.org (Postfix) with ESMTP id 9F6E78FC16 for ; Tue, 24 Mar 2009 18:15:07 +0000 (UTC) (envelope-from jh@saunalahti.fi) Received: from a91-153-125-115.elisa-laajakaista.fi (a91-153-125-115.elisa-laajakaista.fi [91.153.125.115]) by gw01.mail.saunalahti.fi (Postfix) with SMTP id 79F06151751; Tue, 24 Mar 2009 20:04:38 +0200 (EET) Date: Tue, 24 Mar 2009 20:04:38 +0200 From: Jaakko Heinonen To: Matthew West Message-ID: <20090324180437.GA952@a91-153-125-115.elisa-laajakaista.fi> References: <20090323140820.GA37093@zeeb.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090323140820.GA37093@zeeb.org> User-Agent: Mutt/1.5.18 (2008-05-17) Cc: 7ogcg7g02@sneakemail.com, freebsd-current@freebsd.org Subject: Re: panic: Bad link elm, nfsd related? X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Mar 2009 18:15:08 -0000 On 2009-03-23, Matthew West wrote: > After 1-2 weeks, the system will panic with the following: > > ---------- > panic: Bad link elm 0xffffff0011febc00 next->prev != elm It looks like an attempt to remove xprt twice from tail queue due to race. Does this patch make any difference? %%% Index: sys/rpc/svc.c =================================================================== --- sys/rpc/svc.c (revision 189918) +++ sys/rpc/svc.c (working copy) @@ -296,8 +296,10 @@ xprt_unregister_locked(SVCXPRT *xprt) TAILQ_REMOVE(&pool->sp_active, xprt, xp_alink); xprt->xp_active = FALSE; } - TAILQ_REMOVE(&pool->sp_xlist, xprt, xp_link); - xprt->xp_registered = FALSE; + if (xprt->xp_registered) { + TAILQ_REMOVE(&pool->sp_xlist, xprt, xp_link); + xprt->xp_registered = FALSE; + } } void %%% This was also reported by Edward Fisk (Cc'd) in PR 132068. -- Jaakko