Mercurial > nomad
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;