Home | History | Annotate | Download | only in nfs
History log of /src/sys/nfs/nfs_subs.c
RevisionDateAuthorComments
 1.242  09-Feb-2022  andvar s/ony/only/
 1.241  05-Sep-2020  riastradh Round of uvm.h cleanup.

The poorly named uvm.h is generally supposed to be for uvm-internal
users only.

- Narrow it to files that actually need it -- mostly files that need
to query whether curlwp is the pagedaemon, which should maybe be
exposed by an external header.

- Use uvm_extern.h where feasible and uvm_*.h for things not exposed
by it. We should split up uvm_extern.h but this will serve for now
to reduce the uvm.h dependencies.

- Use uvm_stat.h and #ifdef UVMHIST uvm.h for files that use
UVMHIST(ubchist), since ubchist is declared in uvm.h but the
reference evaporates if UVMHIST is not defined, so we reduce header
file dependencies.

- Make uvm_device.h and uvm_swap.h independently includable while
here.

ok chs@
 1.240  25-May-2020  ad - Alter the convention for uvm_page_array slightly, so the basic search
parameters can't change part way through a search: move the "uobj" and
"flags" arguments over to uvm_page_array_init() and store those with the
array.

- With that, detect when it's not possible to find any more pages in the
tree with the given search parameters, and avoid repeated tree lookups if
the caller loops over uvm_page_array_fill_and_peek().
 1.239  04-Apr-2020  mlelstv NFSv2 is limited to use only 32bit in metadata. Prevent that larger
metadata values are simply truncated.

-> clamp filesystem block counts to signed 32bit.
-> clamp file sizes to signed 32bit (*)

Some NFSv2 clients also have problems to handle buffer sizes larger
than (signed) 16bit.
-> clamp buffer sizes to signed 16bit for better compatibility.

(*) This can lead to erroneous behaviour for files larger than 2GB
that NFSv2 cannot handle but it is still better than before.
An alternative would be to (partially) reject operations on files
larger than 2GB, but which causes other problems.
 1.238  08-Mar-2020  mgorny Update NFS errno mapping and add assert for correctness

Add the mapping for errno values missing in nfsrv_v2errmap[]. While
at it, add a compile-time assert to make sure that the array does not
become out-of-date again.
 1.237  24-Feb-2020  ad v_interlock -> vmobjlock
 1.236  15-Dec-2019  ad branches: 1.236.2;
Merge from yamt-pagecache:

- do gang lookup of pages using radixtree.
- remove now unused uvm_object::uo_memq and vm_page::listq.queue.
 1.235  22-Dec-2018  maxv Replace M_ALIGN and MH_ALIGN by m_align.
 1.234  22-Dec-2018  maxv Replace: M_MOVE_PKTHDR -> m_move_pkthdr. No functional change, since the
former is a macro to the latter.
 1.233  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.232  08-May-2018  maxv branches: 1.232.2;
Use M_MOVE_PKTHDR.
 1.231  26-Apr-2018  maxv Hum. This should be M_READONLY, not M_ROMAP.

M_ROMAP tells us whether the mbuf storage is mapped on a read-only page.
But an mbuf can still be read-only in the sense that the storage is
shared with other mbufs.
 1.230  21-Jan-2018  christos branches: 1.230.2;
PR/40491: From Tobias Ulmer in tech-kern@:
1. Protect the nfs request queue with its own mutex
2. make the nfs_receive queue check for signals so that intr mounts
can be interrupted.
XXX: pullup-8
 1.229  01-Apr-2017  riastradh branches: 1.229.6;
KASSERT(mutex_owned(vp->v_interlock)) in vnode iterator selector.
 1.228  10-Jun-2016  ozaki-r branches: 1.228.2; 1.228.4;
Introduce m_set_rcvif and m_reset_rcvif

The API is used to set (or reset) a received interface of a mbuf.
They are counterpart of m_get_rcvif, which will come in another
commit, hide internal of rcvif operation, and reduce the diff of
the upcoming change.

No functional change.
 1.227  10-Aug-2014  tls branches: 1.227.4;
Merge tls-earlyentropy branch into HEAD.
 1.226  24-May-2014  christos Introduce a selector function to the vfs vnode iterator so that we don't
need to vget() vnodes that we are not interested at, and optimize locking
a bit. Iterator changes reviewed by Hannken (thanks), the rest of the bugs
are mine.
 1.225  17-Mar-2014  hannken branches: 1.225.2;
Change nfs_clearcommit() to use vfs_vnode_iterator.
 1.224  18-Sep-2013  pgoyette knf (blank line even if there are no local declarations)
 1.223  18-Sep-2013  christos Use reference counting to keep track of construction and destruction of the
structures used by both the nfs server and client code. Tested by pgoyette@

1. mount remote fs via nfs (my /home directory), which autoloads nfs module
2. manually modload nfsserver
3. wait a bit
4. manually modunload nfsserver
5. wait a couple minutes
6. verify that client access still works (/bin/ls ~paul home dir)
7. manually modload nfsserver again
8. start an nfsd process
9. wait a bit
10. kill nfsd process
11. wait
12. manually modunload nfsserver again
13. verify continued client access

XXX: Note that nfs_vfs_init() calls nfs_init(), but nfs_vfs_done() does not
call nfs_fini(). Also note that the destruction order is wrong in it,
but probably does not matter. "someone" (!= me) should fix it :-) and
run the above tests.
 1.222  19-Nov-2011  tls branches: 1.222.8; 1.222.12;
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.221  12-Jun-2011  rmind branches: 1.221.2;
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.220  06-Nov-2010  uebayasi branches: 1.220.6;
Include uvm/uvm.h to use UVM internal type (struct vm_page).
 1.219  02-Mar-2010  pooka branches: 1.219.2;
Get rid of dependency on fs_nfs.h, i.e. source modules with
conditional content depending on if the NFS client is wanted or
not. The server can now be made an independent module not depending
on the nfs client.

Tested with rump_nfs (standalone client), rump_nfsd (standalone
nfsd) and a qemu installation with both the client and the server.
 1.218  31-Dec-2009  christos branches: 1.218.2;
put nuidhash_max in a file that is shared between server and client code.
 1.217  14-May-2009  yamt nfs_clearcommit: fix a race with vnode cleaning.
 1.216  15-Mar-2009  cegger ansify function definitions
 1.215  14-Mar-2009  dsl ANSIfy another 1261 function definitions.
The only ones left in sys are beyond by sed script!
(or in sys/dist or sys/external)
Mostly they have function pointer parameters.
 1.214  14-Mar-2009  dsl Change about 4500 of the K&R function definitions to ANSI ones.
There are still about 1600 left, but they have ',' or /* ... */
in the actual variable definitions - which my awk script doesn't handle.
There are also many that need () -> (void).
(The script does handle misordered arguments.)
 1.213  14-Mar-2009  dsl Remove all the __P() from sys (excluding sys/dist)
Diff checked with grep and MK1 eyeball.
i386 and amd64 GENERIC and sys still build.
 1.212  17-Dec-2008  cegger branches: 1.212.2;
kill MALLOC and FREE macros.
 1.211  28-Nov-2008  pooka g/c unused malloc types
 1.210  19-Nov-2008  ad Make the emulations, exec formats, coredump, NFS, and the NFS server
into modules. By and large this commit:

- shuffles header files and ifdefs
- splits code out where necessary to be modular
- adds module glue for each of the components
- adds/replaces hooks for things that can be installed at runtime
 1.209  22-Oct-2008  matt branches: 1.209.2;
Don't need nfs_vfs_reinit anymore since we don't resize tables anymore.
Move reinit code to init case.
 1.208  22-Oct-2008  matt Change NFS to use a RB-tree for its FH->nfsnode lookups.
 1.207  09-Oct-2008  pooka Use atomic op to get next xid. Initialize value with arc4random()
at nfs init time instead system time based trickery intermingled
with the runtime code.

le bouef: kills last simple_lock from nfs
 1.206  30-Sep-2008  pooka Initialize nfsnode pools and malloc type dynamically in the
constructor instead of depending on link sets. Consequently, rename
nfs_nh{init,reinit,done} to nfs_node_{init,reinit,done}, respectively,
to better convey the function.
 1.205  15-Jul-2008  christos explicitly set birthtime to VNOVAL, since there is no such thing in nfsv{2,3}
 1.204  04-Jun-2008  ad branches: 1.204.2; 1.204.4;
vm_page: put TAILQ_ENTRY into a union with LIST_ENTRY, so we can use both.
 1.203  10-May-2008  rumble Convert file systems to dynamically attach with the new module interface.
Make VFS hooks dynamic while we're here and say farewell to VFS_ATTACH and
VFS_HOOKS_ATTACH linksets.

As a consequence, most of the file systems can now be loaded as new style
modules.

Quick sanity check by ad@.
 1.202  05-May-2008  ad branches: 1.202.2;
- Convert hashinit() to use kmem_alloc(). The hash tables can be large
and it's better to not have them in kmem_map.
- Convert a couple of minor items along the way to kmem_alloc().
- Fix some memory leaks.
 1.201  24-Mar-2008  yamt branches: 1.201.2; 1.201.4;
