summaryrefslogtreecommitdiffstats
path: root/sys/nfs/nfs_node.c
Commit message (Collapse)AuthorAgeFilesLines
* Enhance reassignbuf(). When a buffer cannot be time-optimally inserteddillon2000-01-051-1/+13
| | | | | | | | | | | | | | | | | | | into vnode dirtyblkhd we append it to the list instead of prepend it to the list in order to maintain a 'forward' locality of reference, which is arguably better then 'reverse'. The original algorithm did things this way to but at a huge time cost. Enhance the append interlock for NFS writes to handle intr/soft mounts better. Fix the hysteresis for NFS async daemon I/O requests to reduce the number of unnecessary context switches. Modify handling of NFS mount options. Any given user option that is too high now defaults to the kernel maximum for that option rather then the kernel default for that option. Reviewed by: Alfred Perlstein <bright@wintelcom.net>
* Introduce NDFREE (and remove VOP_ABORTOP)eivind1999-12-151-17/+0
|
* Fix two problems: First, fix the append seek position race that candillon1999-12-141-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | occur due to np->n_size potentially changing if nfs_getcacheblk() blocks in nfs_write(). Second, under -current we must supply the proper bufsize when obtaining buffers that straddle the EOF, but due to the fact that np->n_size can change out from under us it is possible that we may specify the wrong buffer size and wind up truncating dirty data written by another process. Both problems are solved by implementing nfs_rslock(), which allows us to lock around sensitive buffer cache operations such as those that occur when appending to a file. It is believed that this race is responsible for causing dirtyoff/dirtyend and (in stable) validoff/validend to exceed the buffer size. Therefore we have now added a warning printf for the dirtyoff/end case in current. However, we have introduced a new problem which we need to fix at some point, and that is that soft or intr NFS mounts may become uninterruptable from the point of view of process A which is stuck waiting on rslock while process B is stuck doing the rpc. To unstick process A, process B would have to be interrupted first. Reviewed by: Alfred Perlstein <bright@wintelcom.net>
* Lock reporting and assertion changes.eivind1999-12-111-0/+1
| | | | | | | | | | | | | | | * lockstatus() and VOP_ISLOCKED() gets a new process argument and a new return value: LK_EXCLOTHER, when the lock is held exclusively by another process. * The ASSERT_VOP_(UN)LOCKED family is extended to use what this gives them * Extend the vnode_if.src format to allow more exact specification than locked/unlocked. This commit should not do any semantic changes unless you are using DEBUG_VFS_LOCKS. Discussed with: grog, mch, peter, phk Reviewed by: peter
* $Id$ -> $FreeBSD$peter1999-08-281-1/+1
|
* Thanks to Bruce for noticing this.... compare against the *new* nfsnode'smjacob1999-06-191-2/+2
| | | | | | | | mount point for seeing whether or not the new nfsnode is already in the hash queue. We're pretty much guaranteed that the old nfsnode is already in the hash queue. Wank! Infinite Loop! Looks like just a minor typo.... (ah the influence of fortran ... np && np2... why not nfsnode_the_first && nfsnode_the_second???)...
* If we retry this operation from the top of this routine, we need tomjacob1999-06-151-1/+5
| | | | | | make sure we've freed any allocated resources (to avoid a memory leak) and and do the right thing with respect to the nfs node hash lock we'd acquired.
* Fix a malloc racepeter1999-06-051-3/+12
| | | | Obtained from: OpenBSD (csapuntz)
* Do not need (or want) to take a reference on an NFS file thatmckusick1998-09-291-6/+12
| | | | | | | | | is being deleted due to an forcible unmount. The problem is that vgone calls vclean() which then calls calls nfs_inactive() with VXLOCK set on the vnode. 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().
* Convert a couple of large allocations to use zones rather than mallocpeter1998-05-241-14/+9
| | | | | | for better packing. This means that we can choose better values for the various hash entries without having to try and get it all to fit within an artificial power of two limit for malloc's sake.
* Add missing arg to vget().. Serves me right for committing a 2.2 patch topeter1998-05-131-2/+2
| | | | | | -current without testing it there.. :-( Submitted by: Michael Hancock <michaelh@cet.co.jp>
* Hold a reference to the vnode during the sillyrename cleanup. If we blockpeter1998-05-131-1/+9
| | | | | | | | | | | | | | | in nfs_vinvalbuf() or the nfs_removeit(), we can have the nfsnode reallocated from underneath us (eg: replaced by a ufs 'struct inode') which can cause disk corruption ('freeing free block' when di_db[5] gets trashed). This is not a cheap fix, but it'll do until the nfsnodes get reference counting and/or locking. Apparently NetBSD have a similar fix (apparently from BSDI). I wish all PR's had this much useful detail. :-) PR: 6611 Submitted by: Stephen Clawson <sclawson@marker.cs.utah.edu>
* Staticize.eivind1998-02-091-4/+4
|
* Unspammed nested include of <vm/vm_zone.h>.bde1997-12-271-1/+3
|
* Don't #include <nfs/nfs.h> in <nfs/nfs_node.h> if KERNEL is defined.bde1997-10-281-1/+2
| | | | Fixed everything that depended on the nested include.
* Last major round (Unless Bruce thinks of somthing :-) of malloc changes.phk1997-10-121-2/+2
| | | | | | | | Distribute all but the most fundamental malloc types. This time I also remembered the trick to making things static: Put "static" in front of them. A couple of finer points by: bde
* Distribute and statizice a lot of the malloc M_* types.phk1997-10-111-1/+3
| | | | Substantial input from: bde
* Change the M_NAMEI allocations to use the zone allocator. This changedyson1997-09-211-2/+2
| | | | | | | | plus the previous changes to use the zone allocator decrease the useage of malloc by half. The Zone allocator will be upgradeable to be able to use per CPU-pools, and has more intelligent usage of SPLs. Additionally, it has reasonable stats gathering capabilities, while making most calls inline.
* Removed unused #includes.bde1997-08-021-4/+1
|
* Fix memory leak caused by the fact that the directory offset cookies anddfr1997-05-091-4/+4
| | | | the sillyrename information are stored in the same place.
* Back out part 1 of the MCFH that changed $Id$ to $FreeBSD$. We are notpeter1997-02-221-1/+1
| | | | ready for it yet.
* This is the kernel Lite/2 commit. There are some requisite userlanddyson1997-02-101-4/+10
| | | | | | | | | | | | | | | changes, so don't expect to be able to run the kernel as-is (very well) without the appropriate Lite/2 userland changes. The system boots and can mount UFS filesystems. Untested: ext2fs, msdosfs, NFS Known problems: Incorrect Berkeley ID strings in some files. Mount_std mounts will not work until the getfsent library routine is changed. Reviewed by: various people Submitted by: Jeffery Hsu <hsu@freebsd.org>
* Make the long-awaited change from $Id$ to $FreeBSD$jkh1997-01-141-1/+1
| | | | | | | | This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
* Moved the fsnode MALLOC to before the call to getnewvnode() so that thedg1996-06-121-2/+9
| | | | | | | | process won't possibly block before filling in the fsnode pointer (v_data) which might be dereferenced during a sync since the vnode is put on the mnt_vnodelist by getnewvnode. Pointed out by Matt Day <mday@artisoft.com>
* Second batch of cleanup changes.phk1995-10-291-2/+1
| | | | | This time mostly making a lot of things static and some unused variables here and there.
* Correct my cut-'n-paste job from ffs_vfsops.c and fix up the formattingdg1995-07-221-14/+6
| | | | | | to be similar. Submitted by: Bruce Evans
* Implemented an nfs_node hash list lock, similar to what was implementeddg1995-07-211-1/+31
| | | | | in ffs_vget(), and for the same reason: to prevent a race condition that results in duplicate vnodes/NFSnodes being allocated.
* Changes to support version 3 of the NFS protocol.dfr1995-06-271-35/+95
| | | | | | | | | | | | | | | | | | The version 2 support has been tested (client+server) against FreeBSD-2.0, IRIX 5.3 and FreeBSD-current (using a loopback mount). The version 2 support is stable AFAIK. The version 3 support has been tested with a loopback mount and minimally against an IRIX 5.3 server. It needs more testing and may have problems. I have patched amd to support the new variable length filehandles although it will still only use version 2 of the protocol. Before booting a kernel with these changes, nfs clients will need to at least build and install /usr/sbin/mount_nfs. Servers will need to build and install /usr/sbin/mountd. NFS diskless support is untested. Obtained from: Rick Macklem <rick@snowhite.cis.uoguelph.ca>
* Add and move declarations to fix all of the warnings from `gcc -Wimplicit'bde1995-03-161-4/+1
| | | | | | (except in netccitt, netiso and netns) and most of the warnings from `gcc -Wnested-externs'. Fix all the bugs found. There were no serious ones.
* This is a bunch of changes from NetBSD. There are a couple of bug-fixes.phk1994-10-171-33/+17
| | | | | | | But mostly it is changes to use the list-maintenance macros instead of doing the pointer-gymnastics by hand. Obtained from: NetBSD
* Use tsleep() rather than sleep so that 'ps' is more informative aboutdg1994-10-061-2/+2
| | | | the wait.
* Prototyping and general gcc-shutting up. Gcc has one warning now which looksphk1994-10-021-4/+7
| | | | bad, I will get to it eventually, unless somebody beats me to it.
* Initialize lockf pointer. I missed this when I made NFS use the genericdg1994-08-101-1/+2
| | | | advlock mechanism, and not doing so results in random system crashes.
* Added $Id$dg1994-08-021-0/+1
|
* The big 4.4BSD Lite to FreeBSD 2.0.0 (Development) patch.rgrimes1994-05-251-0/+7
| | | | | Reviewed by: Rodney W. Grimes Submitted by: John Dyson and David Greenman
* BSD 4.4 Lite Kernel Sourcesrgrimes1994-05-241-0/+294
OpenPOWER on IntegriCloud