Date: Sat, 13 Dec 2003 23:16:08 -0800 (PST) From: Don Lewis <truckman@FreeBSD.org> To: jroberson@chesapeake.net Cc: freebsd-current@FreeBSD.org Subject: Re: HAVE TRACE & DDB Re: FreeBSD 5.2-RC1 released Message-ID: <200312140716.hBE7G8eF064492@gw.catspoiler.org> In-Reply-To: <200312140620.hBE6JpeF064409@gw.catspoiler.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 13 Dec, Don Lewis wrote: > On 12 Dec, Jeff Roberson wrote: > > >> fsync: giving up on dirty: 0xc4e18000: tag devfs, type VCHR, usecount 44, >> writecount 0, refcount 14, flags (VI_XLOCK|VV_OBJBUF), lock type devfs: EXCL >> (count 1) by thread 0xc20ff500 > > Why are we trying to reuse a vnode with a usecount of 44 and a refcount > of 14? What is thread 0xc20ff500 doing? Following up to myself ... It looks like we're trying to recycle this vnode because of the following sysinstall code, in distExtractTarball(): if (is_base && RunningAsInit && !Fake) { unmounted_dev = 1; unmount("/dev", MNT_FORCE); } else unmounted_dev = 0; I'm guessing that the purpose of this code is to unmount devfs from /dev so that when the base distribution is unpacked it can populate /dev from the tarball. This seems wrong, because it looks like the root file system is mounted on /mnt, and devfs is also mounted on /mnt/dev ... What happens if we forceably umount /dev while /dev/whatever holds a mounted file system? It looks like this is handled by vgonechrl(). It looks to me like vclean() is going to do some scary stuff to this vnode. BTW, I think the root vnode is the root of the md file system, not the root of the file system being populated by sysinstall. I don't know why there would be anything to sync at this point, though. I suspect that removing the above sysinstall code will fix the immediate problem, but there is still much I don't understand.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200312140716.hBE7G8eF064492>