From owner-freebsd-current@FreeBSD.ORG Wed May 28 07:07:04 2003 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 308D537B401 for ; Wed, 28 May 2003 07:07:04 -0700 (PDT) Received: from fledge.watson.org (fledge.watson.org [204.156.12.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8081643FA3 for ; Wed, 28 May 2003 07:07:03 -0700 (PDT) (envelope-from robert@fledge.watson.org) Received: from fledge.watson.org (localhost [127.0.0.1]) by fledge.watson.org (8.12.9/8.12.9) with ESMTP id h4SE6EOn053098 for ; Wed, 28 May 2003 10:06:14 -0400 (EDT) (envelope-from robert@fledge.watson.org) Received: from localhost (robert@localhost)h4SE6Ep7053095 for ; Wed, 28 May 2003 10:06:14 -0400 (EDT) (envelope-from robert@fledge.watson.org) Date: Wed, 28 May 2003 10:06:14 -0400 (EDT) From: Robert Watson X-Sender: robert@fledge.watson.org To: current@FreeBSD.org Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: mb alloc and: panic: mutex Giant not owned at ../../../vm/vm_kern.c:315 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 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: Wed, 28 May 2003 14:07:04 -0000 Got this panic recently on a MAC development box. The MAC development branch hasn't been integrated in a few weeks, so this might well be fixed in the main tree. The versions of various files are: $FreeBSD: src/sys/vm/vm_kern.c,v 1.97 2003/04/15 01:16:05 alc Exp $ $FreeBSD: src/sys/kern/subr_mbuf.c,v 1.47 2003/05/02 03:43:40 silby Exp $ I haven't seen this panic previously; a lack of Giant coming out of the socket code is a bit surprising to me, but I think is unlikely to be a result of our local MAC tweaks. Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert@fledge.watson.org Network Associates Laboratories <118>a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout <118>/etc/rc: INFO: nfsd depends on mountd, which will be forced to start. <118>Starting mountd. <118>Starting nfsd. panic: mutex Giant not owned at ../../../vm/vm_kern.c:315 P Debugger(c04ec67c,c0586b60,c04ebdc3,c8cddb2c,1) at Debugger+0x54 db> trace Debugger(c04ec67c,c0586b60,c04ebdc3,c8cddb2c,1) at Debugger+0x54 panic(c04ebdc3,c04ebefc,c050050a,13b,c04eaf98) at panic+0xab _mtx_assert(c0584ee0,1,c050050a,13b,4) at _mtx_assert+0xec kmem_malloc(c0b7f000,2000,2,230,163) at kmem_malloc+0x39 mb_pop_cont(c0587c20,8,c0b6cac0,2c7,c0b7d700) at mb_pop_cont+0xa0 mb_alloc(c0587c20,8,e,0,0) at mb_alloc+0x217 m_get(8,e,5f7,c04eef16,0) at m_get+0x34 sockargs(c8cddc4c,bfbfd550,60,e,c8cddc68) at sockargs+0x4a sendit(c192b4c0,c,c8cddcb4,0,806b000) at sendit+0x91 sendmsg(c192b4c0,c8cddd10,c050602b,3fb,3) at sendmsg+0xc2 syscall(2f,2f,2f,bfbfd5b0,20) at syscall+0x26e Xint0x80_syscall() at Xint0x80_syscall+0x1d --- syscall (28, FreeBSD ELF32, sendmsg), eip = 0x280d24b3, esp = 0xbfbfd52c, ebp = 0xbfbfd5d8 --- db> show pcpu cpuid = 0 curthread = 0xc192b4c0: pid 275 "rpcbind" curpcb = 0xc8cddda0 fpcurthread = none idlethread = 0xc0b88850: pid 11 "idle" currentldt = 0x28 spin locks held: (kgdb) l *kmem_malloc+0x39 0xc043eea9 is in kmem_malloc (../../../vm/vm_kern.c:317). 312 int pflags; 313 314 if ((flags & M_NOWAIT) == 0) 315 GIANT_REQUIRED; 316 317 size = round_page(size); 318 addr = vm_map_min(map); 319 320 /* 321 * Locate sufficient space in the map. This will give us the final (kgdb) l *mb_pop_cont+0xa0 0xc0334e10 is in mb_pop_cont (../../../kern/subr_mbuf.c:573). 568 bucket = malloc(sizeof(struct mb_bucket) + 569 mb_list->ml_objbucks * sizeof(void *), M_MBUF, MBTOM(how)); 570 if (bucket == NULL) 571 return (NULL); 572 573 p = (caddr_t)kmem_malloc(mb_list->ml_map, mb_list->ml_objsize * 574 mb_list->ml_objbucks, MBTOM(how)); 575 if (p == NULL) { 576 free(bucket, M_MBUF); 577 if (how == M_TRYWAIT) (kgdb) l *mb_alloc+0x217 0xc0336057 is in mb_alloc (../../../kern/subr_mbuf.c:712). 707 } else { 708 /* 709 * We'll have to allocate a new page. 710 */ 711 MB_UNLOCK_CONT(gen_list); 712 bucket = mb_pop_cont(mb_list, how, cnt_lst); 713 if (bucket != NULL) { 714 MB_GET_OBJECT(m, bucket, cnt_lst); 715 MB_MBTYPES_INC(cnt_lst, type, 1); 716 (kgdb) l *m_get+0x34 0xc0335354 is in m_get (../../../kern/subr_mbuf.c:1186). 1181 struct mbuf * 1182 m_get(int how, short type) 1183 { 1184 struct mbuf *mb; 1185 1186 mb = (struct mbuf *)mb_alloc(&mb_list_mbuf, how, type, 0, NULL); 1187 if (mb != NULL) 1188 _mb_setup(mb, type); 1189 return (mb); 1190 }