Home | History | Annotate | Download | only in filecorefs
History log of /src/sys/fs/filecorefs/filecore_node.c
RevisionDateAuthorComments
 1.31  26-May-2017  riastradh 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.30  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.29  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.28  20-Aug-2016  hannken branches: 1.28.2;
Remove now obsolete operation vcache_remove().

Welcome to 7.99.36
 1.27  04-Oct-2014  hannken branches: 1.27.2; 1.27.4;
Change filecore to vcache.

Compile-tested only, was not able to get my hands on a readable fs image.
 1.26  27-Feb-2014  hannken 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.25  12-Jun-2011  rmind branches: 1.25.2; 1.25.12; 1.25.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.24  23-May-2011  rmind branches: 1.24.2;
Convert some simple_lock(9) uses to mutex(9) and malloc(9) to kmem(9).
 1.23  19-May-2011  rmind Remove cache_purge(9) calls from reclamation routines in the file systems,
as vclean(9) performs it for us since Lite2 merge.
 1.22  21-Jul-2010  hannken branches: 1.22.2;
Make holding v_interlock mandatory for callers of vget().

Announced some time ago on tech-kern.
 1.21  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.20  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.19  15-Mar-2009  cegger branches: 1.19.2; 1.19.4;
ansify function definitions
 1.18  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.17  05-May-2008  ad branches: 1.17.8; 1.17.14;
- 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.16  30-Jan-2008  ad branches: 1.16.6; 1.16.8; 1.16.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.15  17-Jan-2008  ad Fix dodgy tests of v_usecount.
 1.14  04-Jan-2008  ad Start detangling lock.h from intr.h. This is likely to cause short term
breakage, but the mess of dependencies has been regularly breaking the
build recently anyhow.
 1.13  02-Jan-2008  ad Merge vmlocking2 to head.
 1.12  26-Nov-2007  pooka branches: 1.12.2; 1.12.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.11  24-Sep-2007  rumble branches: 1.11.4;
Avoid stack allocation of large dirent structures in foo_readdir().
 1.10  30-Jun-2007  pooka branches: 1.10.6; 1.10.8; 1.10.10;
Using POOL_INIT here makes no sense, since file systems always have
an init method. So get rid of it and #ifdef _LKM and just always
init in the init method. Give malloc types the same treatment.
Makes file systems nicer to work with in linksetless environments
and fixes a few LKM discrepancies.
 1.9  13-Mar-2007  ad Pass an ipl argument to pool_init/POOL_INIT to be used when initializing
the pool's lock.
 1.8  20-Feb-2007  ad branches: 1.8.4; 1.8.6;
Call genfs_node_destroy() where appropriate.
 1.7  11-Dec-2005  christos branches: 1.7.26;
merge ktrace-lwp.
 1.6  26-Feb-2005  perry branches: 1.6.4;
nuke trailing whitespace
 1.5  20-May-2004  atatat branches: 1.5.4; 1.5.6;
Explicitly call pool_init() (and pool_destroy()) when being built as
an _LKM.

This adds pools to the list of things that lkms must do manually
because they're set up with link sets. Not that there's anything
wrong with link sets, but that we need to try harder to remember that
lkms are second class citizens. Of a sort.
 1.4  25-Apr-2004  simonb 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.3  27-Mar-2004  atatat Manually attach malloc types when being built as an lkm.
 1.2  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.1  23-Dec-2002  jdolecek branches: 1.1.2; 1.1.4;
move filecorefs code from sys/filecorefs to sys/fs/filecorefs
 1.1.4.7  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.1.4.6  27-Oct-2004  skrll Fix various comments that describe the argument structures
 1.1.4.5  21-Sep-2004  skrll Fix the sync with head I botched.
 1.1.4.4  18-Sep-2004  skrll Sync with HEAD.
 1.1.4.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.1.4.2  03-Aug-2004  skrll Sync with HEAD
 1.1.4.1  03-Jul-2003  wrstuden LWP-ify filecore fs.

