nfs: handle multiple reqs in nfs_page_async_flush
authorWeston Andros Adamson <dros@primarydata.com>
Fri, 11 Jul 2014 14:20:48 +0000 (10:20 -0400)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Sat, 12 Jul 2014 21:35:46 +0000 (17:35 -0400)
commitd458138353726ea6dcbc53ae3597e489d0432c25
tree178e8cb0040307bda0dbd556ad1137b89ca9a10f
parent84d3a9a913ba6a90c79b7763d063bb42554a8906
nfs: handle multiple reqs in nfs_page_async_flush

Change nfs_find_and_lock_request so nfs_page_async_flush can handle multiple
requests in a page. There is only one request for a page the first time
nfs_page_async_flush is called, but if a write or commit fails, async_flush
is called again and there may be multiple requests associated with the page.
The solution is to merge all the requests in a page group into a single
request before calling nfs_pageio_add_request.

Rename nfs_find_and_lock_request to nfs_lock_and_join_requests and
change it to first lock all requests for the page, then cancel and merge
all subrequests into the head request.

Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/internal.h
fs/nfs/pagelist.c
fs/nfs/write.c