Home | History | Annotate | Download | only in nfs
History log of /src/sys/nfs/nfs_node.c
RevisionDateAuthorComments
 1.126  01-May-2020  hannken Resolve delayed truncation from nfs_inactive() too.

Should prevent "locking against self" from nfs_unlock().
 1.125  24-Feb-2020  ad v_interlock -> vmobjlock
 1.124  18-Oct-2019  msaitoh branches: 1.124.2;
s/initalize/initialize/ in comment or printf message.
 1.123  28-May-2018  chs branches: 1.123.2;
add a genfs method to allow a file system to limit the range of pages
that are given to a single GOP_WRITE() call. needed by ZFS.
 1.122  26-May-2017  riastradh branches: 1.122.8;
Eliminate crusty debugging sludge.

We have a mostly sane vnode lifecycle now. If this needs debugging,
it should be done once at the call site of VOP_RECLAIM.
 1.121  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.120  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.119  20-Aug-2016  hannken branches: 1.119.2;
Remove now obsolete operation vcache_remove().

Welcome to 7.99.36
 1.118  30-May-2014  hannken branches: 1.118.4; 1.118.8;
Change NFS from rbtree to vcache.
 1.117  27-Feb-2014  hannken branches: 1.117.2;
The current implementation of vn_lock() is racy. Modification of
the vnode operations vector for active vnodes is unsafe because it
is not known whether deadfs or the original file system will be
called.

- Pass down LK_RETRY to the lock operation (hint for deadfs only).

- Change deadfs lock operation to return ENOENT if LK_RETRY is unset.

- Change all other lock operations to check for dead vnode once
the vnode is locked and unlock and return ENOENT in this case.

With these changes in place vnode lock operations will never succeed
after vclean() has marked the vnode as VI_XLOCK and before vclean()
has changed the operations vector.

Adresses PR kern/37706 (Forced unmount of file systems is unsafe)

Discussed on tech-kern.

Welcome to 6.99.33
 1.116  12-Jun-2011  rmind branches: 1.116.2; 1.116.12; 1.116.16;
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.115  19-May-2011  rmind branches: 1.115.2;
Remove cache_purge(9) calls from reclamation routines in the file systems,
as vclean(9) performs it for us since Lite2 merge.
 1.114  24-Sep-2010  rmind branches: 1.114.2;
Fixes/improvements to RB-tree implementation:
1. Fix inverted node order, so that negative value from comparison operator
would represent lower (left) node, and positive - higher (right) node.
2. Add an argument (i.e. "context"), passed to comparison operators.
3. Change rb_tree_insert_node() to return a node - either inserted one or
already existing one.
4. Amend the interface to manipulate the actual object, instead of the
rb_node (in a similar way as Patricia-tree interface does).
5. Update all RB-tree users accordingly.

XXX: Perhaps rename rb.h to rbtree.h, since cleaning-up..

1-3 address the PR/43488 by Jeremy Huddleston.

Passes RB-tree regression tests.
Reviewed by: matt@, christos@
 1.113  21-Jul-2010  hannken Make holding v_interlock mandatory for callers of vget().

Announced some time ago on tech-kern.
 1.112  01-Jul-2010  hannken Remove vlockmgr(). Generic vnode lock operations now use a rwlock located
in the vnode. All LK_* flags move from sys/lock.h to sys/vnode.h. Calls
to vlockmgr() in file systems get replaced with VOP_LOCK() or VOP_UNLOCK().

Welcome to 5.99.34.

Discussed on tech-kern.
 1.111  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.110  15-Mar-2009  cegger branches: 1.110.2; 1.110.4;
ansify function definitions
 1.109  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.108  02-Jan-2009  ad branches: 1.108.2;
- Don't vput() a vnode that we do not hold locked.
- Eliminate one of the few remaining uses of LK_CANRECURSE.
 1.107  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.106  22-Oct-2008  matt branches: 1.106.2; 1.106.4;
Don't need nfs_vfs_reinit anymore since we don't resize tables anymore.
Move reinit code to init case.
 1.105  22-Oct-2008  matt Change NFS to use a RB-tree for its FH->nfsnode lookups.
 1.104  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.103  24-May-2008  tron branches: 1.103.4;
Make sure that we flush the NFS directory cache in case of an NFS mount
using the translate cookie option during unmount. This fixes PR kern/38100.
Patch suggested by Michael van Elst during Hackathon 11.
 1.102  05-May-2008  ad branches: 1.102.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.101  30-Jan-2008  ad branches: 1.101.6; 1.101.8; 1.101.10;
Replace struct lock on vnodes with a simpler lock object built on
krwlock_t. This is a step towards removing lockmgr and simplifying
vnode locking. Discussed on tech-kern.
 1.100  26-Jan-2008  ad - Make nfsnode hash MPSAFE.
