diff options
Diffstat (limited to 'fs/nfs/read.c')
-rw-r--r-- | fs/nfs/read.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/fs/nfs/read.c b/fs/nfs/read.c index 902ba2c63d05..53d5b83611ce 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c | |||
@@ -105,10 +105,16 @@ static void nfs_readpage_release(struct nfs_page *req) | |||
105 | { | 105 | { |
106 | struct inode *d_inode = req->wb_context->dentry->d_inode; | 106 | struct inode *d_inode = req->wb_context->dentry->d_inode; |
107 | 107 | ||
108 | if (PageUptodate(req->wb_page)) | 108 | dprintk("NFS: read done (%s/%llu %d@%lld)\n", d_inode->i_sb->s_id, |
109 | nfs_readpage_to_fscache(d_inode, req->wb_page, 0); | 109 | (unsigned long long)NFS_FILEID(d_inode), req->wb_bytes, |
110 | (long long)req_offset(req)); | ||
110 | 111 | ||
111 | unlock_page(req->wb_page); | 112 | if (nfs_page_group_sync_on_bit(req, PG_UNLOCKPAGE)) { |
113 | if (PageUptodate(req->wb_page)) | ||
114 | nfs_readpage_to_fscache(d_inode, req->wb_page, 0); | ||
115 | |||
116 | unlock_page(req->wb_page); | ||
117 | } | ||
112 | 118 | ||
113 | dprintk("NFS: read done (%s/%Lu %d@%Ld)\n", | 119 | dprintk("NFS: read done (%s/%Lu %d@%Ld)\n", |
114 | req->wb_context->dentry->d_inode->i_sb->s_id, | 120 | req->wb_context->dentry->d_inode->i_sb->s_id, |
@@ -118,6 +124,12 @@ static void nfs_readpage_release(struct nfs_page *req) | |||
118 | nfs_release_request(req); | 124 | nfs_release_request(req); |
119 | } | 125 | } |
120 | 126 | ||
127 | static void nfs_page_group_set_uptodate(struct nfs_page *req) | ||
128 | { | ||
129 | if (nfs_page_group_sync_on_bit(req, PG_UPTODATE)) | ||
130 | SetPageUptodate(req->wb_page); | ||
131 | } | ||
132 | |||
121 | /* Note io was page aligned */ | 133 | /* Note io was page aligned */ |
122 | static void nfs_read_completion(struct nfs_pgio_header *hdr) | 134 | static void nfs_read_completion(struct nfs_pgio_header *hdr) |
123 | { | 135 | { |
@@ -140,9 +152,9 @@ static void nfs_read_completion(struct nfs_pgio_header *hdr) | |||
140 | bytes += req->wb_bytes; | 152 | bytes += req->wb_bytes; |
141 | if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) { | 153 | if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) { |
142 | if (bytes <= hdr->good_bytes) | 154 | if (bytes <= hdr->good_bytes) |
143 | SetPageUptodate(page); | 155 | nfs_page_group_set_uptodate(req); |
144 | } else | 156 | } else |
145 | SetPageUptodate(page); | 157 | nfs_page_group_set_uptodate(req); |
146 | nfs_list_remove_request(req); | 158 | nfs_list_remove_request(req); |
147 | nfs_readpage_release(req); | 159 | nfs_readpage_release(req); |
148 | } | 160 | } |