> Date: Fri, 21 Feb 2020 11:36:19 +0100 > From: Otto Moerbeek <o...@drijf.net> > > On Thu, Feb 20, 2020 at 09:02:32PM +0100, Otto Moerbeek wrote: > > > On Thu, Feb 20, 2020 at 08:20:13PM +0100, Otto Moerbeek wrote: > > > > > On Thu, Feb 20, 2020 at 07:48:25PM +0100, Otto Moerbeek wrote: > > > > > > > On Thu, Feb 20, 2020 at 07:27:55PM +0100, Matthias Schmidt wrote: > > > > > > > > > Hi Otto, > > > > > > > > > > * Otto Moerbeek wrote: > > > > > > Hi, > > > > > > > > > > > > This is amd64 only, it contains some i386 pieces, but those are > > > > > > incomplete. > > > > > > > > > > > > With the diff, install uses ffs2 for the filesystems created during > > > > > > install. All boot loaders (except the floppy one) contain support > > > > > > for > > > > > > loading a kernel from ffs2. > > > > > > > > > > > > To test, create a snapshot (see release(8)) with this diff and use > > > > > > it > > > > > > to install a new system. You could also use the snap at > > > > > > www.drijf.net/openbsd/66. Note that it is unsigned. > > > > > > > > > > > > Note that when you manually create an fs, it still will be ffs1 by > > > > > > default. That is to not disturb other platforms. Use -O2 for ffs2. > > > > > > > > > > > > Please test and provide feedback. One think you should see is that > > > > > > the > > > > > > newfs is much faster and fsck as well, since ffs2 creates inodes > > > > > > lazily and thus has much less inodes to check in the typical case. > > > > > > > > > > I used your provided snap to do a few installations with VMs. The > > > > > following things worked as expected: > > > > > > > > > > * Default install on one disk > > > > > * Install on softraid crypto disk > > > > > * Install on softraid 1 with two disks below > > > > > > > > > > I verified each time with dumpfs that FFS2 was used indeed. > > > > > > > > > > I also checked out a large git repo on the first VM into /home and > > > > > pulled the plug to see how fsck behaves. After reboot, fsck marked / > > > > > as > > > > > clean and then I saw the message that init changed the secure level > > > > > from > > > > > 0 to 1, but nothing more happened. I could type so the system was not > > > > > hanging, however, it was also not checking /home (which I expected). > > > > > I > > > > > waited for 5 minutes, pulled the plug again and the fsck worked as > > > > > normal and the system booted to the login prompt. > > > > > > > > > > I did that multiple times and each time it stopped on the first run. > > > > > After power cycling, everything worked as expected and ... wow, fsck > > > > > on > > > > > FFS2 is indeed fast. > > > > > > > > > > Cheers > > > > > > > > > > Matthias > > > > > > > > Thanks for testing. I am seeing the same problem if I do a vmctl stop > > > > -f of a VM. After that, / gets fscked followed by a hang. Another reset > > > > fixes things. Going to check if this happens with a standard snap. > > > > > > > > -Otto > > > > > > > > > > It odes not happen with an ffs1 root. With ffs2, I'm seeing: > > > > > > WARNING: / was not properly unmounted > > > Automatic boot in progress: starting file system checks. > > > /dev/sd0a (d7c346af87544f00.a): 1806 files, 41159 used, 463552 free > > > (48 frags, 57938 blocks, 0.0% fragmentation) > > > /dev/sd0a (d7c346af87544f00.a): MARKING FILE SYSTEM CLEAN > > > panic: init died (signal 11, exit 0) > > > > > > If I go to single user mode, I can run fsck -p, but then the / fs is > > > gone... > > > that explains why init would die. Investigating further... > > > > > > -Otto > > > > > > > It looks like something is going wrong with the special case for root > > filesystems, a so called hot root. See fsck_ffs/main.c > > > > To be continued. > > > > -Otto > > > > Diff below fixes the issue. Snap with it is uploaded. You should be > able to upgrade yor test with it.
That looks like a diff that can be committed now isn't it? Might need an #ifdef FFS2 though for the else case. > Index: ufs/ffs/ffs_vfsops.c > =================================================================== > RCS file: /cvs/src/sys/ufs/ffs/ffs_vfsops.c,v > retrieving revision 1.182 > diff -u -p -r1.182 ffs_vfsops.c > --- ufs/ffs/ffs_vfsops.c 26 Dec 2019 13:28:49 -0000 1.182 > +++ ufs/ffs/ffs_vfsops.c 21 Feb 2020 10:34:01 -0000 > @@ -533,8 +533,12 @@ ffs_reload_vnode(struct vnode *vp, void > return (error); > } > > - *ip->i_din1 = *((struct ufs1_dinode *)bp->b_data + > - ino_to_fsbo(fra->fs, ip->i_number)); > + if (fra->fs->fs_magic == FS_UFS1_MAGIC) > + *ip->i_din1 = *((struct ufs1_dinode *)bp->b_data + > + ino_to_fsbo(fra->fs, ip->i_number)); > + else > + *ip->i_din2 = *((struct ufs2_dinode *)bp->b_data + > + ino_to_fsbo(fra->fs, ip->i_number)); > ip->i_effnlink = DIP(ip, nlink); > brelse(bp); > vput(vp); > >