- Replace use of lockmgr().
 1.99  17-Jan-2008  ad Correct test of v_usecount.
 1.98  02-Jan-2008  yamt use kmem_alloc instead of malloc.
 1.97  02-Jan-2008  ad Merge vmlocking2 to head.
 1.96  26-Nov-2007  pooka branches: 1.96.2; 1.96.6;
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.95  06-Aug-2007  yamt branches: 1.95.2; 1.95.8; 1.95.10;
nfs_inactive: turn a panic into a printf for now, as it isn't critical.
PR/36572 from Martin Husemann.
 1.94  12-Jun-2007  yamt branches: 1.94.2; 1.94.6;
nfs_inactive: don't clear NTRUNCDELAYED erroneously.
(fix cache consistency problems like NUL bytes near EOF.)
 1.93  12-Mar-2007  ad branches: 1.93.2;
Pass an ipl argument to pool_init/POOL_INIT to be used when initializing
the pool's lock.
 1.92  21-Feb-2007  thorpej branches: 1.92.4;
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.91  20-Feb-2007  ad Call genfs_node_destroy() where appropriate.
 1.90  15-Feb-2007  yamt branches: 1.90.2;
use mutex and rwlock rather than lockmgr.
 1.89  28-Dec-2006  yamt remove several nqnfs definitions.
 1.88  27-Dec-2006  yamt remove nqnfs.
 1.87  09-Nov-2006  yamt remove some __unused in function parameters.
 1.86  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.85  23-Jul-2006  ad branches: 1.85.4; 1.85.6;
Use the LWP cached credentials where sane.
 1.84  14-May-2006  elad integrate kauth.
 1.83  30-Mar-2006  yamt some cleanups after the introduction of GOP_SIZE_MEM flag.
- remove GOP_SIZE_READ/GOP_SIZE_WRITE flags.
they have not been used since the change.
- ufs_balloc_range: remove code which has been no-op since the change.
thanks Konrad Schroder for explaining the original intention of the code.
- ffs_gop_size: don't extend past eof, in the case of GOP_SIZE_MEM.
otherwise genfs_getpages end up to allocate pages past eof unnecessarily.
 1.82  02-Jan-2006  yamt branches: 1.82.2; 1.82.4; 1.82.6; 1.82.8; 1.82.10;
nfs_inactive:
- use LK_CANRECURSE instead of LK_RECURSEFAIL.
PR/32435 from Valeriy E. Ushakov.
- panic explicitly if the parent directory has been revoked.
add an XXX comment.
 1.81  11-Dec-2005  christos branches: 1.81.2;
merge ktrace-lwp.
 1.80  28-Jun-2005  yamt branches: 1.80.2;
- constify genfs_ops.
- use member designators.
 1.79  26-Feb-2005  perry branches: 1.79.2;
nuke trailing whitespace
 1.78  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.77  25-Apr-2004  simonb branches: 1.77.4; 1.77.6;
Initialise (most) pools from a link set instead of explicit calls
to pool_init. Untouched pools are ones that either in arch-specific
code, or aren't initialiased during initial system startup.

Convert struct session, ucred and lockf to pools.
 1.76  20-Apr-2004  yamt nfs_inactive: inactive the vp before doing sillyrename works.
vp can be reclaimed soon after it's unlocked.
 1.75  05-Apr-2004  yamt nfs_readdirplusrpc: fix a deadlock problem.
don't wait for vnode lock to load attributes.
otherwise, because READDIRPLUS returns DOTDOT entry as well,
we violate locking order.
 1.74  05-Apr-2004  yamt don't issue VOP_GETATTR blindly in nfs_nget().
in many cases, GETATTR RPCs here is redundant because the caller has
postop_attr. instead, make sure the resulted vnode have a valid
attribute in nfs_lookup().
 1.73  12-Mar-2004  yamt branches: 1.73.2;
shrink sizeof struct nfsnode by putting exclusive members into union.
 1.72  23-Jan-2004  wrstuden Adjust sillyrename cleanup code to deal with the parent vnode
already being locked by our thread. VOP_INACTIVATE() makes no
statement as to the lock state of the parent, yet this code assumed
we had it unlocked.

With this change, we let vn_lock() fail with EDEADLK if we already
have the parent locked. We then handle the rename cleanup, and on
the way out just vrele() the parent vnode, not vput() it.

Fixes a case seen by Steve Woodford at Wasabisystems dot com where
we'd panic while running a pkgsrc configure test that verified
fork() functionality. I expect the problem is a result of the recent
exit() changes and the performance of the machines he tested on.

