Subject: Re: kern/32112
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: Jed Davis <jld@NetBSD.org>
List: netbsd-bugs
Date: 08/24/2006 02:50:04
The following reply was made to PR kern/32112; it has been noted by GNATS.
From: Jed Davis <jld@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/32112
Date: Wed, 23 Aug 2006 22:49:43 -0400
Now that I finally understand what checkalias() is and isn't meant to do...
The problem here is that, for a device that's been bdevvp()ed when no
real filesystem vnodes of it exist (e.g., the root device), checkalias()
will splat over it with the first instance of that device encountered in
the filesystem, causing whichever mount that device node came from to
inherit any existing opens on the fake vnode.
Normally this isn't a problem, because that node will be in /dev on the
root FS itself. But, if the first thing done after boot is a restore
that creates device nodes, or the population of an MFS /dev, or making
use of the new "init.root" feature (and then looking up the original
root device in the chrooted system), then that FS will be stuck with the
open.
So, a workaround: "ls /dev > /dev/null".
As for the "does not match mounted device", that's because (in the
example above) /altroot/dev/sd0a is now the "mounted device", and
ffs_mount won't update if the vnode is different. I feel that this
latter is also incorrect (consider the case of init.root -- the chrooted
system can't update its own root fs), and that it should allow the
update if the device numbers match.
--Jed