From 50a1c6a4fc9bdb2b6ac53850fa020c039e54fcca Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 3 Oct 2008 13:59:49 -0700 Subject: [PATCH] kclient: fix readpages when not all pages are found Adjust the request len, page count when fewer than the desired number of pages are found. --- src/kernel/osd_client.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/kernel/osd_client.c b/src/kernel/osd_client.c index 75a8b05947789..fbff834a128da 100644 --- a/src/kernel/osd_client.c +++ b/src/kernel/osd_client.c @@ -743,6 +743,7 @@ int ceph_osdc_readpages(struct ceph_osd_client *osdc, struct list_head *page_list, int num_pages) { struct ceph_osd_request *req; + struct ceph_osd_request_head *reqhead; struct page *page; pgoff_t next_index; int contig_pages; @@ -779,8 +780,9 @@ int ceph_osdc_readpages(struct ceph_osd_client *osdc, goto out; len = min((contig_pages << PAGE_CACHE_SHIFT) - (off & ~PAGE_CACHE_MASK), len); - dout(10, "readpages contig page extent is %llu~%llu\n", off, len); - + req->r_num_pages = contig_pages; + reqhead = req->r_request->front.iov_base; + reqhead->length = cpu_to_le64(len); dout(10, "readpages final extent is %llu~%llu -> %d pages\n", off, len, req->r_num_pages); rc = do_sync_request(osdc, req); -- 2.39.5