Specifically we would crash during an nfs_remove(). As best I can
tell, when nfs_remove() tested to see if we should rename or we
should remove, v_usecount was > 1 and vattr.va_nlink was 1. Thus
we did the sillyrename in nfs_remove(). However by the time we got
down to the vput(vp), v_usecount had dropped to one and thus vput()
triggered the VOP_INACTIVATE() code path. nfs_inactive() tries to
lock the parent to undo the sillyrename, and deadlocks as we still
have it locked.
 1.71  07-Dec-2003  fvdl Unix semantics dictate that access checks for files are done when it
is opened. An open file can always be read from and/or written to,
depending on how it was opened.

Therefore, the read/write/commit RPCs should never return EACCESS,
as they are only performed on files that have been successfully opened
already.

This change improves the current situation and works in most cases.
It simply always uses the most recently known owner/group of the file,
iff the authentication mechanism is AUTH_UNIX (in other cases, the
creds for a succesful open are used, but note that no other cases
are currently implemented).

A retry mechanism can be used to catch a few more cases, but this is
a good improvement for now.
 1.70  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.69  30-Jul-2003  yamt vrecycle removed nfs vnodes.
not perfect, but enough for most cases.
 1.68  29-Jun-2003  fvdl branches: 1.68.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.67  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.66  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.65  22-May-2003  yamt avoid double free with xlatecookie.
 1.64  21-May-2003  yamt remove local definitions of TRUE and FALSE.
 1.63  07-May-2003  yamt use hashdone to free hashinit'ed memory.
 1.62  02-Apr-2003  yamt use queue manipulation macros.
 1.61  17-Feb-2003  perseant Add code to UBCify LFS. This is still behind "#ifdef LFS_UBC" for now
(there are still some details to work out) but expect that to go
away soon. To support these basic changes (creation of lfs_putpages,
lfs_gop_write, mods to lfs_balloc) several other changes were made, to
wit:

* Create a writer daemon kernel thread whose purpose is to handle page
writes for the pagedaemon, but which also takes over some of the
functions of lfs_check(). This thread is started the first time an
LFS is mounted.

* Add a "flags" parameter to GOP_SIZE. Current values are
GOP_SIZE_READ, meaning that the call should return the size of the
in-core version of the file, and GOP_SIZE_WRITE, meaning that it
should return the on-disk size. One of GOP_SIZE_READ or
GOP_SIZE_WRITE must be specified.

* Instead of using malloc(...M_WAITOK) for everything, reserve enough
resources to get by and use malloc(...M_NOWAIT), using the reserves if
necessary. Use the pool subsystem for structures small enough that
this is feasible. This also obsoletes LFS_THROTTLE.

And a few that are not strictly necessary:

* Moves the LFS inode extensions off onto a separately allocated
structure; getting closer to LFS as an LKM. "Welcome to 1.6O."

* Unified GOP_ALLOC between FFS and LFS.

* Update LFS copyright headers to correct values.

* Actually cast to unsigned in lfs_shellsort, like the comment says.

* Keep track of which segments were empty before the previous
checkpoint; any segments that pass two checkpoints both dirty and
empty can be summarily cleaned. Do this. Right now lfs_segclean
still works, but this should be turned into an effectless
compatibility syscall.
 1.60  15-Feb-2003  drochner Don't remove the nfsnode from the hash chain in nfs_inactive.
It will never get back... it will not be found in nfs_nget, a new
nfsnode+vnode is allocated instead, which causes a node leak, and
also makes the mountpointness of the vnode to be forgotten, breaking
filesystem crossing lookups through this vnode.
 1.59  12-Feb-2003  fvdl Move purging the dircache and removing a vnode from the nqnfs timer queue
into nfs_inactive, this is a better place for it.

This doesn't actually solve the actual problem, which appears to be a race
condition with unmounting and vnode recycling somewhere, but it fixes
it in the sense that nfs_reclaim will not reference a bad v_mount anymore.
 1.58  10-Feb-2003  christos move the MALLOC decl for DIROFFS to nfs_subs.c
 1.57  01-Feb-2003  thorpej Add extensible malloc types, adapted from FreeBSD. This turns
malloc types into a structure, a pointer to which is passed around,
instead of an int constant. Allow the limit to be adjusted when the
malloc type is defined, or with a function call, as suggested by
Jonathan Stone.
 1.56  01-Dec-2002  matt Make sure these all agree on the same definitons of various variables.
 1.55  01-Oct-2002  christos back out previous. the problem is not the v_mount is null, but it appears
corrupted.
 1.54  30-Sep-2002  christos deal with v_mount == NULL in nfs_reclaim(). We should not be touching this
anyway, but nq-nfs wants us to.
 1.53  16-Mar-2002  chs branches: 1.53.6;
