NFS: Fix a race when doing NFS write coalescing
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 2 Apr 2007 23:29:52 +0000 (19:29 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 1 May 2007 05:17:06 +0000 (22:17 -0700)
commitc63c7b051395368573779c8309aa5c990dcf2f96
treedb54090eef99349d15b95fcd8c2620a2403d8db8
parent8b09bee3083897e375bd0bf9d60f48daedfab3e0
NFS: Fix a race when doing NFS write coalescing

Currently we do write coalescing in a very inefficient manner: one pass in
generic_writepages() in order to lock the pages for writing, then one pass
in nfs_flush_mapping() and/or nfs_sync_mapping_wait() in order to gather
the locked pages for coalescing into RPC requests of size "wsize".

In fact, it turns out there is actually a deadlock possible here since we
only start I/O on the second pass. If the user signals the process while
we're in nfs_sync_mapping_wait(), for instance, then we may exit before
starting I/O on all the requests that have been queued up.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/pagelist.c
fs/nfs/write.c
include/linux/nfs_page.h
include/linux/writeback.h