]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
This fixes a large number of bugs in our NFS client side code. A recent
authordillon <dillon@FreeBSD.org>
Fri, 14 Dec 2001 01:16:57 +0000 (01:16 +0000)
committerdillon <dillon@FreeBSD.org>
Fri, 14 Dec 2001 01:16:57 +0000 (01:16 +0000)
commitcd4d323ad300ef689d4b7dae113791a0f82ee65e
tree41ee3cc72a843eef0d91fff1ed8c59b176341b5b
parent637ec33540e81a939866bcbced0bbbff709ae333
This fixes a large number of bugs in our NFS client side code.  A recent
commit by Kirk also fixed a softupdates bug that could easily be triggered
by server side NFS.

* An edge case with shared R+W mmap()'s and truncate whereby
  the system would inappropriately clear the dirty bits on
  still-dirty data.  (applicable to all filesystems)

  THIS FIX TEMPORARILY DISABLED PENDING FURTHER TESTING.
  see vm/vm_page.c line 1641

* The straddle case for VM pages and buffer cache buffers when
  truncating.  (applicable to NFS client side)

* Possible SMP database corruption due to vm_pager_unmap_page()
  not clearing the TLB for the other cpu's.  (applicable to NFS
  client side but could effect all filesystems).  Note: not
  considered serious since the corruption occurs beyond the file
  EOF.

* When flusing a dirty buffer due to B_CACHE getting cleared,
  we were accidently setting B_CACHE again (that is, bwrite() sets
  B_CACHE), when we really want it to stay clear after the write
  is complete.  This resulted in a corrupt buffer.  (applicable
  to all filesystems but probably only triggered by NFS)

* We have to call vtruncbuf() when ftruncate()ing to remove
  any buffer cache buffers.  This is still tentitive, I may
  be able to remove it due to the second bug fix.  (applicable
  to NFS client side)

* vnode_pager_setsize() race against nfs_vinvalbuf()... we have
  to set n_size before calling nfs_vinvalbuf or the NFS code
  may recursively vnode_pager_setsize() to the original value
  before the truncate.  This is what was causing the user mmap
  bus faults in the nfs tester program.  (applicable to NFS
  client side)

* Fix to softupdates (see ufs/ffs/ffs_inode.c 1.73, commit made
  by Kirk).

Testing program written by: Avadis Tevanian, Jr.
Testing program supplied by: jkh / Apple (see Dec2001 posting to freebsd-hackers with Subject 'NFS: How to make FreeBS fall on its face in one easy step')
MFC after: 1 week
sys/kern/vfs_bio.c
sys/nfsclient/nfs.h
sys/nfsclient/nfs_bio.c
sys/nfsclient/nfs_vnops.c
sys/vm/vm_page.c
sys/vm/vnode_pager.c