Home | History | Annotate | only in /src/sys/rump/librump/rumpvfs
History log of /src/sys/rump/librump/rumpvfs
RevisionDateAuthorComments
 1.1 19-Nov-2008  pooka branches: 1.1.4; 1.1.6; 1.1.10;
Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.1.10.2 04-May-2009  yamt sync with head.
 1.1.10.1 19-Nov-2008  yamt file Makefile was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.1.6.2 19-Jan-2009  skrll Sync with HEAD.
 1.1.6.1 19-Nov-2008  skrll file Makefile was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.1.4.2 17-Jan-2009  mjf Sync with HEAD.
 1.1.4.1 19-Nov-2008  mjf file Makefile was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.52 22-Apr-2023  riastradh rumpvfs: Link in secmodel_extensions_vfs.c as intended, like kernel.

Forgot to commit this part when splitting up secmodel_extensions.c.
 1.51 22-Apr-2023  riastradh rump: Move vnode_if.c from rumpkern to rumpvfs.

This has become increasingly less of a `fully dynamic interface', and
the need for it in the rest of sys/kern/ has been obviated, so let's
put it where it belongs in rumpvfs.
 1.50 16-May-2020  christos Add ACL support for FFS. From FreeBSD.
 1.49 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.48 19-Oct-2015  pooka Add a COMMENT describing what each component roughly does.

"make describe" prints the comment.

Requested/inspired by Vincent Schwarzer on rumpkernel-users
 1.47 06-May-2015  hannken Remove miscfs/syncfs and

- move the syncer into kern/vfs_subr.c.

- change the syncer to process the mountlist and VFS_SYNC as appropriate.

- use an API for mount points similiar to the API for vnodes:
- vfs_syncer_add_to_worklist(struct mount *mp) to add
- vfs_syncer_remove_from_worklist(struct mount *mp) to remove a mount.

No objections on tech-kern@
 1.46 23-Apr-2015  pooka Rename RUMP_COMPAT to RUMP_NBCOMBAT to better signify what the
variable does.
 1.45 22-Apr-2015  pooka Build compat code only when specified by RUMP_COMPAT
 1.44 22-Apr-2015  pooka rename rumpvfs/compat.c to rumpvfs/rumpvfs_compat50.c
 1.43 02-Dec-2014  pooka Remove shlib_version files and just use Makefile SHLIB_MAJOR/MINOR,
with the default provided by Makefile.rump (they're all 0.0 anyway)
 1.42 09-Nov-2014  pooka branches: 1.42.2;
Move rump kernel man pages from various sources to sys/rump

namely:
* src/lib is used only when building for POSIX'y platforms, but
the man pages have their use for all platforms
* rumpuser.3 is a function of the rump kernel, not one of the of
the POSIX'y implementation hosted in src/lib/librumpuser

no functional change
 1.41 27-Apr-2014  pooka Eliminate weak symbols from rump kernel syscall handlers, part 7:

Build component constructors which establish syscalls at boottime.
 1.40 27-Feb-2014  hannken branches: 1.40.2;
Currently dead vnodes still reside on the vnodelist of the file system
they have been removed from.

Create a "dead mount" that takes dead vnodes until they get freed.

Discussed on tech-kern.
 1.39 09-Dec-2013  pooka Now that Makefile.rump is included here first, do not override any
SRCS it adds. This is required for linksyms_sun.c used when linking
with the Solaris linker.
 1.38 09-Dec-2013  pooka Make ktrace a compile-time option
 1.37 09-Dec-2013  pooka Support ktrace for rump kernels.

Requested by Justin Cormack on rumpkernel-users.
 1.36 15-Mar-2013  pooka branches: 1.36.6;
Allow Makefile.rump to append to SRCS.
 1.35 13-May-2012  dholland branches: 1.35.2;
Revert previous. It seems that some or all makefiles in tests/ do not
bother to set DPADD and thereby fail silently on library changes.
 1.34 13-May-2012  dholland quota1_subr.c and vfs_quotactl.c are not needed here any more.
 1.33 08-May-2012  riastradh Implement a genfs_rename abstraction.

First major step in incrementally adapting all the file systems to a
saner rename VOP protocol.
 1.32 29-Jan-2012  dholland branches: 1.32.2;
Add vfs_quotactl.c. This is where filesystem-independent quota
handling will go.
 1.31 02-Apr-2011  rmind branches: 1.31.4; 1.31.8;
Split off parts of vfs_subr.c into vfs_vnode.c and vfs_mount.c modules.

No functional change. Discussed on tech-kern@.
 1.30 24-Mar-2011  bouyer Add a new libquota library, which contains some blocks to build and/or
parse quota plists; as well as a getfsquota() function to retrieve quotas
for a single id from a single filesystem (whatever filesystem this is:
a local quota-enabled fs or NFS). This is build on functions getufsquota()
(for local filesystems with UFS-like quotas) and getnfsquota();
which are also available to userland programs.
move functions from quota2_subr.c to libquota or libprop as appropriate,
and ajust in-tree quota tools.
move some declarations from kernel headers to either sys/quota.h or
quota/quota.h as appropriate. ufs/ufs/quota.h still installed because
it's needed by other installed ufs headers.
ufs/ufs/quota1.h still installed as a quick&dirty way to get a code
using the old quotactl() to compile (just include ufs/ufs/quota1.h instead of
ufs/ufs/quota.h - old code won't compile without this change and this is
on purpose).
Discussed on tech-kern@ and tech-net@ (long thread, but not much about
libquota itself ...)
 1.29 06-Mar-2011  bouyer merge the bouyer-quota2 branch. This adds a new on-disk format
to store disk quota usage and limits, integrated with ffs
metadata. Usage is checked by fsck_ffs (no more quotacheck)
and is covered by the WAPBL journal. Enabled with kernel
option QUOTA2 (added where QUOTA was enabled in kernel config files),
turned on with tunefs(8) on a per-filesystem
basis. mount_mfs(8) can also turn quotas on.

See http://mail-index.netbsd.org/tech-kern/2011/02/19/msg010025.html
for details.
 1.28 21-Apr-2010  pooka branches: 1.28.2; 1.28.4;
Move sys_module from vfs to kern -- while modules cannot be loaded,
there's not forbidden about querying the list of (builtin) modules
even when running without vfs.
 1.27 12-Apr-2010  pooka Support real file system transactions/suspension (vfs_trans.c)
instead of just stubbing it.
 1.26 29-Mar-2010  pooka Support fifofs in rump. Do not include it in rumpvfs directly,
since it involves some very non-fs'y components like sockets and
local domain networking. Also (for better or worse?), call it
rump*v*fs_fifofs instead of rumpfs_fifofs, since it does not really
provide a file system driver.

XXX: uses duplicate common symbols and functionality depends on
link order ... (but at least it works better than before this change)
 1.25 08-Mar-2010  pooka branches: 1.25.2;
mfs miniroot is mandatory
 1.24 16-Feb-2010  pooka Globally define -Wno-pointer-sign, as it has become a pointless
exercise of "add it to every Makefile individually".

XXX: should autosynchronize with the rest of the kernel buildflags
in sys/conf/Makefile.kern.inc.
 1.23 17-Dec-2009  pooka branches: 1.23.2;
Add devnull.c to sources (forgot to do it yesterday).
Thanks to gson for the ping.
 1.22 09-Dec-2009  pooka Since rumpfs is no longer a module, remove rump_module from the
list of sources. This, in a rather curious twist of linker magic,
broke anything using rump file systems when librumpvfs was compiled
with LIBDPLIBS pointing to librump.

Thanks to the several people who reported the problem, and especially
Arnaud Ysmal for noticing the paramount symptom that components
compiled in src/lib did not work while ones compiled in sys/rump/librump
did work.
 1.21 27-Nov-2009  pooka include subr_kobj_vfs
 1.20 26-Nov-2009  pooka For rumpfs, do mountroot instead of the bunch of homegrown hacks
currently there. Still needs a little massage to get the kernel
interfaces right and avoid copypaste especially from main().

Also, move it a bit more into the direction of a real file system
(finally!) by giving it a vfsops. Most ops are still unimplemented,
though.
 1.19 26-Nov-2009  pooka Include kern_module_vfs and the modctl() syscall. The modctl()
syscall is here because module loading is a vfs operation.
Theoretically you shouldn't be able to have modules without vfs
support.
 1.18 20-Oct-2009  pooka Actually, put uvm_readahead into rumpkern, since while it's
technically vfs stuff, sys_descrip depends on it and readahead
itself uses only the pager interface.
 1.17 14-Oct-2009  pooka Adjust rump sources for external/internal interfaces.
No functional change.
 1.16 07-Oct-2009  pooka Use uvm_readahead.c instead of null stubs.
 1.15 07-Oct-2009  pooka space -> tab in one entry for consistency
 1.14 04-Oct-2009  pooka Include firmload. Although it may be used by devices, it's pure
vfs in nature, and therefore it belongs here (can't load a firmware
from a file system without file system support, right?). Rename
rump_cwdi to cwdi0, since firmload depends on that name (naughty
firmload).
 1.13 06-Sep-2009  pooka Rename rump_dev_makenodes() to rump_vfs_makedevnodes() -- while it
will most likely be used devices, the implementation requires
services provided by vfs (mkdir, mknod).
 1.12 07-Aug-2009  pooka Move genfs_io.c from rump SRCS to genfs SRCS.
Aesthetic commit, no functional change.
 1.11 05-Aug-2009  pooka Use uvm_vnode.c instead of homerolled stuff.
 1.10 03-Aug-2009  pooka Support read/write in rumpblk via physio()
 1.9 10-Jun-2009  pooka libkern is fully included in rumpkern, no need for cherry-picking
modules elsewhere.
 1.8 09-Jun-2009  pooka Put some spunk into deadfs.
 1.7 22-May-2009  pooka Add handrolled stat30 compat syscalls for calling post-time_t rump
kernels from pre-time_t userlands.
 1.6 19-Mar-2009  pooka branches: 1.6.2;
Make it possible to mount a file system through the mount() system
call in addition to the old rump_mnt_mount(). Some issues remain
(but require more deeprooted changes):
* it is possible to mount only to /
* unmount needs MNT_FORCE due to the new fs being root and having
a bonus reference
* cwdi is not set (since there is no concept of a process)
 1.5 13-Jan-2009  pooka branches: 1.5.2; 1.5.4; 1.5.6;
include vfs_lockf.c
 1.4 13-Jan-2009  pooka Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.3 01-Jan-2009  pooka Purge multiple kernel opt files.
 1.2 19-Dec-2008  pooka include vfs_xattr.c
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.5.6.2 23-Jul-2009  jym Sync with HEAD.
 1.5.6.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.5.4.3 28-Apr-2009  skrll Sync with HEAD.
 1.5.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.5.4.1 13-Jan-2009  skrll file Makefile.rumpvfs was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.5.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.5.2.1 13-Jan-2009  mjf file Makefile.rumpvfs was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.6.2.7 11-Aug-2010  yamt sync with head.
 1.6.2.6 11-Mar-2010  yamt sync with head
 1.6.2.5 16-Sep-2009  yamt sync with head
 1.6.2.4 19-Aug-2009  yamt sync with head.
 1.6.2.3 20-Jun-2009  yamt sync with head
 1.6.2.2 04-May-2009  yamt sync with head.
 1.6.2.1 19-Mar-2009  yamt file Makefile.rumpvfs was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.23.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.25.2.2 21-Apr-2011  rmind sync with head
 1.25.2.1 30-May-2010  rmind sync with head
 1.28.4.2 18-Feb-2011  bouyer quota2_subr.c is not used outside of ufs_quota2.c in kernel, so make it
compiled conditionally on QUOTA2 again
 1.28.4.1 15-Feb-2011  bouyer Implement COMPAT_50 quotactl(2)
 1.28.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.31.8.2 02-Jun-2012  mrg sync to latest -current.
 1.31.8.1 18-Feb-2012  mrg merge to -current.
 1.31.4.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.31.4.2 23-May-2012  yamt sync with head.
 1.31.4.1 17-Apr-2012  yamt sync with head
 1.32.2.1 02-Jul-2012  jdc Pull up revisions:
src/sys/conf/files revision 1.1050
src/sys/miscfs/genfs/genfs.h revision 1.30 via patch
src/sys/miscfs/genfs/genfs_rename.c revision 1.1 via patch
src/sys/rump/librump/rumpvfs/Makefile.rumpvfs revision 1.33
(requested by riastradh in ticket #286).

Implement a genfs_rename abstraction.

First major step in incrementally adapting all the file systems to a
saner rename VOP protocol.
 1.35.2.3 03-Dec-2017  jdolecek update from HEAD
 1.35.2.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.35.2.1 23-Jun-2013  tls resync from head
 1.36.6.1 18-May-2014  rmind sync with head
 1.40.2.1 10-Aug-2014  tls Rebase.
 1.42.2.4 19-Mar-2016  skrll Sync with HEAD
 1.42.2.3 27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.42.2.2 06-Jun-2015  skrll Sync with HEAD
 1.42.2.1 06-Apr-2015  skrll Sync with HEAD
 1.11 22-Apr-2015  pooka rename rumpvfs/compat.c to rumpvfs/rumpvfs_compat50.c
 1.10 15-Aug-2013  pooka branches: 1.10.6;
remove includes which haven't been necessary since the cudgel war
 1.9 17-Jan-2011  pooka branches: 1.9.6; 1.9.16; 1.9.20;
use compat code from sys/compat/common
 1.8 04-Jan-2011  pooka branches: 1.8.2;
Add NetBSD 5 compat wrapping for *utimes()
 1.7 30-Aug-2010  pooka do 5.0 compat for fstat
 1.6 19-Jul-2010  pooka * move stat syscalls to newstyle compat
* implement compat for pollts
 1.5 14-Oct-2009  pooka branches: 1.5.2; 1.5.4;
"rumppriv" goes back to "rump" per internal interface naming change.
 1.4 14-Oct-2009  pooka Adjust rump sources for external/internal interfaces.
No functional change.
 1.3 24-May-2009  mlelstv branches: 1.3.2;
<sys/syscallargs.h> requires <sys/sched.h> to define cpuset_t.
 1.2 22-May-2009  pooka Add compat routines for vattr translation over time_t change.
 1.1 22-May-2009  pooka Add handrolled stat30 compat syscalls for calling post-time_t rump
kernels from pre-time_t userlands.
 1.3.2.5 09-Oct-2010  yamt sync with head
 1.3.2.4 11-Aug-2010  yamt sync with head.
 1.3.2.3 11-Mar-2010  yamt sync with head
 1.3.2.2 20-Jun-2009  yamt sync with head
 1.3.2.1 24-May-2009  yamt file compat.c was added on branch yamt-nfs-mp on 2009-06-20 07:20:36 +0000
 1.5.4.1 05-Mar-2011  rmind sync with head
 1.5.2.2 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.5.2.1 17-Aug-2010  uebayasi Sync with HEAD.
 1.8.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.9.20.1 28-Aug-2013  rmind sync with head
 1.9.16.2 03-Dec-2017  jdolecek update from HEAD
 1.9.16.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.6.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.10.6.1 06-Jun-2015  skrll Sync with HEAD
 1.13 18-Jun-2019  kamil Drop unused retval pointer from do_sys_mknod{,at}()

No functional change intended.
 1.12 26-Jan-2016  pooka branches: 1.12.18;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.11 08-Jun-2015  pooka Allow device components to create symlinks in /dev
e.g. /dev/audio -> audio0

from Robert Millan <rmh@freebsd.org> via rumpkernel-users
 1.10 20-Jun-2014  pooka branches: 1.10.4;
Fix error return for rump_vfs_makeonedevnode()

from Ian Jackson <Ian.Jackson@eu.citrix.com>
 1.9 20-Mar-2014  christos branches: 1.9.2;
kill sprintf
 1.8 07-Mar-2013  pooka branches: 1.8.6;
Make the device node creation routines function pointers which default
to nullop without VFS. This relaxes the dependency between VFS and many
components, some of which can be used perfectly fine without VFS.
 1.7 21-Sep-2012  joerg Don't use NODEV when comparing against a major number as this is an
impossible type mismatch.
 1.6 10-Feb-2011  pooka branches: 1.6.4; 1.6.14;
Make it possible to specify a minor number for an autogenerated device node.
 1.5 30-Apr-2010  pooka branches: 1.5.2; 1.5.4;
Autogenerate /dev nodes. Use (recreate) the naming policy in
MAKEDEV. -- Not the famous irrational file system devfs, but an
incredible simulation.
 1.4 17-Dec-2009  pooka branches: 1.4.2; 1.4.4;
* implement rump_vfs_makeonedevnode(), where the interface for creating
multiple nodes doesn't make sense: e.g. /dev/null would've had to
be created with ("/dev/nul", 'l', 1)
* implement said /dev/null (just for show)
 1.3 03-Dec-2009  tron Make sure "error" gets initialised.
 1.2 03-Dec-2009  pooka * create /dev on the rump rootfs automatically
* make rump_vfs_makedevnodes() take a full basepath instead of hardcoding
an assumption that the device node is created in /dev
+ the caller is responsible that the directory the nodes are being
created in exists
 1.1 06-Sep-2009  pooka branches: 1.1.2;
Rename rump_dev_makenodes() to rump_vfs_makedevnodes() -- while it
will most likely be used devices, the implementation requires
services provided by vfs (mkdir, mknod).
 1.1.2.4 11-Aug-2010  yamt sync with head.
 1.1.2.3 11-Mar-2010  yamt sync with head
 1.1.2.2 16-Sep-2009  yamt sync with head
 1.1.2.1 06-Sep-2009  yamt file devnodes.c was added on branch yamt-nfs-mp on 2009-09-16 13:38:05 +0000
 1.4.4.2 05-Mar-2011  rmind sync with head
 1.4.4.1 30-May-2010  rmind sync with head
 1.4.2.1 17-Aug-2010  uebayasi Sync with HEAD.
 1.5.4.1 17-Feb-2011  bouyer Sync with HEAD
 1.5.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.6.14.4 03-Dec-2017  jdolecek update from HEAD
 1.6.14.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.6.14.2 23-Jun-2013  tls resync from head
 1.6.14.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.6.4.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.6.4.1 30-Oct-2012  yamt sync with head
 1.8.6.1 18-May-2014  rmind sync with head
 1.9.2.1 10-Aug-2014  tls Rebase.
 1.10.4.2 19-Mar-2016  skrll Sync with HEAD
 1.10.4.1 22-Sep-2015  skrll Sync with HEAD
 1.12.18.1 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.8 03-Sep-2018  riastradh Rename min/max -> uimin/uimax for better honesty.

These functions are defined on unsigned int. The generic name
min/max should not silently truncate to 32 bits on 64-bit systems.
This is purely a name change -- no functional change intended.

HOWEVER! Some subsystems have

#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))

even though our standard name for that is MIN/MAX. Although these
may invite multiple evaluation bugs, these do _not_ cause integer
truncation.

To avoid `fixing' these cases, I first changed the name in libkern,
and then compile-tested every file where min/max occurred in order to
confirm that it failed -- and thus confirm that nothing shadowed
min/max -- before changing it.

