summaryrefslogtreecommitdiff
path: root/sys/nfsserver
Commit message (Collapse)AuthorAgeFilesLines
* Now that we have a non blocking version of nfsm_dissect(), change all thePaul Saab2005-01-193-41/+41
| | | | | | | | | nfsm_dissect() calls (done under the NFSD lock) to nfsm_dissect_nonblock(). Submitted by: Mohan Srinivasan Notes: svn path=/head/; revision=140495
* Ditch vfs_object_create() and make the callers call VOP_CREATEVOBJECT()Poul-Henning Kamp2005-01-131-1/+1
| | | | | | | directly. Notes: svn path=/head/; revision=140181
* Remove the unused credential argument from VOP_FSYNC() and VFS_SYNC().Poul-Henning Kamp2005-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | I'm not sure why a credential was added to these in the first place, it is not used anywhere and it doesn't make much sense: The credentials for syncing a file (ability to write to the file) should be checked at the system call level. Credentials for syncing one or more filesystems ("none") should be checked at the system call level as well. If the filesystem implementation needs a particular credential to carry out the syncing it would logically have to the cached mount credential, or a credential cached along with any delayed write data. Discussed with: rwatson Notes: svn path=/head/; revision=140048
* /* -> /*- for license, minor formatting changesWarner Losh2005-01-079-9/+9
| | | | Notes: svn path=/head/; revision=139823
* Correct a bug in nfsrv_create() where a call to nfsrv_access() mightRobert Watson2004-11-111-38/+52
| | | | | | | | | | | | | | | | be made holding the NFS server mutex. To clean this up, introduce a version of the function, nfsrv_access_withgiant(), that expects the NFS server mutex to already have been dropped and Giant acquired. Wrap nfsrv_access() around this. This permits callers to more efficiently check access if they're in a code block performing VFS operations, and can be substitited for the nfsrv_access() call that triggered this bug. PR: 73807, 73208 MFC after: 1 week Notes: svn path=/head/; revision=137589
* Add b_bufobj to struct buf which eventually will eliminate the need for b_vp.Poul-Henning Kamp2004-10-221-1/+1
| | | | | | | | | | | | | | | | | | | | | Initialize b_bufobj for all buffers. Make incore() and gbincore() take a bufobj instead of a vnode. Make inmem() local to vfs_bio.c Change a lot of VI_[UN]LOCK(bp->b_vp) to BO_[UN]LOCK(bp->b_bufobj) also VI_MTX() to BO_MTX(), Make buf_vlist_add() take a bufobj instead of a vnode. Eliminate other uses of bp->b_vp where bp->b_bufobj will do. Various minor polishing: remove "register", turn panic into KASSERT, use new function declarations, TAILQ_FOREACH_SAFE() etc. Notes: svn path=/head/; revision=136767
* Correct several instances where calls to vfs_getvfs() resulting inRobert Watson2004-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> Notes: svn path=/head/; revision=136662
* Convert a mtx_lock(&Giant) to a mtx_unlock(&Giant) in nfsrv_link() toRobert Watson2004-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 Notes: svn path=/head/; revision=134296
* If debug.mpsafenet is non-zero, run the NFS server callout withoutRobert Watson2004-07-241-1/+4
| | | | | | | Giant. Notes: svn path=/head/; revision=132591
* Remove spl() use from nfsrv_timer.Robert Watson2004-07-241-3/+0
| | | | Notes: svn path=/head/; revision=132590
* Do a pass over all modules in the kernel and make them return EOPNOTSUPPPoul-Henning Kamp2004-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". Notes: svn path=/head/; revision=132199
* Do not call sorecieve() in the context of a socket callback as it causesAlfred Perlstein2004-07-131-3/+5
| | | | | | | | lock order reversals so->inpcb since we're called with the socket lock held. Notes: svn path=/head/; revision=132086
* Change M_WAITOK argument to sodupsockaddr() to M_NOWAIT. When the callRobert Watson2004-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 Notes: svn path=/head/; revision=131532
* Merge additional socket buffer locking from rwatson_netperf:Robert Watson2004-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. Notes: svn path=/head/; revision=130653
* Second half of the dev_t cleanup.Poul-Henning Kamp2004-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. Notes: svn path=/head/; revision=130640
* Giant wasn't dropped here if we have to return EBUSY. This is bad.Bosko Milekic2004-05-311-1/+3
| | | | Notes: svn path=/head/; revision=129902
* Release NFS subsystem lock and acquire Giant when calling intoRobert Watson2004-05-311-0/+4
| | | | | | | vn_start_write(). Notes: svn path=/head/; revision=129899
* Add an assertion that nfssvc() isn't called with Giant.Robert Watson2004-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. Notes: svn path=/head/; revision=129894
* The NFS server modevent code manually patches the system call table toRobert Watson2004-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. Notes: svn path=/head/; revision=129888
* One more case where we want to drop the NFS server lock and acquireRobert Watson2004-05-301-1/+6
| | | | | | | | | | Giant when entering VFS. Discovered by code inspection; still not hit without debug.mpsafenet=1. Reported by: bmilekic Notes: svn path=/head/; revision=129886
* Acquire Giant around two more cases when calling into VFS to vput()Robert Watson2004-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. Notes: svn path=/head/; revision=129885
* Don't release Giant until after the call to vput() in nfsrv_setattr().Robert Watson2004-05-291-1/+1
| | | | | | | Unless running with debug.mpsafenet=1, this was not actually a problem. Notes: svn path=/head/; revision=129841
* No need to conditionally acquire Giant in nfssvc_nfsd() because itRobert Watson2004-05-291-2/+0
| | | | | | | | | | is acquired by the caller. Should not cause problems, but causes an unnecessary recursion on Giant. Pointed out by: bmilekic Notes: svn path=/head/; revision=129839
* Call nfsm_clget_nolock() instead of nfsm_clget() when holding the NFSRobert Watson2004-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. Notes: svn path=/head/; revision=129785
* The socket code upcalls into the NFS server using the so_upcallRobert Watson2004-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 Notes: svn path=/head/; revision=129639
* Don't send the available space as is in the FSSTAT call. UnderMaxime Henrion2004-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 Notes: svn path=/head/; revision=128154
* Don't let the NFS server module be unloaded as long as there arePeter Edwards2004-04-113-3/+6
| | | | | | | | | | nfsd processes running Reviewed By: iedowse PR: 16299 Notes: svn path=/head/; revision=128112
* Remove advertising clause from University of California Regent'sWarner Losh2004-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 Notes: svn path=/head/; revision=127977
* Add imperfect comments identifying the function of various nfs socketRobert Watson2004-04-061-6/+6
| | | | | | | condition flags. Corrections, if appropriate, welcome. Notes: svn path=/head/; revision=127924
* Spell 2 as SHUT_RDWR when used as an argument to soshutdown().Robert Watson2004-04-041-1/+1
| | | | Notes: svn path=/head/; revision=127857
* Explicitly compare pointers with NULL rather than treating a pointer asRobert Watson2004-04-042-6/+9
| | | | | | | a boolean directly, use NULL instead of 0. Notes: svn path=/head/; revision=127851
* Calculate NFS timeouts in units of 10ms, not 5ms. This matches the defaultPeter Wemm2004-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. Notes: svn path=/head/; revision=126962
* Properly vector all bwrite() and BUF_WRITE() calls through the same pathPoul-Henning Kamp2004-03-111-1/+1
| | | | | | | and s/BUF_WRITE()/bwrite()/ since it now does the same as bwrite(). Notes: svn path=/head/; revision=126853
* Convert from timeout to callout API.Alexander Kabaev2004-03-073-4/+5
| | | | | | | Submitted by: rwatson Notes: svn path=/head/; revision=126723
* Rename dup_sockaddr() to sodupsockaddr() for consistency with otherRobert Watson2004-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 Notes: svn path=/head/; revision=126425
* Fix some becuase -> because typos.John Baldwin2003-12-171-1/+1
| | | | | | | Reported by: Marco Wertejuk <wertejuk@mwcis.com> Notes: svn path=/head/; revision=123608
* Update a comment about needing to fix NFS server credential useRobert Watson2003-11-171-1/+1
| | | | | | | | by 5.0-RELEASE: make it now read 5.3-RELEASE to be realistic. Still needs fixing... Notes: svn path=/head/; revision=122823
* Assert GIANT_REQUIRED where sockets are manipulated. This isSam Leffler2003-11-072-0/+6
| | | | | | | | | | preparatory for MPSAFE network commits and ongoing socket locking work. Supported by: FreeBSD Foundation Notes: svn path=/head/; revision=122261
* When grabbing vnodes to service NFS requests, make sure to callPoul-Henning Kamp2003-10-241-81/+11
| | | | | | | | | vn_start_write() early to avoid snapshot deadlocks. By: mckusick Notes: svn path=/head/; revision=121473
* - Set the sopt_dir member of the sockopt structure, otherwise, this parameterJeff Roberson2003-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 Notes: svn path=/head/; revision=120753
* Change idle state sleep identifier to "-" for nfsd.Poul-Henning Kamp2003-07-021-1/+1
| | | | Notes: svn path=/head/; revision=117151
* Fix a bug in nfsrv_read() that caused the replies to certain NFSv3Ian Dowse2003-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 Notes: svn path=/head/; revision=116789
* Increase the size of the NFS server hash table to improve performanceKirk McKusick2003-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. Notes: svn path=/head/; revision=116657
* Use __FBSDID().David E. O'Brien2003-06-113-3/+0
| | | | Notes: svn path=/head/; revision=116189
* Protect read-modify-write increment of f_count field with file lock.Jeffrey Hsu2003-06-051-1/+1
| | | | Notes: svn path=/head/; revision=115870
* Add /* FALLTHROUGH */Poul-Henning Kamp2003-05-311-0/+1
| | | | | | | Found by: FlexeLint Notes: svn path=/head/; revision=115476
* Beat vnode locking in the NFS server code into submission. This changeDon Lewis2003-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) Notes: svn path=/head/; revision=115301
* - Acquire the vm_object's lock when performing vm_object_page_clean().Alan Cox2003-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.) Notes: svn path=/head/; revision=113955
* - Lock bufs before inspecting their flags.Jeff Roberson2003-03-131-6/+9
| | | | Notes: svn path=/head/; revision=112179
* More low-hanging fruit: kill caddr_t in calls to wakeup(9) / [mt]sleep(9).Dag-Erling Smørgrav2003-03-023-12/+12
| | | | Notes: svn path=/head/; revision=111748