From owner-freebsd-stable Mon Jun 25 12:51:45 2001 Delivered-To: freebsd-stable@freebsd.org Received: from sneakerz.org (sneakerz.org [216.33.66.254]) by hub.freebsd.org (Postfix) with ESMTP id C065637B407; Mon, 25 Jun 2001 12:51:34 -0700 (PDT) (envelope-from bright@sneakerz.org) Received: by sneakerz.org (Postfix, from userid 1092) id 2984F5D010; Mon, 25 Jun 2001 14:51:24 -0500 (CDT) Date: Mon, 25 Jun 2001 14:51:24 -0500 From: Alfred Perlstein To: freebsd-stable@freebsd.org Cc: dillon@freebsd.org, tegge@freebsd.org Subject: -stable weird panics Message-ID: <20010625145124.D64836@sneakerz.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2i Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG I'm trying to get some people at Netzero using FreeBSD, actually they're trying to use FreeBSD and I'm trying to get it to stop crashing on them. (see my sys_pipe.c commits) Anyhow, they keep dying on getnewvnode like so: #5 0xc031d9bf in trap (frame={tf_fs = -1070858216, tf_es = -1007878128, tf_ds = -1069809648, tf_edi = 0, tf_esi = -1002983424, tf_ebp = -62104564, tf_isp = -62104632, tf_ebx = 0, tf_edx = -1744880709, tf_ecx = 42, tf_eax = 0, tf_trapno = 12, tf_err = 2, tf_eip = -1070480145, tf_cs = 8, tf_eflags = 66050, tf_esp = -1003572608, tf_ss = -1071798700}) at ../../i386/i386/trap.c:443 #6 0xc031c4ef in generic_bzero () #7 0xc02ae6af in ffs_vget (mp=0xc425ee00, ino=135970, vpp=0xfc4c5ca0) at ../../ufs/ffs/ffs_vfsops.c:1069 #8 0xc02a376f in ffs_valloc (pvp=0xfb9dcec0, mode=33188, cred=0xc47b1d00, vpp=0xfc4c5ca0) at ../../ufs/ffs/ffs_alloc.c:600 #9 0xc02b628f in ufs_makeinode (mode=33188, dvp=0xfb9dcec0, vpp=0xfc4c5edc, cnp=0xfc4c5ef0) at ../../ufs/ufs/ufs_vnops.c:2088 #10 0xc02b3c00 in ufs_create (ap=0xfc4c5dfc) at ../../ufs/ufs/ufs_vnops.c:190 #11 0xc02b658d in ufs_vnoperate (ap=0xfc4c5dfc) at ../../ufs/ufs/ufs_vnops.c:2373 #12 0xc01e20ac in vn_open (ndp=0xfc4c5ec8, fmode=2562, cmode=420) at vnode_if.h:106 #13 0xc01de2f4 in open (p=0xfc49b2a0, uap=0xfc4c5f80) at ../../kern/vfs_syscalls.c:995 #7 0xc02ae6af in ffs_vget (mp=0xc425ee00, ino=135970, vpp=0xfc4c5ca0) at ../../ufs/ffs/ffs_vfsops.c:1069 1069 error = getnewvnode(VT_UFS, mp, ffs_vnodeop_p, &vp); (kgdb) list 1064 */ 1065 MALLOC(ip, struct inode *, sizeof(struct inode), 1066 ump->um_malloctype, M_WAITOK); 1067 1068 /* Allocate a new vnode/inode. */ 1069 error = getnewvnode(VT_UFS, mp, ffs_vnodeop_p, &vp); 1070 if (error) { 1071 if (ffs_inode_hash_lock < 0) 1072 wakeup(&ffs_inode_hash_lock); 1073 ffs_inode_hash_lock = 0; It really looks like the zalloc() call in getnewvnode() is returning NULL, and instead of bailing getnewvnode() tries to zero a NULL pointer. I'm weirded out that zalloc is failing because I think we've tuned the kernel memory for quite a large pool: options VM_KMEM_SIZE="(400*1024*1024)" options VM_KMEM_SIZE_MAX="(400*1024*1024)" however.. % vmstat -m -M /var/qmail/crash/vmcore.6 Memory Totals: In Use Free Requests 17408K 137K 7909365 % vmstat -z -M /var/qmail/crash/vmcore.6 ZONE used total mem-use PIPE 55 408 8/63K SWAPMETA 0 0 0/0K tcpcb 303 371 160/197K unpcb 4 128 0/8K ripcb 0 21 0/3K tcpcb 0 0 0/0K udpcb 41 84 7/15K socket 354 441 66/82K KNOTE 1 128 0/8K NFSNODE 99464 99480 31082/31087K NFSMOUNT 26 35 13/18K VNODE 105046 105046 19696/19696K NAMEI 2 48 2/48K VMSPACE 97 320 18/60K PROC 101 294 41/119K DP fakepg 0 0 0/0K PV ENTRY 33850 524263 925/14335K MAP ENTRY 1057 2593 49/121K KMAP ENTRY 824 1148 38/53K MAP 7 10 0/1K VM OBJECT 66326 66406 6218/6225K ------------------------------------------ TOTAL 58330/72146K So why is zalloc dying when it looks like only about 90 megs of kernel memory is allocated? Anyhow, I've added a check in getnewvnode to return ENOMEM if zalloc fails, my concern is that other parts of the kernel are going to blow up immediately after that is caught because it looks like the majority of places don't expect zalloc to fail. Any suggestions will be helpful, any requests for more information will happily be attempted. thanks, -Alfred here's another core, this time in getnewvnode called from NFS: (kgdb) bt #0 dumpsys () at ../../kern/kern_shutdown.c:469 #1 0xc01af6ef in boot (howto=256) at ../../kern/kern_shutdown.c:309 #2 0xc01afab9 in panic (fmt=0xc0386b6f "page fault") at ../../kern/kern_shutdown.c:556 #3 0xc031e224 in trap_fatal (frame=0xf1b76b90, eva=0) at ../../i386/i386/trap.c:951 #4 0xc031de95 in trap_pfault (frame=0xf1b76b90, usermode=0, eva=0) at ../../i386/i386/trap.c:844 #5 0xc031d9bf in trap (frame={tf_fs = -1070858216, tf_es = -1008140272, tf_ds = -1069809648, tf_edi = 0, tf_esi = -18221184, tf_ebp = -239637504, tf_isp = -239637572, tf_ebx = 0, tf_edx = -1744880709, tf_ecx = 42, tf_eax = 0, tf_trapno = 12, tf_err = 2, tf_eip = -1070480145, tf_cs = 8, tf_eflags = 66050, tf_esp = -1005287872, tf_ss = -1071798700}) at ../../i386/i386/trap.c:443 #6 0xc031c4ef in generic_bzero () #7 0xc022a09d in nfs_nget (mntp=0xc4225600, fhp=0xc3a32858, fhsize=32, npp=0xf1b76c9c) at ../../nfs/nfs_node.c:145 #8 0xc024faa3 in nfs_lookup (ap=0xf1b76d68) at ../../nfs/nfs_vnops.c:942 #9 0xc01d99c5 in lookup (ndp=0xf1b76ec8) at vnode_if.h:52 #10 0xc01d9503 in namei (ndp=0xf1b76ec8) at ../../kern/vfs_lookup.c:153 #11 0xc01e2173 in vn_open (ndp=0xf1b76ec8, fmode=1, cmode=384) at ../../kern/vfs_vnops.c:137 #12 0xc01de2f4 in open (p=0xf1b19440, uap=0xf1b76f80) at ../../kern/vfs_syscalls.c:995 (kgdb) up #7 0xc022a09d in nfs_nget (mntp=0xc4225600, fhp=0xc3a32858, fhsize=32, npp=0xf1b76c9c) at ../../nfs/nfs_node.c:145 145 error = getnewvnode(VT_NFS, mntp, nfsv2_vnodeop_p, &nvp); (kgdb) list 140 */ 141 np = zalloc(nfsnode_zone); 142 if (np == NULL) 143 error = ENFILE; 144 else 145 error = getnewvnode(VT_NFS, mntp, nfsv2_vnodeop_p, &nvp); 146 if (error) { 147 if (nfs_node_hash_lock < 0) 148 wakeup(&nfs_node_hash_lock); 149 nfs_node_hash_lock = 0; (i thought that zalloc was failing here, but it doesn't seem to be) % vmstat -m -M /var/qmail/crash/vmcore.5 Memory Totals: In Use Free Requests 51586K 1707K 39661043 % vmstat -z -M /var/qmail/crash/vmcore.5 ZONE used total mem-use PIPE 53 918 8/143K SWAPMETA 0 0 0/0K tcpcb 298 399 158/211K unpcb 4 128 0/8K ripcb 0 21 0/3K tcpcb 0 0 0/0K udpcb 35 84 6/15K socket 342 462 64/86K KNOTE 0 128 0/8K NFSNODE 446814 446832 139629/139635K NFSMOUNT 26 35 13/18K VNODE 450712 450712 84508/84508K NAMEI 1 152 1/152K VMSPACE 93 576 17/108K PROC 97 588 39/238K DP fakepg 0 0 0/0K PV ENTRY 92980 524263 2542/14335K MAP ENTRY 1028 5228 48/245K KMAP ENTRY 1401 2253 65/105K MAP 7 10 0/1K VM OBJECT 281413 281530 26382/26393K ------------------------------------------ TOTAL 253486/266219K To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message