merge yamt-lazymbuf branch.
 1.200  05-Mar-2008  elad Nuke a KAUTH_GENERIC_ISSUSER, this time in favor of an euid == 0, as
the traditional NFS maproot functionality goes.

Put in a note explaining why and who, also mark for future greps.

Okay yamt@.
 1.199  13-Feb-2008  yamt branches: 1.199.2; 1.199.6;
reject files larger than nm_maxfilesize.
 1.198  28-Jan-2008  yamt nfs_check_wccdata: unifdef wcc kludge messages.
 1.197  24-Jan-2008  ad specfs changes for PR kern/37717 (raidclose() is no longer called on
shutdown). There are still problems with device access and a PR will be
filed.

- Kill checkalias(). Allow multiple vnodes to reference a single device.

- Don't play dangerous tricks with block vnodes to ensure that only one
vnode can describe a block device. Instead, prohibit concurrent opens of
block devices. As a bonus remove the unreliable code that prevents
multiple file system mounts on the same device. It's no longer needed.

- Track opens by vnode and by device. Issue cdev_close() when the last open
goes away, instead of abusing vnode::v_usecount to tell if the device is
open.
 1.196  02-Jan-2008  yamt use kmem_alloc instead of malloc.
 1.195  02-Jan-2008  ad Merge vmlocking2 to head.
 1.194  08-Dec-2007  pooka branches: 1.194.4;
Remove cn_lwp from struct componentname. curlwp should be used
from on. The NDINIT() macro no longer takes the lwp parameter and
associates the credentials of the calling thread with the namei
structure.
 1.193  26-Nov-2007  pooka branches: 1.193.2;
Remove the "struct lwp *" argument from all VFS and VOP interfaces.
The general trend is to remove it from all kernel interfaces and
this is a start. In case the calling lwp is desired, curlwp should
be used.

quick consensus on tech-kern
 1.192  28-Oct-2007  yamt branches: 1.192.2;
make NFS_ATTRTIMEO a function.
 1.191  27-Jul-2007  yamt branches: 1.191.4; 1.191.6; 1.191.10; 1.191.12;
stop nfs tick when we have nothing to do.
 1.190  09-Jul-2007  ad branches: 1.190.2;
Fix build when not !NFSSERVER.
 1.189  09-Jul-2007  ad Merge some of the less invasive changes from the vmlocking branch:

- kthread, callout, devsw API changes
- select()/poll() improvements
- miscellaneous MT safety improvements
 1.188  06-Jun-2007  yamt nfs_getattrcache: simplify. no functional changes.
 1.187  28-May-2007  yamt - remove nfs_exit exit hook. ok'ed by christos@.
- as far as i understand the code, it shouldn't be necessary
because nfs_request can't return without removing its request
and r->r_lwp is either curlwp or NULL.
- even if it's necessary, leaking requests is not the correct way
to recover from the condition.
- nfs_request: add a related assertion.
 1.186  29-Apr-2007  yamt use mutex and condver.
 1.185  22-Apr-2007  dsl Change the way that emulations locate files within the emulation root to
