|
@@ -243,36 +243,28 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
|
|
|
dreq->count += hdr->good_bytes;
|
|
|
spin_unlock(&dreq->lock);
|
|
|
|
|
|
- if (!test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
|
|
|
- while (!list_empty(&hdr->pages)) {
|
|
|
- struct nfs_page *req = nfs_list_entry(hdr->pages.next);
|
|
|
- struct page *page = req->wb_page;
|
|
|
-
|
|
|
- if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) {
|
|
|
- if (bytes > hdr->good_bytes)
|
|
|
- zero_user(page, 0, PAGE_SIZE);
|
|
|
- else if (hdr->good_bytes - bytes < PAGE_SIZE)
|
|
|
- zero_user_segment(page,
|
|
|
- hdr->good_bytes & ~PAGE_MASK,
|
|
|
- PAGE_SIZE);
|
|
|
- }
|
|
|
- bytes += req->wb_bytes;
|
|
|
- nfs_list_remove_request(req);
|
|
|
- if (!PageCompound(page))
|
|
|
- set_page_dirty(page);
|
|
|
- nfs_direct_readpage_release(req);
|
|
|
+ while (!list_empty(&hdr->pages)) {
|
|
|
+ struct nfs_page *req = nfs_list_entry(hdr->pages.next);
|
|
|
+ struct page *page = req->wb_page;
|
|
|
+
|
|
|
+ if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) {
|
|
|
+ if (bytes > hdr->good_bytes)
|
|
|
+ zero_user(page, 0, PAGE_SIZE);
|
|
|
+ else if (hdr->good_bytes - bytes < PAGE_SIZE)
|
|
|
+ zero_user_segment(page,
|
|
|
+ hdr->good_bytes & ~PAGE_MASK,
|
|
|
+ PAGE_SIZE);
|
|
|
}
|
|
|
- } else {
|
|
|
- while (!list_empty(&hdr->pages)) {
|
|
|
- struct nfs_page *req = nfs_list_entry(hdr->pages.next);
|
|
|
-
|
|
|
- if (bytes < hdr->good_bytes)
|
|
|
- if (!PageCompound(req->wb_page))
|
|
|
- set_page_dirty(req->wb_page);
|
|
|
- bytes += req->wb_bytes;
|
|
|
- nfs_list_remove_request(req);
|
|
|
- nfs_direct_readpage_release(req);
|
|
|
+ if (!PageCompound(page)) {
|
|
|
+ if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
|
|
|
+ if (bytes < hdr->good_bytes)
|
|
|
+ set_page_dirty(page);
|
|
|
+ } else
|
|
|
+ set_page_dirty(page);
|
|
|
}
|
|
|
+ bytes += req->wb_bytes;
|
|
|
+ nfs_list_remove_request(req);
|
|
|
+ nfs_direct_readpage_release(req);
|
|
|
}
|
|
|
out_put:
|
|
|
if (put_dreq(dreq))
|