Note: These changes suffer from the same cnp->cn_lwp issue noted for
ufs. They will need to get fixed at the same time as ufs. The fix is to
add struct lwp * as a parameter to some VOPs.

Also, some how or another, this code missed out on the changes to use
genfs_lease_check, and had a dangling reference to lease_check().
Given that genfs_lease_check has been around since 1998, I'm puzzled as
to what's been going on. Noticed in a compild of acorn32/GENERIC.
 1.1.2.2  29-Dec-2002  thorpej With with HEAD.
 1.1.2.1  23-Dec-2002  thorpej file filecore_node.c was added on branch nathanw_sa on 2002-12-29 19:55:51 +0000
 1.5.6.1  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.5.4.1  29-Apr-2005  kent sync with -current
 1.6.4.7  04-Feb-2008  yamt sync with head.
 1.6.4.6  21-Jan-2008  yamt sync with head
 1.6.4.5  07-Dec-2007  yamt sync with head
 1.6.4.4  27-Oct-2007  yamt sync with head.
 1.6.4.3  03-Sep-2007  yamt sync with head.
 1.6.4.2  26-Feb-2007  yamt sync with head.
 1.6.4.1  21-Jun-2006  yamt sync with head.
 1.7.26.2  24-Mar-2007  yamt sync with head.
 1.7.26.1  27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.8.6.1  11-Jul-2007  mjf Sync with head.
 1.8.4.5  09-Oct-2007  ad Sync with head.
 1.8.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.8.4.3  20-Aug-2007  ad Sync with HEAD.
 1.8.4.2  15-Jul-2007  ad Sync with head.
 1.8.4.1  13-Mar-2007  ad Sync with head.
 1.10.10.1  06-Oct-2007  yamt sync with head.
 1.10.8.3  23-Mar-2008  matt sync with HEAD
 1.10.8.2  09-Jan-2008  matt sync with HEAD
 1.10.8.1  06-Nov-2007  matt sync with HEAD
 1.10.6.2  27-Nov-2007  joerg Sync with HEAD. amd64 Xen support needs testing.
 1.10.6.1  02-Oct-2007  joerg Sync with HEAD.
 1.11.4.2  18-Feb-2008  mjf Sync with HEAD.
 1.11.4.1  08-Dec-2007  mjf Sync with HEAD.
 1.12.6.3  19-Jan-2008  bouyer Sync with HEAD
 1.12.6.2  08-Jan-2008  bouyer Sync with HEAD
 1.12.6.1  02-Jan-2008  bouyer Sync with HEAD
 1.12.2.1  04-Dec-2007  ad Pull the vmlocking changes into a new branch.
 1.16.10.3  11-Aug-2010  yamt sync with head.
 1.16.10.2  04-May-2009  yamt sync with head.
 1.16.10.1  16-May-2008  yamt sync with head.
 1.16.8.1  18-May-2008  yamt sync with head.
 1.16.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.17.14.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.17.8.1  28-Apr-2009  skrll Sync with HEAD.
 1.19.4.4  31-May-2011  rmind sync with head
 1.19.4.3  05-Mar-2011  rmind sync with head
 1.19.4.2  03-Jul-2010  rmind sync with head
 1.19.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.19.2.1  17-Aug-2010  uebayasi Sync with HEAD.
 1.22.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.24.2.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.25.16.1  18-May-2014  rmind sync with head
 1.25.12.2  03-Dec-2017  jdolecek update from HEAD
 1.25.12.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.25.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.27.4.1  26-Apr-2017  pgoyette Sync with HEAD
 1.27.2.2  28-Aug-2017  skrll Sync with HEAD
 1.27.2.1  05-Oct-2016  skrll Sync with HEAD
 1.28.2.1  21-Apr-2017  bouyer Sync with HEAD

RSS XML Feed