DragonFly BSD
DragonFly users List (threaded) for 2010-02
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: early boot prompt not accessible on newly installed system


From: Johannes Hofmann <johannes.hofmann@xxxxxx>
Date: 15 Feb 2010 17:51:15 GMT

Johannes Hofmann <johannes.hofmann@gmx.de> wrote:
> Hi,
> 
> on a recently installed system I can't get into the early boot prompt
> (the one before LOADER(8)).
> If I hit enter while the bar is spinning the systems gets stuck.
> If I just wait for the timeout it continues to boot fine with a warning
> "/boot/loader: Not a directory".
> I assume it is related to disklable64 being used by the installer now,
> as the systems which still have a normal disklabel are not affected.
> I can reproduce the problem in VirtualBox with a current snapshot
> build.
> 
> It's not a big deal, as the system boots up ok, if I just wait.

Ok, I think I found out what's going on:

Reading the disklabel64 in pc32/boot2/boot2.c:609 trashes the ufs
buffers which are behind  boot2_dmadat->secbuf.
This is a problem if we reread the same inode after that, because in
that case boot2_ufs_read() would use the buffers directly without
actually reading in the data again.
A potential fix is to invalidate inomap in boot2_ufs_init:

diff --git a/sys/boot/common/ufsread.c b/sys/boot/common/ufsread.c
index 6b94600..8e4c5c5 100644
--- a/sys/boot/common/ufsread.c
+++ b/sys/boot/common/ufsread.c
@@ -166,6 +166,7 @@ boot2_ufs_init(void)
        struct fs *fs;
        size_t n;
 
+       inomap = 0;
        fs = (struct fs *)fsdmadat->sbbuf;
 
        for (n = 0; sblock_try[n] != -1; n++) {


Alternatively one could use a private buffer in dskprobe(), but I'm
not sure whether we need to save space here.

There may be more places that need fixing, e.g. for hammer boot
support...

Cheers,
Johannes



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]