Date: Thu, 16 Nov 1995 12:51:27 -0700 (MST) From: Terry Lambert <terry@lambert.org> To: hwr@pilhuhn.de (Heiko W.Rupp) Cc: joerg_wunsch@uriah.heep.sax.de, hwr@pilhuhn.de, current@freebsd.org Subject: Re: 2.1-stable bombs at umount Message-ID: <199511161951.MAA03640@phaeton.artisoft.com> In-Reply-To: <m0tG0TJ-0005KXC@pilhuhn.de> from "Heiko W.Rupp" at Nov 16, 95 10:19:05 am
next in thread | previous in thread | raw e-mail | index | archive | help
> > Joerg Wunsch: > | > | Fatal trap 12: page fault while in kernel mode > | > | instruction pointer = 0x8:0xf0172ee8 > > | Please, run ``nm `sysctl -n kern.bootfile` | sort | more'', and > | examine the region around 0xf0172ee8. > > This gives: > f0172e70 F ufs_inode.o > f0172e70 T _ufs_init > f0172eb8 T _ufs_inactive > f017307c T _ufs_reclaim > f0173130 F ufs_lookup.o 48 instructions into ufs_inactive() in /sys/ufs/ufs/ufs_inode.c. int ufs_inactive(ap) struct vop_inactive_args /* { struct vnode *a_vp; } */ *ap; { register struct vnode *vp = ap->a_vp; register struct inode *ip = VTOI(vp); [ ... ] .globl _ufs_inactive .type _ufs_inactive,@function _ufs_inactive: pushl %ebp movl %esp,%ebp subl $40,%esp pushl %edi pushl %esi pushl %ebx movl 8(%ebp),%edx movl 4(%edx),%esi movl 100(%esi),%edi cmpl $0,_prtactive je L117 cmpw $0,4(%esi) je L117 pushl %esi pushl $LC0 call _vprint addl $8,%esp Someone passed a NULL vnode to ufs_inactive. When the inode pointer was dereferenced out, it blew. My guess is that the offending VOP_INACTIVE() is being called by vclean() which is being called by vflush(), which is being called with a NULLVP in /sys/ufs/ffs/ffs_vfsops.c from ffs_flushfiles(). Let me guess: You are running with quotas on this file system. This seems to be an unforseen side effect of the recent changes to the way unmounts are done on system shutdown. They are now explicit in reverse order (per David Greenman's recent posting about the use of circular queues for the mountlist). If you explicitly add the line: qsync(mp); Before the line: error = vflush(mp, NULLVP, SKIPSYSTEM|flags); in /sys/ufs/ffs/ffs_vfsops.c from ffs_flushfiles(), it *might* mask the problem for you. If you aren't running with quotas, reverting the unmount code to forward traverse the mountlist, focing each unmount, will fix the problem, or at least put the behaviour back the way it was before the problem became obvious. Regards, Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199511161951.MAA03640>