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; |
