aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfs/pagelist.c14
-rw-r--r--fs/nfs/write.c16
-rw-r--r--include/linux/nfs_page.h5
3 files changed, 17 insertions, 18 deletions
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index 257a7f8b2362..23e9dea20902 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -108,29 +108,29 @@ void nfs_unlock_request(struct nfs_page *req)
108} 108}
109 109
110/** 110/**
111 * nfs_set_page_writeback_locked - Lock a request for writeback 111 * nfs_set_page_tag_locked - Tag a request as locked
112 * @req: 112 * @req:
113 */ 113 */
114int nfs_set_page_writeback_locked(struct nfs_page *req) 114static int nfs_set_page_tag_locked(struct nfs_page *req)
115{ 115{
116 struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode); 116 struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode);
117 117
118 if (!nfs_lock_request(req)) 118 if (!nfs_lock_request(req))
119 return 0; 119 return 0;
120 radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_WRITEBACK); 120 radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED);
121 return 1; 121 return 1;
122} 122}
123 123
124/** 124/**
125 * nfs_clear_page_writeback - Unlock request and wake up sleepers 125 * nfs_clear_page_tag_locked - Clear request tag and wake up sleepers
126 */ 126 */
127void nfs_clear_page_writeback(struct nfs_page *req) 127void nfs_clear_page_tag_locked(struct nfs_page *req)
128{ 128{
129 struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode); 129 struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode);
130 130
131 if (req->wb_page != NULL) { 131 if (req->wb_page != NULL) {
132 spin_lock(&nfsi->req_lock); 132 spin_lock(&nfsi->req_lock);
133 radix_tree_tag_clear(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_WRITEBACK); 133 radix_tree_tag_clear(&nfsi->nfs_page_tree, req->wb_index, NFS_PAGE_TAG_LOCKED);
134 spin_unlock(&nfsi->req_lock); 134 spin_unlock(&nfsi->req_lock);
135 } 135 }
136 nfs_unlock_request(req); 136 nfs_unlock_request(req);
@@ -421,7 +421,7 @@ int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *head,
421 idx_start = req->wb_index + 1; 421 idx_start = req->wb_index + 1;
422 if (req->wb_list_head != head) 422 if (req->wb_list_head != head)
423 continue; 423 continue;
424 if (nfs_set_page_writeback_locked(req)) { 424 if (nfs_set_page_tag_locked(req)) {
425 nfs_list_remove_request(req); 425 nfs_list_remove_request(req);
426 nfs_list_add_request(req, dst); 426 nfs_list_add_request(req, dst);
427 res++; 427 res++;
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index e9404328ac02..754066cc9146 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -289,7 +289,7 @@ static int nfs_page_async_flush(struct nfs_pageio_descriptor *pgio,
289 BUG(); 289 BUG();
290 } 290 }
291 radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index, 291 radix_tree_tag_set(&nfsi->nfs_page_tree, req->wb_index,
292 NFS_PAGE_TAG_WRITEBACK); 292 NFS_PAGE_TAG_LOCKED);
293 ret = test_bit(PG_NEED_FLUSH, &req->wb_flags); 293 ret = test_bit(PG_NEED_FLUSH, &req->wb_flags);
294 spin_unlock(req_lock); 294 spin_unlock(req_lock);
295 nfs_pageio_add_request(pgio, req); 295 nfs_pageio_add_request(pgio, req);
@@ -524,7 +524,7 @@ static int nfs_wait_on_requests_locked(struct inode *inode, pgoff_t idx_start, u
524 idx_end = idx_start + npages - 1; 524 idx_end = idx_start + npages - 1;
525 525
526 next = idx_start; 526 next = idx_start;
527 while (radix_tree_gang_lookup_tag(&nfsi->nfs_page_tree, (void **)&req, next, 1, NFS_PAGE_TAG_WRITEBACK)) { 527 while (radix_tree_gang_lookup_tag(&nfsi->nfs_page_tree, (void **)&req, next, 1, NFS_PAGE_TAG_LOCKED)) {
528 if (req->wb_index > idx_end) 528 if (req->wb_index > idx_end)
529 break; 529 break;
530 530
@@ -759,7 +759,7 @@ static void nfs_writepage_release(struct nfs_page *req)
759 nfs_inode_remove_request(req); 759 nfs_inode_remove_request(req);
760 } else 760 } else
761 nfs_end_page_writeback(req->wb_page); 761 nfs_end_page_writeback(req->wb_page);
762 nfs_clear_page_writeback(req); 762 nfs_clear_page_tag_locked(req);
763} 763}
764 764
765static inline int flush_task_priority(int how) 765static inline int flush_task_priority(int how)
@@ -888,7 +888,7 @@ out_bad:
888 } 888 }
889 nfs_redirty_request(req); 889 nfs_redirty_request(req);
890 nfs_end_page_writeback(req->wb_page); 890 nfs_end_page_writeback(req->wb_page);
891 nfs_clear_page_writeback(req); 891 nfs_clear_page_tag_locked(req);
892 return -ENOMEM; 892 return -ENOMEM;
893} 893}
894 894
@@ -931,7 +931,7 @@ static int nfs_flush_one(struct inode *inode, struct list_head *head, unsigned i
931 nfs_list_remove_request(req); 931 nfs_list_remove_request(req);
932 nfs_redirty_request(req); 932 nfs_redirty_request(req);
933 nfs_end_page_writeback(req->wb_page); 933 nfs_end_page_writeback(req->wb_page);
934 nfs_clear_page_writeback(req); 934 nfs_clear_page_tag_locked(req);
935 } 935 }
936 return -ENOMEM; 936 return -ENOMEM;
937} 937}
@@ -1049,7 +1049,7 @@ remove_request:
1049 nfs_end_page_writeback(page); 1049 nfs_end_page_writeback(page);
1050 nfs_inode_remove_request(req); 1050 nfs_inode_remove_request(req);
1051 next: 1051 next:
1052 nfs_clear_page_writeback(req); 1052 nfs_clear_page_tag_locked(req);
1053 } 1053 }
1054} 1054}
1055 1055
@@ -1212,7 +1212,7 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how)
1212 nfs_list_remove_request(req); 1212 nfs_list_remove_request(req);
1213 nfs_mark_request_commit(req); 1213 nfs_mark_request_commit(req);
1214 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); 1214 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
1215 nfs_clear_page_writeback(req); 1215 nfs_clear_page_tag_locked(req);
1216 } 1216 }
1217 return -ENOMEM; 1217 return -ENOMEM;
1218} 1218}
@@ -1265,7 +1265,7 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata)
1265 dprintk(" mismatch\n"); 1265 dprintk(" mismatch\n");
1266 nfs_redirty_request(req); 1266 nfs_redirty_request(req);
1267 next: 1267 next:
1268 nfs_clear_page_writeback(req); 1268 nfs_clear_page_tag_locked(req);
1269 } 1269 }
1270} 1270}
1271 1271
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h
index c780e7e39f99..042434c39b7e 100644
--- a/include/linux/nfs_page.h
+++ b/include/linux/nfs_page.h
@@ -21,7 +21,7 @@
21/* 21/*
22 * Valid flags for the radix tree 22 * Valid flags for the radix tree
23 */ 23 */
24#define NFS_PAGE_TAG_WRITEBACK 0 24#define NFS_PAGE_TAG_LOCKED 0
25 25
26/* 26/*
27 * Valid flags for a dirty buffer 27 * Valid flags for a dirty buffer
@@ -84,8 +84,7 @@ extern void nfs_pageio_complete(struct nfs_pageio_descriptor *desc);
84extern void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *, pgoff_t); 84extern void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *, pgoff_t);
85extern int nfs_wait_on_request(struct nfs_page *); 85extern int nfs_wait_on_request(struct nfs_page *);
86extern void nfs_unlock_request(struct nfs_page *req); 86extern void nfs_unlock_request(struct nfs_page *req);
87extern int nfs_set_page_writeback_locked(struct nfs_page *req); 87extern void nfs_clear_page_tag_locked(struct nfs_page *req);
88extern void nfs_clear_page_writeback(struct nfs_page *req);
89 88
90 89
91/* 90/*