Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Dec 2001 17:16:57 -0800 (PST)
From:      Matt Dillon <dillon@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern vfs_bio.c src/sys/nfsclient nfs.h nfs_bio.c nfs_vnops.c src/sys/vm vm_page.c vnode_pager.c
Message-ID:  <200112140116.fBE1GvO08874@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
dillon      2001/12/13 17:16:57 PST

  Modified files:
    sys/kern             vfs_bio.c 
    sys/nfsclient        nfs.h nfs_bio.c nfs_vnops.c 
    sys/vm               vm_page.c vnode_pager.c 
  Log:
  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
  
  Revision  Changes    Path
  1.295     +12 -0     src/sys/kern/vfs_bio.c
  1.64      +3 -1      src/sys/nfsclient/nfs.h
  1.104     +55 -4     src/sys/nfsclient/nfs_bio.c
  1.180     +18 -5     src/sys/nfsclient/nfs_vnops.c
  1.175     +14 -0     src/sys/vm/vm_page.c
  1.140     +27 -2     src/sys/vm/vnode_pager.c

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200112140116.fBE1GvO08874>