I have left a handful of bootloaders that are too annoying to
compile-test, and some dead code:

cobalt ews4800mips hp300 hppa ia64 luna68k vax
acorn32/if_ie.c (not included in any kernels)
macppc/if_gm.c (superseded by gem(4))

It should be easy to fix the fallout once identified -- this way of
doing things fails safe, and the goal here, after all, is to _avoid_
silent integer truncations, not introduce them.

Maybe one day we can reintroduce min/max as type-generic things that
never silently truncate. But we should avoid doing that for a while,
so that existing code has a chance to be detected by the compiler for
conversion to uimin/uimax without changing the semantics until we can
properly audit it all. (Who knows, maybe in some cases integer
truncation is actually intended!)
 1.7 26-Jan-2016  pooka branches: 1.7.2; 1.7.8; 1.7.16; 1.7.18;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.6 25-Jul-2014  dholland branches: 1.6.4;
Add d_discard to all struct cdevsw instances I could find.

All have been set to "nodiscard"; some should get a real implementation.
 1.5 16-Mar-2014  dholland branches: 1.5.2;
Change (mostly mechanically) every cdevsw/bdevsw I can find to use
designated initializers.

I have not built every extant kernel so I have probably broken at
least one build; however I've also found and fixed some wrong
cdevsw/bdevsw entries so even if so I think we come out ahead.
 1.4 04-Apr-2013  pooka branches: 1.4.4;
create null devices
 1.3 10-Feb-2011  pooka branches: 1.3.4; 1.3.14;
support /dev/zero
 1.2 07-Jul-2010  pooka branches: 1.2.2; 1.2.4;
Borrow /dev/mem major from i386 for /dev/null and autogenerate node.
 1.1 17-Dec-2009  pooka branches: 1.1.2; 1.1.4; 1.1.6;
* implement rump_vfs_makeonedevnode(), where the interface for creating
multiple nodes doesn't make sense: e.g. /dev/null would've had to
be created with ("/dev/nul", 'l', 1)
* implement said /dev/null (just for show)
 1.1.6.1 05-Mar-2011  rmind sync with head
 1.1.4.3 11-Aug-2010  yamt sync with head.
 1.1.4.2 11-Mar-2010  yamt sync with head
 1.1.4.1 17-Dec-2009  yamt file devnull.c was added on branch yamt-nfs-mp on 2010-03-11 15:04:39 +0000
 1.1.2.1 17-Aug-2010  uebayasi Sync with HEAD.
 1.2.4.1 17-Feb-2011  bouyer Sync with HEAD
 1.2.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.3.14.3 03-Dec-2017  jdolecek update from HEAD
 1.3.14.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.3.14.1 23-Jun-2013  tls resync from head
 1.3.4.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.4.4.1 18-May-2014  rmind sync with head
 1.5.2.1 10-Aug-2014  tls Rebase.
 1.6.4.1 19-Mar-2016  skrll Sync with HEAD
 1.7.18.1 10-Jun-2019  christos Sync with HEAD
 1.7.16.1 06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.7.8.2 29-Apr-2017  pgoyette Remove more unnecessary #include for sys/localcount.h
 1.7.8.1 27-Apr-2017  pgoyette Restore all work from the former pgoyette-localcount branch (which is
now abandoned doe to cvs merge botch).

The branch now builds, and installs via anita. There are still some
problems (cgd is non-functional and all atf tests time-out) but they
will get resolved soon.
 1.7.2.3 26-Jul-2016  pgoyette Rename LOCALCOUNT_INITIALIZER to DEVSW_MODULE_INIT. This better describes
what we're doing, and why.
 1.7.2.2 19-Jul-2016  pgoyette Instead of repeatedly typing the conditional initialization of the
.d_localcount members in the various {b,c}devsw, define an initializer
macro and use it. This also removes the need for defining new symbols
for each 'struct localcount'.

As suggested by riastradh@
 1.7.2.1 18-Jul-2016  pgoyette Rump drivers are always installed via devsw_attach() so we need to
always allocate a 'struct localcount' for these drivers whenever they
are built as modules.
 1.3 12-Apr-2010  pooka Support real file system transactions/suspension (vfs_trans.c)
instead of just stubbing it.
 1.2 18-Dec-2008  pooka branches: 1.2.2; 1.2.4; 1.2.8; 1.2.10; 1.2.12;
__KERNEL_RCSID
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.2.12.1 30-May-2010  rmind sync with head
 1.2.10.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.2.8.3 11-Aug-2010  yamt sync with head.
 1.2.8.2 04-May-2009  yamt sync with head.
 1.2.8.1 18-Dec-2008  yamt file fstrans_stub.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.2.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.2.4.1 18-Dec-2008  skrll file fstrans_stub.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.2.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.2.2.1 18-Dec-2008  mjf file fstrans_stub.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.14 06-Aug-2009  pooka Switch rump from the handwritten vnode pager to the standard kernel
vnode pager.

It would have been nice to keep a separate version:
* it has helped find file system bugs which the kernel pager
treated as non-errors
* it does not contain extra payload unnecessary in userspace

However, getting the details of the pager implementation correct
with all the flags, offsets and block/page size special cases is
*EXTREMELY* difficult (chuq > god).

On the plus side, LFS write now works for file data too instead of
just metadata. Also, maybe being able to singlestep the genfs
vnode pager in the comfort of userspace will allow more people to
understand how the behemoth functions.
 1.13 18-Apr-2009  pooka branches: 1.13.2;
* actually do syncer list add/remove instead of just pretending to
play VI_ONWORKLST games
* honor PGO_LOCKED in getpages wrt. to interlock (no, we don't have
a fault routine, so we don't need to seriously honor it)
 1.12 18-Apr-2009  pooka Move genfs_null_putpages() from genfs_io.c to genfs_vnops.c -- it does
not really do i/o.
 1.11 06-Apr-2009  pooka let drivers define DPRINTF
 1.10 26-Mar-2009  pooka Handle eof a bit differently. E.g. ffs and msdosfs seem to have
a quite different opinion about what happens in bmap beyond EOF,
so avoid calling it.
 1.9 23-Mar-2009  pooka Support async writes, can benefit mmio case.
 1.8 22-Mar-2009  pooka Remove clearly incorrect constraint: can't compare range against eof if
offset != start.
 1.7 05-Feb-2009  pooka branches: 1.7.2;
* fix a bug where we would try to lock a PG_FAKE page twice
* do not panic if VOP_STRATEGY fails. it's someone else's problem
* return the actual number of pages we provided, not just the ones
which contain data
* sprinkle some debug prints
 1.6 31-Jan-2009  pooka flags|=PG_WANTED instead of flags=PG_WANTED
 1.5 18-Dec-2008  pooka branches: 1.5.2; 1.5.4;
__KERNEL_RCSID
 1.4 16-Dec-2008  pooka Mark pages busy during VOP_PUTPAGES(). Deals with KASSERT in nfs write.
 1.3 16-Dec-2008  pooka Make rumpflushva flush only the atop info for a certain uvm object.
Better, but still not completely race-free (if two threads call
RUMP_VOP_PUTPAGES() directly for the same vm object).
 1.2 21-Nov-2008  pooka Make sure we write a positive length of data.
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.5.4.4 28-Apr-2009  skrll Sync with HEAD.
 1.5.4.3 03-Mar-2009  skrll Sync with HEAD.
 1.5.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.5.4.1 18-Dec-2008  skrll file genfs_io.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.5.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.5.2.1 18-Dec-2008  mjf file genfs_io.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.7.2.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.13.2.3 19-Aug-2009  yamt sync with head.
 1.13.2.2 04-May-2009  yamt sync with head.
 1.13.2.1 18-Apr-2009  yamt file genfs_io.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.4 12-Jun-2015  dholland branches: 1.4.16;
Punctuate properly.
 1.3 28-Apr-2015  prlw1 Fix typos
 1.2 18-Mar-2015  pooka "rump" -> "rump kernel" police
 1.1 09-Nov-2014  pooka branches: 1.1.2;
Move rump kernel man pages from various sources to sys/rump

namely:
* src/lib is used only when building for POSIX'y platforms, but
the man pages have their use for all platforms
* rumpuser.3 is a function of the rump kernel, not one of the of
the POSIX'y implementation hosted in src/lib/librumpuser

no functional change
 1.1.2.3 22-Sep-2015  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 06-Apr-2015  skrll Sync with HEAD
 1.4.16.2 03-Dec-2017  jdolecek update from HEAD
 1.4.16.1 12-Jun-2015  jdolecek file rump_etfs.3 was added on branch tls-maxphys on 2017-12-03 11:39:17 +0000
 1.97 23-Sep-2023  ad Repply this change with a couple of bugs fixed:

- Do away with separate pool_cache for some kernel objects that have no special
requirements and use the general purpose allocator instead. On one of my
test systems this makes for a small (~1%) but repeatable reduction in system
time during builds presumably because it decreases the kernel's cache /
memory bandwidth footprint a little.
- vfs_lockf: cache a pointer to the uidinfo and put mutex in the data segment.
 1.96 12-Sep-2023  ad Back out recent change to replace pool_cache with then general allocator.
Will return to this when I have time again.
 1.95 10-Sep-2023  ad - Do away with separate pool_cache for some kernel objects that have no special
requirements and use the general purpose allocator instead. On one of my
test systems this makes for a small (~1%) but repeatable reduction in system
time during builds presumably because it decreases the kernel's cache /
memory bandwidth footprint a little.
- vfs_lockf: cache a pointer to the uidinfo and put mutex in the data segment.
 1.94 26-Oct-2022  riastradh sys/filedesc.h: New home for extern cwdi0.
 1.93 25-Apr-2020  bouyer Merge the bouyer-xenpvh branch, bringing in Xen PV drivers support under HVM
guests in GENERIC.
Xen support can be disabled at runtime with
boot -c
disable hypervisor
 1.92 20-Apr-2020  ad Rename buf_syncwait() to vfs_syncwait(), and have it wait on v_numoutput
rather than BC_BUSY. Removes the dependency on bufhash.
 1.91 13-Apr-2020  ad Replace most uses of vp->v_usecount with a call to vrefcnt(vp), a function
that hides the details and does atomic_load_relaxed(). Signature matches
FreeBSD.
 1.90 23-Feb-2020  ad branches: 1.90.4;
UVM locking changes, proposed on tech-kern:

- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock.
- Break v_interlock and vmobjlock apart. v_interlock remains a mutex.
- Do partial PV list locking in the x86 pmap. Others to follow later.
 1.89 17-Jan-2020  ad VFS_VGET(), VFS_ROOT(), VFS_FHTOVP(): give them a "int lktype" argument, to
allow us to get shared locks (or no lock) on the returned vnode. Matches
FreeBSD.
 1.88 20-Feb-2019  hannken branches: 1.88.6;
Attach "mnt_transinfo" to "dead_rootmount" so every mount has a
valid "mnt_transinfo" and remove now unneeded flag IMNT_HAS_TRANS.

Run fstrans_start()/fstrans_done() on dead_rootmount if FSTRANS_DEAD_ENABLED.
Should become the default for DIAGNOSTIC in the future.
 1.87 01-Apr-2017  riastradh branches: 1.87.14;
KASSERT(mutex_owned(vp->v_interlock)) in vnode iterator selector.
 1.86 17-Nov-2016  pgoyette branches: 1.86.2;
In addition to initializing the bufq subsystem, we also need to init
the individual strategy modules.
 1.85 16-Nov-2016  pgoyette Initialize the bufq stuff for rump, too.

This should fix the large number of tests that recently started to fail.
 1.84 26-Jan-2016  pooka branches: 1.84.2;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.83 22-Jul-2015  hannken rump_vfs_mount_print: use vfs_vnode_iterator to print attached vnodes.
 1.82 06-May-2015  hannken Remove miscfs/syncfs and

- move the syncer into kern/vfs_subr.c.

- change the syncer to process the mountlist and VFS_SYNC as appropriate.

- use an API for mount points similiar to the API for vnodes:
- vfs_syncer_add_to_worklist(struct mount *mp) to add
- vfs_syncer_remove_from_worklist(struct mount *mp) to remove a mount.

No objections on tech-kern@
 1.81 17-Nov-2014  pooka branches: 1.81.2;
Release all hypervisor-level resources for rump_etfs paths when the
rump kernel is halted.

Allows a Xen domU to not complain after it was shut down, or something
like that. Requested by Martin Lucina.
 1.80 23-May-2014  pooka Permissions work better if you specify them in octal ...

Also, do an explicit chmod of /tmp to account for cmask getting in the way.
 1.79 22-May-2014  pooka create /tmp at bootstrap, default TMPDIR used by some programs (e.g. ed)
 1.78 25-Apr-2014  pooka gardenize: function calls over #ifdefs
 1.77 10-Jun-2013  pooka branches: 1.77.2; 1.77.6;
create /dev with 0755 instead of 0777 (though it's now effectively the
same due to cmask)
 1.76 29-Apr-2013  pooka g/c unused
 1.75 29-Apr-2013  pooka Replace the various "get info from hypervisor" interfaces with one
unified rumpuser_getparam(), and make it return a plist. The
contents can come e.g. from the env or a config file. Make
identifiers starting with an underscore denote system identifiers
which must be implemented by hypervisor. (yea, j/k about the plist bit)
 1.74 29-Apr-2013  pooka Rework how the bio hypercalls work, part 1/n:

Reduce the set of hypercalls to one: "do block i/o". This not only
eliminates a lot of pseudo-duplicate code, it also gives the
hypervisor a lot more freedom on how to optimize the i/o.
 1.73 04-Apr-2013  pooka create /dev/null only after it's possible to create /dev/null
 1.72 03-Apr-2013  pooka Don't create a huge number of unnecessary device nodes automatically.
Creating them takes 70-or-so ms on a RPi, and can almost double the
bootstrap time of a rump kernel on that hardware.
 1.71 14-Jan-2013  pooka Don't use __weak_alias where the component framework is sufficient.
 1.70 22-Nov-2012  pooka satisfy the slightly more picky clang
 1.69 18-Nov-2012  pooka Finally remove the "temporary" __VTYPE_DEFINED stuff I added >5 years ago.
 1.68 05-Nov-2012  dholland Disentangle the namecache from the internals of namei.

- Move the namecache's hash computation to inside the namecache code,
instead of being spread out all over the place. Remove cn_hash from
struct componentname and delete all uses of it.

- It is no longer necessary (if it ever was) for cache_lookup and
cache_lookup_raw to clear MAKEENTRY from cnp->cn_flags for the cases
that cache_enter already checks for.

- Rearrange the interface of cache_lookup (and cache_lookup_raw) to
make it somewhat simpler, to exclude certain nonexistent error
conditions, and (most importantly) to make it not require write access
to cnp->cn_flags.

This change requires a kernel bump.
 1.67 04-Jul-2011  mrg branches: 1.67.2; 1.67.12;
don't define multiple cwdi0's, mark this one as extern.

fixes various mips build issues i've seen with both GCC 4.1 and 4.5.
 1.66 12-Jun-2011  rmind Welcome to 5.99.53! Merge rmind-uvmplock branch:

- Reorganize locking in UVM and provide extra serialisation for pmap(9).
New lock order: [vmpage-owner-lock] -> pmap-lock.

- Simplify locking in some pmap(9) modules by removing P->V locking.

- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share
the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).

- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner.
Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.

- Unify /dev/mem et al in MI code and provide required locking (removes
kernel-lock on some ports). Also, avoid cache-aliasing issues.

Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches
formed the core changes of this branch.
 1.65 07-Jan-2011  pooka branches: 1.65.6;
Censor no-longer-relevant flags which may be passed down from
somewhere (e.g. an older kernel). We really can't do anything
about new flags or flags changing meaning, though.
 1.64 06-Jan-2011  pooka cwdi0 lock is now initialized in proc0_init()
 1.63 30-Nov-2010  pooka remove unnecessary interface
 1.62 30-Nov-2010  pooka fix broken rototill
 1.61 30-Nov-2010  dholland SAVENAME and HASBUF namei flags have been removed; update rumpvfs accordingly.
 1.60 21-Nov-2010  pooka I can't think of any reason why a rump kernel has to allow vfsusermount
by default, nor do I remember why i originally added it in 2008
==> remove.
 1.59 19-Nov-2010  dholland Introduce struct pathbuf. This is an abstraction to hold a pathname
and the metadata required to interpret it. Callers of namei must now
create a pathbuf and pass it to NDINIT (instead of a string and a
uio_seg), then destroy the pathbuf after the namei session is
complete.

Update all namei call sites accordingly. Add a pathbuf(9) man page and
update namei(9).

The pathbuf interface also now appears in a couple of related
additional places that were passing string/uio_seg pairs that were
later fed into NDINIT. Update other call sites accordingly.
 1.58 07-Sep-2010  pooka Make the Diabolical (Page)Daemon Director drain vfs buffers when
we are short of memory.

There are still some funnies left to iron out. For example, with
a certain file system / memory size configuration it's still not
possible to create enough files to make the file system run out of
inodes before the kernel runs out of memory. Also, with some other
configurations disk access slows down gargantually (though i'm sure
there are >0 buffers available). Anyway, it ~works for now and
it's by no means worse than what it was before.
 1.57 07-Sep-2010  pooka Retire the prehistoric chroot/cwd interfaces now that there is a
process model in rump.
 1.56 30-Jun-2010  pooka Run vfs component constructors.
 1.55 24-Jun-2010  hannken Clean up vnode lock operations pass 2:

VOP_UNLOCK(vp, flags) -> VOP_UNLOCK(vp): Remove the unneeded flags argument.

Welcome to 5.99.32.

Discussed on tech-kern.
 1.54 08-Jun-2010  pooka The previous revision worked brilliantly if all you wanted to test
