Date: Sat, 16 Jan 1999 00:02:12 -0500 (EST) From: Luoqi Chen <luoqi@watermarkgroup.com> To: freebsd-current@FreeBSD.ORG, green@unixhelp.org Subject: Re: trap in ufs_lookup Message-ID: <199901160502.AAA20391@lor.watermarkgroup.com>
next in thread | raw e-mail | index | archive | help
I'm pretty sure this is not softupdates related. It could either be bad RAM or a bad disk block, there is no way entryoffsetinblock could be 21209, the block size is only 8192. And you need over 2000 files to fill the directory to i_offset == 37593, assuming an average file name length of 10 bytes. -lq > I've got a crash in ufs_lookup, and I'm trying to assess responsibility. I > use SoftUpdates on all drives and _MAY_ have some bad RAM. This crash was > during a make -j4 -DNOCLEAN world, and maybe it may be due to SoftUpdates not > completely having finished the dir, but I'm thinking it could've been RAM > corruption. Someone help me :) > > GDB is free software and you are welcome to distribute copies of it > under certain conditions; type "show copying" to see the conditions. > There is absolutely no warranty for GDB; type "show warranty" for details. > GDB 4.16 (i386-unknown-freebsd), > Copyright 1996 Free Software Foundation, Inc... > IdlePTD 2899968 > initial pcb at 2425ec > panicstr: vm_fault: fault on nofault entry, addr: f3748000 > panic messages: > --- > panic: vm_fault: fault on nofault entry, addr: f3748000 > > syncing disks... 234 232 223 198 167 150 123 92 63 19 11 1 1 1 1 1 1 1 1 1 givin > g up > > dumping to dev 30001, offset 40960 > dump 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 > 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 > 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 > --- > #0 boot (howto=256) at ../../kern/kern_shutdown.c:285 > 285 dumppcb.pcb_cr3 = rcr3(); > (kgdb) bt > #0 boot (howto=256) at ../../kern/kern_shutdown.c:285 > #1 0xf01383d5 in panic ( > fmt=0xf0211d86 "vm_fault: fault on nofault entry, addr: %lx") > at ../../kern/kern_shutdown.c:446 > #2 0xf01a297e in vm_fault (map=0xf025e014, vaddr=4084498432, > fault_type=1 '\001', fault_flags=0) at ../../vm/vm_fault.c:232 > #3 0xf01da750 in trap_pfault (frame=0xf7c46cd0, usermode=0, eva=4084499165) > at ../../i386/i386/trap.c:824 > #4 0xf01da3f2 in trap (frame={tf_es = 16, tf_ds = 16, tf_edi = 21209, > tf_esi = -247132928, tf_ebp = -138121840, tf_isp = -138121992, > tf_ebx = -210468135, tf_edx = -222954112, tf_ecx = 8191, tf_eax = 37593, > tf_trapno = 12, tf_err = 0, tf_eip = -266750417, tf_cs = 8, > tf_eflags = 66178, tf_esp = -138278720, tf_ss = -138121524}) > at ../../i386/i386/trap.c:437 > #5 0xf019b62f in ufs_lookup (ap=0xf7c46dcc) at ../../ufs/ufs/ufs_lookup.c:238 > #6 0xf01a03e9 in ufs_vnoperate (ap=0xf7c46dcc) > at ../../ufs/ufs/ufs_vnops.c:2294 > #7 0xf0157f30 in vfs_cache_lookup (ap=0xf7c46e28) at vnode_if.h:55 > #8 0xf01a03e9 in ufs_vnoperate (ap=0xf7c46e28) > at ../../ufs/ufs/ufs_vnops.c:2294 > #9 0xf015a405 in lookup (ndp=0xf7c46ea8) at vnode_if.h:31 > #10 0xf0159ed8 in namei (ndp=0xf7c46ea8) at ../../kern/vfs_lookup.c:152 > #11 0xf015f5a0 in stat (p=0xf7b8b3c0, uap=0xf7c46f84) > ---Type <return> to continue, or q <return> to quit--- > at ../../kern/vfs_syscalls.c:1614 > #12 0xf01dad47 in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi = 136292736, > tf_esi = 0, tf_ebp = -272644404, tf_isp = -138121260, > tf_ebx = 134749056, tf_edx = 12, tf_ecx = 134749056, tf_eax = 188, > tf_trapno = 12, tf_err = 2, tf_eip = 134580048, tf_cs = 31, > tf_eflags = 582, tf_esp = -272644524, tf_ss = 39}) > at ../../i386/i386/trap.c:1100 > #13 0xf01cd85c in Xint0x80_syscall () > #14 0x8050303 in ?? () > #15 0x8049761 in ?? () > #16 0x8057a79 in ?? () > #17 0x8057a45 in ?? () > #18 0x80496e8 in ?? () > #19 0x8057a79 in ?? () > #20 0x8057a45 in ?? () > #21 0x80496e8 in ?? () > #22 0x8057a79 in ?? () > #23 0x8057a45 in ?? () > #24 0x80496e8 in ?? () > #25 0x8049aa0 in ?? () > #26 0x804fd0f in ?? () > #27 0x80480e9 in ?? () > (kgdb) frame 5 > #5 0xf019b62f in ufs_lookup (ap=0xf7c46dcc) at ../../ufs/ufs/ufs_lookup.c:238 > 238 ep = (struct direct *)((char *)bp->b_data + entryoffseti > nblock); > (kgdb) l > 233 * Full validation checks are slow, so we only check > 234 * enough to insure forward progress through the > 235 * directory. Complete checks can be run by patching > 236 * "dirchk" to be true. > 237 */ > 238 ep = (struct direct *)((char *)bp->b_data + entryoffseti > nblock); > 239 if (ep->d_reclen == 0 || > 240 (dirchk && ufs_dirbadentry(vdp, ep, entryoffsetinblo > ck))) { > 241 int i; > 242 > (kgdb) printf "%p + %d\n", bp->b_data, entryoffset^Ht^Ginblock > 0xf3743000 + 21209 > (kgdb) printf "%d: %s\n", p->p_pid ^H ^H, p->p_comm > 68863: make > #relevant code: > bmask = VFSTOUFS(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1; > if (nameiop != LOOKUP || dp->i_diroff == 0 || > dp->i_diroff > dp->i_size) { > entryoffsetinblock = 0; > dp->i_offset = 0; > numdirpasses = 1; > } else { > dp->i_offset = dp->i_diroff; > if ((entryoffsetinblock = dp->i_offset & bmask) && > (error = UFS_BLKATOFF(vdp, (off_t)dp->i_offset, NULL, &bp))) > return (error); > numdirpasses = 2; > nchstats.ncs_2passes++; > } > (kgdb) printf "i_offset %d & bmask %d = %d\n", dp->i_offset, bmask, (dp->i_offset & bmask) > i_offset 37593 & bmask 8191 = 4825 > (kgdb) quit > > Brian Feldman _ __ ___ ___ ___ > green@unixhelp.org _ __ ___ | _ ) __| \ > http://www.freebsd.org/ _ __ ___ ____ | _ \__ \ |) | > FreeBSD: The Power to Serve! _ __ ___ ____ _____ |___/___/___/ > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901160502.AAA20391>