make sure that if NMODIFIED is clear, all pages attached to the vnode are
clean and without writable mappings. if we try to flush dirty pages past
EOF to the server when NMODIFIED is clear, we'll update the attrcache before
doing the write, which will try to free the pages past EOF and deadlock.
to deal with this, we write-protect pages before we send them to the server,
and restrict ourselves to creating read-only mappings if NMODIFIED isn't set.
score another one for enami.
 1.52  08-Mar-2002  thorpej Pool deals fairly well with physical memory shortage, but it doesn't
deal with shortages of the VM maps where the backing pages are mapped
(usually kmem_map). Try to deal with this:

* Group all information about the backend allocator for a pool in a
separate structure. The pool references this structure, rather than
the individual fields.
* Change the pool_init() API accordingly, and adjust all callers.
* Link all pools using the same backend allocator on a list.
* The backend allocator is responsible for waiting for physical memory
to become available, but will still fail if it cannot callocate KVA
space for the pages. If this happens, carefully drain all pools using
the same backend allocator, so that some KVA space can be freed.
* Change pool_reclaim() to indicate if it actually succeeded in freeing
some pages, and use that information to make draining easier and more
efficient.
* Get rid of PR_URGENT. There was only one use of it, and it could be
dealt with by the caller.

From art@openbsd.org.
 1.51  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.50  21-Jan-2002  fvdl VOP_UNLOCK + vgone --> vput, since the vnode will already have
a reference.
 1.49  18-Jan-2002  fvdl Unlock vnode before calling vgone() in case of getattr failure during
nfs_nget. Fixes problem reported by Chuck Cranor.
 1.48  06-Dec-2001  lukem Replace nfs_hash() (with its extremely bad hash) with a macro to call
hash32_buf() to obtain a 32 bit hash. On some tests I ran I obtained
a 30x improvement in hash distribution and a 6x reduction in time spent
in nfs_nget().
 1.47  10-Nov-2001  lukem add RCSIDs
 1.46  15-Sep-2001  chs branches: 1.46.2;
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.45  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.44  03-May-2001  fvdl branches: 1.44.2; 1.44.4;
Drop vnode lock before removing the sillyrename file, to avoid a
lock-o-death.
 1.43  20-Apr-2001  fvdl On VOP_GETATTR failure in nfs_nget, call vgone() to get rid
of the vnode that was just created. Suggested by Enami.
 1.42  20-Apr-2001  fvdl Unlock the hash lock before returning an error in nfs_nget.
From IWAMOTO Toshihiro.
 1.41  07-Feb-2001  tsutsui branches: 1.41.2;
Fix nested extern declaration of prtactive.
 1.40  06-Feb-2001  fvdl In nfs_inactive there's no need anymore for an extra refcount around
nfs_vinvalbuf, since it has a real lock on the vnode now, so getnewvnode
will not hijack it.
 1.39  06-Feb-2001  fvdl Do actual vnode locking for NFS.
 1.38  27-Nov-2000  chs Initial integration of the Unified Buffer Cache project.
 1.37  08-Nov-2000  ad Update for hashinit() change.
 1.36  19-Sep-2000  fvdl Initialize the lock needed to serialize commits for one NFS node.
 1.35  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.34  03-Aug-2000  thorpej MALLOC()/FREE() are not to be used for variable size allocations.
 1.33  30-Mar-2000  augustss branches: 1.33.4;
Remove register declarations.
 1.32  30-Mar-2000  simonb Delete redundant decl of nfsv2_vnodeop_p, it's in <nfs/nfsnode.h>.
 1.31  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.30  29-Nov-1999  fvdl Insert an extra VOP_ACCESS check in nfs_lookup, to avoid cached access
mishaps for lookup and getattr. Closes PR 8884.

While at it, cache access RPCs.
 1.29  08-Jul-1999  wrstuden branches: 1.29.2; 1.29.8;
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.28  01-Sep-1998  thorpej branches: 1.28.2; 1.28.6; 1.28.8;
Use the pool allocator and the "nointr" pool page allocator for NFS nodes
and vattr structures.
 1.27  09-Aug-1998  perry bzero->memset, bcopy->memcpy, bcmp->memcmp
 1.26  01-Mar-1998  fvdl Merge with Lite2 + local changes
 1.25  07-Feb-1998  chs add flags arg to hashinit(), to pass to malloc().
 1.24  19-Oct-1997  fvdl * 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.23  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.22  07-Jul-1997  fvdl branches: 1.22.2;
Do locking around nfsnode hashing (perhaps even right this time!)
 1.21  07-Jul-1997  fvdl Revert until I have time to fix it today (lock applied wrongly).
 1.20  06-Jul-1997  fvdl Put lock around nfs node hashing to avoid race conditions, as MALLOC
or getnewvnode may block.
 1.19  22-Feb-1997  fvdl Fixes from BSDI (thanks go to Keith Bostic). Original RCS messages:

