git: kernel - NFS - fix another B_CLUSTEROK / B_NEEDCOMMIT races

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jan 21 21:14:51 PST 2010


commit 8ae5c7e01448df9bc6797560538ae7b4b16be6f4
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Jan 21 21:09:51 2010 -0800

    kernel - NFS - fix another B_CLUSTEROK / B_NEEDCOMMIT races
    
    * nfs_flush_docommit() was not handling the case where B_NEEDCOMMIT
      might get cleared by vfs_busy_pages() due to late detection of
      a modified VM page.
    
      This appears to be responsible for at least one fsx issue.
    
    * Catch an edge case when clearing the PMAP modify bit in vfs_busy_pages().
    
    * NFS no longer tries to cluster commit operations via the buffer cache's
      cluster code.  nfs_flush_docommit() will still do its own manual
      clustering of commit ops.  The problem with using B_CLUSTEROK is that
      the cluster code will collect bufs together but vfs_busy_pages() might
      have to clear B_NEEDCOMMIT when a late detection of a modified VM
      pages occurs.  This doesn't propagate back to the underlying bufs making
      up the cluster.
    
      This appears to be responsible for at least one fsx issue too.

Summary of changes:
 sys/kern/vfs_bio.c      |   23 ++++++++++++++++++++---
 sys/vfs/nfs/nfs_bio.c   |   37 ++++++++++++++++---------------------
 sys/vfs/nfs/nfs_vnops.c |   14 ++++++++++----
 3 files changed, 46 insertions(+), 28 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/8ae5c7e01448df9bc6797560538ae7b4b16be6f4


-- 
DragonFly BSD source repository





More information about the Commits mailing list