summaryrefslogtreecommitdiffstats
path: root/fs/nfs/write.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2017-07-18 19:18:49 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2017-08-15 11:54:46 -0400
commit31a01f093edbc687e783a4c8adcd76d3cc91a559 (patch)
tree5640b7fef7e57e8dc9faaadd61a9ec4fc41bfb5a /fs/nfs/write.c
parente14bebf6de11a4b8476cf2b0a75bf7c3e69112d5 (diff)
NFS: Don't unlock writebacks before declaring PG_WB_END
We don't want nfs_lock_and_join_requests() to start fiddling with the request before the call to nfs_page_group_sync_on_bit(). Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r--fs/nfs/write.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 84b6818e5278..bb38c881fc48 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -335,8 +335,11 @@ static void nfs_end_page_writeback(struct nfs_page *req)
335{ 335{
336 struct inode *inode = page_file_mapping(req->wb_page)->host; 336 struct inode *inode = page_file_mapping(req->wb_page)->host;
337 struct nfs_server *nfss = NFS_SERVER(inode); 337 struct nfs_server *nfss = NFS_SERVER(inode);
338 bool is_done;
338 339
339 if (!nfs_page_group_sync_on_bit(req, PG_WB_END)) 340 is_done = nfs_page_group_sync_on_bit(req, PG_WB_END);
341 nfs_unlock_request(req);
342 if (!is_done)
340 return; 343 return;
341 344
342 end_page_writeback(req->wb_page); 345 end_page_writeback(req->wb_page);
@@ -596,7 +599,6 @@ try_again:
596 599
597static void nfs_write_error_remove_page(struct nfs_page *req) 600static void nfs_write_error_remove_page(struct nfs_page *req)
598{ 601{
599 nfs_unlock_request(req);
600 nfs_end_page_writeback(req); 602 nfs_end_page_writeback(req);
601 generic_error_remove_page(page_file_mapping(req->wb_page), 603 generic_error_remove_page(page_file_mapping(req->wb_page),
602 req->wb_page); 604 req->wb_page);
@@ -1019,7 +1021,6 @@ static void nfs_write_completion(struct nfs_pgio_header *hdr)
1019remove_req: 1021remove_req:
1020 nfs_inode_remove_request(req); 1022 nfs_inode_remove_request(req);
1021next: 1023next:
1022 nfs_unlock_request(req);
1023 nfs_end_page_writeback(req); 1024 nfs_end_page_writeback(req);
1024 nfs_release_request(req); 1025 nfs_release_request(req);
1025 } 1026 }
@@ -1406,7 +1407,6 @@ static void nfs_redirty_request(struct nfs_page *req)
1406{ 1407{
1407 nfs_mark_request_dirty(req); 1408 nfs_mark_request_dirty(req);
1408 set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags); 1409 set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags);
1409 nfs_unlock_request(req);
1410 nfs_end_page_writeback(req); 1410 nfs_end_page_writeback(req);
1411 nfs_release_request(req); 1411 nfs_release_request(req);
1412} 1412}