freebsd-dev/sys/nfs
Julian Elischer 4ef2094e45 Reviewed by: Many at differnt times in differnt parts,
including alan, john, me, luoqi, and kirk
Submitted by:	Matt Dillon <dillon@frebsd.org>

This change implements a relatively sophisticated fix to getnewbuf().
There were two problems with getnewbuf(). First, the writerecursion
can lead to a system stack overflow when you have NFS and/or VN
devices in the system. Second, the free/dirty buffer accounting was
completely broken. Not only did the nfs routines blow it trying to
manually account for the buffer state, but the accounting that was
done did not work well with the purpose of their existance: figuring
out when getnewbuf() needs to sleep.

The meat of the change is to kern/vfs_bio.c. The remaining diffs are
all minor except for NFS, which includes both the fixes for bp
interaction AND fixes for a 'biodone(): buffer already done' lockup.
Sys/buf.h also contains a chaining structure which is not used by
this patchset but is used by other patches that are coming soon.
This patch deliniated by tags PRE_MAT_GETBUF and POST_MAT_GETBUF.
(sorry for the missing T matt)
1999-03-12 02:24:58 +00:00
..
bootp_subr.c Fix warnings in preparation for adding -Wall -Wcast-qual to the 1999-01-27 23:45:44 +00:00
krpc_subr.c Fix warnings in preparation for adding -Wall -Wcast-qual to the 1999-01-27 23:45:44 +00:00
krpc.h Forward declare more structs that are used in prototypes here - don't 1998-02-01 20:34:07 +00:00
nfs_bio.c Reviewed by: Many at differnt times in differnt parts, 1999-03-12 02:24:58 +00:00
nfs_common.c Fixed bitrot in NFS_ACDEBUG option. 1999-02-17 13:59:29 +00:00
nfs_common.h Fix for creating files on a Solaris 7 server with NFSv3 (the request was 1998-12-25 10:34:27 +00:00
nfs_node.c Do not need (or want) to take a reference on an NFS file that 1998-09-29 23:15:25 +00:00
nfs_nqlease.c Untangle the nfs send and receive queue locking a little. One lock 1999-02-25 00:03:51 +00:00
nfs_serv.c * Change sysctl from using linker_set to construct its tree using SLISTs. 1999-02-16 10:49:55 +00:00
nfs_socket.c Untangle the nfs send and receive queue locking a little. One lock 1999-02-25 00:03:51 +00:00
nfs_srvcache.c Moved `#ifndef NFS_NOSERVER' after including nfs.h. 1998-07-02 12:41:42 +00:00
nfs_subs.c Fixed bitrot in NFS_ACDEBUG option. 1999-02-17 13:59:29 +00:00
nfs_syscalls.c Untangle the nfs send and receive queue locking a little. One lock 1999-02-25 00:03:51 +00:00
nfs_vfsops.c * Change sysctl from using linker_set to construct its tree using SLISTs. 1999-02-16 10:49:55 +00:00
nfs_vnops.c Reviewed by: Many at differnt times in differnt parts, 1999-03-12 02:24:58 +00:00
nfs.h Untangle the nfs send and receive queue locking a little. One lock 1999-02-25 00:03:51 +00:00
nfsdiskless.h Removed more vestiges of config-time swap configuration. 1997-09-07 12:56:46 +00:00
nfsm_subs.h Fix for creating files on a Solaris 7 server with NFSv3 (the request was 1998-12-25 10:34:27 +00:00
nfsmount.h When using NFSv3, use the remote server's idea of the maximum file size 1998-05-30 16:33:58 +00:00
nfsnode.h Reimplement the NFS ACCESS RPC cache as an "accelerator" rather than a true 1998-11-15 20:36:18 +00:00
nfsproto.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsrtt.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsrvcache.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
nfsv2.h Delete the #if 0 (nearly) duplicate definitions of nfsproto.h. Having 1998-05-13 06:40:56 +00:00
nqnfs.h Use u_int32_t in NQFHHASH instead of u_long. 1998-07-05 10:13:22 +00:00
rpcv2.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00
xdr_subs.h For the on-the-wire protocol, u_long -> u_int32_t; long -> int32_t; 1998-05-31 20:09:01 +00:00