summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver
Commit message (Collapse)AuthorAgeFilesLines
* Correct several instances where calls to vfs_getvfs() resulting inrwatson2004-10-181-13/+61
| | | | | | | | | | | failure in the NFS server would result in a leaked instance of the NFS server subsystem lock. Liberally sprinkle assertions in all target labels for error unwinding to assert the desired locking state. RELENG_5_3 candidate. MFC after: 3 days Reported by: Wilkinson, Alex <alex dot wilkinson at dsto dot defence dot gov dot au>
* Convert a mtx_lock(&Giant) to a mtx_unlock(&Giant) in nfsrv_link() torwatson2004-08-251-1/+1
| | | | | | | | | prevent leakage of Giant. With INVARIANTS, this results in an assertion failure following execution of the RPC. Without INVARIANTS, it could result in problems if the NFS server is killed causing nfsd to return to user space holding Giant. Feet provided by: brueffer
* If debug.mpsafenet is non-zero, run the NFS server callout withoutrwatson2004-07-241-1/+4
| | | | Giant.
* Remove spl() use from nfsrv_timer.rwatson2004-07-241-3/+0
|
* Do a pass over all modules in the kernel and make them return EOPNOTSUPPphk2004-07-151-5/+8
| | | | | | | | for unknown events. A number of modules return EINVAL in this instance, and I have left those alone for now and instead taught MOD_QUIESCE to accept this as "didn't do anything".
* Do not call sorecieve() in the context of a socket callback as it causesalfred2004-07-131-3/+5
| | | | | lock order reversals so->inpcb since we're called with the socket lock held.
* Change M_WAITOK argument to sodupsockaddr() to M_NOWAIT. When the callrwatson2004-07-031-1/+5
| | | | | | | | | | | | | to dup_sockaddr() was renamed to sodupsockaddr(), the argument was changed from '1' to 'M_WAITOK', which changed the semantics. This resulted in a WITNESS warning about a potential sleep while holding the NFS server mutex. Now this will no longer happen, restoring a possible bug present in the original code (setting RC_NAM even though the malloc to copy the addres may fail). bde observes that the flag names here should probably not be the same as the malloc flags for name space reasons. Bumped into by: kuriyama
* Merge additional socket buffer locking from rwatson_netperf:rwatson2004-06-171-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | - Lock down low hanging fruit use of sb_flags with socket buffer lock. - Lock down low hanging fruit use of so_state with socket lock. - Lock down low hanging fruit use of so_options. - Lock down low-hanging fruit use of sb_lowwat and sb_hiwat with socket buffer lock. - Annotate situations in which we unlock the socket lock and then grab the receive socket buffer lock, which are currently actually the same lock. Depending on how we want to play our cards, we may want to coallesce these lock uses to reduce overhead. - Convert a if()->panic() into a KASSERT relating to so_state in soaccept(). - Remove a number of splnet()/splx() references. More complex merging of socket and socket buffer locking to follow.
* Second half of the dev_t cleanup.phk2004-06-171-1/+1
| | | | | | | | | | | The big lines are: NODEV -> NULL NOUDEV -> NODEV udev_t -> dev_t udev2dev() -> findcdev() Various minor adjustments including handling of userland access to kernel space struct cdev etc.
* Giant wasn't dropped here if we have to return EBUSY. This is bad.bmilekic2004-05-311-1/+3
|
* Release NFS subsystem lock and acquire Giant when calling intorwatson2004-05-311-0/+4
| | | | vn_start_write().
* Add an assertion that nfssvc() isn't called with Giant.rwatson2004-05-311-0/+10
| | | | | | | | | Add two additional pairs of assertions, one at the end of the NFS server event loop, and one one exit from the NFS daemon, that assert that if debug.mpsafenet is enabled, Giant is not held, and that if it is not enabled, Giant will be held. This is intended to support debugging scenarios where Giant is "leaked" during NFS processing.
* The NFS server modevent code manually patches the system call table torwatson2004-05-311-1/+1
| | | | | | | | | | | install nfssvc(). It also updates the argument count, but did so without setting SYF_MPSAFE, effectively removing the MPSAFE flag even when syscalls.master indicates it doesn't require Giant. This change forces the modevent to set MPSAFE as a flag to its internal notion of an argument coutn. Note: this duplication of information is a bad thing, but is a more general problem I'm not currently willing to address.
* One more case where we want to drop the NFS server lock and acquirerwatson2004-05-301-1/+6
| | | | | | | Giant when entering VFS. Discovered by code inspection; still not hit without debug.mpsafenet=1. Reported by: bmilekic
* Acquire Giant around two more cases when calling into VFS to vput()rwatson2004-05-301-13/+22
| | | | | | | | | a vnode. Not bumped into with asserts in the main tree because we run the NFS server with Giant by default. Discovered by inspection. Complete annotations of Giant acquisition/release to note that it's only because of VFS that we acquire Giant in most places in the NFS server.
* Don't release Giant until after the call to vput() in nfsrv_setattr().rwatson2004-05-291-1/+1
| | | | Unless running with debug.mpsafenet=1, this was not actually a problem.
* No need to conditionally acquire Giant in nfssvc_nfsd() because itrwatson2004-05-291-2/+0
| | | | | | | is acquired by the caller. Should not cause problems, but causes an unnecessary recursion on Giant. Pointed out by: bmilekic
* Call nfsm_clget_nolock() instead of nfsm_clget() when holding the NFSrwatson2004-05-271-1/+1
| | | | | | subsystem lock to avoid tripping over an assertion regarding whether the lock is held or not. This is likely to be the cause of a panic tripped over by Andrea Campi.
* The socket code upcalls into the NFS server using the so_upcallrwatson2004-05-247-84/+642
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mechanism so that early processing on mbufs can be performed before a context switch to the NFS server threads. Because of this, if the socket code is running without Giant, the NFS server also needs to be able to run the upcall code without relying on the presence on Giant. This change modifies the NFS server to run using a "giant code lock" covering operation of the whole subsystem. Work is in progress to move to data-based locking as part of the NFSv4 server changes. Introduce an NFS server subsystem lock, 'nfsd_mtx', and a set of macros to operate on the lock: NFSD_LOCK_ASSERT() Assert nfsd_mtx owned by current thread NFSD_UNLOCK_ASSERT() Assert nfsd_mtx not owned by current thread NFSD_LOCK_DONTCARE() Advisory: this function doesn't care NFSD_LOCK() Lock nfsd_mtx NFSD_UNLOCK() Unlock nfsd_mtx Constify a number of global variables/structures in the NFS server code, as they are not modified and contain constants only: nfsrvv2_procid nfsrv_nfsv3_procid nonidempotent nfsv2_repstat nfsv2_type nfsrv_nfsv3_procid nfsrvv2_procid nfsrv_v2errmap nfsv3err_null nfsv3err_getattr nfsv3err_setattr nfsv3err_lookup nfsv3err_access nfsv3err_readlink nfsv3err_read nfsv3err_write nfsv3err_create nfsv3err_mkdir nfsv3err_symlink nfsv3err_mknod nfsv3err_remove nfsv3err_rmdir nfsv3err_rename nfsv3err_link nfsv3err_readdir nfsv3err_readdirplus nfsv3err_fsstat nfsv3err_fsinfo nfsv3err_pathconf nfsv3err_commit nfsrv_v3errmap There are additional structures that should be constified but due to their being passed into general purpose functions without const arguments, I have not yet converted. In general, acquire nfsd_mtx when accessing any of the global NFS structures, including struct nfssvc_sock, struct nfsd, struct nfsrv_descript. Release nfsd_mtx whenever calling into VFS, and acquire Giant for calls into VFS. Giant is not required for any part of the operation of the NFS server with the exception of calls into VFS. Giant will never by acquired in the upcall code path. However, it may operate entirely covered by Giant, or not. If debug.mpsafenet is set to 0, the system calls will acquire Giant across all operations, and the upcall will assert Giant. As such, by default, this enables locking and allows us to test assertions, but should not cause any substantial new amount of code to be run without Giant. Bugs should manifest in the form of lock assertion failures for now. This approach is similar (but not identical) to modifications to the BSD/OS NFS server code snapshot provided by BSDi as part of their SMPng snapshot. The strategy is almost the same (single lock over the NFS server), but differs in the following ways: - Our NFS client and server code bases don't overlap, which means both fewer bugs and easier locking (thanks Peter!). Also means NFSD_*() as opposed to NFS_*(). - We make broad use of assertions, whereas the BSD/OS code does not. - Made slightly different choices about how to handle macros building packets but operating with side effects. - We acquire Giant only when entering VFS from the NFS server daemon threads. - Serious bugs in BSD/OS implementation corrected -- the snapshot we received was clearly a work in progress. Based on ideas from: BSDi SMPng Snapshot Reviewed by: rick@snowhite.cis.uoguelph.ca Extensive testing by: kris
* Don't send the available space as is in the FSSTAT call. Undermux2004-04-121-2/+14
| | | | | | | | | FreeBSD, we can have a negative available space value, but the corresponding fields in the NFS protocol are unsigned. So trnucate the value to 0 if it's negative, so that the client doesn't receive absurdly high values. Tested by: cognet
* Don't let the NFS server module be unloaded as long as there arepeadar2004-04-113-3/+6
| | | | | | | nfsd processes running Reviewed By: iedowse PR: 16299
* Remove advertising clause from University of California Regent'simp2004-04-079-36/+0
| | | | | | | license, per letter dated July 22, 1999 and email from Peter Wemm, Alan Cox and Robert Watson. Approved by: core, peter, alc, rwatson
* Add imperfect comments identifying the function of various nfs socketrwatson2004-04-061-6/+6
| | | | condition flags. Corrections, if appropriate, welcome.
* Spell 2 as SHUT_RDWR when used as an argument to soshutdown().rwatson2004-04-041-1/+1
|
* Explicitly compare pointers with NULL rather than treating a pointer asrwatson2004-04-042-6/+9
| | | | a boolean directly, use NULL instead of 0.
* Calculate NFS timeouts in units of 10ms, not 5ms. This matches the defaultpeter2004-03-141-1/+1
| | | | | | clock precision on i386. This is a NOP change on i386. But this stops the mount_nfs units from suddenly changing to units of 1/20 of a second (vs the normal 1/10 of a second) if HZ is increased.
* Properly vector all bwrite() and BUF_WRITE() calls through the same pathphk2004-03-111-1/+1
| | | | and s/BUF_WRITE()/bwrite()/ since it now does the same as bwrite().
* Convert from timeout to callout API.kan2004-03-073-4/+5
| | | | Submitted by: rwatson
* Rename dup_sockaddr() to sodupsockaddr() for consistency with otherrwatson2004-03-011-2/+2
| | | | | | | | | | | | functions in kern_socket.c. Rename the "canwait" field to "mflags" and pass M_WAITOK and M_NOWAIT in from the caller context rather than "1" or "0". Correct mflags pass into mac_init_socket() from previous commit to not include M_ZERO. Submitted by: sam
* Fix some becuase -> because typos.jhb2003-12-171-1/+1
| | | | Reported by: Marco Wertejuk <wertejuk@mwcis.com>
* Update a comment about needing to fix NFS server credential userwatson2003-11-171-1/+1
| | | | | by 5.0-RELEASE: make it now read 5.3-RELEASE to be realistic. Still needs fixing...
* Assert GIANT_REQUIRED where sockets are manipulated. This issam2003-11-072-0/+6
| | | | | | | preparatory for MPSAFE network commits and ongoing socket locking work. Supported by: FreeBSD Foundation
* When grabbing vnodes to service NFS requests, make sure to callphk2003-10-241-81/+11
| | | | | | vn_start_write() early to avoid snapshot deadlocks. By: mckusick
* - Set the sopt_dir member of the sockopt structure, otherwise, this parameterjeff2003-10-041-0/+2
| | | | | | | | will not actually be set even though we're calling sosetopt. sosetopt calls down to a single ctloutput function if the name or level is implemented by a specific protocol. Submitted by: pete@isilon.com
* Change idle state sleep identifier to "-" for nfsd.phk2003-07-021-1/+1
|
* Fix a bug in nfsrv_read() that caused the replies to certain NFSv3iedowse2003-06-241-1/+1
| | | | | | | | | | | | short read operations at the end of a file to not have the "eof" flag set as they should. The problem is that the requested read count was compared against the rounded-up reply data length instead of the actual reply data length. This bug appears to have been introduced in revision 1.78 (June 1999). It causes first-time reads of certain file sizes (e.g 4094 bytes) to fail with EIO on a RedHat 9.0 NFSv3 client. MFC after: 1 week
* Increase the size of the NFS server hash table to improve performancemckusick2003-06-211-4/+4
| | | | | | | | | | when serving up more than about 32 active files. For details see section 6.3 (pg 111) of Daniel Ellard and Margo Seltzer, ``NFS Tricks and Benchmarking Traps'' in the Proceedings of the Usenix 2003 Freenix Track, June 9-14, 2003 pg 101-114. Obtained from: Daniel Ellard <ellard@eecs.harvard.edu> Sponsored by: DARPA & NAI Labs.
* Use __FBSDID().obrien2003-06-113-3/+0
|
* Protect read-modify-write increment of f_count field with file lock.hsu2003-06-051-1/+1
|
* Add /* FALLTHROUGH */phk2003-05-311-0/+1
| | | | Found by: FlexeLint
* Beat vnode locking in the NFS server code into submission. This changetruckman2003-05-253-114/+203
| | | | | | | | | | is not pretty, but it fixes the code so that it no longer violates the vnode locking rules in the VFS API and doesn't trip any of the locking assertions enabled by the DEBUG_VFS_LOCKS kernel configuration option. There is one report that this patch fixed a "locking against myself" panic on an NFS server that was tripped by a diskless client. Approved by: re (scottl)
* - Acquire the vm_object's lock when performing vm_object_page_clean().alc2003-04-241-0/+4
| | | | | | - Add a parameter to vm_pageout_flush() that tells vm_pageout_flush() whether its caller has locked the vm_object. (This is a temporary measure to bootstrap vm_object locking.)
* - Lock bufs before inspecting their flags.jeff2003-03-131-6/+9
|
* More low-hanging fruit: kill caddr_t in calls to wakeup(9) / [mt]sleep(9).des2003-03-023-12/+12
|
* - Add an interlock argument to BUF_LOCK and BUF_TIMELOCK.jeff2003-02-251-3/+7
| | | | | | | | | | - Remove the buftimelock mutex and acquire the buf's interlock to protect these fields instead. - Hold the vnode interlock while locking bufs on the clean/dirty queues. This reduces some cases from one BUF_LOCK with a LK_NOWAIT and another BUF_LOCK with a LK_TIMEFAIL to a single lock. Reviewed by: arch, mckusick
* Don't use mbuf allocator flags for malloc(9).phk2003-02-221-2/+4
|
* Back out M_* changes, per decision of the TRB.imp2003-02-195-33/+33
| | | | Approved by: trb
* Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0.alfred2003-01-215-33/+33
| | | | Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.
* Bow to the whining masses and change a union back into void *. Retaindillon2003-01-131-1/+1
| | | | | removal of unnecessary casts and throw in some minor cleanups to see if anyone complains, just for the hell of it.
* Change struct file f_data to un_data, a union of the correct structdillon2003-01-121-1/+1
| | | | | | | | | | pointer types, and remove a huge number of casts from code using it. Change struct xfile xf_data to xun_data (ABI is still compatible). If we need to add a #define for f_data and xf_data we can, but I don't think it will be necessary. There are no operational changes in this commit.
OpenPOWER on IntegriCloud