git: kernel - NFS - fix another B_CLUSTEROK / B_NEEDCOMMIT races
dillon at crater.dragonflybsd.org
Thu Jan 21 21:14:51 PST 2010
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(-)
DragonFly BSD source repository
More information about the Commits