From owner-freebsd-hackers@FreeBSD.ORG Fri Sep 30 17:20:27 2005 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 41EE416A424; Fri, 30 Sep 2005 17:20:27 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: from mv.twc.weather.com (mv.twc.weather.com [65.212.71.225]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5169D43D86; Fri, 30 Sep 2005 17:20:16 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: from [10.50.41.233] (Not Verified[10.50.41.233]) by mv.twc.weather.com with NetIQ MailMarshal (v6, 0, 3, 8) id ; Fri, 30 Sep 2005 13:36:19 -0400 From: John Baldwin To: freebsd-hackers@freebsd.org, Antoine Pelisse Date: Fri, 30 Sep 2005 13:10:01 -0400 User-Agent: KMail/1.8 References: <61c746830509300824g2f368d26pcc500403fe319b3b@mail.gmail.com> <61c746830509300825s5ad197fbt908267d54f1b7b8f@mail.gmail.com> In-Reply-To: <61c746830509300825s5ad197fbt908267d54f1b7b8f@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200509301310.03124.jhb@FreeBSD.org> Cc: Robert Watson Subject: Re: freebsd-5.4-stable panics X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Sep 2005 17:20:27 -0000 On Friday 30 September 2005 11:25 am, Antoine Pelisse wrote: > On 9/30/05, John Baldwin wrote: > > On Friday 30 September 2005 05:24 am, Antoine Pelisse wrote: > > > Hi Robert, > > > I don't think your patch is correct, the total linked list can be > > > broken > > > > > > while the lock is released, thus just passing the link may not be > > > enough I have submitted a PR[1] for this a month ago but nobody took > > > care of it yet Regards, > > > Antoine Pelisse > > > > > > [1] http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/84684 > > > > I think this patch looks ok. Robert, can you get the original panic on > > this > > thread tested against this patch? > > I had a small program which could reproduce this panic in 10 seconds, it > was basically creating empty threads and calling kvm_getprocs() in the same > time. Anyway the patch was able to stop the program from panicing. > The panic is also reproducible in RELENG_6 and HEAD IIRC. It turns out that the sysctl buffer is already wired in one of the two cases that this function is called, so I moved the wiring up to the upper layer in the other case and cut out a bunch of the locking gymnastics as a result. Can you try this patch? Index: kern_proc.c =================================================================== RCS file: /usr/cvs/src/sys/kern/kern_proc.c,v retrieving revision 1.231 diff -u -r1.231 kern_proc.c --- kern_proc.c 27 Sep 2005 18:03:15 -0000 1.231 +++ kern_proc.c 30 Sep 2005 17:04:57 -0000 @@ -875,22 +875,16 @@ if (flags & KERN_PROC_NOTHREADS) { fill_kinfo_proc(p, &kinfo_proc); - PROC_UNLOCK(p); error = SYSCTL_OUT(req, (caddr_t)&kinfo_proc, sizeof(kinfo_proc)); - PROC_LOCK(p); } else { - _PHOLD(p); FOREACH_THREAD_IN_PROC(p, td) { fill_kinfo_thread(td, &kinfo_proc); - PROC_UNLOCK(p); error = SYSCTL_OUT(req, (caddr_t)&kinfo_proc, sizeof(kinfo_proc)); - PROC_LOCK(p); if (error) break; } - _PRELE(p); } PROC_UNLOCK(p); if (error) @@ -932,6 +926,9 @@ if (oid_number == KERN_PROC_PID) { if (namelen != 1) return (EINVAL); + error = sysctl_wire_old_buffer(req, 0); + if (error) + return (error); p = pfind((pid_t)name[0]); if (!p) return (ESRCH); -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org