was autoload *not* working with an alternate path. This revision
make the code double as good in the sense that it now works also
in case you *do* want it to work.
 1.53 08-Jun-2010  pooka Allow to set a non-standard module_base for host kernel module loading.
 1.52 26-May-2010  pooka Add public namespace helper routine for dumping info on mountpoints.
 1.51 20-May-2010  pooka open VFS_EXTATTRCTL to user namespace
 1.50 11-May-2010  pooka Set default number of vnodes to 1k instead of 64k: a large default
reserves a large amount of memory by default and this is not
desirable in a rump kernel where the typical usage is minimal.
Maybe I should write a few lines to autoscale desiredvnodes up to
a hard limit after the soft limit is reached?
 1.49 01-May-2010  pooka cleanup non-used code (superceded by rump_printevcnts)
 1.48 30-Apr-2010  pooka Autogenerate /dev nodes. Use (recreate) the naming policy in
MAKEDEV. -- Not the famous irrational file system devfs, but an
incredible simulation.
 1.47 26-Apr-2010  pooka Register module_base as an etfs recursive subdirectory. This means
that rump will autoload kernel modules from the host
/stand/arch/vers/modules directory.
 1.46 21-Apr-2010  pooka Reduce #ifdef spew by attaching wapbl as a module.
(no, it's still too ifdef-ridden to be able to actually do anything
useful and module-like like load into any kernel)
 1.45 12-Apr-2010  pooka Support real file system transactions/suspension (vfs_trans.c)
instead of just stubbing it.
 1.44 26-Mar-2010  pooka rootfstype is not a vfs stub, so it doesn't belong in vfs_stubs
 1.43 05-Mar-2010  pooka branches: 1.43.2;
Use improved kernel module interfaces: instead of adding + loading
modules in bootstrap, just add them. Load them later the same way
as the kernel does: module_init_class().

Change the signature of rump_module_init() to take a vector instead
of just one module. All modules in a DSO should be init'd at the
same time because they might depend on each other, and code outside
the rump kernel cannot know which way. (binary kernel modules are
still loaded with rump_sys_modctl() the usual way).
 1.42 17-Dec-2009  pooka branches: 1.42.2;
* implement rump_vfs_makeonedevnode(), where the interface for creating
multiple nodes doesn't make sense: e.g. /dev/null would've had to
be created with ("/dev/nul", 'l', 1)
* implement said /dev/null (just for show)
 1.41 03-Dec-2009  pooka * create /dev on the rump rootfs automatically
* make rump_vfs_makedevnodes() take a full basepath instead of hardcoding
an assumption that the device node is created in /dev
+ the caller is responsible that the directory the nodes are being
created in exists
 1.40 03-Dec-2009  pooka Call spec_init() to avoid device open lossage.
 1.39 03-Dec-2009  pooka Decide it's not worth the fuss to have rumpfs as a module and just
hardcode attach into rump_vfs_init(). Saves us from a lot of
pingpong init bouncing from one component to another to get the order
right.
 1.38 01-Dec-2009  pooka call cache_cpu_init() for all cpus
 1.37 27-Nov-2009  pooka Move rootfs-related init from init_main() to vfs_mountroot().
Reduces code re-written in rump.
 1.36 26-Nov-2009  pooka Make sure rumpfs is attached on all host platforms.
 1.35 26-Nov-2009  pooka For rumpfs, do mountroot instead of the bunch of homegrown hacks
currently there. Still needs a little massage to get the kernel
interfaces right and avoid copypaste especially from main().

Also, move it a bit more into the direction of a real file system
(finally!) by giving it a vfsops. Most ops are still unimplemented,
though.
 1.34 19-Nov-2009  pooka Create async i/o "interrupt" thread from within the kernel so that
it gets a kernel thread context.
 1.33 15-Oct-2009  pooka rump_cpu is now a pointer
 1.32 14-Oct-2009  pooka "rumppriv" goes back to "rump" per internal interface naming change.
 1.31 14-Oct-2009  pooka Adjust rump sources for external/internal interfaces.
No functional change.
 1.30 09-Oct-2009  pooka Provide an interface for reboot.
 1.29 07-Oct-2009  pooka use vref() for increasing reference count instead of homegrown brilliance
 1.28 07-Oct-2009  pooka g/c some prehistoric interfaces which have been superceded by others.
 1.27 06-Oct-2009  pooka Give a p2k node an internal state. This allows us to do proper
reference counting and not release nodes based just on puffs'
impression of if they are free.

This also allows us to reclaim vnodes already in inactive if the
file system so desires. Some file systems, most notably ffs, change
file state already in inactive. This could lead to a deadlock in
the middle of inactive and reclaim if some other puffs operation
was processed in between (as exposed by haad's open(at) test
program).

Also, properly thread the componentname from lookup to the actual
vnode operation. This required the changes the rump componentname
routines. Yes, the rename case is truly mindbogglingly disgusting.
Puke for yourself.
 1.26 04-Oct-2009  pooka Include firmload. Although it may be used by devices, it's pure
vfs in nature, and therefore it belongs here (can't load a firmware
from a file system without file system support, right?). Rename
rump_cwdi to cwdi0, since firmload depends on that name (naughty
firmload).
 1.25 02-Oct-2009  elad First part of secmodel cleanup and other misc. changes:

- Separate the suser part of the bsd44 secmodel into its own secmodel
and directory, pending even more cleanups. For revision history
purposes, the original location of the files was

src/sys/secmodel/bsd44/secmodel_bsd44_suser.c
src/sys/secmodel/bsd44/suser.h

- Add a man-page for secmodel_suser(9) and update the one for
secmodel_bsd44(9).

- Add a "secmodel" module class and use it. Userland program and
documentation updated.

- Manage secmodel count (nsecmodels) through the module framework.
This eliminates the need for secmodel_{,de}register() calls in
secmodel code.

- Prepare for secmodel modularization by adding relevant module bits.
The secmodels don't allow auto unload. The bsd44 secmodel depends
on the suser and securelevel secmodels. The overlay secmodel depends
on the bsd44 secmodel. As the module class is only cosmetic, and to
prevent ambiguity, the bsd44 and overlay secmodels are prefixed with
"secmodel_".

- Adapt the overlay secmodel to recent changes (mainly vnode scope).

- Stop using link-sets for the sysctl node(s) creation.

- Keep sysctl variables under nodes of their relevant secmodels. In
other words, don't create duplicates for the suser/securelevel
secmodels under the bsd44 secmodel, as the latter is merely used
for "grouping".

- For the suser and securelevel secmodels, "advertise presence" in
relevant sysctl nodes (sysctl.security.models.{suser,securelevel}).

- Get rid of the LKM preprocessor stuff.

- As secmodels are now modules, there's no need for an explicit call
to secmodel_start(); it's handled by the module framework. That
said, the module framework was adjusted to properly load secmodels
early during system startup.

- Adapt rump to changes: Instead of using empty stubs for securelevel,
simply use the suser secmodel. Also replace secmodel_start() with a
call to secmodel_suser_start().

- 5.99.20.

Testing was done on i386 ("release" build). Spearated module_init()
changes were tested on sparc and sparc64 as well by martin@ (thanks!).

Mailing list reference:

http://mail-index.netbsd.org/tech-kern/2009/09/25/msg006135.html
 1.24 03-Aug-2009  pooka * get rid of the old fakeblk registration interface. Instead,
introduce a new and improved "etfs" interface, which can be used
to register host files accessible from rump fs namespace. This
new interface is not restriced to block devices, and neither does
it require the same pathname in host namespace and rump namespace.
Therefore, the same host file can be represented both as a char
and block device in rump namespace.

* adjust rumpblk to make the above possible

* improve rumpfs: nodes are now created properly and not implicitly
tied to the vnode lifecycle
 1.23 29-Jun-2009  dholland Another namei_simple like the previous ones; was added after I did the
initial sweep and I guess I missed it while merging.
 1.22 22-May-2009  pooka fix __KERNEL_RCSID
 1.21 04-May-2009  pooka Nuke RUMPCN_HASNTBUF. The inspiration behind it must've been ... deep.
 1.20 03-May-2009  pooka branches: 1.20.2;
Rename rump_cred_destroy() to rump_cred_put() -- they've been
refcounted since forever now.
 1.19 03-May-2009  pooka Add rump_vfs_getmp(), which returns struct mount for a given path.
(yes, it does not take a reference to the mountpoint)
 1.18 01-May-2009  pooka in case of error, return instead of continuing
 1.17 29-Apr-2009  pooka Use cwdinit() for proc0's cwdi.
 1.16 26-Apr-2009  pooka * set syncdelay to 0 only if we don't have a syncer thread
* add some #if0'd debug code to unmount for printing event counters
 1.15 18-Apr-2009  pooka If running in multithreaded mode, create sched_sync thread.
 1.14 18-Mar-2009  cegger Ansify function definitions w/o arguments. Generated with sed.
 1.13 22-Feb-2009  ad PR kern/26878 FFSv2 + softdep = livelock (no free ram)
PR kern/16942 panic with softdep and quotas
PR kern/19565 panic: softdep_write_inodeblock: indirect pointer #1 mismatch
PR kern/26274 softdep panic: allocdirect_merge: ...
PR kern/26374 Long delay before non-root users can write to softdep partitions
PR kern/28621 1.6.x "vp != NULL" panic in ffs_softdep.c:4653 while unmounting a softdep (+quota) filesystem
PR kern/29513 FFS+Softdep panic with unfsck-able file-corruption
PR kern/31544 The ffs softdep code appears to fail to write dirty bits to disk
PR kern/31981 stopping scsi disk can cause panic (softdep)
PR kern/32116 kernel panic in softdep (assertion failure)
PR kern/32532 softdep_trackbufs deadlock
PR kern/37191 softdep: locking against myself
PR kern/40474 Kernel panic after remounting raid root with softdep

Retire softdep, pass 2. As discussed and later formally announced on the
mailing lists.
 1.12 06-Feb-2009  pooka branches: 1.12.2;
Rip out the rwlock spl emulation code. It never did anything useful
except keep my feet warm by consuming an insane amount of cpu
cycles -- in rump our current "cpu" context is never interrupted
& we have MULTIPROCESSOR.

(itch i'm scratching: it made the networking stack 10-20% slower.
this is one of the places where fast code actually matters)
 1.11 13-Jan-2009  pooka branches: 1.11.2; 1.11.4;
lf_init()
 1.10 13-Jan-2009  pooka misc cleanup, mainly header polish
 1.9 13-Jan-2009  pooka Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.8 31-Dec-2008  pooka yank debug printf from previous
 1.7 31-Dec-2008  pooka Reset proc0 cwdi after unmount. Makes is possible to mount/unmount/mount
in one process.
(XXX: this code is still horrible)

problem reported by stacktic
 1.6 29-Dec-2008  pooka Register a dummy block device for rump, since some file systems do
a sanity check to see if the block device exists. This dummy block
device should eventually replace rump specfs.
 1.5 18-Dec-2008  pooka __KERNEL_RCSID
 1.4 27-Nov-2008  pooka * hang all mountpoints from rootvnode in our virtual mount hierarchy
* set VV_ROOT for the rootvnode to make getcwd realize it has met
its journey's end
 1.3 25-Nov-2008  pooka Take reference for proc0 rootdir vnode.
 1.2 21-Nov-2008  pooka rump_vfs_load() is really rump_module_load(), so call it that and
move it from rumpvfs to rumpkern.
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.11.4.4 28-Apr-2009  skrll Sync with HEAD.
 1.11.4.3 03-Mar-2009  skrll Sync with HEAD.
 1.11.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.11.4.1 13-Jan-2009  skrll file rump_vfs.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.11.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.11.2.1 13-Jan-2009  mjf file rump_vfs.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.12.2.2 23-Jul-2009  jym Sync with HEAD.
 1.12.2.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.20.2.9 09-Oct-2010  yamt sync with head
 1.20.2.8 11-Aug-2010  yamt sync with head.
 1.20.2.7 11-Mar-2010  yamt sync with head
 1.20.2.6 19-Aug-2009  yamt sync with head.
 1.20.2.5 18-Jul-2009  yamt sync with head.
 1.20.2.4 20-Jun-2009  yamt sync with head
 1.20.2.3 16-May-2009  yamt sync with head
 1.20.2.2 04-May-2009  yamt sync with head.
 1.20.2.1 03-May-2009  yamt file rump_vfs.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.42.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.42.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.42.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.43.2.4 05-Mar-2011  rmind sync with head
 1.43.2.3 03-Jul-2010  rmind sync with head
 1.43.2.2 30-May-2010  rmind sync with head
 1.43.2.1 16-Mar-2010  rmind Change struct uvm_object::vmobjlock to be dynamically allocated with
mutex_obj_alloc(). It allows us to share the locks among UVM objects.
 1.65.6.1 23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.67.12.5 03-Dec-2017  jdolecek update from HEAD
 1.67.12.4 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.67.12.3 23-Jun-2013  tls resync from head
 1.67.12.2 25-Feb-2013  tls resync with head
 1.67.12.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.67.2.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.67.2.2 23-Jan-2013  yamt sync with head
 1.67.2.1 16-Jan-2013  yamt sync with (a bit old) head
 1.77.6.1 10-Aug-2014  tls Rebase.
 1.77.2.1 18-May-2014  rmind sync with head
 1.81.2.5 28-Aug-2017  skrll Sync with HEAD
 1.81.2.4 05-Dec-2016  skrll Sync with HEAD
 1.81.2.3 19-Mar-2016  skrll Sync with HEAD
 1.81.2.2 22-Sep-2015  skrll Sync with HEAD
 1.81.2.1 06-Jun-2015  skrll Sync with HEAD
 1.84.2.2 26-Apr-2017  pgoyette Sync with HEAD
 1.84.2.1 07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.86.2.1 21-Apr-2017  bouyer Sync with HEAD
 1.87.14.3 21-Apr-2020  martin Sync with HEAD
 1.87.14.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.87.14.1 10-Jun-2019  christos Sync with HEAD
 1.88.6.2 29-Feb-2020  ad Sync with head.
 1.88.6.1 17-Jan-2020  ad Sync with head.
 1.90.4.2 25-Apr-2020  bouyer Sync with bouyer-xenpvh-base2 (HEAD)
 1.90.4.1 20-Apr-2020  bouyer Sync with HEAD
 1.20 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.19 08-Jun-2015  pooka Allow device components to create symlinks in /dev
e.g. /dev/audio -> audio0

from Robert Millan <rmh@freebsd.org> via rumpkernel-users
 1.18 17-Nov-2014  pooka branches: 1.18.2;
Release all hypervisor-level resources for rump_etfs paths when the
rump kernel is halted.

Allows a Xen domU to not complain after it was shut down, or something
like that. Requested by Martin Lucina.
 1.17 07-Mar-2013  pooka Make the device node creation routines function pointers which default
to nullop without VFS. This relaxes the dependency between VFS and many
components, some of which can be used perfectly fine without VFS.
 1.16 14-Jan-2013  pooka Don't use __weak_alias where the component framework is sufficient.
 1.15 27-Sep-2011  christos branches: 1.15.2; 1.15.12;
define RUMPFS_MAXNAMLEN and use it.
 1.14 07-Sep-2010  pooka Make the Diabolical (Page)Daemon Director drain vfs buffers when
we are short of memory.

There are still some funnies left to iron out. For example, with
a certain file system / memory size configuration it's still not
possible to create enough files to make the file system run out of
inodes before the kernel runs out of memory. Also, with some other
configurations disk access slows down gargantually (though i'm sure
there are >0 buffers available). Anyway, it ~works for now and
it's by no means worse than what it was before.
 1.13 15-Jun-2010  pooka Implement rumpblk_deregister, for unregistering fake block devices
(from etfs_deregister). Prompted by use case from njoly.
 1.12 30-Apr-2010  pooka Autogenerate /dev nodes. Use (recreate) the naming policy in
MAKEDEV. -- Not the famous irrational file system devfs, but an
incredible simulation.
 1.11 14-Apr-2010  pooka Use reserved major for rumpblk instead of picking something which
may conflict.
 1.10 17-Dec-2009  pooka branches: 1.10.2; 1.10.4;
* implement rump_vfs_makeonedevnode(), where the interface for creating
multiple nodes doesn't make sense: e.g. /dev/null would've had to
be created with ("/dev/nul", 'l', 1)
* implement said /dev/null (just for show)
 1.9 03-Dec-2009  pooka Decide it's not worth the fuss to have rumpfs as a module and just
hardcode attach into rump_vfs_init(). Saves us from a lot of
pingpong init bouncing from one component to another to get the order
right.
 1.8 26-Nov-2009  pooka For rumpfs, do mountroot instead of the bunch of homegrown hacks
currently there. Still needs a little massage to get the kernel
interfaces right and avoid copypaste especially from main().

Also, move it a bit more into the direction of a real file system
(finally!) by giving it a vfsops. Most ops are still unimplemented,
though.
 1.7 14-Oct-2009  pooka Adjust rump sources for external/internal interfaces.
No functional change.
 1.6 09-Oct-2009  pooka Provide an interface for reboot.
 1.5 07-Oct-2009  pooka Allow to set size and host file offset for etfs files and rumpblk.
 1.4 06-Sep-2009  pooka Rename rump_dev_makenodes() to rump_vfs_makedevnodes() -- while it
will most likely be used devices, the implementation requires
services provided by vfs (mkdir, mknod).
 1.3 03-Aug-2009  pooka * get rid of the old fakeblk registration interface. Instead,
introduce a new and improved "etfs" interface, which can be used
to register host files accessible from rump fs namespace. This
new interface is not restriced to block devices, and neither does
it require the same pathname in host namespace and rump namespace.
Therefore, the same host file can be represented both as a char
and block device in rump namespace.

* adjust rumpblk to make the above possible

