diff options
Diffstat (limited to 'include/linux/nfs_page.h')
-rw-r--r-- | include/linux/nfs_page.h | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index 39e4895bcdb4..da2e077b65e2 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
@@ -20,12 +20,19 @@ | |||
20 | #include <asm/atomic.h> | 20 | #include <asm/atomic.h> |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Valid flags for the radix tree | ||
24 | */ | ||
25 | #define NFS_PAGE_TAG_DIRTY 0 | ||
26 | #define NFS_PAGE_TAG_WRITEBACK 1 | ||
27 | |||
28 | /* | ||
23 | * Valid flags for a dirty buffer | 29 | * Valid flags for a dirty buffer |
24 | */ | 30 | */ |
25 | #define PG_BUSY 0 | 31 | #define PG_BUSY 0 |
26 | #define PG_NEED_COMMIT 1 | 32 | #define PG_NEED_COMMIT 1 |
27 | #define PG_NEED_RESCHED 2 | 33 | #define PG_NEED_RESCHED 2 |
28 | 34 | ||
35 | struct nfs_inode; | ||
29 | struct nfs_page { | 36 | struct nfs_page { |
30 | struct list_head wb_list, /* Defines state of page: */ | 37 | struct list_head wb_list, /* Defines state of page: */ |
31 | *wb_list_head; /* read/write/commit */ | 38 | *wb_list_head; /* read/write/commit */ |
@@ -54,14 +61,17 @@ extern void nfs_clear_request(struct nfs_page *req); | |||
54 | extern void nfs_release_request(struct nfs_page *req); | 61 | extern void nfs_release_request(struct nfs_page *req); |
55 | 62 | ||
56 | 63 | ||
57 | extern void nfs_list_add_request(struct nfs_page *, struct list_head *); | 64 | extern int nfs_scan_lock_dirty(struct nfs_inode *nfsi, struct list_head *dst, |
58 | 65 | unsigned long idx_start, unsigned int npages); | |
59 | extern int nfs_scan_list(struct list_head *, struct list_head *, | 66 | extern int nfs_scan_list(struct list_head *, struct list_head *, |
60 | unsigned long, unsigned int); | 67 | unsigned long, unsigned int); |
61 | extern int nfs_coalesce_requests(struct list_head *, struct list_head *, | 68 | extern int nfs_coalesce_requests(struct list_head *, struct list_head *, |
62 | unsigned int); | 69 | unsigned int); |
63 | extern int nfs_wait_on_request(struct nfs_page *); | 70 | extern int nfs_wait_on_request(struct nfs_page *); |
64 | extern void nfs_unlock_request(struct nfs_page *req); | 71 | extern void nfs_unlock_request(struct nfs_page *req); |
72 | extern int nfs_set_page_writeback_locked(struct nfs_page *req); | ||
73 | extern void nfs_clear_page_writeback(struct nfs_page *req); | ||
74 | |||
65 | 75 | ||
66 | /* | 76 | /* |
67 | * Lock the page of an asynchronous request without incrementing the wb_count | 77 | * Lock the page of an asynchronous request without incrementing the wb_count |
@@ -86,6 +96,18 @@ nfs_lock_request(struct nfs_page *req) | |||
86 | return 1; | 96 | return 1; |
87 | } | 97 | } |
88 | 98 | ||
99 | /** | ||
100 | * nfs_list_add_request - Insert a request into a list | ||
101 | * @req: request | ||
102 | * @head: head of list into which to insert the request. | ||
103 | */ | ||
104 | static inline void | ||
105 | nfs_list_add_request(struct nfs_page *req, struct list_head *head) | ||
106 | { | ||
107 | list_add_tail(&req->wb_list, head); | ||
108 | req->wb_list_head = head; | ||
109 | } | ||
110 | |||
89 | 111 | ||
90 | /** | 112 | /** |
91 | * nfs_list_remove_request - Remove a request from its wb_list | 113 | * nfs_list_remove_request - Remove a request from its wb_list |
@@ -96,10 +118,6 @@ nfs_list_remove_request(struct nfs_page *req) | |||
96 | { | 118 | { |
97 | if (list_empty(&req->wb_list)) | 119 | if (list_empty(&req->wb_list)) |
98 | return; | 120 | return; |
99 | if (!NFS_WBACK_BUSY(req)) { | ||
100 | printk(KERN_ERR "NFS: unlocked request attempted removed from list!\n"); | ||
101 | BUG(); | ||
102 | } | ||
103 | list_del_init(&req->wb_list); | 121 | list_del_init(&req->wb_list); |
104 | req->wb_list_head = NULL; | 122 | req->wb_list_head = NULL; |
105 | } | 123 | } |