DragonFly BSD
DragonFly commits List (threaded) for 2010-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

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


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 21 Jan 2010 21:13:24 -0800 (PST)

commit 8ae5c7e01448df9bc6797560538ae7b4b16be6f4
Author: Matthew Dillon <dillon@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



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]