* improve rumpfs: nodes are now created properly and not implicitly
tied to the vnode lifecycle
 1.2 13-Jan-2009  pooka branches: 1.2.2; 1.2.4; 1.2.8;
Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.2.8.7 09-Oct-2010  yamt sync with head
 1.2.8.6 11-Aug-2010  yamt sync with head.
 1.2.8.5 11-Mar-2010  yamt sync with head
 1.2.8.4 16-Sep-2009  yamt sync with head
 1.2.8.3 19-Aug-2009  yamt sync with head.
 1.2.8.2 04-May-2009  yamt sync with head.
 1.2.8.1 13-Jan-2009  yamt file rump_vfs_private.h was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.2.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.2.4.1 13-Jan-2009  skrll file rump_vfs_private.h was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.2.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.2.2.1 13-Jan-2009  mjf file rump_vfs_private.h was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.10.4.3 05-Mar-2011  rmind sync with head
 1.10.4.2 03-Jul-2010  rmind sync with head
 1.10.4.1 30-May-2010  rmind sync with head
 1.10.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.10.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.10.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.15.12.3 03-Dec-2017  jdolecek update from HEAD
 1.15.12.2 23-Jun-2013  tls resync from head
 1.15.12.1 25-Feb-2013  tls resync with head
 1.15.2.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.15.2.1 23-Jan-2013  yamt sync with head
 1.18.2.2 19-Mar-2016  skrll Sync with HEAD
 1.18.2.1 22-Sep-2015  skrll Sync with HEAD
 1.64 07-Jul-2016  msaitoh branches: 1.64.2; 1.64.8;
KNF. Remove extra spaces. No functional change.
 1.63 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.62 08-Dec-2015  christos fix struct name
 1.61 08-Dec-2015  christos Replace DIOCGPART -> DIOCGPARTINFO which returns the data needed instead of
pointers.
 1.60 26-May-2015  pooka implement DIOCGMEDIASIZE, from Martin Lucina
 1.59 02-Jan-2015  christos We have three sets of DTYPE_ constants in the kernel:
altq Drop Type
disklabel Disk Type
file Descriptor Type
(not to mention constants that contain the string DTYPE).
Let's make them two, by changing the disklabel one to be DisK TYPE since the
other disklabel constants seem to do that. Not many userland programs use
these constants (and the ones that they do are mostly in ifdefs). They will
be fixed shortly.
 1.58 17-Nov-2014  pooka branches: 1.58.2;
Release all hypervisor-level resources for rump_etfs paths when the
rump kernel is halted.

Allows a Xen domU to not complain after it was shut down, or something
like that. Requested by Martin Lucina.
 1.57 25-Jul-2014  dholland Add d_discard to all struct cdevsw instances I could find.

All have been set to "nodiscard"; some should get a real implementation.
 1.56 25-Jul-2014  dholland Add d_discard to all struct bdevsw instances I could find.

I've set them all to nodiscard. Some of them (wd, dk, vnd, ld,
raidframe, maybe cgd) should be implemented for real.
 1.55 16-Mar-2014  dholland branches: 1.55.2;
Change (mostly mechanically) every cdevsw/bdevsw I can find to use
designated initializers.

I have not built every extant kernel so I have probably broken at
least one build; however I've also found and fixed some wrong
cdevsw/bdevsw entries so even if so I think we come out ahead.
 1.54 30-Apr-2013  pooka branches: 1.54.4;
Make hypercall calling conventions consistent: iff a hypercall can fail,
it returns an int containing the error value.
 1.53 29-Apr-2013  pooka g/c unused
 1.52 29-Apr-2013  pooka Replace the various "get info from hypervisor" interfaces with one
unified rumpuser_getparam(), and make it return a plist. The
contents can come e.g. from the env or a config file. Make
identifiers starting with an underscore denote system identifiers
which must be implemented by hypervisor. (yea, j/k about the plist bit)
 1.51 29-Apr-2013  pooka The fsync hypercall is now used only with close, so get rid of it.
rumpuser_bio() should do the necessary syncing.
 1.50 29-Apr-2013  pooka rework bio hypercalls, part 2:

Nuke all the policy hacks (r/w, mmap, directio) from the paravirtualized
block driver and let the hypervisor decide how it wants to optimize
the I/O. It can prepare for this based on if a file is opened with
the RUMPUSER_OPEN_BIO flag.

mmap was not faster than r/w except in a niche case (yes, it made a
good measurement), and directio was never on by default since
it was tricky at best to decide on the kernel side of things if
directio will do the right thing.
 1.49 29-Apr-2013  pooka Rework how the bio hypercalls work, part 1/n:

Reduce the set of hypercalls to one: "do block i/o". This not only
eliminates a lot of pseudo-duplicate code, it also gives the
hypervisor a lot more freedom on how to optimize the i/o.
 1.48 14-Sep-2012  pooka Do not assume that O_FOO flags have matching values in the rump kernel
and hypervisor.
 1.47 19-Nov-2011  tls branches: 1.47.8;
First step of random number subsystem rework described in
<20111022023242.BA26F14A158@mail.netbsd.org>. This change includes
the following:

An initial cleanup and minor reorganization of the entropy pool
code in sys/dev/rnd.c and sys/dev/rndpool.c. Several bugs are
fixed. Some effort is made to accumulate entropy more quickly at
boot time.

A generic interface, "rndsink", is added, for stream generators to
request that they be re-keyed with good quality entropy from the pool
as soon as it is available.

The arc4random()/arc4randbytes() implementation in libkern is
adjusted to use the rndsink interface for rekeying, which helps
address the problem of low-quality keys at boot time.

An implementation of the FIPS 140-2 statistical tests for random
number generator quality is provided (libkern/rngtest.c). This
is based on Greg Rose's implementation from Qualcomm.

A new random stream generator, nist_ctr_drbg, is provided. It is
based on an implementation of the NIST SP800-90 CTR_DRBG by
Henric Jungheim. This generator users AES in a modified counter
mode to generate a backtracking-resistant random stream.

An abstraction layer, "cprng", is provided for in-kernel consumers
of randomness. The arc4random/arc4randbytes API is deprecated for
in-kernel use. It is replaced by "cprng_strong". The current
cprng_fast implementation wraps the existing arc4random
implementation. The current cprng_strong implementation wraps the
new CTR_DRBG implementation. Both interfaces are rekeyed from
the entropy pool automatically at intervals justifiable from best
current cryptographic practice.

In some quick tests, cprng_fast() is about the same speed as
the old arc4randbytes(), and cprng_strong() is about 20% faster
than rnd_extract_data(). Performance is expected to improve.

The AES code in src/crypto/rijndael is no longer an optional
kernel component, as it is required by cprng_strong, which is
not an optional kernel component.

The entropy pool output is subjected to the rngtest tests at
startup time; if it fails, the system will reboot. There is
approximately a 3/10000 chance of a false positive from these
tests. Entropy pool _input_ from hardware random numbers is
subjected to the rngtest tests at attach time, as well as the
FIPS continuous-output test, to detect bad or stuck hardware
RNGs; if any are detected, they are detached, but the system
continues to run.

A problem with rndctl(8) is fixed -- datastructures with
pointers in arrays are no longer passed to userspace (this
was not a security problem, but rather a major issue for
compat32). A new kernel will require a new rndctl.

