diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-07-18 19:18:49 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-08-15 11:54:46 -0400 |
commit | 31a01f093edbc687e783a4c8adcd76d3cc91a559 (patch) | |
tree | 5640b7fef7e57e8dc9faaadd61a9ec4fc41bfb5a /fs/nfs/write.c | |
parent | e14bebf6de11a4b8476cf2b0a75bf7c3e69112d5 (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.c | 8 |
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 | ||
597 | static void nfs_write_error_remove_page(struct nfs_page *req) | 600 | static 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) | |||
1019 | remove_req: | 1021 | remove_req: |
1020 | nfs_inode_remove_request(req); | 1022 | nfs_inode_remove_request(req); |
1021 | next: | 1023 | next: |
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 | } |