avoid having to allocate space in the 'stackgap'
- which is very LWP unfriendly.
The additional code for non-emulation namei() is trivial, the reduction for
the emulations is massive.
The vnode for a processes emulation root is saved in the cwdi structure
during process exec.
If the emulation root the TRYEMULROOT flag are set, namei() will do an initial
search for absolute pathnames in the emulation root, if that fails it will
retry from the normal root.
".." at the emulation root will always go to the real root, even in the middle
of paths and when expanding symlinks.
Absolute symlinks found using absolute paths in the emulation root will be
relative to the emulation root (so /usr/lib/xxx.so -> /lib/xxx.so links
inside the emulation root don't need changing).
If the root of the emulation would be returned (for an emulation lookup), then
the real root is returned instead (matching the behaviour of emul_lookup,
but being a cheap comparison here) so that programs that scan "../.."
looking for the root dircetory don't loop forever.
The target for symbolic links is no longer mangled (it used to get the
CHECK_ALT_xxx() treatment, so could get /emul/xxx prepended).
CHECK_ALT_xxx() are no more. Most of the change is deleting them, and adding
TRYEMULROOT to the flags to NDINIT().
A lot of the emulation system call stubs could now be deleted.
 1.184  09-Mar-2007  yamt branches: 1.184.2; 1.184.4;
nfs_check_wccdata: print timestamps.
 1.183  04-Mar-2007  christos Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.182  22-Feb-2007  thorpej TRUE -> true, FALSE -> false
 1.181  21-Feb-2007  thorpej Replace the Mach-derived boolean_t type with the C99 bool type. A
future commit will replace use of TRUE and FALSE with true and false.
 1.180  15-Feb-2007  yamt branches: 1.180.2;
use mutex and rwlock rather than lockmgr.
 1.179  27-Dec-2006  yamt remove nqnfs.
 1.178  09-Dec-2006  chs a smorgasbord of improvements to vnode locking and path lookup:
- LOCKPARENT is no longer relevant for lookup(), relookup() or VOP_LOOKUP().
these now always return the parent vnode locked. namei() works as before.
lookup() and various other paths no longer acquire vnode locks in the
wrong order via vrele(). fixes PR 32535.
as a nice side effect, path lookup is also up to 25% faster.
- the above allows us to get rid of PDIRUNLOCK.
- also get rid of WANTPARENT (just use LOCKPARENT and unlock it).
- remove an assumption in layer_node_find() that all file systems implement
a recursive VOP_LOCK() (unionfs doesn't).
- require that all file systems supply vfs_vptofh and vfs_fhtovp routines.
fill in eopnotsupp() for file systems that don't support being exported
and remove the checks for NULL. (layerfs calls these without checking.)
- in union_lookup1(), don't change refcounts in the ISDOTDOT case, just
adjust which vnode is locked. fixes PR 33374.
- apply fixes for ufs_rename() from ufs_vnops.c rev. 1.61 to ext2fs_rename().
 1.177  09-Nov-2006  yamt branches: 1.177.2;
remove some __unused in function parameters.
 1.176  20-Oct-2006  reinoud Replace the LIST structure mp->mnt_vnodelist to a TAILQ structure since all
vnodes were synced and processed backwards. This meant that the last
accessed node was processed first and the earlierst last.

An extra benefit is the removal of the ugly hack from the Berkly days on
LFS.

In the proces, i've also replaced the various variations hand written loops
by the TAILQ_FOREACH() macro's.
 1.175  17-Oct-2006  dogcow now that we have -Wno-unused-parameter, back out all the tremendously ugly
code to gratuitously access said parameters.
 1.174  14-Oct-2006  yamt grab glock when calling uvm_unp_setsize, so that it doesn't interfere
mmap'ed accesses. this fixes an assertion failure in in nfs_doio_read.
("vp->v_size >= uiop->uio_offset + uiop->uio_resid")
 1.173  13-Oct-2006  christos more __unused
 1.172  13-Oct-2006  dogcow more unused variable fallout.
 1.171  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.170  04-Sep-2006  yamt branches: 1.170.2; 1.170.4;
nfs_ispublicfh: fix another instance of cast-qual.
 1.169  04-Sep-2006  yamt remove (void *) cast from NFSRVFH_DATA as it sometimes
discards const qualifier. pointed out by Havard Eidnes.
(it wasn't detected by in-tree gcc4. seems like a compiler bug.)
 1.168  02-Sep-2006  yamt nfsd: deal with variable-sized filehandles.
 1.167  02-Sep-2006  christos fix default type decls
fix incomplete initializer
 1.166  13-Jul-2006  martin Fix alignement problems for fhandle_t, exposed by gcc4.1.

While touching all vptofh/fhtovp functions, get rid of VFS_MAXFIDSIZ,
version the getfh(2) syscall and explicitly pass the size available in
the filehandle from userland.

Discussed on tech-kern, with lots of help from yamt (thanks!).
 1.165  07-Jun-2006  kardel branches: 1.165.2;
merge FreeBSD timecounters from branch simonb-timecounters
- struct timeval time is gone
time.tv_sec -> time_second
- struct timeval mono_time is gone
mono_time.tv_sec -> time_uptime
- access to time via
{get,}{micro,nano,bin}time()
get* versions are fast but less precise
- support NTP nanokernel implementation (NTP API 4)
- further reading:
Timecounter Paper: http://phk.freebsd.dk/pubs/timecounter.pdf
NTP Nanokernel: http://www.eecis.udel.edu/~mills/ntp/html/kern.html
 1.164  19-May-2006  yamt branches: 1.164.2;
- fix compilation problem for !NFSSERVER && NFS.
pointed by Tom Spindler on source-changes@.
- make nfs_srvdesc_pool static.
 1.163  18-May-2006  yamt - fix some leaks in nfsd, introduced by kauth changes.
- simplify code.
- add some assertions.
- wrap some long lines.
- remove an unnecessary ";".
 1.162  14-May-2006  elad integrate kauth.
 1.161  14-May-2006  christos XXX: GCC uninitialized
 1.160  15-Apr-2006  christos Coverity CID 1141: Add a KASSERT before deref.
 1.159  15-Apr-2006  christos Coverity CID 1142: Add a KASSERT before deref.
 1.158  01-Mar-2006  yamt branches: 1.158.2; 1.158.4; 1.158.6;
merge yamt-uio_vmspace branch.

- use vmspace rather than proc or lwp where appropriate.
the latter is more natural to specify an address space.
(and less likely to be abused for random purposes.)
- fix a swdmover race.
 1.157  16-Jan-2006  yamt branches: 1.157.2; 1.157.4;
- tweak RUN_ONCE api to allow init_func returns an error.
- physio: handle failure of workqueue_create.
 1.156  11-Dec-2005  christos branches: 1.156.2;
merge ktrace-lwp.
 1.155  25-Nov-2005  thorpej Use a once control to initialize the NFS server / client shared data
from nfs_vfs_init() or sys_nfssvc(). Remove the nfs_init() call from
main().
 1.154  22-Nov-2005  yamt - reduce number of linear search per rpc.
- coalesce mount_netexport_pair into netexport.
 1.153  23-Sep-2005  jmmv branches: 1.153.6;
Apply the NFS exports list rototill patch:

- Remove all NFS related stuff from file system specific code.
- Drop the vfs_checkexp hook and generalize it in the new nfs_check_export
function, thus removing redundancy from all file systems.
- Move all NFS export-related stuff from kern/vfs_subr.c to the new
file sys/nfs/nfs_export.c. The former was becoming large and its code
is always compiled, regardless of the build options. Using the latter,
the code is only compiled in when NFSSERVER is enabled. While doing this,
also make some functions in nfs_subs.c conditional to NFSSERVER.
- Add a new command in nfssvc(2), called NFSSVC_SETEXPORTSLIST, that takes a
path and a set of export entries. At the moment it can only clear the
exports list or append entries, one by one, but it is done in a way that
allows setting the whole set of entries atomically in the future (see the
comment in mountd_set_exports_list or in doc/TODO).
- Change mountd(8) to use the nfssvc(2) system call instead of mount(2) so
that it becomes file system agnostic. In fact, all this whole thing was
done to remove a 'XXX' block from this utility!
- Change the mount*, newfs and fsck* userland utilities to not deal with NFS
exports initialization; done internally by the kernel when initializing
the NFS support for each file system.
- Implement an interface for VFS (called VFS hooks) so that several kernel
subsystems can run arbitrary code upon receipt of specific VFS events.
At the moment, this only provides support for unmount and is used to
destroy NFS exports lists from the file systems being unmounted, though it
has room for extension.

Thanks go to yamt@, chs@, thorpej@, wrstuden@ and others for their comments
and advice in the development of this patch.
 1.152  19-Sep-2005  christos ATTRTIMEO takes 2 args.
 1.151  19-Aug-2005  yamt as we now have 64bit ino_t, no need to truncate nfsv3 fileids.
 1.150  07-Jul-2005  christos 1. use p = uio->uio_procp consistently and eliminate suspicious uses
of curproc (where uio->uio_procp should be used?). Don't do this
for nfs_commit(), because yamt says it is possibly wrong.
2. nfs_doio() does not use struct proc; remove it and the code to compute it.
3. use copyin_proc() and copyout_proc() instead of copyin() and copyout().
4. check return of copyout_proc(). and mark return from copyin_proc() XXX
5. Eliminate check p == curproc assertion check from nfs_write;
nfs_read does not have it and we might be called in a different
process context anyway (PR 20138).
 1.149  29-May-2005  christos branches: 1.149.2;
- sprinkle const
- avoid shadowed variables
- mark bad const use with XXXUNCONST
 1.148  26-Feb-2005  perry branches: 1.148.2;
nuke trailing whitespace
 1.147  28-Jan-2005  yamt nfs_namei: return EACCES for empty filenames as rfc1813 says.
 1.146  28-Jan-2005  yamt nfs_clearcommit: don't attempt to clear commit info (n_pushlo, etc)
unless the vnode is of VREG. union members used to keep commit info
are used for other purposes in the case of !VREG.
 1.145  27-Jan-2005  yamt keep directory eof cache when inactivating vnode
because there's no reason to throw it away.
(fix an unintended side effect of nfs_subs.c rev.1.144.)
 1.144  26-Jan-2005  yamt handle a really empty directory, which doesn't have even the dot entry.
 1.143  25-Jan-2005  yamt branches: 1.143.2;
nfs_check_wccdata: comment.
 1.142  21-Jan-2005  yamt s/time/mono_time/ for n_attrstamp and n_accstamp. (parts of) PR/25641.
 1.141  19-Jan-2005  yamt implement inaccurate mtime/ctime detection.
namely, if mtime or ctime are same between pre_op_attr and post_op_attr
when we expected them to be changed, don't trust the server.
 1.140  09-Jan-2005  yamt branches: 1.140.2;
invalidate cache if filesize is changed besides our activity
because it means that we're out of sync with the server.
 1.139  06-Jan-2005  yamt nfs_loadattrcache: invalidate access cache when ctime is changed.
 1.138  26-Oct-2004  yamt since daddr_t is 64-bit these days, simply use nfs directory cookies
as buffer cache indexes. regress/sys/fs/getdents is now supposed to work.
fix PR/27112.
 1.137  03-Oct-2004  yamt nfs_enterdircache: initialize dc_flags of a newly allocated dircache entry.
provided by Greg Oster.
 1.136  17-Sep-2004  skrll There's no need to pass a proc value when using UIO_SYSSPACE with
vn_rdwr(9) and uiomove(9).

OK'd by Jason Thorpe
 1.135  15-Sep-2004  yamt fix access-after-free bugs in dircache code by refcounting nfsdircache.
PR/26864.
 1.134  14-Jun-2004  yamt nfs_searchdircache: fix a null dereference in the case that
offset!=0 and dircache hasn't been initialized yet.
 1.133  21-Apr-2004  christos Replace the statfs() family of system calls with statvfs().
Retain binary compatibility.
 1.132  19-Mar-2004  yamt branches: 1.132.2;
nfs_getattrcache: deal with timer wraparound.
 1.131  12-Mar-2004  yamt shrink sizeof struct nfsnode by putting exclusive members into union.
 1.130  29-Nov-2003  yamt nfs_zeropad: remove an unneeded substitution (and clean up a little.)
 1.129  02-Oct-2003  itojun plug mbuf leak due to manual mbuf handling. PR kern/13807.
(martti confirmed that it stabilizes the situation described in kren/13807)
 1.128  26-Sep-2003  yamt change n_mtime from time_t to timespec in order to improve
cache consistency.
(1 second granularity is too loose these days.)
 1.127  07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22364, verified by myself.
 1.126  23-Jul-2003  yamt when rexmitting a request due to NFSERR_JUKEBOX,
use a new xid as RFC1813 says.
 1.125  29-Jun-2003  fvdl branches: 1.125.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.124  29-Jun-2003  thorpej Undo part of the ktrace/lwp changes. In particular:
* Remove the "lwp *" argument that was added to vget(). Turns out
that nothing actually used it!
* Remove the "lwp *" arguments that were added to VFS_ROOT(), VFS_VGET(),
and VFS_FHTOVP(); all they did was pass it to vget() (which, as noted
above, didn't use it).
* Remove all of the "lwp *" arguments to internal functions that were added
just to appease the above.
 1.123  28-Jun-2003  darrenr Pass lwp pointers throughtout the kernel, as required, so that the lwpid can
be inserted into ktrace records. The general change has been to replace
"struct proc *" with "struct lwp *" in various function prototypes, pass
the lwp through and use l_proc to get the process pointer when needed.

Bump the kernel rev up to 1.6V
 1.122  09-Jun-2003  yamt rework zero padding of rpc reply.
- for READ procedure, don't send back more bytes than requested.
- don't have doubtful assumptions on mbuf chain structure.
- rename a function (nfsm_adj -> nfs_zeropad) to avoid confusion as
the semantics of the function was changed.
 1.121  22-May-2003  yamt poolify nfsrv_descript.
 1.120  22-May-2003  yamt avoid double free with xlatecookie.
 1.119  07-May-2003  yamt simple lock for nfs iod.
 1.118  03-May-2003  yamt tweak nfsm_adj to pay attention to read only mbufs.
 1.117  03-May-2003  yamt more comment.
 1.116  03-May-2003  yamt better handling of write verifier change.
 1.115  24-Apr-2003  drochner Change some subordinate functions to take a "struct nfsnode" argument
instead of "struct vnode". This saves a number of pointer dereferences;
it sums up to about half a kB for me. And it paves the way for future
fixes.
While cleaning up, eliminate a write-only member of "struct nfsreq"
and a pointless assignment in the NFS_V2_ONLY case.
 1.114  16-Apr-2003  yamt sync a comment with reality.
 1.113  02-Apr-2003  yamt use queue manipulation macros.
 1.112  01-Apr-2003  yamt add an assertion.
 1.111  31-Mar-2003  yamt rename fvdl_debug to NFS_DEBUG_COMMIT.

ok'ed by fvdl.
 1.110  28-Mar-2003  yamt reply ENAMETOOLONG properly instead of discarding request as BADRPC.
my own PR20791.
 1.109  26-Feb-2003  matt Add MBUFTRACE kernel option.
Do a little mbuf rework while here. Change all uses of MGET*(*, M_WAIT, *)
to m_get*(M_WAIT, *). These are not performance critical and making them
call m_get saves considerable space. Add m_clget analogue of MCLGET and
make corresponding change for M_WAIT uses.
Modify netinet, gem, fxp, tulip, nfs to support MBUFTRACE.
Begin to change netstat to use sysctl.
 1.108  10-Feb-2003  christos move the MALLOC decl for DIROFFS to nfs_subs.c
 1.107  01-Dec-2002  matt Make sure these all agree on the same definitons of various variables.
 1.106  23-Oct-2002  jdolecek merge kqueue branch into -current

kqueue provides a stateful and efficient event notification framework
currently supported events include socket, file, directory, fifo,
pipe, tty and device changes, and monitoring of processes and signals

kqueue is supported by all writable filesystems in NetBSD tree
(with exception of Coda) and all device drivers supporting poll(2)

based on work done by Jonathan Lemon for FreeBSD
initial NetBSD port done by Luke Mewburn and Jason Thorpe
 1.105  21-Oct-2002  yamt fix a page locking deadlock problem for nfs.

add a flag that specify if the file can be truncated safely or not
to nfsm_loadattr and friends. when it isn't safe, just mark the nfsnode
as "should be truncated later".

ok'ed by Frank van der Linden and Chuck Silvers.
close kern/18036.
 1.104  23-Aug-2002  enami s/FREE/PNBUF_PUT/
 1.103  17-Mar-2002  christos branches: 1.103.4; 1.103.6;
use the exithook mechanism to remove the exiting process from the list
of processes to be signalled in a soft mount.
 1.102  11-Mar-2002  jdolecek Cosmetic change for nfs_enterdircache() - since 'blkno' is last arg,
define it's type last, too.
Noted in kern/14742 by John Franklin.
 1.101  28-Feb-2002  fvdl Invalidate the access cache when loading a new set of attributes into
the atribute cache. Fixes access cache problem seen by
Nathan Funk of the UofS, relayed by Greg Oster.
 1.100  26-Jan-2002  chs re-enable NFSv3 commit RPCs by abandoning my new approach in favor of
frank's scheme, with one new twist: don't wait until we've totally run
out of free pages before committing, but instead notice when we've built
up a largish range of uncommitted pages and commit only the older half of
the range, which is likely to already be on disk on the server.
 1.99  10-Nov-2001  lukem add RCSIDs
 1.98  27-Sep-2001  fvdl branches: 1.98.2;
Always initialize ni_rootdir in nfs_namei. From Andrei Petrov.
 1.97  15-Sep-2001  chs a whole bunch of changes to improve performance and robustness under load:

- remove special treatment of pager_map mappings in pmaps. this is
required now, since I've removed the globals that expose the address range.
pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's
no longer any need to special-case it.
- eliminate struct uvm_vnode by moving its fields into struct vnode.
- rewrite the pageout path. the pager is now responsible for handling the
high-level requests instead of only getting control after a bunch of work
has already been done on its behalf. this will allow us to UBCify LFS,
which needs tighter control over its pages than other filesystems do.
writing a page to disk no longer requires making it read-only, which
allows us to write wired pages without causing all kinds of havoc.
- use a new PG_PAGEOUT flag to indicate that a page should be freed
on behalf of the pagedaemon when it's unlocked. this flag is very similar
to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the
pageout fails due to eg. an indirect-block buffer being locked.
this allows us to remove the "version" field from struct vm_page,
and together with shrinking "loan_count" from 32 bits to 16,
struct vm_page is now 4 bytes smaller.
- no longer use PG_RELEASED for swap-backed pages. if the page is busy
because it's being paged out, we can't release the swap slot to be
reallocated until that write is complete, but unlike with vnodes we
don't keep a count of in-progress writes so there's no good way to
know when the write is done. instead, when we need to free a busy
swap-backed page, just sleep until we can get it busy ourselves.
- implement a fast-path for extending writes which allows us to avoid
zeroing new pages. this substantially reduces cpu usage.
- encapsulate the data used by the genfs code in a struct genfs_node,
which must be the first element of the filesystem-specific vnode data
for filesystems which use genfs_{get,put}pages().
- eliminate many of the UVM pagerops, since they aren't needed anymore
now that the pager "put" operation is a higher-level operation.
- enhance the genfs code to allow NFS to use the genfs_{get,put}pages
instead of a modified copy.
- clean up struct vnode by removing all the fields that used to be used by
the vfs_cluster.c code (which we don't use anymore with UBC).
- remove kmem_object and mb_object since they were useless.
instead of allocating pages to these objects, we now just allocate
pages with no object. such pages are mapped in the kernel until they
are freed, so we can use the mapping to find the page to free it.
this allows us to remove splvm() protection in several places.

The sum of all these changes improves write throughput on my
decstation 5000/200 to within 1% of the rate of NetBSD 1.5
and reduces the elapsed time for "make release" of a NetBSD 1.5
source tree on my 128MB pc to 10% less than a 1.5 kernel took.
 1.96  15-Sep-2001  chs add a new VFS op, vfs_reinit, which is called when desiredvnodes is
adjusted via sysctl. file systems that have hash tables which are
sized based on the value of this variable now resize those hash tables
using the new value. the max number of FFS softdeps is also recalculated.

convert various file systems to use the <sys/queue.h> macros for
their hash tables.
 1.95  07-Jun-2001  lukem branches: 1.95.2; 1.95.4;
delint lvalue cast abuse
 1.94  21-Apr-2001  bjh21 In nfs_loadattrcache(), if checkalias() gives us a new vnode, lock it. This
prevents us losing the locked state of the old vnode.

fvdl thinks the old vnode is certain to be locked at this point. I've put in
a KASSERT to be on the safe side.

This seems to fix PR kern/12661.
 1.93  23-Mar-2001  fvdl Same change as in the UFS code: unlock vnode before setting v_op
to spec_vnode_ops. From Bill Studenmund.
 1.92  21-Feb-2001  jdolecek branches: 1.92.2;
make some more constant arrays 'const'
 1.91  14-Feb-2001  fvdl Fix some possible locking errors in nfs_namei (XXX this function should die)
 1.90  18-Jan-2001  jdolecek constify
 1.89  27-Nov-2000  chs Initial integration of the Unified Buffer Cache project.
 1.88  08-Nov-2000  ad Update for hashinit() change.
 1.87  24-Oct-2000  fvdl Do not accept vnode type changes to an active node. This may wreak
havoc if the server erroneously uses the same filehandle for
different files. This changes back revision 1.28; the PR that
that revision fixed doesn't apply anymore, it has been verified
not to be a problem with this change.
 1.86  27-Sep-2000  fvdl Avoid unused variables for V2_ONLY case.
 1.85  24-Sep-2000  enami Don't bother to clear commit information for the vnode of type VNON.
It is not necessary since it is a vnode being initialized and it shouldn't
be done since filesystem private data may not be assigned yet.
 1.84  19-Sep-2000  bjh21 Extend NFS_V2_ONLY to remove NQNFS lease support as well. Saves another 10k.
 1.83  19-Sep-2000  fvdl Add functions to deal with keeping track of commit ranges.
 1.82  19-Sep-2000  bjh21 New kernel option, NFS_V2_ONLY, which aims to reduce the NFS client to just
that required to support NFSv2 mounts. Not finished yet, but already
provides some 44k of saving in code size on arm26. More savings, and some
documentation, are still to come.
 1.81  03-Aug-2000  thorpej Convert namei pathname buffer allocation to use the pool allocator.
 1.80  03-Aug-2000  thorpej MALLOC()/FREE() are not to be used for variable size allocations.
 1.79  28-Jun-2000  mrg remove include of <vm/vm.h>
 1.78  27-Jun-2000  mrg remove include of <vm/vm.h>
 1.77  20-Jun-2000  mrg branches: 1.77.2;
disable the bloated NFS structure check on 64bit sparc64.
 1.76  09-Jun-2000  fvdl Some tweaks to enable NFS over IPv6. The special-casing of AF_INET
should really be removed.
 1.75  30-Mar-2000  augustss branches: 1.75.2;
Remove register declarations.
 1.74  30-Mar-2000  simonb Delete redundant decl of nfs_pub - it's in <sys/mount.h>.
Delete redundant decls of nfsv{2,3}_type - they're in <nfs/nfsproto.h>.
 1.73  16-Mar-2000  jdolecek Add new VFS op routine - vfs_done and call it on filesystem detach
in vfs_detach(). vfs_done may free global filesystem's resources,
typically those allocated in respective filesystem's init function.
Needed so those filesystems which went in via LKM have a chance to
clean after themselves before unloading. This fixes random panics
when LKM for filesystem using pools was loaded and unloaded several
times.

For each leaf filesystem, add appropriate vfs_done routine.
 1.72  01-Nov-1999  fvdl Stuff values in va_blocksize that are closer to reality.
 1.71  06-Sep-1999  is branches: 1.71.2; 1.71.4; 1.71.6;
Don't truncate minor numbers >= 256.
Problem reported by Saitoh Masanobu, fix by Frank van der Linden.
 1.70  08-Jul-1999  wrstuden Modify file systems to deal with struct lock in struct vnode. All leaf
fs's other than nfs use genfs_lock() for locking.

Modify lookup routines to set PDIRUNLOCK when they unlock the parrent.
 1.69  24-Mar-1999  mrg branches: 1.69.2; 1.69.4;
completely remove Mach VM support. all that is left is the all the
header files as UVM still uses (most of) these.
 1.68  16-Mar-1999  fvdl ..JUKEBOX can happen on writes too.
 1.67  16-Mar-1999  fvdl The JUKEBOX error may be returned by the read operation, so don't
filter it out.
 1.66  06-Mar-1999  fair Snatch a patch from OpenBSD to fix PRs 6529 and 7074.
Adjust fxdr_hyper() and txdr_hyper() macros.
 1.65  27-Feb-1999  wrstuden Rationalize the vfs_checkexp macro to be VFS_CHECKEXP.
 1.64  26-Feb-1999  wrstuden Modify vfsops to seperate vfs_fhtovp() into two routines. vfs_fhtovp() now
only handles the file handle to vnode conversion, and a new call,
vfs_checkexp(), performs the export verification.
 1.63  09-Aug-1998  perry bzero->memset, bcopy->memcpy, bcmp->memcmp
 1.62  05-Jul-1998  jonathan defopt ISO TPIP.
 1.61  25-Jun-1998  thorpej defopt NFSSERVER
 1.60  24-Jun-1998  sommerfe Always include fifos; "not an option any more".
 1.59  22-Jun-1998  sommerfe defopt for options FIFO
 1.58  08-May-1998  kleink Fix some arithmetics lossage on typeless pointers.
 1.57  03-Mar-1998  fvdl Only free cookies on error when they were actually allocated by the readdir vop.
 1.56  01-Mar-1998  fvdl Merge with Lite2 + local changes
 1.55  19-Feb-1998  thorpej Include the NFS option header.
 1.54  10-Feb-1998  mrg - add defopt's for UVM, UVMHIST and PMAP_NEW.
- remove unnecessary UVMHIST_DECL's.
 1.53  07-Feb-1998  chs add flags arg to hashinit(), to pass to malloc().
 1.52  06-Feb-1998  mikel ELAST incremented, update nfsrv_v2errmap[] initialization
 1.51  05-Feb-1998  mrg initial import of the new virtual memory system, UVM, into -current.

UVM was written by chuck cranor <chuck@maria.wustl.edu>, with some
minor portions derived from the old Mach code. i provided some help
getting swap and paging working, and other bug fixes/ideas. chuck
silvers <chuq@chuq.com> also provided some other fixes.

this is the rest of the MI portion changes.

this will be KNF'd shortly. :-)
 1.50  22-Jan-1998  fvdl Refuse to create entries in the dir cache for offset 0. This is a special
case anyway, and amd(8) erroneously returns some entries with cookie 0.
Fixes PR 4844
 1.49  19-Oct-1997  fvdl branches: 1.49.2;
* Implement optional 32 <-> 64 bit directory cookie translation. This uses
the directory cache as translation table. See nfs_subs.c for comments.
Makes the code a bit more complex to look at than I would have liked,
but doesn't affect the speed of the default behavior.
* Optimize caching behavior a bit when buffers are invalidated.
* Save some RPCs in readdir operations by not bothering if there is
a small amount left to do to fill the buffer. It'll be done in the
next RPC with a larger chunk anyway. Wastes a bit of buffer space
but is faster.
* Make n_vattr an allocated vattr struct. This avoids nfsnode bloat,
and is friendlier to the malloc routines.
 1.48  11-Oct-1997  fvdl Move cookie heuristic function inside ifdef NFS, to make a kernel with server
code but without client code link again. From Erik Bertelsen, PR 4259
 1.47  10-Oct-1997  fvdl Fix unitialized var warning (did not appear on i386, but did on sparc).
 1.46  10-Oct-1997  fvdl * New directory entry caching system. Provides full caching of any
directory cookie that may be thrown back at us from userspace, up
to a size limit. Fixes double entry problem.
* Split flags for internal and external use in the NFS mount structure.
* Fix some buffer structure fields that weren're being used correctly.
* Fix missing directory cache inval call in nfs_open.
* Limit on NFS_DIRBLKSIZ no longer needed, bumped to the more reasonable
value of 8k.
* Various other things that I forget, all related to the dir caching
somehow, though.
 1.45  14-Jul-1997  fvdl branches: 1.45.2;
Don't assume that pointers into mbuf data remain valid across nfsm_dissect.
In readdirplus, don't keep such pointers but store the file attributes
in a variable instead until they are needed. Change nfsm_loadattr*
a bit so it can accept a direct pointer to an nfs_fattr structure.
 1.44  04-Jul-1997  drochner Don't cast 64bit (off_t) file sizes to vm_offset_t (32bit on many
architectures), truncate them intelligently instead.
The truncation is done centralized in vnode_pager.c.
This prevents from wrap-over effects when parts of large (>2^32 byte) files
are mmapped.
Don't allow to mmap above the numerical range of vm_offset_t.
This is considered a temporary solution until the vm system handles the
object sizes/offsets more cleanly.
 1.43  24-Jun-1997  fvdl Extend lookup handling for WebNFS. This means that nfs_namei deals
with full pathname lookups if a public filehandle is used, and that
it translates the '%' escapes (URL-style) in the same case. Also,
make nfsrv_fhtovp convert the public filehandle to the vp of the
publicly exported filesystem, as stored in the nfs_pub structure.
 1.42  08-May-1997  mycroft Pass the vnode type to vaccess(), and use it when checking VEXEC. Make sure
that the mode bits passed to vaccess() and returned by foo_getattr() contain
only permission bits.
 1.41  27-Mar-1997  thorpej Update for new mbuf code.
 1.40  23-Mar-1997  fvdl Check for the use of reserved ports on a per-request basis, unless
MNT_EXNORESPORT is specified. The check is cheap and doesn't impose
any extra overhead.
 1.39  22-Feb-1997  fvdl Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:

date: 1997/02/10 18:41:14; author: cp; state: Exp; lines: +110 -46
Make nfs_realign go away on sparc and add functionality to nfsm_disct.
 1.38  31-Jan-1997  thorpej branches: 1.38.2;
NFSCLIENT -> NFS.
 1.37  09-Dec-1996  fvdl branches: 1.37.2;
Comment change in previous made for some bad english..
 1.36  09-Dec-1996  fvdl Move '#ifdef NFSSERVER' back to the right spot; NQNFS datastructures need
to be initialized on both the client and the server side. Remove misleading
comment about this being just server stuff.
 1.35  03-Dec-1996  thorpej Make NFSSERVER work without NFSCLIENT. This is achieved by splitting
the client and server/shared data initialization into separate functions,
and calling the server/shared initialization directly from main().
Problem noted in PR #1308 (Kenneth Stailey) and PR #1780 (Chris Demetriou).
Fix suggested in PR #1780 by Chris Demetriou, and munged a bit by me,
and OK'd by Frank van der Linden <fvdl@netbsd.org>.
 1.34  02-Dec-1996  thorpej NFS performance improvement from Doug Rabson/FreeBSD:

Improve the queuing algorithms used by NFS' asynchronous i/o. The
existing mechanism uses a global queue for some buffers and the
vp->b_dirtyblkhd queue for others. This turns sequential writes into
randomly ordered writes to the server, affecting both read and write
performance. The existing mechanism also copes badly with hung
servers, tending to block accesses to other servers when all the iods
are waiting for a hung server.

The new mechanism uses a queue for each mount point. All asynchronous
i/o goes through this queue which preserves the ordering of requests.
A simple mechanism ensures that the iods are shared out fairly between
active mount points.

Reviewed/integrated/approved by Frank van der Linden <fvdl@netbsd.org>
 1.33  25-Oct-1996  cgd make the namei struct members ni_dirp and ni_next, and the componentname
struct member cn_nameptr 'const', since they should never be used to
modify the path name. (Only the pathname buffer, cn_pnbuf, should be
modified.) Propagate the const poisoning to code that uses the namei
and componentname structs.
 1.32  13-Oct-1996  christos revert kprintf changes
 1.31  10-Oct-1996  christos printf -> kprintf, sprintf -> ksprintf
 1.30  07-Jul-1996  fvdl Start XIDs at a value based on the current time, not 0. This avoids nasty
XID confusions with servers that cache them over a long period and
with clients that reboot quickly.

Problems: because of the sanity check that is done by comparing the system
time with filesystem time, XIDs will start at 0 until root is mounted,
which means it isn't completely safe for diskless setups. But it's clearly
better than it was. It would also be cleaner if all XID handling (more
generally, all RPC handling) within the kernel went through the
same functions.
 1.29  01-Jul-1996  fvdl We're only handling uio with iovcnt == 1, so don't ever attempt to increment
uio_iov, this will get us into nasty trouble. (Thanks to Matthias Drochner for
tracking this down).
 1.28  23-May-1996  fvdl * Make mounts with symlinks work (needed for direct mounts with amd). PR #1917
* Never change the NQNFS flag and/or version when just doing an update mount.
Fixes a problem that made diskless booting impossible under some
circumstances.
 1.27  03-Apr-1996  thorpej branches: 1.27.4;
Make these link in the absense of "options FIFO".
 1.26  13-Mar-1996  fvdl Disable invalidating of directory offsets cookies. Should fix one or two
directory problems.

XXX There is no clean solution to the cookie/cookieverifier validity mess.
Together with the disabled strict cookie check, this puts us back at
what v2 did in this case. Slightly better solution possible by
consequently storing 64bit cookies in other places too.
 1.25  18-Feb-1996  fvdl Bring in a merge of Rick Macklem's NFSv3 code from Lite2
 1.24  09-Feb-1996  christos nfs prototype changes
 1.23  01-Feb-1996  jtc Rename struct timespec fields to conform to POSIX.1b
 1.22  19-Dec-1995  cgd changes to make this work on systems where pointers & longs are 64 bits.
This is mostly just changes to make the stuff that goes over the wire
use fixed-size types.
 1.21  08-Sep-1995  ws No point in computing cn_hash here,
as it gets immediately recomputed in lookup
 1.20  02-Jun-1995  mycroft Exported group list now starts at offset 0, not 1.
 1.19  01-Jun-1995  jtc Moved egid credential from cr_groups[0] to new field cr_gid. POSIX.1
requires that sgid executables and the setuid() syscall *not* change
the supplemental group list.
 1.18  18-Aug-1994  mycroft More LIST/CIRCLEQ migration.
 1.17  17-Aug-1994  mycroft Convert some more lists and queues.
 1.16  17-Aug-1994  mycroft Change the reply list to a TAILQ.
 1.15  22-Jul-1994  mycroft Set the group list length when copying credentials.
 1.14  29-Jun-1994  cgd branches: 1.14.2;
New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD'
 1.13  13-Jun-1994  mycroft Move a misplaced #endif.
 1.12  08-Jun-1994  mycroft Update to 4.4-Lite fs code, with local changes.
 1.11  09-Mar-1994  ws Make FFS optional
 1.10  06-Feb-1994  mycroft Eliminate some more uses of b_actl.
 1.9  18-Dec-1993  mycroft Canonicalize all #includes.
 1.8  07-Sep-1993  ws branches: 1.8.2;
Changes to VFS readdir semantics
NFS changes for better cookie support
ISOFS changes for better Rockridge support and support for generation numbers
 1.7  02-Aug-1993  mycroft Make bpos arg to nfsm_reqh a caddr_t*, not a caddr_t**, as that's what it
is actually passed.
 1.6  13-Jul-1993  cgd bpos is really a caddr_t **. doesn't really make a diff to the code
generated...
 1.5  13-Jul-1993  cgd diskless changes made last time were hosed; were using NULL for
"no credentials" rather than NOCRED.
 1.4  07-Jul-1993  cgd changes from ws to support diskless booting... these are "OK" on inspection
and after testing... (actually, currently, none of the changed
code is even used...)
 1.3  21-May-1993  cgd add rcsid again; fix RCS+crash fuckup
 1.2  10-Apr-1993  glass migrated code to make split possible
 1.1  21-Mar-1993  cgd branches: 1.1.1;
Initial revision
 1.1.1.3  01-Mar-1998  fvdl Import 4.4BSD-Lite2
 1.1.1.2  01-Mar-1998  fvdl Import 4.4BSD-Lite for reference
 1.1.1.1  21-Mar-1993  cgd initial import of 386bsd-0.1 sources
 1.8.2.2  14-Nov-1993  mycroft Canonicalize all #includes.
 1.8.2.1  24-Sep-1993  mycroft Make all files using spl*() #include cpu.h. Changes from trunk.
nfs_vfsops.c, nfsmount.h: Make nfs_quotactl() take an int rather than a uid_t,
as it might be -1.
nfs_vnops.c: va_size and va_bytes are now quads.
 1.14.2.2  19-Aug-1994  mycroft update from trunk
 1.14.2.1  24-Jul-1994  cgd from trunk.
 1.27.4.3  08-Jul-1996  jtc Pulled up from rev 1.30 by request from Frank van der Linden
 1.27.4.2  02-Jul-1996  jtc Pulled up from rev 1.29 by request from fvdl
 1.27.4.1  25-May-1996  fvdl Pull in bugfixes from main branch.
 1.37.2.1  14-Jan-1997  thorpej Snapshot of work-in-progress, committed to private branch.

These changes implement machine-independent root device and file system
selection. Notable features:

- All ports behave in a consistent manner regarding root
device selection.
- No more "options GENERIC"; all kernels have the ability
to boot with RB_ASKNAME to select root device and file system
type.
- Root file system type can be wildcarded; a machine-independent
function will try all possible file systems for the selected
root device until one succeeds.
- If the root file system fails to mount, the operator will
be given the chance to select a new root device and file
system type, rather than having the machine simply panic.
- nfs_mountroot() no longer panics if any part of the NFS
mount process fails; it now returns an error, giving the
operator a chance to recover.
- New, more consistent, config(8) grammar. The constructs:

config netbsd swap generic
config netbsd root on nfs

have been replaced with:

config netbsd root on ? type ?
config netbsd root on ? type nfs

Additionally, the operator may select or wildcard root file
system type in the kernel configuration file:

config netbsd root on cd0a type cd9660

config(8) now requires that a "root" specification be
made. "root" may be wired down or wildcarded. "swap" and
"dump" specifications are optional, and follow previous
semantics.

- config(8) has a new "file-system" keyword, used to configure
file systems into the kernel. Eventually, this will be used
to generate the default vfssw[].

- "options NFSCLIENT" is obsolete, and is replaced by
"file-system NFS". "options NFSSERVER" still exists, since
NFS server support is independent of the NFS file system
client.

- sys/arch/<foo>/<foo>/swapgeneric.c is no longer used, and
will be removed; all information is now generated by config(8).

As of this commit, all ports except arm32 have been updated to use
the new setroot(). Only SPARC, i386, and Alpha ports have been
tested at this time. Port masters should test these changes on their
ports, and report any problems back to me.

More changes are on their way, including RB_ASKNAME support in
nfs_mountroot() (to prompt for server address and path) and, potentially,
the ability to select rarp/bootparam or bootp in nfs_mountroot().
 1.38.2.1  12-Mar-1997  is Merge in changes from Trunk
 1.45.2.1  14-Oct-1997  thorpej Update marc-pcmcia branch from trunk.
 1.49.2.1  29-Jan-1998  mellon Pull up 1.50 (fvdl)
 1.69.4.1  02-Aug-1999  thorpej Update from trunk.
 1.69.2.1  10-Sep-1999  he Pull up revision 1.71:
Don't truncate minor numbers > 255 on a NFS client. (is)
 1.71.6.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.71.4.1  15-Nov-1999  fvdl Sync with -current
 1.71.2.7  23-Apr-2001  bouyer Sync with HEAD.
 1.71.2.6  27-Mar-2001  bouyer Sync with HEAD.
 1.71.2.5  12-Mar-2001  bouyer Sync with HEAD.
 1.71.2.4  11-Feb-2001  bouyer Sync with HEAD.
 1.71.2.3  08-Dec-2000  bouyer Sync with HEAD.
 1.71.2.2  22-Nov-2000  bouyer Sync with HEAD.
 1.71.2.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
 1.75.2.1  22-Jun-2000  minoura Sync w/ netbsd-1-5-base.
 1.77.2.5  15-Nov-2001  he Pull up revision 1.98 (requested by fvdl):
Always initialize ni_rootdir in nfs_namei(). This fixes a problem
where use of ``..'' would instead use the information for ``.'',
when using NetBSD/alpha NFS servers, and fixes PR#11618 ands
PR#12953.
 1.77.2.4  06-Apr-2001  he Pull up revision 1.93 (requested by wrstuden):
Explicitly VOP_UNLOCK before setting v_op to spec_vnode_ops_p.
Works around a lock leak and eventual kernel panic.
 1.77.2.3  14-Dec-2000  he Pull up revisions 1.85,1.87 (requested by fvdl):
Improve NFS performance, possibly with as much as 100% in
throughput. Please note: this implies a kernel interface change,
VOP_FSYNC gains two arguments.
 1.77.2.2  30-Oct-2000  tv Pullup 1.87 [fvdl]:
Do not accept vnode type changes to an active node. This may wreak
havoc if the server erroneously uses the same filehandle for
different files. This changes back revision 1.28; the PR that
that revision fixed doesn't apply anymore, it has been verified
not to be a problem with this change.
 1.77.2.1  20-Jun-2000  tv file nfs_subs.c was added on branch netbsd-1-5 on 2000-10-30 22:22:58 +0000
 1.92.2.11  11-Dec-2002  thorpej Sync with HEAD.
 1.92.2.10  11-Nov-2002  nathanw Catch up to -current
 1.92.2.9  22-Oct-2002  thorpej Sync with HEAD.
 1.92.2.8  27-Aug-2002  nathanw Catch up to -current.
 1.92.2.7  01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.92.2.6  28-Feb-2002  nathanw Catch up to -current.
 1.92.2.5  14-Nov-2001  nathanw Catch up to -current.
 1.92.2.4  08-Oct-2001  nathanw Catch up to -current.
 1.92.2.3  21-Sep-2001  nathanw Catch up to -current.
 1.92.2.2  21-Jun-2001  nathanw Catch up to -current.
 1.92.2.1  09-Apr-2001  nathanw Catch up with -current.
 1.95.4.1  01-Oct-2001  fvdl Catch up with -current.
 1.95.2.6  30-Sep-2002  jdolecek add support for kevents to NFS
to detect file changes on server by other NFS clients, polling kernel thread
is used to periodically check for attribute changes of watched files;
the NFS server is only contacted when the vnode expires from local attrcache
(which takes 5-60 seconds currently), to keep network&CPU overhead low

the routine checking for remote changes is quite simplistic, but hopefully
doing it's job well enough
 1.95.2.5  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.95.2.4  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.95.2.3  16-Mar-2002  jdolecek Catch up with -current.
 1.95.2.2  11-Feb-2002  jdolecek Sync w/ -current.
 1.95.2.1  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.98.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.103.6.1  04-Oct-2003  tron Pull up revision 1.129 (requested by martti in ticket #1506):
plug mbuf leak due to manual mbuf handling. PR kern/13807.
(martti confirmed that it stabilizes the situation described in kren/13807)
 1.103.4.1  29-Aug-2002  gehenna catch up with -current.
 1.125.2.13  11-Dec-2005  christos Sync with head.
 1.125.2.12  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.125.2.11  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.125.2.10  04-Feb-2005  skrll Sync with HEAD.
 1.125.2.9  24-Jan-2005  skrll Sync with HEAD.
 1.125.2.8  17-Jan-2005  skrll Sync with HEAD.
 1.125.2.7  02-Nov-2004  skrll Sync with HEAD.
 1.125.2.6  19-Oct-2004  skrll Sync with HEAD
 1.125.2.5  21-Sep-2004  skrll Fix the sync with head I botched.
 1.125.2.4  18-Sep-2004  skrll Sync with HEAD.
 1.125.2.3  24-Aug-2004  skrll Undo part of the ktrace/lwp changes. In particular:
* Remove the "lwp *" argument that was added to vget(). Turns out
that nothing actually used it!
* Remove the "lwp *" arguments that were added to VFS_ROOT(), VFS_VGET(),
and VFS_FHTOVP(); all they did was pass it to vget() (which, as noted
above, didn't use it).
* Remove all of the "lwp *" arguments to internal functions that were added
just to appease the above.
 1.125.2.2  03-Aug-2004  skrll Sync with HEAD
 1.125.2.1  02-Jul-2003  darrenr Apply the aborted ktrace-lwp changes to a specific branch. This is just for
others to review, I'm concerned that patch fuziness may have resulted in some
errant code being generated but I'll look at that later by comparing the diff
from the base to the branch with the file I attempt to apply to it. This will,
at the very least, put the changes in a better context for others to review
them and attempt to tinker with removing passing of 'struct lwp' through
the kernel.
 1.132.2.5  16-Mar-2005  tron Pull up revision 1.146 (requested by yamt in ticket #1148):
nfs_clearcommit: don't attempt to clear commit info (n_pushlo, etc)
unless the vnode is of VREG. union members used to keep commit info
are used for other purposes in the case of !VREG.
 1.132.2.4  11-Jan-2005  jmc Pullup rev 1.140 (requested by yamt in ticket #1079)

Invalidate cache if filesize is changed besides our activity
because it means that were out of sync with the server.
 1.132.2.3  04-Oct-2004  jmc branches: 1.132.2.3.2;
Pullup rev 1.137 (requested by yamt in ticket #889)

nfs_enterdircache: initialize dc_flags of a newly allocated dircache entry.
 1.132.2.2  18-Sep-2004  he Pull up revision 1.135 (requested by yamt in ticket #858):
Fix access-after-free bugs in dircache code by reference
counting nfsdircache. Fixes PR#26864.
 1.132.2.1  21-Jun-2004  tron Pull up revision 1.134 (requested by yamt in ticket #515):
nfs_searchdircache: fix a null dereference in the case that
offset!=0 and dircache hasn't been initialized yet.
 1.132.2.3.2.4  27-Oct-2005  riz Pull up following revision(s) (requested by christos in ticket #5863):
sys/nfs/nfs_subs.c: revision 1.152 via patch
sys/nfs/nfs.h: revision 1.49
sys/nfs/nfs_vfsops.c: revision 1.149 via patch
usr.sbin/amd/include/config.h: revision 1.36
sys/nfs/nfs_vnops.c: revision 1.227 via patch
sys/nfs/nfsmount.h: revision 1.34
Allow the attribute cache to be turned off, and allow amd to do it.
 1.132.2.3.2.3  16-Mar-2005  tron Pull up revision 1.146 (requested by yamt in ticket #1148):
nfs_clearcommit: don't attempt to clear commit info (n_pushlo, etc)
unless the vnode is of VREG. union members used to keep commit info
are used for other purposes in the case of !VREG.
 1.132.2.3.2.2  30-Jan-2005  he Pull up revision 1.138 (requested by yamt in ticket #968):
Since daddr_t is 64-bit these days, simply use nfs directory
cookies as buffer cache indexes. This should make the
regress/sys/fs/getdents test work. Fixes PR#27112.
 1.132.2.3.2.1  11-Jan-2005  jmc Pullup rev 1.140 (requested by yamt in ticket #1079)

Invalidate cache if filesize is changed besides our activity
because it means that were out of sync with the server.
 1.140.2.1  29-Apr-2005  kent sync with -current
 1.143.2.3  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.143.2.2  12-Feb-2005  yamt sync with head.
 1.143.2.1  25-Jan-2005  yamt file nfs_subs.c was added on branch yamt-km on 2005-02-12 18:17:55 +0000
 1.148.2.1  27-Sep-2005  tron Pull up following revision(s) (requested by christos in ticket #816):
sys/nfs/nfs_subs.c: revision 1.152
ATTRTIMEO takes 2 args.
 1.149.2.13  17-Mar-2008  yamt sync with head.
 1.149.2.12  27-Feb-2008  yamt revert incomplete nfs client locking for now.
 1.149.2.11  27-Feb-2008  yamt sync with head.
 1.149.2.10  15-Feb-2008  yamt - sprinkle some locks.
- disable MNT_UPDATE because it involves too much locking headache.
- don't overwrite other bits in v_vflags when setting VV_ROOT.
 1.149.2.9  04-Feb-2008  yamt sync with head.
 1.149.2.8  21-Jan-2008  yamt sync with head
 1.149.2.7  07-Dec-2007  yamt sync with head
 1.149.2.6  15-Nov-2007  yamt sync with head.
 1.149.2.5  03-Sep-2007  yamt sync with head.
 1.149.2.4  26-Feb-2007  yamt sync with head.
 1.149.2.3  30-Dec-2006  yamt sync with head.
 1.149.2.2  21-Jun-2006  yamt sync with head.
 1.149.2.1  07-Jul-2005  yamt adapt to mbuf.h changes.
 1.153.6.2  29-Nov-2005  yamt sync with head.
 1.153.6.1  22-Nov-2005  yamt sync with head.
 1.156.2.2  01-Feb-2006  yamt sync with head.
 1.156.2.1  31-Dec-2005  yamt - adapt nfs.
- nfs_doio_read: #if 0 out "killproc if text is modified" part of
the code as it's broken. (a process reading the modified text is not
necessarily a process which is using the file as a text.)
 1.157.4.3  01-Jun-2006  kardel Sync with head.
 1.157.4.2  22-Apr-2006  simonb Sync with head.
 1.157.4.1  04-Feb-2006  simonb Adapt for timecounters: mostly use get*time() and use "time_second"
instead of "time.tv_sec".
 1.157.2.1  09-Sep-2006  rpaulo sync with head
 1.158.6.1  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.158.4.9  06-May-2006  christos - Move kauth_cred_t declaration to <sys/types.h>
- Cleanup struct ucred; forward declarations that are unused.
- Don't include <sys/kauth.h> in any header, but include it in the c files
that need it.

Approved by core.
 1.158.4.8  19-Apr-2006  elad sync with head.
 1.158.4.7  14-Mar-2006  elad Use kauth_cred_clone() where appropriate.
 1.158.4.6  13-Mar-2006  elad kauth_cred_clone() takes care of the groups for us, remove redundant code.
 1.158.4.5  12-Mar-2006  elad Fix group cleaning loop, as pointed out by yamt@.

While I'm here, add an XXX near the second loop that watches NGROUPS; this
should be internal to kauth(9).
 1.158.4.4  11-Mar-2006  elad Replace check for euid == 0 with kauth_authorize_generic().
 1.158.4.3  10-Mar-2006  elad Cleanup more interface abuse.

Make nfsrv_setcred() take a kauth_cred_t * as outcred. The original code
just modified it directly; we can't do that, nor do we want to.

Get rid of another case of kauth_cred_zero() followed by kauth_cred_hold()
and use kauth_cred_clone() to make sure we don't leave out important
members.

Add another DIAGNOSTIC check for reference count of above one.

Again, this should be tested.
 1.158.4.2  10-Mar-2006  elad Remove some more no longer needed calls to kauth_cred_setngroups() and
nfsrvw_sort().
 1.158.4.1  08-Mar-2006  elad Adapt to kernel authorization KPI.

This could use some testing...
 1.158.2.5  14-Sep-2006  yamt sync with head.
 1.158.2.4  03-Sep-2006  yamt sync with head.
 1.158.2.3  11-Aug-2006  yamt sync with head
 1.158.2.2  26-Jun-2006  yamt sync with head.
 1.158.2.1  24-May-2006  yamt sync with head.
 1.164.2.2  19-Jun-2006  chap Sync with head.
 1.164.2.1  19-May-2006  chap file nfs_subs.c was added on branch chap-midi on 2006-06-19 04:10:37 +0000
 1.165.2.1  13-Jul-2006  gdamore Merge from HEAD.
 1.170.4.2  10-Dec-2006  yamt sync with head.
 1.170.4.1  22-Oct-2006  yamt sync with head
 1.170.2.2  12-Jan-2007  ad Sync with head.
 1.170.2.1  18-Nov-2006  ad Sync with head.
 1.177.2.1  17-Feb-2007  tron Apply patch (requested by chs in ticket #422):
- Fix various deadlock problems with nullfs and unionfs.
- Speed up path lookups by upto 25%.
 1.180.2.3  07-May-2007  yamt sync with head.
 1.180.2.2  12-Mar-2007  rmind Sync with HEAD.
 1.180.2.1  28-Feb-2007  yamt sync with head. (somehow missed in the previous)
 1.184.4.1  11-Jul-2007  mjf Sync with head.
 1.184.2.9  24-Oct-2007  ad Do locking / use marker vnodes when traversing mountpoint vnode lists.
 1.184.2.8  16-Sep-2007  ad Checkpoint work in progress on the vnode lifecycle and reference counting
stuff. This makes it work properly without kernel_lock and fixes a few
quite old bugs. See vfs_subr.c 1.283.2.17 for details.
 1.184.2.7  20-Aug-2007  ad Sync with HEAD.
 1.184.2.6  15-Jul-2007  ad Sync with head.
 1.184.2.5  15-Jul-2007  ad Sync with head.
 1.184.2.4  01-Jul-2007  ad Adapt to callout API change.
 1.184.2.3  18-Jun-2007  yamt fix a merge botch.
 1.184.2.2  09-Jun-2007  ad Sync with head.
 1.184.2.1  13-Mar-2007  ad Pull in the initial set of changes for the vmlocking branch.
 1.190.2.1  15-Aug-2007  skrll Sync with HEAD.
 1.191.12.2  27-Jul-2007  yamt stop nfs tick when we have nothing to do.
 1.191.12.1  27-Jul-2007  yamt file nfs_subs.c was added on branch matt-mips64 on 2007-07-27 10:03:59 +0000
 1.191.10.1  13-Nov-2007  bouyer Sync with HEAD
 1.191.6.3  23-Mar-2008  matt sync with HEAD
 1.191.6.2  09-Jan-2008  matt sync with HEAD
 1.191.6.1  06-Nov-2007  matt sync with HEAD
 1.191.4.3  09-Dec-2007  jmcneill Sync with HEAD.
 1.191.4.2  27-Nov-2007  joerg Sync with HEAD. amd64 Xen support needs testing.
 1.191.4.1  29-Oct-2007  joerg Sync with HEAD.
 1.192.2.3  18-Feb-2008  mjf Sync with HEAD.
 1.192.2.2  27-Dec-2007  mjf Sync with HEAD.
 1.192.2.1  08-Dec-2007  mjf Sync with HEAD.
 1.193.2.2  26-Dec-2007  ad Sync with head.
 1.193.2.1  04-Dec-2007  ad Pull the vmlocking changes into a new branch.
 1.194.4.1  02-Jan-2008  bouyer Sync with HEAD
 1.199.6.6  17-Jan-2009  mjf Sync with HEAD.
 1.199.6.5  05-Oct-2008  mjf Sync with HEAD.
 1.199.6.4  28-Sep-2008  mjf Sync with HEAD.
 1.199.6.3  05-Jun-2008  mjf Sync with HEAD.

Also fix build.
 1.199.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.199.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.199.2.1  24-Mar-2008  keiichi sync with head.
 1.201.4.7  10-Oct-2010  yamt some locking changes
 1.201.4.6  26-Sep-2010  yamt locking changes
 1.201.4.5  11-Mar-2010  yamt sync with head
 1.201.4.4  16-May-2009  yamt sync with head
 1.201.4.3  04-May-2009  yamt sync with head.
 1.201.4.2  16-May-2008  yamt sync with head.
 1.201.4.1  27-Apr-2008  yamt commit some work-in-progress changes to make nfs client mp-safe to a branch,
so that they won't get lost.
- sprinkle some locking
- mark the filesystem, nfstimer callout, and kq kthread mp-safe
- add assertions and comments
- disable upgrade mount for now
- some unrelated cosmetic changes
 1.201.2.2  17-Jun-2008  yamt sync with head.
 1.201.2.1  18-May-2008  yamt sync with head.
 1.202.2.3  10-Oct-2008  skrll Sync with HEAD.
 1.202.2.2  18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.202.2.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.204.4.2  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.204.4.1  19-Oct-2008  haad Sync with HEAD.
 1.204.2.1  18-Jul-2008  simonb Sync with head.
 1.209.2.2  28-Apr-2009  skrll Sync with HEAD.
 1.209.2.1  19-Jan-2009  skrll Sync with HEAD.
 1.212.2.2  23-Jul-2009  jym Sync with HEAD.
 1.212.2.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.218.2.2  27-May-2010  uebayasi Include uvm/uvm.h, because this touches uvm internal.
 1.218.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.219.2.2  05-Mar-2011  rmind sync with head
 1.219.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.220.6.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.221.2.6  22-May-2014  yamt fix a merge botch
 1.221.2.5  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.221.2.4  17-Apr-2012  yamt sync with head
 1.221.2.3  26-Nov-2011  yamt update after radixtree.h api changes
 1.221.2.2  06-Nov-2011  yamt remove pg->listq and uobj->memq
 1.221.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.222.12.1  18-May-2014  rmind sync with head
 1.222.8.2  03-Dec-2017  jdolecek update from HEAD
 1.222.8.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.225.2.2  10-Aug-2014  tls Rebase.
 1.225.2.1  17-Jul-2014  tls Adjustments to the "earlyentropy" branch in response to the various
discussions beginning with my initial proposal
http://mail-index.netbsd.org/tech-kern/2014/04/08/msg016876.html and
particularly the long discussion of cprng_fast() performance (e.g.
https://mail-index.netbsd.org/tech-crypto/2014/04/21/msg000642.html).

In particular:

* Per-CPU, lockless cprng_fast replacement using Dennis Ferguson's
"ccrand" implementation of ChaCha8.

* libkern arc4random() is gone, gone, gone.

* Entropy estimator reverted to 32-bit recordkeeping and timestamps
per Dennis' comments and analysis.

* LZF entropy estimator removed: it required a great deal of state,
and rejected only truly pathological input.

I have not yet reverted the changes that provide LZF in the kernel
as generic functionality; I will likely revert those changes prior
to any merge of this branch to HEAD.
 1.227.4.2  28-Aug-2017  skrll Sync with HEAD
 1.227.4.1  09-Jul-2016  skrll Sync with HEAD
 1.228.4.1  21-Apr-2017  bouyer Sync with HEAD
 1.228.2.1  26-Apr-2017  pgoyette Sync with HEAD
 1.229.6.1  08-Jun-2018  martin Pull up following revision(s) (requested by maya in ticket #856):

sys/nfs/nfs.h: revision 1.76
sys/nfs/nfs_subs.c: revision 1.230
sys/nfs/nfs_socket.c: revision 1.199
sys/nfs/nfs_clntsocket.c: revision 1.6

PR/40491: From Tobias Ulmer in tech-kern@:
1. Protect the nfs request queue with its own mutex
2. make the nfs_receive queue check for signals so that intr mounts
can be interrupted.

XXX: pullup-8
 1.230.2.4  26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.230.2.3  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.230.2.2  21-May-2018  pgoyette Sync with HEAD
 1.230.2.1  02-May-2018  pgoyette Synch with HEAD
 1.232.2.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.232.2.1  10-Jun-2019  christos Sync with HEAD
 1.236.2.1  29-Feb-2020  ad Sync with head.

RSS XML Feed