date: 1996/09/06 03:00:31; author: donn; state: Exp; lines: +1 -2
Because NFS doesn't implement vnode locking, nfs_inactive() doesn't really
have the vnode locked and hence it can't reliably access the vnode after
it performs a blocking operation. We remove one blocking call and push
the no-op VOP_UNLOCK higher so that we don't access the vnode after we
delete the sillyrename file. This should prevent crashes we've seen in
which the vnode turned into a UFS vnode and caused a panic in ufs_unlock()
when we tried to 'unlock' it.

date: 1996/09/25 19:15:21; author: cp; state: Exp; lines: +4 -0
Kirk's change to not corrupt files after a delete.

date: 1996/11/08 19:53:45; author: donn; state: Exp; lines: +16 -4
Krik's change to solve the paradox that vclean() calls nfs_inactive()
with VXLOCK set on the vnode, and nfs_inactive() was calling vget()
to get a reference on the vnode, which in turn hung on VXLOCK.
Nfs_inactive() now checks v_usecount to make sure that the vnode
is not coming from vclean() before it does a vget().
 1.18  12-Feb-1997  fvdl Don't set sillyrename field to 0 for directories, as it's in a union with
the head of the cookie list. Fixes PR 3215, fix supplied by
Hiroshi Tezuka <tezuka@trc.rwcp.or.jp>. Should also fix M_NFSDIROFF
memory leak.
 1.17  01-Sep-1996  mycroft branches: 1.17.4;
Add a set of generic file system operations that most file systems use.
Also, fix some time stamp bogosities.
 1.16  18-Feb-1996  fvdl Bring in a merge of Rick Macklem's NFSv3 code from Lite2
 1.15  09-Feb-1996  christos nfs prototype changes
 1.14  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.13  18-Aug-1994  mycroft More LIST/CIRCLEQ migration.
 1.12  29-Jun-1994  cgd branches: 1.12.2;
New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD'
 1.11  13-Jun-1994  mycroft Undo last change.
 1.10  13-Jun-1994  gwr Fix unresolved: prtactive
 1.9  08-Jun-1994  mycroft Update to 4.4-Lite fs code, with local changes.
 1.8  25-Apr-1994  cgd some prototype cleanup, eliminate/replace bogus types (e.g. quad and
u_quad) -> use better types (e.g. quad_t & u_quad_t in inodes),
some cleanup.
 1.7  21-Apr-1994  cgd blow away all vestiges of nfsnode locking.
(1) it's unnecessary
(2) it causes machines to hang (yup!)
(3) it'd be gone in a few days anyway (it'd been yanked out
of 4.4-Lite by macklem long ago)
It was only there because macklem couldn't originally decide if things
should be locked, or not...
 1.6  01-Mar-1994  pk Enable nfs_lock(); useful when IO_APPEND'ing.
 1.5  15-Feb-1994  pk Update {a,m}time vnode attributes on special files a la ufs_vnode.c,
but make it a non-urgent operation, to leave us some performance.
 1.4  18-Dec-1993  mycroft Canonicalize all #includes.
 1.3  28-Jul-1993  cgd branches: 1.3.2;
incorporate changes from 0-9-base to 0-9-ALPHA
 1.2  20-May-1993  cgd branches: 1.2.2;
more rcs id adding and header cleanup. i like vi macros!
 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.2.2.1  24-Jul-1993  cgd clean the nfsnode's lockf field after getting a new vnode;
this probably explains some strange NFS-related lockf crashes on pain,
and UFS does it, so it can't hurt.
 1.3.2.1  14-Nov-1993  mycroft Canonicalize all #includes.
 1.12.2.1  19-Aug-1994  mycroft update from trunk
 1.17.4.1  12-Mar-1997  is Merge in changes from Trunk
 1.22.2.1  14-Oct-1997  thorpej Update marc-pcmcia branch from trunk.
 1.28.8.2  02-Aug-1999  thorpej Update from trunk.
 1.28.8.1  07-Jun-1999  chs merge everything from chs-ubc branch.
 1.28.6.1  05-Jan-2000  he Pull up revision 1.30 (requested by fvdl):
Insert an extra VOP_ACCESS check in nfs_lookup, preventing cached
access mishaps for lookup and getattr. Fixes PR#8884.
 1.28.2.1  30-May-1999  chs there's a new rule that all vnodes must call uvm_vnp_setsize()
