aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/read.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/read.c')
-rw-r--r--fs/nfs/read.c22
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
127static 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 */
122static void nfs_read_completion(struct nfs_pgio_header *hdr) 134static 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 }