changeset 833:52273821b9f2

objstore: use the page cache for reads Instead of calling the read_page obj op directly, get the page from the page cache. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Tue, 14 Apr 2020 22:18:03 -0400
parents 90b42fb22d6a
children f77897928312
files src/objstore/obj_txn.c
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/objstore/obj_txn.c	Tue Apr 14 21:41:38 2020 -0400
+++ b/src/objstore/obj_txn.c	Tue Apr 14 22:18:03 2020 -0400
@@ -60,7 +60,6 @@
 ssize_t obj_read(struct objver *ver, void *_buf, size_t len,
 		 uint64_t offset)
 {
-	uint8_t page[PAGE_SIZE];
 	uint8_t *buf = _buf;
 	size_t orig_len;
 	int ret;
@@ -79,12 +78,17 @@
 	while (len) {
 		const uint64_t pgoff = offset & PAGE_OFFSET_MASK;
 		const size_t thislen = MIN(len, PAGE_SIZE - pgoff);
+		struct page *page;
 
-		ret = ver->obj->ops->read_page(ver, page, offset / PAGE_SIZE);
-		if (ret)
+		page = page_lookup(ver, offset / PAGE_SIZE, PG_ALLOC | PG_FILL);
+		if (IS_ERR(page)) {
+			ret = PTR_ERR(page);
 			break;
+		}
 
-		memcpy(buf, &page[pgoff], thislen);
+		memcpy(buf, &page->ptr[pgoff], thislen);
+
+		page_unlock(page);
 
 		buf += thislen;
 		len -= thislen;