diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-04-20 16:12:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-21 01:56:29 -0400 |
commit | 6d677e3504cd173b2ff7fc393ee4241b3c0f92a6 (patch) | |
tree | 002ca651de6b2e858072e8060ce4a9943263a5e8 | |
parent | 8e821cad12e80cd1a8a3fbadf91f62f17f32549e (diff) |
NFS: Don't clear PG_writeback until after we've processed unstable writes
Ensure that we don't release the PG_writeback lock until after the page has
either been redirtied, or queued on the nfs_inode 'commit' list.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/nfs/write.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 3ed4feb8c856..8e9424651bc6 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -920,8 +920,8 @@ out_bad: | |||
920 | list_del(&data->pages); | 920 | list_del(&data->pages); |
921 | nfs_writedata_release(data); | 921 | nfs_writedata_release(data); |
922 | } | 922 | } |
923 | nfs_end_page_writeback(req->wb_page); | ||
924 | nfs_redirty_request(req); | 923 | nfs_redirty_request(req); |
924 | nfs_end_page_writeback(req->wb_page); | ||
925 | nfs_clear_page_writeback(req); | 925 | nfs_clear_page_writeback(req); |
926 | return -ENOMEM; | 926 | return -ENOMEM; |
927 | } | 927 | } |
@@ -966,8 +966,8 @@ static int nfs_flush_one(struct inode *inode, struct list_head *head, int how) | |||
966 | while (!list_empty(head)) { | 966 | while (!list_empty(head)) { |
967 | struct nfs_page *req = nfs_list_entry(head->next); | 967 | struct nfs_page *req = nfs_list_entry(head->next); |
968 | nfs_list_remove_request(req); | 968 | nfs_list_remove_request(req); |
969 | nfs_end_page_writeback(req->wb_page); | ||
970 | nfs_redirty_request(req); | 969 | nfs_redirty_request(req); |
970 | nfs_end_page_writeback(req->wb_page); | ||
971 | nfs_clear_page_writeback(req); | 971 | nfs_clear_page_writeback(req); |
972 | } | 972 | } |
973 | return -ENOMEM; | 973 | return -ENOMEM; |
@@ -1002,8 +1002,8 @@ out_err: | |||
1002 | while (!list_empty(head)) { | 1002 | while (!list_empty(head)) { |
1003 | req = nfs_list_entry(head->next); | 1003 | req = nfs_list_entry(head->next); |
1004 | nfs_list_remove_request(req); | 1004 | nfs_list_remove_request(req); |
1005 | nfs_end_page_writeback(req->wb_page); | ||
1006 | nfs_redirty_request(req); | 1005 | nfs_redirty_request(req); |
1006 | nfs_end_page_writeback(req->wb_page); | ||
1007 | nfs_clear_page_writeback(req); | 1007 | nfs_clear_page_writeback(req); |
1008 | } | 1008 | } |
1009 | return error; | 1009 | return error; |