In uvm Chuck decided backing store would not be allocated proactively
authorderaadt <deraadt@openbsd.org>
Mon, 11 Dec 2017 05:27:40 +0000 (05:27 +0000)
committerderaadt <deraadt@openbsd.org>
Mon, 11 Dec 2017 05:27:40 +0000 (05:27 +0000)
commit7efda1a11d8bf31499aa02da4d14eddf1b5293ae
tree77661cbfae0631d2f5a2086c7baae6f06a9af989
parent21cc68cc2cccc4282e18acb1376c22669c542c6b
In uvm Chuck decided backing store would not be allocated proactively
for blocks re-fetchable from the filesystem.  However at reboot time,
filesystems are unmounted, and since processes lack backing store they
are killed. Since the scheduler is still running, in some cases init is
killed... which drops us to ddb [noted by bluhm].  Solution is to convert
filesystems to read-only [proposed by kettenis]. The tale follows:
sys_reboot() should pass proc * to MD boot() to vfs_shutdown() which
completes current IO with vfs_busy VB_WRITE|VB_WAIT, then calls VFS_MOUNT()
with MNT_UPDATE | MNT_RDONLY, soon teaching us that *fs_mount() calls a
copyin() late... so store the sizes in vfsconflist[] and move the copyin()
to sys_mount()... and notice nfs_mount copyin() is size-variant, so kill
legacy struct nfs_args3.  Next we learn ffs_mount()'s MNT_UPDATE code is
sharp and rusty especially wrt softdep, so fix some bugs adn add
~MNT_SOFTDEP to the downgrade.  Some vnodes need a little more help,
so tie them to &dead_vnops.

ffs_mount calling DIOCCACHESYNC is causing a bit of grief still but
this issue is seperate and will be dealt with in time.
couple hundred reboots by bluhm and myself, advice from guenther and
others at the hut
30 files changed:
sys/arch/alpha/alpha/machdep.c
sys/arch/amd64/amd64/machdep.c
sys/arch/arm/arm/arm32_machdep.c
sys/arch/arm64/arm64/machdep.c
sys/arch/hppa/hppa/machdep.c
sys/arch/i386/i386/machdep.c
sys/arch/landisk/landisk/machdep.c
sys/arch/loongson/loongson/machdep.c
sys/arch/luna88k/luna88k/machdep.c
sys/arch/macppc/macppc/machdep.c
sys/arch/octeon/octeon/machdep.c
sys/arch/sgi/sgi/machdep.c
sys/arch/socppc/socppc/machdep.c
sys/arch/sparc64/sparc64/machdep.c
sys/ddb/db_command.c
sys/isofs/cd9660/cd9660_vfsops.c
sys/isofs/udf/udf_vfsops.c
sys/kern/vfs_init.c
sys/kern/vfs_subr.c
sys/kern/vfs_syscalls.c
sys/miscfs/fuse/fuse_vfsops.c
sys/msdosfs/msdosfs_vfsops.c
sys/nfs/nfs_vfsops.c
sys/ntfs/ntfs_vfsops.c
sys/sys/mount.h
sys/sys/vnode.h
sys/tmpfs/tmpfs_vfsops.c
sys/ufs/ext2fs/ext2fs_vfsops.c
sys/ufs/ffs/ffs_vfsops.c
sys/ufs/mfs/mfs_vfsops.c