before anyone can possibly access them, so do this in nfs_nget().
 1.29.8.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.29.2.6  23-Apr-2001  bouyer Sync with HEAD.
 1.29.2.5  21-Apr-2001  bouyer Sync with HEAD
 1.29.2.4  11-Feb-2001  bouyer Sync with HEAD.
 1.29.2.3  08-Dec-2000  bouyer Sync with HEAD.
 1.29.2.2  22-Nov-2000  bouyer Sync with HEAD.
 1.29.2.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
 1.33.4.1  14-Dec-2000  he Pull up revision 1.36 (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.41.2.13  11-Dec-2002  thorpej Sync with HEAD.
 1.41.2.12  18-Oct-2002  nathanw Catch up to -current.
 1.41.2.11  15-Jul-2002  nathanw Whitespace.
 1.41.2.10  12-Jul-2002  nathanw No longer need to pull in lwp.h; proc.h pulls it in for us.
 1.41.2.9  24-Jun-2002  nathanw Curproc->curlwp renaming.

Change uses of "curproc->l_proc" back to "curproc", which is more like the
original use. Bare uses of "curproc" are now "curlwp".

"curproc" is now #defined in proc.h as ((curlwp) ? (curlwp)->l_proc) : NULL)
so that it is always safe to reference curproc (*de*referencing curproc
is another story, but that's always been true).
 1.41.2.8  01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.41.2.7  28-Feb-2002  nathanw Catch up to -current.
 1.41.2.6  08-Jan-2002  nathanw Catch up to -current.
 1.41.2.5  14-Nov-2001  nathanw Catch up to -current.
 1.41.2.4  25-Sep-2001  nathanw Fix typo in previous commit.
 1.41.2.3  21-Sep-2001  nathanw Catch up to -current.
 1.41.2.2  21-Jun-2001  nathanw Catch up to -current.
 1.41.2.1  05-Mar-2001  nathanw Initial commit of scheduler activations and lightweight process support.
 1.44.4.1  01-Oct-2001  fvdl Catch up with -current.
 1.44.2.5  10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.44.2.4  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.44.2.3  16-Mar-2002  jdolecek Catch up with -current.
 1.44.2.2  11-Feb-2002  jdolecek Sync w/ -current.
 1.44.2.1  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.46.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.53.6.1  28-Jul-2003  he Apply patch (requested by christos in ticket #1171):
Apply a stopgap fix preventing a panic for non-NQNFS when
nfs_reclaim is called on a vnode of an unmounted NFS file
system.
 1.68.2.8  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.68.2.7  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.68.2.6  04-Feb-2005  skrll Sync with HEAD.
 1.68.2.5  21-Sep-2004  skrll Fix the sync with head I botched.
 1.68.2.4  18-Sep-2004  skrll Sync with HEAD.
 1.68.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.68.2.2  03-Aug-2004  skrll Sync with HEAD
 1.68.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.73.2.2  10-Jul-2004  tron Pull up revision 1.75 (requested by tls in ticket #634):
nfs_readdirplusrpc: fix a deadlock problem.
don't wait for vnode lock to load attributes.
otherwise, because READDIRPLUS returns DOTDOT entry as well,
we violate locking order.
 1.73.2.1  10-Jul-2004  tron Pull up revision 1.74 (requested by tls in ticket #634):
don't issue VOP_GETATTR blindly in nfs_nget().
in many cases, GETATTR RPCs here is redundant because the caller has
postop_attr. instead, make sure the resulted vnode have a valid
attribute in nfs_lookup().
 1.77.6.2  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.77.6.1  12-Feb-2005  yamt sync with head.
 1.77.4.1  29-Apr-2005  kent sync with -current
 1.79.2.1  24-Aug-2005  riz Pull up following revision(s) (requested by yamt in ticket #688):
sys/miscfs/genfs/genfs_vnops.c: revision 1.98 via patch
sys/ufs/ffs/ffs_vfsops.c: revision 1.165
sys/ufs/lfs/lfs_extern.h: revision 1.69
sys/fs/filecorefs/filecore_vfsops.c: revision 1.20
sys/nfs/nfs_node.c: revision 1.80
sys/fs/smbfs/smbfs_node.c: revision 1.24
sys/fs/cd9660/cd9660_vfsops.c: revision 1.24
sys/fs/msdosfs/msdosfs_denode.c: revision 1.8
sys/miscfs/genfs/genfs_node.h: revision 1.6
sys/ufs/lfs/lfs_vfsops.c: revision 1.183
sys/ufs/ext2fs/ext2fs_vfsops.c: revision 1.86
sys/fs/adosfs/advfsops.c: revision 1.23
sys/fs/ntfs/ntfs_vfsops.c: revision 1.31
- constify genfs_ops.
- use member designators.

sys/miscfs/genfs/genfs_vnops.c: revision 1.99 via patch
genfs_getpages: don't forget to put the vnode onto the syncer's work que
ue
even in the case of PGO_LOCKED.

sys/uvm/uvm_bio.c: revision 1.40
sys/uvm/uvm_pager.h: revision 1.29
sys/miscfs/genfs/genfs_vnops.c: revision 1.100 via patch
sys/ufs/ufs/ufs_inode.c: revision 1.50
- introduce PGO_NOBLOCKALLOC and use it for ubc mapping
to prevent unnecessary block allocations in the case that
page size > block size.
- ufs_balloc_range: use VM_PROT_WRITE+PGO_NOBLOCKALLOC rather than
VM_PROT_READ.

sys/uvm/uvm_fault.c: revision 1.96
sys/miscfs/genfs/genfs_vnops.c: revision 1.101 via patch
sys/uvm/uvm_object.h: revision 1.19
sys/miscfs/genfs/genfs_node.h: revision 1.7
ensure that vnodes with dirty pages are always on syncer's queue.
- genfs_putpages: wait for i/o completion of PG_RELEASED/PG_PAGEOUT pages by
setting "wasclean" false when encountering them.
suggested by Stephan Uphoff in PR/24596 (1).
- genfs_putpages: write protect pages when cleaning out, if
we're going to take the vnode off the syncer's queue.
uvm_fault: don't write-map pages unless its vnode is already on
the syncer's queue.
fix PR/24596 (3) but in the different way from the suggested fix.
(to keep our current behaviour, ie. not to require explicit msync.
discussed on tech-kern@.)
- genfs_putpages: don't mistakenly take a vnode off the queue
by introducing a generation number in genfs_node.
genfs_getpages: increment the generation number.
suggested by Stephan Uphoff in PR/24596 (2).
- add some assertions.

sys/miscfs/genfs/genfs_vnops.c: revision 1.102 via patch
genfs_putpages: don't bother to clean the vnode unless VONWORKLST.

sys/ufs/ffs/ffs_vnops.c: revision 1.71
ffs_full_fsync: because VBLK/VCHR can be mmap'ed,
do VOP_PUTPAGES for them as well.

sys/uvm/uvm_fault.c: revision 1.97
uvm_fault: check a correct object in the case of layered filesystems.
fix PR/30811 from Jukka Salmi.

sys/uvm/uvm_object.h: revision 1.20
sys/ufs/ffs/ffs_vfsops.c: revision 1.167
sys/uvm/uvm_bio.c: revision 1.41
sys/ufs/ufs/ufs_vnops.c: revision 1.129
sys/uvm/uvm_mmap.c: revision 1.92
sys/uvm/uvm_fault.c: revision 1.98
sys/kern/vfs_subr.c: revision 1.252
sys/fs/msdosfs/denode.h: revision 1.5
sys/miscfs/genfs/genfs_vnops.c: revision 1.103 via patch
sys/fs/msdosfs/msdosfs_denode.c: revision 1.9
sys/sys/vnode.h: revision 1.141
sys/ufs/ufs/ufs_inode.c: revision 1.51
sys/ufs/ufs/ufs_extern.h: revision 1.45 via patch
sys/miscfs/genfs/genfs_node.h: revision 1.8
sys/ufs/lfs/lfs_vfsops.c: revision 1.184
sys/uvm/uvm_pager.h: revision 1.30
sys/ufs/ext2fs/ext2fs_vfsops.c: revision 1.87
update file timestamps for nfsd loaned-read and mmap.
PR/25279. discussed on tech-kern@.

sys/miscfs/genfs/genfs_vnops.c: revision 1.104 via patch
don't write-protect wired pages. pointed by Chuck Silvers.
for now, leave a vnode on the syncer's queue, as suggested by him.

sys/ufs/ffs/ffs_vnops.c: revision 1.72
revert VCHR part of ffs_vnops.c 1.71.
as VCHR uses the device pager, no point to call VOP_PUTPAGES here.
pointed by Chuck Silvers.
 1.80.2.7  04-Feb-2008  yamt sync with head.
 1.80.2.6  21-Jan-2008  yamt sync with head
 1.80.2.5  07-Dec-2007  yamt sync with head
 1.80.2.4  03-Sep-2007  yamt sync with head.
 1.80.2.3  26-Feb-2007  yamt sync with head.
 1.80.2.2  30-Dec-2006  yamt sync with head.
 1.80.2.1  21-Jun-2006  yamt sync with head.
 1.81.2.1  15-Jan-2006  yamt sync with head.
 1.82.10.2  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.82.10.1  31-Mar-2006  tron Merge 2006-03-31 NetBSD-current into the "peter-altq" branch.
 1.82.8.3  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.82.8.2  19-Apr-2006  elad sync with head.
 1.82.8.1  08-Mar-2006  elad Adapt to kernel authorization KPI.

This could use some testing...
 1.82.6.3  11-Aug-2006  yamt sync with head
 1.82.6.2  24-May-2006  yamt sync with head.
 1.82.6.1  01-Apr-2006  yamt sync with head.
 1.82.4.2  01-Jun-2006  kardel Sync with head.
 1.82.4.1  22-Apr-2006  simonb Sync with head.
 1.82.2.1  09-Sep-2006  rpaulo sync with head
 1.85.6.2  10-Dec-2006  yamt sync with head.
 1.85.6.1  22-Oct-2006  yamt sync with head
 1.85.4.2  12-Jan-2007  ad Sync with head.
 1.85.4.1  18-Nov-2006  ad Sync with head.
 1.90.2.2  24-Mar-2007  yamt sync with head.
 1.90.2.1  28-Feb-2007  yamt sync with head. (somehow missed in the previous)
 1.92.4.4  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.92.4.3  20-Aug-2007  ad Sync with HEAD.
 1.92.4.2  15-Jul-2007  ad Sync with head.
 1.92.4.1  13-Mar-2007  ad Sync with head.
 1.93.2.1  11-Jul-2007  mjf Sync with head.
 1.94.6.2  27-Nov-2007  joerg Sync with HEAD. amd64 Xen support needs testing.
 1.94.6.1  09-Aug-2007  jmcneill Sync with HEAD.
 1.94.2.1  15-Aug-2007  skrll Sync with HEAD.
 1.95.10.2  06-Aug-2007  yamt nfs_inactive: turn a panic into a printf for now, as it isn't critical.
PR/36572 from Martin Husemann.
 1.95.10.1  06-Aug-2007  yamt file nfs_node.c was added on branch matt-mips64 on 2007-08-06 11:55:09 +0000
 1.95.8.2  18-Feb-2008  mjf Sync with HEAD.
 1.95.8.1  08-Dec-2007  mjf Sync with HEAD.
 1.95.2.2  23-Mar-2008  matt sync with HEAD
 1.95.2.1  09-Jan-2008  matt sync with HEAD
 1.96.6.2  19-Jan-2008  bouyer Sync with HEAD
 1.96.6.1  02-Jan-2008  bouyer Sync with HEAD
 1.96.2.1  04-Dec-2007  ad Pull the vmlocking changes into a new branch.
 1.101.10.6  10-Oct-2010  yamt some locking changes
 1.101.10.5  09-Oct-2010  yamt sync with head
 1.101.10.4  11-Aug-2010  yamt sync with head.
 1.101.10.3  04-May-2009  yamt sync with head.
 1.101.10.2  16-May-2008  yamt sync with head.
 1.101.10.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.101.8.2  04-Jun-2008  yamt sync with head
 1.101.8.1  18-May-2008  yamt sync with head.
 1.101.6.3  17-Jan-2009  mjf Sync with HEAD.
 1.101.6.2  05-Oct-2008  mjf Sync with HEAD.
 1.101.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.102.2.2  10-Oct-2008  skrll Sync with HEAD.
 1.102.2.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.103.4.2  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.103.4.1  19-Oct-2008  haad Sync with HEAD.
 1.106.4.1  02-Feb-2009  snj Pull up following revision(s) (requested by ad in ticket #344):
sys/nfs/nfs_node.c: revision 1.108
sys/nfs/nfsnode.h: revision 1.69
- Don't vput() a vnode that we do not hold locked.
- Eliminate one of the few remaining uses of LK_CANRECURSE.
 1.106.2.2  28-Apr-2009  skrll Sync with HEAD.
 1.106.2.1  19-Jan-2009  skrll Sync with HEAD.
 1.108.2.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.110.4.6  31-May-2011  rmind sync with head
 1.110.4.5  22-May-2011  rmind nfs_gop_write: acquire the lock for pmap_page_protect() operation.
 1.110.4.4  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.110.4.3  05-Mar-2011  rmind sync with head
 1.110.4.2  03-Jul-2010  rmind sync with head
 1.110.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.110.2.2  22-Oct-2010  uebayasi Sync with HEAD (-D20101022).
 1.110.2.1  17-Aug-2010  uebayasi Sync with HEAD.
 1.114.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.115.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.116.16.1  18-May-2014  rmind sync with head
 1.116.12.2  03-Dec-2017  jdolecek update from HEAD
 1.116.12.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.116.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.117.2.1  10-Aug-2014  tls Rebase.
 1.118.8.1  26-Apr-2017  pgoyette Sync with HEAD
 1.118.4.2  28-Aug-2017  skrll Sync with HEAD
 1.118.4.1  05-Oct-2016  skrll Sync with HEAD
 1.119.2.1  21-Apr-2017  bouyer Sync with HEAD
 1.122.8.1  25-Jun-2018  pgoyette Sync with HEAD
 1.123.2.2  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.123.2.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.124.2.1  29-Feb-2020  ad Sync with head.

RSS XML Feed