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>