The sysctl kern.arandom() and kern.urandom() nodes are hooked
up to the new generators, but the /dev/*random pseudodevices
are not, yet.

Manual pages for the new kernel interfaces are forthcoming.
 1.46 03-Feb-2011  pooka branches: 1.46.4;
fix KASSERT snafu. spotted by tests, as usual.
 1.45 03-Feb-2011  pooka * open backend device once when the rumpblk is registered instead of
every time the virtual device is opened. this takes care of e.g.
a midlife chmod crisis
* when mapping initial windows, consistently look at host size and
host offset. otherwise we might end up in a situation with 0
initial windows mapped, and that will cause a crash later.
 1.44 03-Feb-2011  pooka * fix blkno->offset calculation for simulated non-512 devices
* allows transfers only in multiples of block size
* g/c unused struct member
 1.43 02-Feb-2011  pooka never open rumpblk backend with O_TRUNC
XXX: the rumpuser_open interface needs a beating
 1.42 06-Sep-2010  pooka branches: 1.42.2; 1.42.4;
Broadcast instead of signal since the condition is a boolean.
 1.41 21-Jun-2010  pooka Calculate memory mapping size based on underlying file size, not
our window to it. This fixes cases like opening a window at offsets
[8,32] to a file, which would cause host file offset [0,32-8] to
be mapped, i.e. [0,16] inside the window. Obviously, access to
the entire in-window [0,24] range should have been mapped (and
after this fix it is).
 1.40 15-Jun-2010  pooka Implement rumpblk_deregister, for unregistering fake block devices
(from etfs_deregister). Prompted by use case from njoly.
 1.39 01-May-2010  pooka Adjust event counter names to be less redundant.
 1.38 14-Apr-2010  pooka Use reserved major for rumpblk instead of picking something which
may conflict.
 1.37 31-Jan-2010  pooka branches: 1.37.2; 1.37.4;
If RUMP_BLKSECTSHIFT is set in the environment, use that as
device sector size instead of DEV_BSHIFT.
 1.36 27-Jan-2010  pooka Typecast memwinsize to off_t before taking the complement to be
&'ed with an off_t. Otherwise things go a bit wrong with >4GB
images ...
 1.35 22-Dec-2009  pooka Fix block device open for non-REG backends.
 1.34 03-Dec-2009  pooka Do bounds-checking before adding host offset. Otherwise the host
offset would be counted in with "size" and incorrect operation
would ensue.
 1.33 02-Dec-2009  pooka fix inverted comparison
 1.32 25-Nov-2009  pooka * report partition size in blocks instead of bytes
* "support" DIOCCACHESYNC.
 1.31 20-Nov-2009  pooka Generate fictional disklabel and return that from ioctl() instead
of the halfwitted semi-host semi-virtual ioctl nonsense that was
here previously.
 1.30 19-Nov-2009  pooka * don't open device when calling getfileinfo(), it might need to open
the device and will f-a-i-l if it's a block device
* use rumpuser_ioctl() as little as possible (going away completely
wewy wewy soon)
* improve some variable scoping
 1.29 07-Oct-2009  pooka * set winsize to memwinsize in initial getwindow(). makes no functional
difference, but looks less like a debug hack leftover.
* explain memory windows vs. directio a little better in comment
 1.28 07-Oct-2009  pooka do initial window allocation test at proper offsets
 1.27 07-Oct-2009  pooka Allow to set size and host file offset for etfs files and rumpblk.
 1.26 06-Oct-2009  pooka Use uint64_t instead of size_t for block device partition size.

from jak
 1.25 03-Aug-2009  pooka Support read/write in rumpblk via physio()
 1.24 03-Aug-2009  pooka * get rid of the old fakeblk registration interface. Instead,
introduce a new and improved "etfs" interface, which can be used
to register host files accessible from rump fs namespace. This
new interface is not restriced to block devices, and neither does
it require the same pathname in host namespace and rump namespace.
Therefore, the same host file can be represented both as a char
and block device in rump namespace.

* adjust rumpblk to make the above possible

* improve rumpfs: nodes are now created properly and not implicitly
tied to the vnode lifecycle
 1.23 30-Apr-2009  pooka branches: 1.23.2;
remove outdated comment
 1.22 30-Apr-2009  pooka print succinctly
 1.21 27-Apr-2009  pooka initialize async before use
 1.20 27-Apr-2009  pooka * expand syncing logic into rumpuser, since it has more freedom on
how to do it (e.g. fsync_range)
* hash out O_DIRECT support. it's the fastest method of safely operating
on a file, but we can't currently autodetect support, so it's not
enabled by default
* sprinkle more event counters
 1.19 17-Apr-2009  pooka Allow bootstrap time specification of memory window size and count.
 1.18 16-Apr-2009  pooka evcnt mmio window statistics
 1.17 07-Apr-2009  pooka Fix typo that slipped in a while ago. Fixes non-file mounts.
 1.16 06-Apr-2009  pooka In case using mmio, use windowing instead of trying to map the
entire image.

Benefits:
* the whole image does not need to fit into VA
* a core dump is not of gargantuan proportions

Performance is pretty close to one whopping mmap. I'll finetune
the parameters later, although the current ones seem pretty good
in initial testing.
 1.15 01-Apr-2009  pooka Be less verbose. (something like rump_dmesg with optional QUIET
would be nice, but needs work)
 1.14 23-Mar-2009  pooka massage comment. no functional change.
 1.13 23-Mar-2009  pooka Support async writes, can benefit mmio case.
 1.12 23-Mar-2009  pooka fix recent bug: writable images were not mapped with MAP_SHARED
 1.11 22-Mar-2009  pooka Bounds-check requests in case we are operating directly on a regular file.
 1.10 19-Mar-2009  uebayasi Fix build on LP64. While here KNF around.
 1.9 18-Mar-2009  pooka When doing I/O to a regular file, try to use mmio instead of
read/write. This makes a rump_fs file server around 5% faster.
 1.8 18-Mar-2009  cegger Ansify function definitions w/o arguments. Generated with sed.
 1.7 26-Feb-2009  pooka g/c debug printf
 1.6 26-Feb-2009  pooka When using an array as a ringbuffer, need to perform modulo arithmetic
with arraysize instead of arraysize-1. Previously there was one
inconsistency in the code. This might fix a crash reported by apb.

Also, g/c outdated comment.
 1.5 26-Feb-2009  pooka Make rumpuser stat and nanosleep independent of the host system
stat and timespec definitions.
 1.4 10-Feb-2009  pooka Explain in comment why the RNG is private (no, not the Random Nethack God)
 1.3 10-Feb-2009  pooka Introduce simple random fault injection. It is currently controlled
by setting RUMP_BLKFAIL to control the frequency and optionally
RUMP_BLKFAIL_SEED, which seeds the "random" number generator. Feel
free to extend the code if you want something "a little more" for
your purposes.
 1.2 27-Jan-2009  pooka branches: 1.2.2;
Instead of dynamically allocating and freeing the rumpuser async
io descriptors, just allocate an array statically and be happy.

Fixes a problem found by Arnaud Ysmal where a descriptor would be
allocated using kmem_alloc(9) and free'd using free(3).
 1.1 13-Jan-2009  pooka branches: 1.1.2; 1.1.4;
Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.1.4.4 28-Apr-2009  skrll Sync with HEAD.
 1.1.4.3 03-Mar-2009  skrll Sync with HEAD.
 1.1.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.1.4.1 13-Jan-2009  skrll file rumpblk.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.1.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.1.2.1 13-Jan-2009  mjf file rumpblk.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.2.2.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.23.2.6 09-Oct-2010  yamt sync with head
 1.23.2.5 11-Aug-2010  yamt sync with head.
 1.23.2.4 11-Mar-2010  yamt sync with head
 1.23.2.3 19-Aug-2009  yamt sync with head.
 1.23.2.2 04-May-2009  yamt sync with head.
 1.23.2.1 30-Apr-2009  yamt file rumpblk.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.37.4.3 05-Mar-2011  rmind sync with head
 1.37.4.2 03-Jul-2010  rmind sync with head
 1.37.4.1 30-May-2010  rmind sync with head
 1.37.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.37.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.37.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.42.4.1 08-Feb-2011  bouyer Sync with HEAD
 1.42.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.46.4.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.46.4.2 30-Oct-2012  yamt sync with head
 1.46.4.1 17-Apr-2012  yamt sync with head
 1.47.8.4 03-Dec-2017  jdolecek update from HEAD
 1.47.8.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.47.8.2 23-Jun-2013  tls resync from head
 1.47.8.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.54.4.1 18-May-2014  rmind sync with head
 1.55.2.1 10-Aug-2014  tls Rebase.
 1.58.2.4 19-Mar-2016  skrll Sync with HEAD
 1.58.2.3 27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.58.2.2 06-Jun-2015  skrll Sync with HEAD
 1.58.2.1 06-Apr-2015  skrll Sync with HEAD
 1.64.8.2 29-Apr-2017  pgoyette Remove more unnecessary #include for sys/localcount.h
 1.64.8.1 27-Apr-2017  pgoyette Restore all work from the former pgoyette-localcount branch (which is
now abandoned doe to cvs merge botch).

The branch now builds, and installs via anita. There are still some
problems (cgd is non-functional and all atf tests time-out) but they
will get resolved soon.
 1.64.2.3 26-Jul-2016  pgoyette Rename LOCALCOUNT_INITIALIZER to DEVSW_MODULE_INIT. This better describes
what we're doing, and why.
 1.64.2.2 19-Jul-2016  pgoyette Instead of repeatedly typing the conditional initialization of the
.d_localcount members in the various {b,c}devsw, define an initializer
macro and use it. This also removes the need for defining new symbols
for each 'struct localcount'.

As suggested by riastradh@
 1.64.2.1 18-Jul-2016  pgoyette Rump drivers are always installed via devsw_attach() so we need to
always allocate a 'struct localcount' for these drivers whenever they
are built as modules.
 1.1 09-Nov-2014  pooka branches: 1.1.18;
Move rump kernel man pages from various sources to sys/rump

namely:
* src/lib is used only when building for POSIX'y platforms, but
the man pages have their use for all platforms
* rumpuser.3 is a function of the rump kernel, not one of the of
the POSIX'y implementation hosted in src/lib/librumpuser

no functional change
 1.1.18.2 03-Dec-2017  jdolecek update from HEAD
 1.1.18.1 09-Nov-2014  jdolecek file rumpfs.4 was added on branch tls-maxphys on 2017-12-03 11:39:17 +0000
 1.167 27-Jun-2023  andvar remove double/tripple o in comments, where it likely was not added on purpose.
 1.166 20-Oct-2021  thorpej Overhaul of the EVFILT_VNODE kevent(2) filter:

- Centralize vnode kevent handling in the VOP_*() wrappers, rather than
forcing each individual file system to deal with it (except VOP_RENAME(),
because VOP_RENAME() is a mess and we currently have 2 different ways
of handling it; at least it's reasonably well-centralized in the "new"
way).
- Add support for NOTE_OPEN, NOTE_CLOSE, NOTE_CLOSE_WRITE, and NOTE_READ,
compatible with the same events in FreeBSD.
- Track which kevent notifications clients are interested in receiving
to avoid doing work for events no one cares about (avoiding, e.g.
taking locks and traversing the klist to send a NOTE_WRITE when
someone is merely watching for a file to be deleted, for example).

In support of the above:

- Add support in vnode_if.sh for specifying PRE- and POST-op handlers,
to be invoked before and after vop_pre() and vop_post(), respectively.
Basic idea from FreeBSD, but implemented differently.
- Add support in vnode_if.sh for specifying CONTEXT fields in the
vop_*_args structures. These context fields are used to convey information
between the file system VOP function and the VOP wrapper, but do not
occupy an argument slot in the VOP_*() call itself. These context fields
are initialized and subsequently interpreted by PRE- and POST-op handlers.
- Version VOP_REMOVE(), uses the a context field for the file system to report
back the resulting link count of the target vnode. Return this in tmpfs,
udf, nfs, chfs, ext2fs, lfs, and ufs.

NetBSD 9.99.92.
 1.165 18-Jul-2021  dholland Use macros for the canned parts of device and fifo vnode op tables.

Add GENFS_SPECOP_ENTRIES and GENFS_FIFOOP_ENTRIES macros that contain
the portion of the vnode ops table declaration that is
(conservatively) the same in every fs. Use these in every fs that
supports devices and/or fifos with separate ops tables.

Note that ptyfs works differently (it has one type of vnode with
open-coded dispatch to the specfs code, which I haven't changed in
this commit) and rump/librump/rumpvfs/rumpfs.c has an indirect dynamic
dispatch that already does more or less the same thing, which I also
haven't changed.

Also note that this anticipates a few bits in the next changeset here
and there, and adds missing but unreachable calls in some cases (e.g.
most fses weren't defining whiteout on devices and fifos, but it isn't
reachable there), and it changes parsepath on devices and fifos to
genfs_badop from genfs_parsepath (but it's not reachable there
either).

It appears that devices in kernfs were missing kqfilter, so it's
possible that if you try to use kqueue on /kern/rootdev that it'll
explode.

And finally note that the ops declaration tables aren't
order-dependent. (Other than vop_default_desc has to come first.)
Otherwise this wouldn't work.
 1.164 29-Jun-2021  dholland Add parsepath for rumpfs in place of using cn_consume.
 1.163 29-Jun-2021  dholland - Add a new vnode op: VOP_PARSEPATH.
- Move namei_getcomponent to genfs_vnops.c and call it genfs_parsepath.
- Add a parsepath entry to every vnode ops table.

VOP_PARSEPATH takes a directory vnode to be searched and a complete
following path and chooses how much of that path to consume. To begin
with, all parsepath calls are genfs_parsepath, which locates the first
'/' as always.

Note that the call doesn't take the whole struct componentname, only
the string. The other bits of struct componentname should not be
needed and there's no reason to cause potential complications by
exposing them.
 1.162 16-May-2020  christos branches: 1.162.6;
Add ACL support for FFS. From FreeBSD.
 1.161 15-May-2020  christos PR/55102: Kamil Rytarowski: Duplicate fifo_vnodeop_entries,
fifo_vnodeop_opv_desc symbols.

Many filesystems ffs, lfs, ulfs, chfs, ext2fs etc. use fifofs
internally for their fifo vnops. NFS does too, but it also needs
networking anyway. Unfortunately fifofs brings in a lot of the
networking code so that the rumpkernel is not well partition. In
addition the fifo code is rarely used.

The existing hack depended on duplicating the above symbols and
adding minimal functionality for the majority of the the tests
(except the ffs and the puffs one). In these two cases both symbols
were loaded and the symbol sizes clashed which broke the sanitizers.
While this can be fixed with weak symbols and other kinds of
indirection, it is more straight forward to select between the
minimal and the full fifofs implementation by introducing a new
shared library librumpvfs_nofifofs.
 1.160 15-May-2020  christos Undo previous, need to fix differently (fifofs is needed by other fs's and
fifo brings in rumpnet)
 1.159 14-May-2020  christos PR/55102: Kamil Rytarowski: Remove fifo stuff duplicated in fifo_vnops.c
 1.158 25-Apr-2020  bouyer Merge the bouyer-xenpvh branch, bringing in Xen PV drivers support under HVM
guests in GENERIC.
Xen support can be disabled at runtime with
boot -c
disable hypervisor
 1.157 23-Apr-2020  ad PR kern/54759 (vm.ubc_direct deadlock when read()/write() into mapping of itself)

- Add new flag UBC_ISMAPPED which tells ubc_uiomove() the object is mmap()ed
somewhere. Use it to decide whether to do direct-mapped copy, rather than
poking around directly in the vnode in ubc_uiomove(), which is ugly and
doesn't work for tmpfs. It would be nicer to contain all this in UVM but
the filesystem provides the needed locking here (VV_MAPPED) and to
reinvent that would suck more.

- Rename UBC_UNMAP_FLAG() to UBC_VNODE_FLAGS(). Pass in UBC_ISMAPPED where
appropriate.
 1.156 13-Apr-2020  ad Replace most uses of vp->v_usecount with a call to vrefcnt(vp), a function
that hides the details and does atomic_load_relaxed(). Signature matches
FreeBSD.
 1.155 04-Apr-2020  kamil branches: 1.155.2;
Avoid copying zero-sized objects (from the NULL address)

Detected with UBSan
 1.154 17-Jan-2020  ad VFS_VGET(), VFS_ROOT(), VFS_FHTOVP(): give them a "int lktype" argument, to
allow us to get shared locks (or no lock) on the returned vnode. Matches
FreeBSD.
 1.153 04-Jun-2018  chs branches: 1.153.2; 1.153.8;
initialize the new gop_putrange method pointer in rumpfs_genfsops too.
 1.152 20-Nov-2017  martin branches: 1.152.2;
When truncating a file make sure to update mtime.
This fixes PR kern/51762 for rumpfs.
 1.151 20-Nov-2017  christos PR/52738: Martin Husemann: rumpfs does not support mtime
 1.150 28-May-2017  hannken branches: 1.150.2;
Suspend file system for vgone().
 1.149 26-May-2017  riastradh Make VOP_RECLAIM do the last unlock of the vnode.

VOP_RECLAIM naturally has exclusive access to the vnode, so having it
locked on entry is not strictly necessary -- but it means if there
are any final operations that must be done on the vnode, such as
ffs_update, requiring exclusive access to it, we can now kassert that
the vnode is locked in those operations.

We can't just have the caller release the last lock because some file
systems don't use genfs_lock, and require the vnode to remain valid
for VOP_UNLOCK to work, notably unionfs.
 1.148 26-Apr-2017  riastradh Change VOP_REMOVE and VOP_RMDIR to preserve lock/ref on dvp.

No change to vp -- the plan is to replace the node by the
componentname in the vop parameters, and let all directory vops do
lookups internally.

Proposed on tech-kern with no objections:
https://mail-index.netbsd.org/tech-kern/2017/04/17/msg021825.html
 1.147 17-Apr-2017  hannken Remove unused argument "nextp" from vfs_busy() and vfs_unbusy().
Remove argument "keepref" from vfs_unbusy() and add vfs_ref() where needed.
 1.146 11-Apr-2017  riastradh Make VOP_INACTIVE preserve vnode lock on return.

Discussed on tech-kern:
https://mail-index.netbsd.org/tech-kern/2017/04/01/msg021751.html

Ride 7.99.68, a bumpy bus of incremental vfs improvements!
 1.145 01-Mar-2017  hannken Change the protocol to update a mounted file system from read-write
to read-only and vice versa:

- Add an internal flag IMNT_WANTRDONLY.
- Set either IMNT_WANTRDWR or IMNT_WANTRDONLY if going from or to read-only.
- After successfull call to VFS_MOUNT() set or clear MNT_RDONLY.

Adapt tmpfs and rumpfs to the new protocol. Other file systems will be
updated when they get the IMNT_CAN_RWTORO property.

Welcome to 7.99.64
 1.144 17-Feb-2017  hannken Add generic genfs_suspendctl() and use it for all file systems.
Layered file systems need work.
 1.143 27-Jan-2017  hannken Run vflush() when going from read/write to read only.
Set link count to zero once a node has been removed.
"Implement" MNT_GETARGS.
 1.142 20-Aug-2016  hannken branches: 1.142.2;
Remove now obsolete operation vcache_remove().

Welcome to 7.99.36
 1.141 07-Jul-2016  msaitoh branches: 1.141.2;
KNF. Remove extra spaces. No functional change.
 1.140 07-Mar-2016  christos Avoid void * arithmetic
 1.139 06-Mar-2016  christos PR/50900: David Binderman: optimize memset
 1.138 02-Feb-2016  pooka optimize for size a.k.a. operation nuke trailing spaces
 1.137 02-Feb-2016  pooka Add capability to attach external memory to files on rumpfs. This
feature is useful e.g. for tight-memory systems where you don't need
block storage, but still need to provide some data via files.
 1.136 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.135 23-Jun-2015  hannken VOP_INACTIVE() is a rump operation, not a specfs operation.
 1.134 07-Jan-2015  riastradh Name kmem_free(rn, sizeof(*rn)) as freeprivate to match makeprivate.

Per pooka's request from a year or so ago when I passed this patch by
him a year or so ago, if I recall correctly.
 1.133 07-Jan-2015  riastradh Don't leak rn on vcache_get failure.
 1.132 03-Jan-2015  hannken Always use (struct rumpfs_node **) as key to vcache operations.
 1.131 01-Jan-2015  hannken Change rumpfs to vcache.
 1.130 17-Aug-2014  justin branches: 1.130.2;
Fix memory leak on error case, as reported in
http://m00nbsd.net/ae123a9bae03f7dde5c6d654412daf5a.html#Report-2
 1.129 13-Jun-2014  pooka branches: 1.129.2;
Add rump_boot_etfs_register(), which can be used to specify etfs
nodes that will be available immediately when mountroot is done
and file systems are available.

The intended use is for example for firmware images to be available when
config_mountroot() hooks run.
 1.128 28-May-2014  justin Add missing __diagused in rump code
 1.127 25-Apr-2014  pooka Move the etfs linkage from rumpvfs to rumpkern, and replace the
weak alias show with an honest pointer indirection.

No client-visible change. (apart from this version working e.g.
on musl w/ dlopen)
 1.126 16-Mar-2014  njoly branches: 1.126.2;
When trying to extend a file, don't wait until the underlying memory
allocation succeed. Return ENOSPC upon failure.
 1.125 24-Feb-2014  pooka truncate is not a defined operation for host files
 1.124 07-Feb-2014  hannken Change vnode operation lookup to return the resulting vnode *vpp unlocked.
Change cache_lookup() to return an unlocked vnode.

Discussed on tech-kern@

Welcome to 6.99.31
 1.123 23-Jan-2014  hannken Change vnode operations create, mknod, mkdir and symlink to return
the resulting vnode *vpp unlocked.

Discussed on tech-kern@

Welcome to 6.99.30
 1.122 17-Jan-2014  hannken Change vnode operations create, mknod, mkdir and symlink to keep the
directory node dvp locked on return.

Discussed on tech-kern@

Welcome to 6.99.29
 1.121 23-Nov-2013  christos change the mountlist CIRCLEQ into a TAILQ
 1.120 05-Aug-2013  pooka Also check if root vnode is busy when unmounting.
 1.119 05-Aug-2013  pooka Only free file data we've allocated.
 1.118 04-Aug-2013  pooka Use standard file-is-valid-until-last-reference-is-dropped semantics
for file contents.

via Justin Cormack & valgrind on github
 1.117 14-Jun-2013  pooka branches: 1.117.2;
Allocate large struct from heap instead of stack for the benefit of
low-stack environments in which this code can run.
 1.116 12-Jun-2013  pooka Make sure root creds override fs mode (at least in a root cred secmodel).
The correct way is of course for the access method to perform this:

return kauth_authorize_vnode(cred, KAUTH_ACCESS_ACTION(mode,
vp->v_type, attr->va_mode), vp, NULL, genfs_can_access(vp->v_type,
attr->va_mode, attr->va_uid, attr->va_gid, mode, cred));
 1.115 10-Jun-2013  pooka Create inodes with the specified mode instead of hardcoding to 0755.
 1.114 30-Apr-2013  pooka Make hypercall calling conventions consistent: iff a hypercall can fail,
it returns an int containing the error value.
 1.113 29-Apr-2013  pooka Reduce hypercalls related to reading to essentially an amalgamation
of readv and preadv. ditto for writing. Hypercalls are so seldomly
used that it doesn't justify 3x the calls for syntactic sugar.
 1.112 07-Apr-2013  stacktic Use genfs_null_putpages for fifo putpages op to ensure that the interlock gets unlocked
 1.111 14-Sep-2012  pooka Do not assume that O_FOO flags have matching values in the rump kernel
and hypervisor.
 1.110 30-Mar-2012  njoly branches: 1.110.2;
Do not ignore kauth errors when setting file flags.
 1.109 22-Mar-2012  njoly Use the appropriates vop_*_args structures.
 1.108 15-Mar-2012  njoly Use VOP va_vaflags attribute for genfs_can_chtimes(), not rumpfs node
one.
 1.107 13-Mar-2012  elad Replace the remaining KAUTH_GENERIC_ISSUSER authorization calls with
something meaningful. All relevant documentation has been updated or
written.

Most of these changes were brought up in the following messages:

http://mail-index.netbsd.org/tech-kern/2012/01/18/msg012490.html
http://mail-index.netbsd.org/tech-kern/2012/01/19/msg012502.html
http://mail-index.netbsd.org/tech-kern/2012/02/17/msg012728.html

Thanks to christos, manu, njoly, and jmmv for input.

Huge thanks to pgoyette for spinning these changes through some build
cycles and ATF.
 1.106 31-Jan-2012  njoly Check credentials when setting uid, gid or mode attributes.
 1.105 30-Jan-2012  njoly Add permissions support to rump_vop_access(), to be used by
rump_vop_lookup().
 1.104 12-Dec-2011  njoly Start making fs read(2) fail with EISDIR if the implementation does
not allow read on directories (kernfs, rumpfs, ptyfs and sysvbfs).
Adjust man page accordingly, and add a small corresponding vfs
testcase.
 1.103 27-Sep-2011  mbalmer branches: 1.103.2; 1.103.6;
Underscores are sometimes overrated.
 1.102 27-Sep-2011  christos fix confusion between MAXPATHLEN and MAXNAMLEN
 1.101 27-Sep-2011  christos use RUMPFS_MAXNAMLEN consistently.
 1.100 27-Sep-2011  christos define RUMPFS_MAXNAMLEN and use it.
 1.99 23-Aug-2011  hannken When consuming only part of a path in rump_vop_lookup():

- Make sure to consume complete path components.
- Consume trailing slashes too.
- Do not clear REQUIREDIR.

Test rump/modautoload/t_modautoload now passes.
 1.98 07-Aug-2011  hannken Allow removal of a directory containing only whiteouts and free them first.
 1.97 05-Aug-2011  hannken Make whiteouts work on rumpfs:

- On lookup it is ok to create if the name exists and is a whiteout
- When replacing a whiteout directory entry remove the whiteout first.
- Set UF_OPAQUE when creating a node in place of a whiteout.
 1.96 19-Jun-2011  rmind - Fix a silly bug: remove umap from uobj in ubc_release() UBC_UNMAP case.
- Use UBC_WANT_UNMAP() consistently.

ARM (PMAP_CACHE_VIVT case) works again.
 1.95 12-Jun-2011  rmind Welcome to 5.99.53! Merge rmind-uvmplock branch:

- Reorganize locking in UVM and provide extra serialisation for pmap(9).
New lock order: [vmpage-owner-lock] -> pmap-lock.

- Simplify locking in some pmap(9) modules by removing P->V locking.

- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share
the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).

- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner.
Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.

- Unify /dev/mem et al in MI code and provide required locking (removes
kernel-lock on some ports). Also, avoid cache-aliasing issues.

Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches
formed the core changes of this branch.
 1.94 27-Mar-2011  riz branches: 1.94.2;
Don't try to kmem_alloc() 0 bytes. Without this change, some trivial
kernel modules were not loadable by rump_server.
 1.93 21-Mar-2011  pooka Update copyright statements.

no functional change.
 1.92 01-Mar-2011  pooka Reset node's parent pointer when it's removed. Technically the
parent still exists, but allows us to avoid complicated g/c algorithms
if the parent *is* removed.
 1.91 02-Feb-2011  pooka Allow etfs for CREATE lookups too. This takes care of O_CREAT calls
to open(), which act just like lookups if the node exists (found
from etfs). If the node doesn't exist in etfs, nothing changes
from the previous situation.
 1.90 02-Feb-2011  pooka adjust inode size too if VOP_SETATTR changes size
 1.89 14-Jan-2011  pooka branches: 1.89.2; 1.89.4;
Release etfs node's backing vnode before freeing the etfs node.

spotted from the LOCKDEBUG run that martin accidentally did
 1.88 13-Jan-2011  pooka Respect DOWHITEOUT when removing a directory.
 1.87 13-Jan-2011  pooka support MNT_RDONLY
 1.86 12-Jan-2011  pooka unionfs voodoo
 1.85 12-Jan-2011  pooka Explicitly set *vpp to NULL in lookup. At least reluckup gets
upset if we don't explicitly nullify vpp in the error case.
 1.84 12-Jan-2011  pooka reject r/o mount attempts
 1.83 12-Jan-2011  pooka Mark rootfs r/w. Thanks to the incredible machine known as vfs,
the only one who noticed the inconsistency of writing to a r/o fs
was unionfs.
 1.82 11-Jan-2011  kefren add advlock to rumpfs, ok pooka@
 1.81 04-Jan-2011  pooka Need to check for VNOVAL when setting attrs.
 1.80 04-Jan-2011  pooka Don't try to change the size of non-reg nodes or when vattr doesn't
contain a new size.

from njoly
 1.79 01-Jan-2011  pooka Report correct file size + deal with ftruncate() and O_APPEND.
 1.78 18-Dec-2010  pooka Use correct spec_islocked method.
 1.77 30-Nov-2010  pooka simplify
 1.76 30-Nov-2010  dholland SAVENAME and HASBUF namei flags have been removed; update rumpvfs accordingly.
 1.75 30-Nov-2010  dholland Fix etfs pathname handling to not (mis)use namei's scratch space.

etfs objects must now be registered as absolute paths; however, it is now
possible to access them via relative paths and through symlinks, which
previously worked some times and not others depending on exactly what
namei was doing.

discussed on tech-kern and ok'd by pooka.
 1.74 22-Nov-2010  pooka Support VOP_SETATTR, otherwise e.g. open(O_TRUNC) fails.
 1.73 11-Nov-2010  pooka help me if you can i'm gcc
and i do appreciate work'round-eee'e
help me, get my head out of the ground
won't you please, please help me?
 1.72 11-Nov-2010  pooka +VOP_REMOVE
 1.71 11-Nov-2010  pooka support read/write & ubc
 1.70 11-Nov-2010  pooka support vop_pathconf
 1.69 11-Nov-2010  pooka support vfs_mount/unmount
 1.68 11-Nov-2010  pooka be friends with genfs
 1.67 11-Nov-2010  pooka Support non-hostbacked regular files, at least just a little bit.
 1.66 08-Nov-2010  pooka print some dmesg blub for etfs files attaching as block devices
 1.65 06-Sep-2010  pooka renamelock is mandatory
 1.64 06-Sep-2010  pooka Try to draw faster than Lucky Locke.
 1.63 21-Jul-2010  hannken Make holding v_interlock mandatory for callers of vget().

Announced some time ago on tech-kern.
 1.62 13-Jul-2010  pooka support dotdot lookups
 1.61 09-Jul-2010  hannken Replace vget() with vref()/vn_lock(), this node already has a reference.
 1.60 03-Jul-2010  pooka Support VOP_WHITEOUT (mostly so that unionfs tests don't always
need to first mount ffs)
 1.59 30-Jun-2010  pooka plug memory leaks (of course the function i copypasted for the
previous commit was the only one with the leak ...)
 1.58 30-Jun-2010  pooka Implement VOP_SYMLINK/READLINK. The allows me to be a little lazier
in other places.
 1.57 24-Jun-2010  hannken Clean up vnode lock operations pass 2:

VOP_UNLOCK(vp, flags) -> VOP_UNLOCK(vp): Remove the unneeded flags argument.

Welcome to 5.99.32.

Discussed on tech-kern.
 1.56 22-Jun-2010  pooka Remove overeager checks.
 1.55 16-Jun-2010  pooka * support VOP_SEEK
* correctly handle VOP_OPEN(FREAD|FWRITE)
* fix host file write offset
 1.54 16-Jun-2010  pooka report actual size from read/write vops
 1.53 15-Jun-2010  pooka Implement rumpblk_deregister, for unregistering fake block devices
(from etfs_deregister). Prompted by use case from njoly.
 1.52 15-Jun-2010  njoly Fix some rump_etfs_register/rump_etfs_remove memory leaks.
 1.51 14-Jun-2010  njoly Add rmdir(2) support for rump filsystem.

With help from pooka.
 1.50 11-May-2010  pooka Cache directory entry name length. This brings kernel bootstrap
time down: 14ms -> 12ms. Further hashing etc. did not seem to have
any noticable effect.
(without /dev node creation bootstrap time is 8ms, so it's still
the bottleneck)
 1.49 11-May-2010  pooka Fix reclaim locking so that we don't attempt lock reentry if making
a new rumpfs vnode triggers a reclaim for a rumpfs vnode.
 1.48 11-May-2010  pooka Reclaim spec-type vnodes properly.
 1.47 30-Apr-2010  pooka genfs_eopnotsuppify symlink, otherwise unlocky things happen!
 1.46 30-Apr-2010  pooka Add translation from vtype to dirent type. Convert rumpfs now.
I'll convert the rest of the file servers in need after the next
version bump to avoid the coding module crisis.
 1.45 30-Apr-2010  pooka Get better results if initialize a field before calling strlen().
(can't believe that worked last night. the stars must've been in
the "lottery, stupid" position)
 1.44 29-Apr-2010  pooka p2k asserts get upset if VOP_ISLOCKED() doesn't reflect lock status.
So let genfs do its thing.
 1.43 29-Apr-2010  pooka add simple VOP_READDIR for rumpfs
 1.42 27-Apr-2010  pooka Fix off-by-atleast-1 error.

Note: etfs doesn't work if rumpfs is not mounted as root. Given
that rumpfs_mount always return EOPNOTSUPP (except for mountroot),
this is not a pressible tragedy currently, but nevertheless
could/should be fixed in the future.
 1.41 26-Apr-2010  pooka Add directory support to etfs: host directories and their contents
will be mapped to rumpfs based on the given key. The directory
can be mapped either for a single level or recursively down the
entire subtree.
 1.40 21-Apr-2010  pooka rumpfs is mpsafe (has always been), so mark it as such.
 1.39 14-Apr-2010  pooka Use reserved major for rumpblk instead of picking something which
may conflict.
 1.38 12-Apr-2010  pooka Report f_iosize as 512. Some callers want it, and we can only
guess a safe default here (because of etfs).
 1.37 01-Mar-2010  pooka branches: 1.37.2;
"support" unmount of rumpfs
 1.36 03-Dec-2009  pooka branches: 1.36.2;
Make sure node lengths match in addition to strncmp().
(I thought i fixed this already once?)
 1.35 03-Dec-2009  pooka Decide it's not worth the fuss to have rumpfs as a module and just
hardcode attach into rump_vfs_init(). Saves us from a lot of
pingpong init bouncing from one component to another to get the order
right.
 1.34 30-Nov-2009  pooka test for error in creating root vnode before using it
 1.33 30-Nov-2009  pooka Use genfs_statvfs() for now.
 1.32 30-Nov-2009  pooka support lookup of pathname component "."
 1.31 27-Nov-2009  pooka Move rootfs-related init from init_main() to vfs_mountroot().
Reduces code re-written in rump.
 1.30 26-Nov-2009  pooka For rumpfs, do mountroot instead of the bunch of homegrown hacks
currently there. Still needs a little massage to get the kernel
interfaces right and avoid copypaste especially from main().

Also, move it a bit more into the direction of a real file system
(finally!) by giving it a vfsops. Most ops are still unimplemented,
though.
 1.29 14-Oct-2009  pooka "rumppriv" goes back to "rump" per internal interface naming change.
 1.28 14-Oct-2009  pooka Adjust rump sources for external/internal interfaces.
No functional change.
 1.27 11-Oct-2009  pooka Include host offset in regular etfs read/write operations (I can't
imagine it being particularly useful, but let's call file this
under POLA).
 1.26 11-Oct-2009  pooka Support creating file system sockets (non-sockets not supported in
VOP_CREATE since I don't want to have to write read/write support
for non-etfs files).
 1.25 07-Oct-2009  pooka Allow to set size and host file offset for etfs files and rumpblk.
 1.24 04-Oct-2009  pooka Implement RUMP_ETFS_REG. Usable e.g. by firmload(9).
(well, it should probably be RUMP_ETFS_PATH, but simple things first)
 1.23 05-Sep-2009  pooka zalloc new rumpfs nodes to make sure rn_vp is initially NULL.
Fixes problem pointed out by Nicolas Joly in private email.
 1.22 04-Aug-2009  pooka Do std vnode locking for specnodes located on rumpfs.
 1.21 03-Aug-2009  pooka * get rid of the old fakeblk registration interface. Instead,
introduce a new and improved "etfs" interface, which can be used
to register host files accessible from rump fs namespace. This
new interface is not restriced to block devices, and neither does
it require the same pathname in host namespace and rump namespace.
Therefore, the same host file can be represented both as a char
and block device in rump namespace.

* adjust rumpblk to make the above possible

* improve rumpfs: nodes are now created properly and not implicitly
tied to the vnode lifecycle
 1.20 22-Jul-2009  pooka Since rumpfs can now be used from publically exported routines,
convert unsupported checking KASSERTs to return EOPNOTSUPP.
 1.19 10-Jun-2009  pooka Support VOP_MKNOD. This is so that components which need device
nodes (e.g. raidframe) can create them.
 1.18 09-Jun-2009  pooka Put some spunk into deadfs.
 1.17 19-May-2009  pooka Set vnode op vector properly for block devices too. Makes mounting
a real block device work again.
 1.16 03-May-2009  pooka branches: 1.16.2;
set MNT_ROOTFS for the rootfs (the kernel, a logical piece of work)
 1.15 01-May-2009  pooka fix editing artifact
 1.14 29-Apr-2009  pooka Add enough support to be able to create directories and perform
lookups through them. This has two implications:

1) mountpoints can be created directly onto the rump rootfs.
this is benefitial in test programs where we want the same
program to be easily switched between testing against rump and
testing against the host kernel.
2) fakeblk must be used (it used to work implicitly) to register
block devices that should be used from the host fs namespace.
 1.13 18-Apr-2009  pooka null putpages has to unlock interlock instead of just returning success
 1.12 16-Apr-2009  pooka Allocate vnodes properly with getnewvnode() and support reclaim.
 1.11 07-Apr-2009  pooka Make it possible to use VCHR devices again.
 1.10 20-Mar-2009  pooka need atomic.h
 1.9 19-Mar-2009  pooka Make it possible to mount a file system through the mount() system
call in addition to the old rump_mnt_mount(). Some issues remain
(but require more deeprooted changes):
* it is possible to mount only to /
* unmount needs MNT_FORCE due to the new fs being root and having
a bonus reference
* cwdi is not set (since there is no concept of a process)
 1.8 18-Mar-2009  cegger Ansify function definitions w/o arguments. Generated with sed.
 1.7 26-Feb-2009  pooka Make rumpuser stat and nanosleep independent of the host system
stat and timespec definitions.
 1.6 13-Jan-2009  pooka branches: 1.6.2; 1.6.4; 1.6.6;
Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.5 29-Dec-2008  pooka Register a dummy block device for rump, since some file systems do
a sanity check to see if the block device exists. This dummy block
device should eventually replace rump specfs.
 1.4 29-Dec-2008  pooka sprinkle static
 1.3 18-Dec-2008  pooka __KERNEL_RCSID
 1.2 27-Nov-2008  pooka * hang all mountpoints from rootvnode in our virtual mount hierarchy
* set VV_ROOT for the rootvnode to make getcwd realize it has met
its journey's end
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.6.6.2 23-Jul-2009  jym Sync with HEAD.
 1.6.6.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.6.4.4 28-Apr-2009  skrll Sync with HEAD.
 1.6.4.3 03-Mar-2009  skrll Sync with HEAD.
 1.6.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.6.4.1 13-Jan-2009  skrll file rumpfs.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.6.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.6.2.1 13-Jan-2009  mjf file rumpfs.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.16.2.8 09-Oct-2010  yamt sync with head
 1.16.2.7 11-Aug-2010  yamt sync with head.
 1.16.2.6 11-Mar-2010  yamt sync with head
 1.16.2.5 16-Sep-2009  yamt sync with head
 1.16.2.4 19-Aug-2009  yamt sync with head.
 1.16.2.3 20-Jun-2009  yamt sync with head
 1.16.2.2 04-May-2009  yamt sync with head.
 1.16.2.1 03-May-2009  yamt file rumpfs.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.36.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.36.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.36.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.37.2.7 12-Jun-2011  rmind Sync RUMP's rump_etfs_remove() and uvm_aio_aiodone() with branch changes.
 1.37.2.6 19-May-2011  rmind Implement sharing of vnode_t::v_interlock amongst vnodes:
- Lock is shared amongst UVM objects using uvm_obj_setlock() or getnewvnode().
- Adjust vnode cache to handle unsharing, add VI_LOCKSHARE flag for that.
- Use sharing in tmpfs and layerfs for underlying object.
- Simplify locking in ubc_fault().
- Sprinkle some asserts.

Discussed with ad@.
 1.37.2.5 21-Apr-2011  rmind sync with head
 1.37.2.4 05-Mar-2011  rmind sync with head
 1.37.2.3 03-Jul-2010  rmind sync with head
 1.37.2.2 30-May-2010  rmind sync with head
 1.37.2.1 16-Mar-2010  rmind Change struct uvm_object::vmobjlock to be dynamically allocated with
mutex_obj_alloc(). It allows us to share the locks among UVM objects.
 1.89.4.2 05-Mar-2011  bouyer Sync with HEAD
 1.89.4.1 08-Feb-2011  bouyer Sync with HEAD
 1.89.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.94.2.1 23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.103.6.2 05-Apr-2012  mrg sync to latest -current.
 1.103.6.1 18-Feb-2012  mrg merge to -current.
 1.103.2.3 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.103.2.2 30-Oct-2012  yamt sync with head
 1.103.2.1 17-Apr-2012  yamt sync with head
 1.110.2.4 03-Dec-2017  jdolecek update from HEAD
 1.110.2.3 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.110.2.2 23-Jun-2013  tls resync from head
 1.110.2.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.117.2.2 18-May-2014  rmind sync with head
 1.117.2.1 28-Aug-2013  rmind sync with head
 1.126.2.1 10-Aug-2014  tls Rebase.
 1.129.2.1 24-Aug-2014  martin Pull up following revision(s) (requested by maxv in ticket #51):
sys/netinet6/ip6_output.c: revision 1.158
sys/rump/librump/rumpvfs/rumpfs.c: revision 1.130
Fix memory leaks in error cases
 1.130.2.6 28-Aug-2017  skrll Sync with HEAD
 1.130.2.5 05-Feb-2017  skrll Sync with HEAD
 1.130.2.4 05-Oct-2016  skrll Sync with HEAD
 1.130.2.3 19-Mar-2016  skrll Sync with HEAD
 1.130.2.2 22-Sep-2015  skrll Sync with HEAD
 1.130.2.1 06-Apr-2015  skrll Sync with HEAD
 1.141.2.2 26-Apr-2017  pgoyette Sync with HEAD
 1.141.2.1 20-Mar-2017  pgoyette Sync with HEAD
 1.142.2.1 21-Apr-2017  bouyer Sync with HEAD
 1.150.2.1 26-Feb-2018  snj Pull up following revision(s) (requested by maya in ticket #581):
sys/rump/librump/rumpvfs/rumpfs.c: 1.151-1.152
PR/52738: Martin Husemann: rumpfs does not support mtime
--
When truncating a file make sure to update mtime.
This fixes PR kern/51762 for rumpfs.
 1.152.2.1 25-Jun-2018  pgoyette Sync with HEAD
 1.153.8.1 17-Jan-2020  ad Sync with head.
 1.153.2.2 21-Apr-2020  martin Sync with HEAD
 1.153.2.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.155.2.2 25-Apr-2020  bouyer Sync with bouyer-xenpvh-base2 (HEAD)
 1.155.2.1 20-Apr-2020  bouyer Sync with HEAD
 1.162.6.1 01-Aug-2021  thorpej Sync with HEAD.
 1.12 23-Feb-2020  ad UVM locking changes, proposed on tech-kern:

- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock.
- Break v_interlock and vmobjlock apart. v_interlock remains a mutex.
- Do partial PV list locking in the x86 pmap. Others to follow later.
 1.11 26-Jan-2016  pooka branches: 1.11.18; 1.11.24;
generate privhdrs to new location
 1.10 23-Apr-2015  pooka Mark the vattr50 translation helpers as COMPAT_50
 1.9 25-Apr-2014  pooka branches: 1.9.4;
Move the etfs linkage from rumpvfs to rumpkern, and replace the
weak alias show with an honest pointer indirection.

No client-visible change. (apart from this version working e.g.
on musl w/ dlopen)
 1.8 18-Nov-2012  pooka branches: 1.8.2; 1.8.10;
Finally remove the "temporary" __VTYPE_DEFINED stuff I added >5 years ago.
 1.7 30-Nov-2010  pooka branches: 1.7.8; 1.7.18;
remove unnecessary interface
 1.6 07-Sep-2010  pooka Retire the prehistoric chroot/cwd interfaces now that there is a
process model in rump.
 1.5 19-Jul-2010  pooka Don't provide stat compat syscalls here, they come from
rump_syscalls_compat.h now. (besides, I always hated how they were
in the rump_pub_sys namespace instead of the rump_sys namespace)
 1.4 26-May-2010  pooka Add public namespace helper routine for dumping info on mountpoints.
 1.3 20-May-2010  pooka open VFS_EXTATTRCTL to user namespace
 1.2 14-Apr-2010  pooka Use "struct kauth_cred *" instead of kauth_cred_t in all exported
interfaces. Allows to remove hairbrained _t typedef dance.
 1.1 14-Oct-2009  pooka branches: 1.1.2; 1.1.4; 1.1.6;
Create rump public interfaces from description tables. This allows
us to control and wrap all entry points from "userspace" into rump.
This in turn is necessary for the upcoming rump cpu scheduler.

For each interface "foo" a public wrapper called "rump_foo" is
created. It calls the internal implementation "rumppriv_foo". In
case foo is to be called from inside of rump kernel space, the
private interface "rumppriv_foo" is used -- the userspace wrapper
prototypes are not even exported into the rump kernel namespace.
Needless to say, the rump kernel internal interfaces are not exported
for users.

Now, three classes of interfaces fight for control of rump:
+ the noble local control interfaces (which this commit addresses)
+ the insidious rump system calls (which are generated from syscalls.master)
+ and the evil vnode interfaces (which are generated from vnode_if.src)
 1.1.6.2 05-Mar-2011  rmind sync with head
 1.1.6.1 30-May-2010  rmind sync with head
 1.1.4.4 09-Oct-2010  yamt sync with head
 1.1.4.3 11-Aug-2010  yamt sync with head.
 1.1.4.2 11-Mar-2010  yamt sync with head
 1.1.4.1 14-Oct-2009  yamt file rumpvfs.ifspec was added on branch yamt-nfs-mp on 2010-03-11 15:04:39 +0000
 1.1.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.1.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.1.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.7.18.3 03-Dec-2017  jdolecek update from HEAD
 1.7.18.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.7.18.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.7.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.7.8.1 16-Jan-2013  yamt sync with (a bit old) head
 1.8.10.1 10-Aug-2014  tls Rebase.
 1.8.2.1 18-May-2014  rmind sync with head
 1.9.4.2 19-Mar-2016  skrll Sync with HEAD
 1.9.4.1 06-Jun-2015  skrll Sync with HEAD
 1.11.24.1 29-Feb-2020  ad Sync with head.
 1.11.18.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.2 26-Jan-2016  pooka branches: 1.2.16;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.1 22-Apr-2015  pooka branches: 1.1.2;
rename rumpvfs/compat.c to rumpvfs/rumpvfs_compat50.c
 1.1.2.3 19-Mar-2016  skrll Sync with HEAD
 1.1.2.2 06-Jun-2015  skrll Sync with HEAD
 1.1.2.1 22-Apr-2015  skrll file rumpvfs_compat50.c was added on branch nick-nhusb on 2015-06-06 14:40:29 +0000
 1.2.16.2 03-Dec-2017  jdolecek update from HEAD
 1.2.16.1 26-Jan-2016  jdolecek file rumpvfs_compat50.c was added on branch tls-maxphys on 2017-12-03 11:39:17 +0000
 1.14 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.13 23-Apr-2015  pooka regen for COMPAT_50 sprinklage
 1.12 25-Apr-2014  pooka branches: 1.12.4;
regen
 1.11 25-Apr-2014  pooka regen for etfs move from rumpvfs to rumpkern
 1.10 18-Nov-2012  pooka branches: 1.10.2; 1.10.10;
regen
 1.9 30-Nov-2010  pooka branches: 1.9.8; 1.9.18;
regen: checksavecn is gone
 1.8 07-Sep-2010  pooka regen: rcvp/cdir interfaces go byebye in favour of rump syscalls
 1.7 19-Jul-2010  pooka regen: stat compat syscalls moved
 1.6 26-May-2010  pooka regen: rump_vfs_mount_print
 1.5 20-May-2010  pooka one more file to commit with regen
 1.4 14-Apr-2010  pooka regen: kauth_cred_t -> struct kauth_cred *
 1.3 15-Oct-2009  pooka branches: 1.3.2; 1.3.4; 1.3.6;
regen: scheduling points in rump_pub wrappers
 1.2 14-Oct-2009  pooka regen: put all public interfaces created by ifspec into a rump_pub namespace
 1.1 14-Oct-2009  pooka generate rump local interfaces
 1.3.6.2 05-Mar-2011  rmind sync with head
 1.3.6.1 30-May-2010  rmind sync with head
 1.3.4.4 09-Oct-2010  yamt sync with head
 1.3.4.3 11-Aug-2010  yamt sync with head.
 1.3.4.2 11-Mar-2010  yamt sync with head
 1.3.4.1 15-Oct-2009  yamt file rumpvfs_if_priv.h was added on branch yamt-nfs-mp on 2010-03-11 15:04:39 +0000
 1.3.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.3.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.3.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.9.18.3 03-Dec-2017  jdolecek update from HEAD
 1.9.18.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.18.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.9.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.9.8.1 16-Jan-2013  yamt sync with (a bit old) head
 1.10.10.1 10-Aug-2014  tls Rebase.
 1.10.2.1 18-May-2014  rmind sync with head
 1.12.4.2 19-Mar-2016  skrll Sync with HEAD
 1.12.4.1 06-Jun-2015  skrll Sync with HEAD
 1.16 23-Feb-2020  ad UVM locking changes, proposed on tech-kern:

- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock.
- Break v_interlock and vmobjlock apart. v_interlock remains a mutex.
- Do partial PV list locking in the x86 pmap. Others to follow later.
 1.15 26-Jan-2016  pooka branches: 1.15.18; 1.15.24;
regen rump kernel interfaces for header change.
(they were already manually edited for a prior commit, so not much change)
 1.14 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.13 23-Apr-2015  pooka regen for COMPAT_50 sprinklage
 1.12 25-Apr-2014  pooka branches: 1.12.4;
regen
 1.11 25-Apr-2014  pooka regen for etfs move from rumpvfs to rumpkern
 1.10 18-Nov-2012  pooka branches: 1.10.2; 1.10.10;
regen
 1.9 30-Nov-2010  pooka branches: 1.9.8; 1.9.18;
regen: checksavecn is gone
 1.8 07-Sep-2010  pooka regen: rcvp/cdir interfaces go byebye in favour of rump syscalls
 1.7 19-Jul-2010  pooka regen: stat compat syscalls moved
 1.6 26-May-2010  pooka regen: rump_vfs_mount_print
 1.5 20-May-2010  pooka regen: rump_vfs_extattrctl
 1.4 14-Apr-2010  pooka regen: kauth_cred_t -> struct kauth_cred *
 1.3 15-Oct-2009  pooka branches: 1.3.2; 1.3.4; 1.3.6;
regen: scheduling points in rump_pub wrappers
 1.2 14-Oct-2009  pooka regen: put all public interfaces created by ifspec into a rump_pub namespace
 1.1 14-Oct-2009  pooka generate rump local interfaces
 1.3.6.2 05-Mar-2011  rmind sync with head
 1.3.6.1 30-May-2010  rmind sync with head
 1.3.4.4 09-Oct-2010  yamt sync with head
 1.3.4.3 11-Aug-2010  yamt sync with head.
 1.3.4.2 11-Mar-2010  yamt sync with head
 1.3.4.1 15-Oct-2009  yamt file rumpvfs_if_wrappers.c was added on branch yamt-nfs-mp on 2010-03-11 15:04:39 +0000
 1.3.2.3 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.3.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.3.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.9.18.3 03-Dec-2017  jdolecek update from HEAD
 1.9.18.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.18.1 20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.9.8.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.9.8.1 16-Jan-2013  yamt sync with (a bit old) head
 1.10.10.1 10-Aug-2014  tls Rebase.
 1.10.2.1 18-May-2014  rmind sync with head
 1.12.4.2 19-Mar-2016  skrll Sync with HEAD
 1.12.4.1 06-Jun-2015  skrll Sync with HEAD
 1.15.24.1 29-Feb-2020  ad Sync with head.
 1.15.18.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.12 20-May-2024  christos regen
 1.11 19-May-2024  christos regen
 1.10 29-Jul-2023  rin rump: Regen again to fix missing __kevent100 symbol.

makerumpsyscalls.sh requires rebuilt rump libraries installed in
/usr/lib or directory specified by its first argument.

Now, new failures observed for ATF after __kevent100 addition are
fixed at least for aarch64.
 1.9 10-Jul-2023  christos Regen
 1.8 27-May-2020  christos regen for lpathconf.
 1.7 25-Sep-2019  christos Regen
 1.6 22-Sep-2019  christos regen
 1.5 26-Jan-2016  pooka branches: 1.5.18;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.4 18-Jun-2015  pooka regen
 1.3 08-Apr-2015  justin regen after syscall update
 1.2 27-Apr-2014  pooka branches: 1.2.2; 1.2.4; 1.2.6; 1.2.10; 1.2.12;
regen
 1.1 27-Apr-2014  pooka Eliminate weak symbols from rump kernel syscall handlers, part 6:

Generate component constructors which establish non-modular syscalls.
 1.2.12.3 19-Mar-2016  skrll Sync with HEAD
 1.2.12.2 22-Sep-2015  skrll Sync with HEAD
 1.2.12.1 06-Jun-2015  skrll Sync with HEAD
 1.2.10.3 03-Dec-2017  jdolecek update from HEAD
 1.2.10.2 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.2.10.1 27-Apr-2014  tls file rumpvfs_syscalls.c was added on branch tls-maxphys on 2014-08-20 00:04:42 +0000
 1.2.6.2 10-Aug-2014  tls Rebase.
 1.2.6.1 27-Apr-2014  tls file rumpvfs_syscalls.c was added on branch tls-earlyentropy on 2014-08-10 06:56:51 +0000
 1.2.4.2 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.2.4.1 27-Apr-2014  yamt file rumpvfs_syscalls.c was added on branch yamt-pagecache on 2014-05-22 11:41:16 +0000
 1.2.2.2 18-May-2014  rmind sync with head
 1.2.2.1 27-Apr-2014  rmind file rumpvfs_syscalls.c was added on branch rmind-smpnet on 2014-05-18 17:46:19 +0000
 1.5.18.1 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.41 15-Jun-2023  hannken Regen.
 1.40 18-Jul-2022  thorpej branches: 1.40.4;
Regen for:

Make kqueue event status for vnodes shareable, and for stacked file systems
like nullfs, make the upper vnode share that status with the lower vnode.

And, lo, NetBSD 9.99.99.

Fixes PR kern/56713.
 1.39 03-May-2022  hannken Regen.
 1.38 03-May-2022  hannken Regen.
 1.37 20-Oct-2021  thorpej Regen for:

Overhaul of the EVFILT_VNODE kevent(2) filter:

- Centralize vnode kevent handling in the VOP_*() wrappers, rather than
forcing each individual file system to deal with it (except VOP_RENAME(),
because VOP_RENAME() is a mess and we currently have 2 different ways
of handling it; at least it's reasonably well-centralized in the "new"
way).
- Add support for NOTE_OPEN, NOTE_CLOSE, NOTE_CLOSE_WRITE, and NOTE_READ,
compatible with the same events in FreeBSD.
- Track which kevent notifications clients are interested in receiving
to avoid doing work for events no one cares about (avoiding, e.g.
taking locks and traversing the klist to send a NOTE_WRITE when
someone is merely watching for a file to be deleted, for example).

In support of the above:

- Add support in vnode_if.sh for specifying PRE- and POST-op handlers,
to be invoked before and after vop_pre() and vop_post(), respectively.
Basic idea from FreeBSD, but implemented differently.
- Add support in vnode_if.sh for specifying CONTEXT fields in the
vop_*_args structures. These context fields are used to convey information
between the file system VOP function and the VOP wrapper, but do not
occupy an argument slot in the VOP_*() call itself. These context fields
are initialized and subsequently interpreted by PRE- and POST-op handlers.
- Version VOP_REMOVE(), uses the a context field for the file system to report
back the resulting link count of the target vnode. Return this in tmpfs,
udf, nfs, chfs, ext2fs, lfs, and ufs.

NetBSD 9.99.92.
 1.36 02-Jul-2021  dholland Regen.
 1.35 29-Jun-2021  dholland Regen.
 1.34 16-May-2020  christos branches: 1.34.6;
Add ACL support for FFS. From FreeBSD.
 1.33 23-Feb-2020  ad Regen.
 1.32 01-Dec-2019  ad branches: 1.32.2;
Regen for VOP_LOCK & LK_UPGRADE/LK_DOWNGRADE.
 1.31 12-Jul-2017  hannken branches: 1.31.6;
Regen.
 1.30 04-Jun-2017  hannken Operations fstrans_start() and fstrans_start_nowait() now always
use FSTRANS_SHARED as lock type so remove the lock type argument.

File system state FSTRANS_SUSPENDING is now unused so remove it.

Regen vnode_if files.

Ride 8.99.1 less than a hour ago.
 1.29 04-Jun-2017  hannken Regen.
 1.28 26-May-2017  riastradh branches: 1.28.2;
regen
 1.27 26-Apr-2017  riastradh regen
 1.26 16-Apr-2017  riastradh regen to confirm no functional change
 1.25 16-Apr-2017  riastradh regen
 1.24 15-Apr-2017  riastradh regen to confirm no functional change
 1.23 11-Apr-2017  riastradh regen to confirm no functional change
 1.22 11-Apr-2017  riastradh regen
 1.21 22-Feb-2017  hannken Regen.
 1.20 26-Jan-2016  pooka branches: 1.20.2; 1.20.4;
regen vnode interfaces
 1.19 26-Jan-2016  pooka Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.18 20-Apr-2015  riastradh regen for good measure (no functional change)
 1.17 20-Apr-2015  riastradh Make VOP_LINK return directory still locked and referenced.

Ride 7.99.10 bump.
 1.16 25-Jul-2014  dholland branches: 1.16.4;
Regen for VOP_FALLOCATE/VOP_FDISCARD.
 1.15 07-Feb-2014  hannken branches: 1.15.2;
Change vnode operation lookup to return the resulting vnode *vpp unlocked.
Change cache_lookup() to return an unlocked vnode.

Discussed on tech-kern@

Welcome to 6.99.31
 1.14 23-Jan-2014  hannken Change vnode operations create, mknod, mkdir and symlink to return
the resulting vnode *vpp unlocked.

Discussed on tech-kern@

Welcome to 6.99.30
 1.13 17-Jan-2014  hannken Change vnode operations create, mknod, mkdir and symlink to keep the
directory node dvp locked on return.

Discussed on tech-kern@

Welcome to 6.99.29
 1.12 17-Jul-2013  pooka regen
 1.11 08-Aug-2011  manu branches: 1.11.2; 1.11.12; 1.11.16; 1.11.24;
regen
 1.10 11-Jul-2011  hannken Change VOP_BWRITE() to take a vnode as its first argument like all other
VOPs do. Layered file systems no longer have to modify bp->b_vp and run
into trouble when an async VOP_BWRITE() uses the wrong vnode.

- change all occurences of VOP_BWRITE(bp) to VOP_BWRITE(bp->b_vp, bp).
- remove layer_bwrite().
- welcome to 5.99.55

Adresses PR kern/38762 panic: vwakeup: neg numoutput

No objections from tech-kern@.
 1.9 04-Jul-2011  manu Add a flag to VOP_LISTEXTATTR(9) so that the vnode interface can tell the
filesystem in which format extended attribute shall be listed.

There are currently two formats:
- NUL-terminated strings, used for listxattr(2), this is the default.
- one byte length-pprefixed, non NUL-terminated strings, used for
extattr_list_file(2), which is obtanined by setting the
EXTATTR_LIST_PREFIXLEN flag to VOP_LISTEXTATTR(9)

This approach avoid the need for converting the list back and forth, except
in libperfuse, since FUSE uses NUL-terminated strings, and the kernel may
have requested EXTATTR_LIST_PREFIXLEN.
 1.8 06-Mar-2011  bouyer merge the bouyer-quota2 branch. This adds a new on-disk format
to store disk quota usage and limits, integrated with ffs
metadata. Usage is checked by fsck_ffs (no more quotacheck)
and is covered by the WAPBL journal. Enabled with kernel
option QUOTA2 (added where QUOTA was enabled in kernel config files),
turned on with tunefs(8) on a per-filesystem
basis. mount_mfs(8) can also turn quotas on.

See http://mail-index.netbsd.org/tech-kern/2011/02/19/msg010025.html
for details.
 1.7 24-Jun-2010  hannken branches: 1.7.2; 1.7.4;
Clean up vnode lock operations pass 2:

VOP_UNLOCK(vp, flags) -> VOP_UNLOCK(vp): Remove the unneeded flags argument.

Welcome to 5.99.32.

Discussed on tech-kern.
 1.6 14-Apr-2010  pooka regen: rump vnodeif went on a diet
 1.5 14-Apr-2010  pooka regenefactor for comment and whitespace changes
 1.4 10-Apr-2010  pooka regen: remove unused vdesc_transports
 1.3 15-Oct-2009  pooka branches: 1.3.2; 1.3.4;
regen: scheduling points
 1.2 29-Sep-2009  pooka regen: remove VNODE_LOCKDEBUG
 1.1 19-Nov-2008  pooka branches: 1.1.4; 1.1.6; 1.1.10;
Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.1.10.4 11-Aug-2010  yamt sync with head.
 1.1.10.3 11-Mar-2010  yamt sync with head
 1.1.10.2 04-May-2009  yamt sync with head.
 1.1.10.1 19-Nov-2008  yamt file rumpvnode_if.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.1.6.2 19-Jan-2009  skrll Sync with HEAD.
 1.1.6.1 19-Nov-2008  skrll file rumpvnode_if.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.1.4.2 17-Jan-2009  mjf Sync with HEAD.
 1.1.4.1 19-Nov-2008  mjf file rumpvnode_if.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.3.4.3 21-Apr-2011  rmind sync with head
 1.3.4.2 03-Jul-2010  rmind sync with head
 1.3.4.1 30-May-2010  rmind sync with head
 1.3.2.2 17-Aug-2010  uebayasi Sync with HEAD.
 1.3.2.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.7.4.1 20-Jan-2011  bouyer Snapshot of work in progress on a modernised disk quota system:
- new quotactl syscall (versionned for backward compat), which takes
as parameter a path to a mount point, and a prop_dictionary
(in plistref format) describing commands and arguments.
For each command, status and data are returned as a prop_dictionary.
quota commands features will be added to take advantage of this,
exporting quota data or getting quota commands as plists.

- new on disk-format storage (all 64bit wide), integrated to metadata for
ffs (and playing nicely with wapbl).
Quotas are enabled on a ffs filesystem via superblock flags.
tunefs(8) can enable or disable quotas.
On a quota-enabled filesystem, fsck_ffs(8) will track per-uid/gid
block and inode usages, and will check and update quotas in Pass 6.
quota usage and limits are stored in unliked files (one for users,
one for groups)l fsck_ffs(8) will create the files if needed, or
free them if needed. This means that after enabling or disabling
quotas on a filesystem; a fsck_ffs(8) run is required.
quotacheck(8) is not needed any more, on a unclean shutdown
fsck or journal replay will take care of fixing quotas.
newfs(8) can create a ready-to-mount quota-enabled filesystem
(superblock flags are set and quota inodes are created).
Other new features or semantic changes:
- default quota datas, applied to users or groups which don't already
have a quota entry
- per-user/group grace time (instead of a filesystem global one)
- 0 really means "nothing allowed at all", not "no limit".
If you want "no limit", set the limit to UQUAD_MAX (tools will
understand "unlimited" and "-")

A quota file is structured as follow:
it starts with a header, containing a few per-filesystem values,
and the default quota limits.
Quota entries are linked together as a simple list, each entry has a
pointer (as an offset withing the file) to the next.
The header has a pointer to a list of free quota entries, and
a hash table of in-use entries. The size of the hash table depends
on the filesystem block size (header+hash table should fit in the
first block). The file is not sparse and is a multiple of
filesystem block size (when the free quota entry list is empty a new
filesystem block is allocated). quota entries to not cross
filesystem block boundaries.

In memory, the kernel keeps a cache of recently used quota entries
as a reference to the block number, and offset withing the block.
The quota entry itself is keept in the buf cache.

fsck_ffs(8), tunefs(8) and newfs(8) supports are completed (with
related atf tests :)
The kernel can update disk usage and report it via quotactl(2).

Todo: enforce quotas limits (limits are not checked by kernel yet)
update repquota, edquota and rpc.rquotad to the new world
implement compat_50_quotactl ioctl.
update quotactl(2) man page

fsck_ffs required fixes so that allocating new blocks or inodes will
properly update the superblock and cg sumaries. This was not an issue up
to now because superblock and cg sumaries check happened last, but now
allocations or frees can happen in pass 6.
 1.7.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.11.24.1 23-Jul-2013  riastradh sync with HEAD
 1.11.16.2 18-May-2014  rmind sync with head
 1.11.16.1 28-Aug-2013  rmind sync with head
 1.11.12.2 03-Dec-2017  jdolecek update from HEAD
 1.11.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.11.2.1 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.15.2.1 10-Aug-2014  tls Rebase.
 1.16.4.3 28-Aug-2017  skrll Sync with HEAD
 1.16.4.2 19-Mar-2016  skrll Sync with HEAD
 1.16.4.1 06-Jun-2015  skrll Sync with HEAD
 1.20.4.1 21-Apr-2017  bouyer Sync with HEAD
 1.20.2.2 26-Apr-2017  pgoyette Sync with HEAD
 1.20.2.1 20-Mar-2017  pgoyette Sync with HEAD
 1.28.2.2 25-Jul-2017  snj regen for ticket 130
 1.28.2.1 04-Jun-2017  bouyer pullup the following revisions, requested by hannken in ticket #2:
src/share/man/man9/fstrans.9 1.25
src/sys/kern/vfs_mount.c 1.66
src/sys/kern/vfs_subr.c 1.468
src/sys/kern/vfs_trans.c 1.46
src/sys/kern/vfs_vnode.c 1.94, 1.95, 1.96
src/sys/kern/vnode_if.c 1.105, 1.106
src/sys/kern/vnode_if.sh 1.65, 1.66
src/sys/kern/vnode_if.src 1.76
src/sys/miscfs/genfs/genfs_io.c 1.69
src/sys/miscfs/genfs/genfs_vnops.c 1.196, 1.197
src/sys/miscfs/genfs/layer_extern.h 1.40
src/sys/miscfs/genfs/layer_vfsops.c 1.51
src/sys/miscfs/genfs/layer_vnops.c 1.67
src/sys/miscfs/nullfs/null_vnops.c 1.42
src/sys/miscfs/overlay/overlay_vnops.c 1.24
src/sys/miscfs/umapfs/umap_vnops.c 1.60
src/sys/rump/include/rump/rumpvnode_if.h 1.29, 1.30
src/sys/rump/librump/rumpkern/emul.c 1.182
src/sys/rump/librump/rumpvfs/rumpvnode_if.c 1.29, 1.30
src/sys/sys/fstrans.h 1.11
src/sys/sys/vnode.h 1.278
src/sys/sys/vnode_if.h 1.100, 1.101
src/sys/sys/vnode_impl.h 1.14, 1.15
src/sys/ufs/lfs/lfs_pages.c 1.12

Vnode state, lock and fstrans cleanup:
- Rename vnode state "VS_ACTIVE" to "VS_LOADED" and add synthetic
state "VS_ACTIVE" to assert a loaded vnode with usecount > 0.

- Redo FSTRANS in vnode_if.c and use it for VOP_LOCK and VOP_UNLOCK.

- Cleanup the genfs lock operations.

- Make "struct vnode_impl" member "vi_lock" a krwlock_t again.

- Remove the lock type argument from fstrans_start and
fstrans_start_nowait,
remove now unused FSTRANS state "FSTRANS_SUSPENDING".
 1.31.6.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.32.2.1 29-Feb-2020  ad Sync with head.
 1.34.6.1 01-Aug-2021  thorpej Sync with HEAD.
 1.40.4.1 21-Jun-2023  martin Regen (ticket #197)
 1.5 13-Jan-2009  pooka branches: 1.5.2;
Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.4 07-Jan-2009  pooka more namespacing: rua -> rumpuser_aio
 1.3 29-Dec-2008  pooka Rename specfs_lock as device_lock and move it from specfs to devsw.
Relaxes kernel dependency on vfs.
 1.2 18-Dec-2008  pooka __KERNEL_RCSID
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.5.2.3 03-Mar-2009  skrll Sync with HEAD.
 1.5.2.2 19-Jan-2009  skrll Sync with HEAD.
 1.5.2.1 13-Jan-2009  skrll file specfs.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.9 29-Mar-2010  pooka Support fifofs in rump. Do not include it in rumpvfs directly,
since it involves some very non-fs'y components like sockets and
local domain networking. Also (for better or worse?), call it
rump*v*fs_fifofs instead of rumpfs_fifofs, since it does not really
provide a file system driver.

XXX: uses duplicate common symbols and functionality depends on
link order ... (but at least it works better than before this change)
 1.8 26-Mar-2010  pooka rootfstype is not a vfs stub, so it doesn't belong in vfs_stubs
 1.7 19-Mar-2009  pooka branches: 1.7.2; 1.7.4; 1.7.6;
Make it possible to mount a file system through the mount() system
call in addition to the old rump_mnt_mount(). Some issues remain
(but require more deeprooted changes):
* it is possible to mount only to /
* unmount needs MNT_FORCE due to the new fs being root and having
a bonus reference
* cwdi is not set (since there is no concept of a process)
 1.6 13-Jan-2009  pooka branches: 1.6.2; 1.6.4; 1.6.6;
include vfs_lockf.c
 1.5 13-Jan-2009  pooka Implement block I/O as a real block driver instead of a hacked copy
of specfs. That was easier years ago when rump didn't support
devices, but brings no gain now. This allows us to include the
real specfs in rump.
 1.4 19-Dec-2008  pgoyette Store config(1)'s root filesystem type as a text string rather than
embedding the address of its xxx_mountroot() in swapnetbsd.c. This
permits booting of kernels with hard-wired filesystem type even if the
filesystem is in a loadable module (ie, not linked into the kernel
image).

Discussed on current-users. Tested on amd64 and i386 with both hard-
wired and '?' filesystem times, and on both modular and monolithic
kernels.

Thanks to pooka@ for code review and suggestions.

Addresses my PR kern/40167
 1.3 19-Dec-2008  pooka include vfs_xattr.c
 1.2 18-Dec-2008  pooka __KERNEL_RCSID
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.6.6.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.6.4.3 28-Apr-2009  skrll Sync with HEAD.
 1.6.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.6.4.1 13-Jan-2009  skrll file vfsops_stub.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.6.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.6.2.1 13-Jan-2009  mjf file vfsops_stub.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.7.6.1 30-May-2010  rmind sync with head
 1.7.4.1 30-Apr-2010  uebayasi Sync with HEAD.
 1.7.2.3 11-Aug-2010  yamt sync with head.
 1.7.2.2 04-May-2009  yamt sync with head.
 1.7.2.1 19-Mar-2009  yamt file vfsops_stub.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.42 22-Apr-2023  riastradh rump: Move ubc_uiomove, ubc_zerorange from rumpvfs to rumpkern.

Needed by kern_ksyms.c. We could split kern_ksyms.c up into kernel-
internal interfaces and the user/kernel /dev/ksyms interface, but
there's nothing vfs-specific about ubc_uiomove and ubc_zerorange
anyway, so let's just define them in rumpkern.
 1.41 09-Dec-2020  chs make rump's uvm_aio_aiodone_pages() look more like the kernel version.
fixes some more rumpy assertions.
 1.40 22-Oct-2020  chs branches: 1.40.2;
fix an incorrect assertion in the previous commit.
 1.39 18-Oct-2020  chs Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately. Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.
In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors. Fixes PR 55702.
 1.38 23-Feb-2020  ad UVM locking changes, proposed on tech-kern:

- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock.
- Break v_interlock and vmobjlock apart. v_interlock remains a mutex.
- Do partial PV list locking in the x86 pmap. Others to follow later.
 1.37 18-Feb-2020  chs remove the aiodoned thread. I originally added this to provide a thread context
for doing page cache iodone work, but since then biodone() has changed to
hand off all iodone work to a softint thread, so we no longer need the
special-purpose aiodoned thread.
 1.36 15-Jan-2020  ad Merge from yamt-pagecache (after much testing):

- Reduce unnecessary page scan in putpages esp. when an object has a ton of
pages cached but only a few of them are dirty.

- Reduce the number of pmap operations by tracking page dirtiness more
precisely in uvm layer.
 1.35 13-Dec-2019  ad branches: 1.35.2;
Break the global uvm_pageqlock into a per-page identity lock and a private
lock for use of the pagedaemon policy code. Discussed on tech-kern.

PR kern/54209: NetBSD 8 large memory performance extremely low
PR kern/54210: NetBSD-8 processes presumably not exiting
PR kern/54727: writing a large file causes unreasonable system behaviour
 1.34 18-Oct-2013  christos branches: 1.34.30; 1.34.34;
remove unused variable
 1.33 03-Jun-2012  rmind branches: 1.33.2; 1.33.4;
rumpvfs:
- ubc_uiomove: avoid the re-lock dance, since the lock is shared these days.
- uvm_aio_aiodone: acquire the lock before modifying the page flags.

Tested by martin@.
 1.32 19-Jun-2011  hannken branches: 1.32.2;
Revert previous. ubc_purge() is already defined in rumpkern/vm.c
 1.31 19-Jun-2011  hannken Add a noop wrapper for ubc_purge() to make file system tests work again.

Not really sure if this is the right way -- Antti?
 1.30 16-Jun-2011  hannken Rename uvm_vnp_zerorange(struct vnode *, off_t, size_t) to
ubc_zerorange(struct uvm_object *, off_t, size_t, int) changing
the first argument to an uvm_object and adding a flags argument.

Modify tmpfs_reg_resize() to zero the backing store (aobj) instead
of the vnode. Ubc_purge() no longer panics when unmounting tmpfs.

Keep uvm_vnp_zerorange() until the next kernel version bump.
 1.29 12-Jun-2011  rmind Welcome to 5.99.53! Merge rmind-uvmplock branch:

- Reorganize locking in UVM and provide extra serialisation for pmap(9).
New lock order: [vmpage-owner-lock] -> pmap-lock.

- Simplify locking in some pmap(9) modules by removing P->V locking.

- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share
the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).

- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner.
Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.

- Unify /dev/mem et al in MI code and provide required locking (removes
kernel-lock on some ports). Also, avoid cache-aliasing issues.

Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches
formed the core changes of this branch.
 1.28 21-Mar-2011  pooka branches: 1.28.2;
Update copyright statements.

no functional change.
 1.27 01-Mar-2011  pooka Pass accurate protection info from ubc_uiomove() to the pager.
Fixes nfs{,ro}_fileio tests on at least sparc64 (and probably macppc
and other fat endian machines).

The problem was that nfs was fooled to thinking read() caused a
write fault because of VM_PROT_WRITE being unconditionally set and
therefore set NMODIFIED on a r/o file system. It is absolutely
beyond me why the test worked on i386/amd64. Incidentally, I seem
to have "misplaced" a few goats.
 1.26 27-Feb-2011  pooka tmpfs has two layers of uvm objects (vnode->uobj and the anon object
in tmpfs_node), so when playing with pages make sure we lock the
uvm object the pages belong to instead of the vnode's uvm object.

per test from Nicolas Joly (which I'm sure he will commit soon ;)
 1.25 22-Feb-2011  pooka Shuffle the pagedaemon algorithm a bit to record the number of
pageouts active and give up only if the pagedaemon could not free
memory and there are no outstanding pageouts.

This should fix the "out of memory" pauses reported by Mihai Chelaru
and Taylor R Campbell. Tested by copying files to and from an ffs
backed by /dev/wd0 (with and without -o log) using a 1MB rump kernel
memory limit.
 1.24 18-Dec-2010  pooka branches: 1.24.2; 1.24.4;
Don't loop eternally if uiomove() fails eternally (e.g. because
the connection to the client has been severed).
 1.23 09-Sep-2010  pooka Release PG_PAGEOUT pages in aiodone.
 1.22 09-Sep-2010  pooka hold object lock across page unbusy
 1.21 09-Sep-2010  pooka Use proper locking before unbusying pages.

Caught after yesterday's changes by the test suite (the ffs snapshot
test, to be precise).
 1.20 06-Sep-2010  pooka Make the pager loops more resilient against the aobj pager which is
lazy and doesn't like to return anything except the bare minimum.
(forgot to commit this earlier)
 1.19 06-Sep-2010  pooka pager wants truncated offsets
 1.18 06-Sep-2010  pooka simplify and fix len-to-npages calculation
 1.17 19-Aug-2010  pooka Use the same base pagerflags for both ubc_uiomove and ubc_zerorange.
 1.16 02-Jun-2010  pooka In aiodone, call uvm_pageout_done() with number of PG_PAGEOUT pages
processed.
 1.15 16-Dec-2009  pooka branches: 1.15.2; 1.15.4;
If zeroing len == 0, return immediately.
(kmem_alloc() doesn't like being called with size == 0)
 1.14 10-Nov-2009  pooka Code which uses pages fetched by the pager needs PGO_SYNCIO for
obvious reasons.
 1.13 18-Oct-2009  pooka Clear PG_FAKE for pages we wrote to. This avoids paging in data
we already have (and the backend might not yet have) in cases where
fs_bshift > PAGE_SHIFT.
 1.12 07-Oct-2009  pooka Use uvm_readahead.c instead of null stubs.
 1.11 05-Oct-2009  pooka Call the pager with page-aligned offsets, 'cause that's what the
pager expects. Fixes KASSERT failure if someone manages to do
otherwise.
 1.10 05-Aug-2009  pooka g/c uvm_aio_biodone1(). not used anymore.
 1.9 05-Aug-2009  pooka Clear PG_PAGEOUT in uvm_aio_aiodone()
 1.8 05-Aug-2009  pooka Use uvm_vnode.c instead of homerolled stuff.
 1.7 04-Aug-2009  pooka terminate comment too
 1.6 04-Aug-2009  pooka * supply pager flags in ubc_uiomove()
* implement uvm_aio_aiodone() (which is almost identical to the "real" one)
 1.5 18-Mar-2009  cegger branches: 1.5.2;
Ansify function definitions w/o arguments. Generated with sed.
 1.4 22-Feb-2009  ad PR kern/26878 FFSv2 + softdep = livelock (no free ram)
PR kern/16942 panic with softdep and quotas
PR kern/19565 panic: softdep_write_inodeblock: indirect pointer #1 mismatch
PR kern/26274 softdep panic: allocdirect_merge: ...
PR kern/26374 Long delay before non-root users can write to softdep partitions
PR kern/28621 1.6.x "vp != NULL" panic in ffs_softdep.c:4653 while unmounting a softdep (+quota) filesystem
PR kern/29513 FFS+Softdep panic with unfsck-able file-corruption
PR kern/31544 The ffs softdep code appears to fail to write dirty bits to disk
PR kern/31981 stopping scsi disk can cause panic (softdep)
PR kern/32116 kernel panic in softdep (assertion failure)
PR kern/32532 softdep_trackbufs deadlock
PR kern/37191 softdep: locking against myself
PR kern/40474 Kernel panic after remounting raid root with softdep

Retire softdep, pass 2. As discussed and later formally announced on the
mailing lists.
 1.3 18-Dec-2008  pooka branches: 1.3.2; 1.3.4; 1.3.6;
__KERNEL_RCSID
 1.2 27-Nov-2008  pooka Move more vfs-related vm routines from rumpkern to rumpvfs.
 1.1 19-Nov-2008  pooka Split vfs out of rumpkern into rumpvfs. Non-fs rumps no longer
include the file system code. File system rumps explicitly need
to include rumpvfs from now on.
 1.3.6.1 13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.3.4.4 28-Apr-2009  skrll Sync with HEAD.
 1.3.4.3 03-Mar-2009  skrll Sync with HEAD.
 1.3.4.2 19-Jan-2009  skrll Sync with HEAD.
 1.3.4.1 18-Dec-2008  skrll file vm_vfs.c was added on branch nick-hppapmap on 2009-01-19 13:20:27 +0000
 1.3.2.2 17-Jan-2009  mjf Sync with HEAD.
 1.3.2.1 18-Dec-2008  mjf file vm_vfs.c was added on branch mjf-devfs2 on 2009-01-17 13:29:38 +0000
 1.5.2.6 09-Oct-2010  yamt sync with head
 1.5.2.5 11-Aug-2010  yamt sync with head.
 1.5.2.4 11-Mar-2010  yamt sync with head
 1.5.2.3 19-Aug-2009  yamt sync with head.
 1.5.2.2 04-May-2009  yamt sync with head.
 1.5.2.1 18-Mar-2009  yamt file vm_vfs.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:31 +0000
 1.15.4.5 12-Jun-2011  rmind Sync RUMP's rump_etfs_remove() and uvm_aio_aiodone() with branch changes.
 1.15.4.4 21-Apr-2011  rmind sync with head
 1.15.4.3 05-Mar-2011  rmind sync with head
 1.15.4.2 03-Jul-2010  rmind sync with head
 1.15.4.1 16-Mar-2010  rmind Change struct uvm_object::vmobjlock to be dynamically allocated with
mutex_obj_alloc(). It allows us to share the locks among UVM objects.
 1.15.2.2 22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.15.2.1 17-Aug-2010  uebayasi Sync with HEAD.
 1.24.4.1 05-Mar-2011  bouyer Sync with HEAD
 1.24.2.1 06-Jun-2011  jruoho Sync with HEAD.
 1.28.2.1 23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.32.2.4 22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.32.2.3 02-Nov-2012  yamt fix a merge botch
 1.32.2.2 30-Oct-2012  yamt sync with head
 1.32.2.1 02-Nov-2011  yamt page cache related changes

- maintain object pages in radix tree rather than rb tree.
- reduce unnecessary page scan in putpages. esp. when an object has a ton of
pages cached but only a few of them are dirty.
- reduce the number of pmap operations by tracking page dirtiness more
precisely in uvm layer.
- fix nfs commit range tracking.
- fix nfs write clustering. XXX hack
 1.33.4.1 18-May-2014  rmind sync with head
 1.33.2.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.34.34.2 09-Jul-2021  martin Apply patch, requested by chs in ticket #1321:

sys/rump/librump/rumpvfs/vm_vfs.c (apply patch)

Adapt the changes from ticket #1317 (the uvm_pageqlock does not exist any
more in HEAD)
 1.34.34.1 06-Jul-2021  martin Pull up following revision(s) - all via patch -
(requested by riastradh in ticket #1317):

sys/uvm/uvm_page.c: revision 1.248
sys/uvm/uvm_anon.c: revision 1.80
sys/rump/librump/rumpvfs/vm_vfs.c: revision 1.40
sys/rump/librump/rumpvfs/vm_vfs.c: revision 1.41
sys/rump/librump/rumpkern/vm.c: revision 1.191
sys/uvm/uvm_pager.c: revision 1.130
external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c: revision 1.71
tests/rump/rumpkern/t_vm.c: revision 1.5
tests/rump/rumpkern/t_vm.c: revision 1.6
sys/rump/librump/rumpvfs/vm_vfs.c: revision 1.39

Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately. Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.

In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors. Fixes PR 55702.

fix an incorrect assertion in the previous commit.

Handle PG_PAGEOUT in uvm_anon_release() too.

Commit the ZFS file that I forgot in this previous commit:

Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately. Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.

In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors. Fixes PR 55702.
update the rump copy of uvm_page_unbusy() to match the real version,
in particular handle PG_PAGEOUT. fixes a few atf tests.
the busypage test is buggy, expect it to fail.

make rump's uvm_aio_aiodone_pages() look more like the kernel version.
fixes some more rumpy assertions.

for the busypage test, replace atf_tc_expect_fail() with atf_tc_skip()
because atf apparently has no way to expect a test program to crash.
fixes PR 55945.
 1.34.30.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.35.2.2 29-Feb-2020  ad Sync with head.
 1.35.2.1 17-Jan-2020  ad Sync with head.
 1.40.2.1 14-Dec-2020  thorpej Sync w/ HEAD.

RSS XML Feed