提交 4bd8b010 编写于 作者: T Trond Myklebust

NFS: Simplify the nfs_read_completion functions

Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
Cc: Fred Isaman <iisaman@netapp.com>
上级 25b11dcd
...@@ -243,36 +243,28 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr) ...@@ -243,36 +243,28 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
dreq->count += hdr->good_bytes; dreq->count += hdr->good_bytes;
spin_unlock(&dreq->lock); spin_unlock(&dreq->lock);
if (!test_bit(NFS_IOHDR_ERROR, &hdr->flags)) { while (!list_empty(&hdr->pages)) {
while (!list_empty(&hdr->pages)) { struct nfs_page *req = nfs_list_entry(hdr->pages.next);
struct nfs_page *req = nfs_list_entry(hdr->pages.next); struct page *page = req->wb_page;
struct page *page = req->wb_page;
if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) {
if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) { if (bytes > hdr->good_bytes)
if (bytes > hdr->good_bytes) zero_user(page, 0, PAGE_SIZE);
zero_user(page, 0, PAGE_SIZE); else if (hdr->good_bytes - bytes < PAGE_SIZE)
else if (hdr->good_bytes - bytes < PAGE_SIZE) zero_user_segment(page,
zero_user_segment(page, hdr->good_bytes & ~PAGE_MASK,
hdr->good_bytes & ~PAGE_MASK, PAGE_SIZE);
PAGE_SIZE);
}
bytes += req->wb_bytes;
nfs_list_remove_request(req);
if (!PageCompound(page))
set_page_dirty(page);
nfs_direct_readpage_release(req);
} }
} else { if (!PageCompound(page)) {
while (!list_empty(&hdr->pages)) { if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
struct nfs_page *req = nfs_list_entry(hdr->pages.next); if (bytes < hdr->good_bytes)
set_page_dirty(page);
if (bytes < hdr->good_bytes) } else
if (!PageCompound(req->wb_page)) set_page_dirty(page);
set_page_dirty(req->wb_page);
bytes += req->wb_bytes;
nfs_list_remove_request(req);
nfs_direct_readpage_release(req);
} }
bytes += req->wb_bytes;
nfs_list_remove_request(req);
nfs_direct_readpage_release(req);
} }
out_put: out_put:
if (put_dreq(dreq)) if (put_dreq(dreq))
......
...@@ -179,34 +179,26 @@ static void nfs_read_completion(struct nfs_pgio_header *hdr) ...@@ -179,34 +179,26 @@ static void nfs_read_completion(struct nfs_pgio_header *hdr)
if (test_bit(NFS_IOHDR_REDO, &hdr->flags)) if (test_bit(NFS_IOHDR_REDO, &hdr->flags))
goto out; goto out;
if (!test_bit(NFS_IOHDR_ERROR, &hdr->flags)) { while (!list_empty(&hdr->pages)) {
while (!list_empty(&hdr->pages)) { struct nfs_page *req = nfs_list_entry(hdr->pages.next);
struct nfs_page *req = nfs_list_entry(hdr->pages.next); struct page *page = req->wb_page;
struct page *page = req->wb_page;
if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) {
if (test_bit(NFS_IOHDR_EOF, &hdr->flags)) { if (bytes > hdr->good_bytes)
if (bytes > hdr->good_bytes) zero_user(page, 0, PAGE_SIZE);
zero_user(page, 0, PAGE_SIZE); else if (hdr->good_bytes - bytes < PAGE_SIZE)
else if (hdr->good_bytes - bytes < PAGE_SIZE) zero_user_segment(page,
zero_user_segment(page, hdr->good_bytes & ~PAGE_MASK,
hdr->good_bytes & ~PAGE_MASK, PAGE_SIZE);
PAGE_SIZE);
}
SetPageUptodate(page);
nfs_list_remove_request(req);
nfs_readpage_release(req);
bytes += PAGE_SIZE;
} }
} else { bytes += req->wb_bytes;
while (!list_empty(&hdr->pages)) { if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) {
struct nfs_page *req = nfs_list_entry(hdr->pages.next);
bytes += req->wb_bytes;
if (bytes <= hdr->good_bytes) if (bytes <= hdr->good_bytes)
SetPageUptodate(req->wb_page); SetPageUptodate(page);
nfs_list_remove_request(req); } else
nfs_readpage_release(req); SetPageUptodate(page);
} nfs_list_remove_request(req);
nfs_readpage_release(req);
} }
out: out:
hdr->release(hdr); hdr->release(hdr);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册