From 9edc2b526f673a66ffbb312407bf093c2b84fbd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 8 Nov 2007 14:44:13 +0000 Subject: [PATCH] The reserved pages computation used the same broken logic as read_into_cache() and write_to_cache() before, IOW the cache could reserve too few pages. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22859 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/cache/file_cache.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/system/kernel/cache/file_cache.cpp b/src/system/kernel/cache/file_cache.cpp index 4234950c80..e2248da534 100644 --- a/src/system/kernel/cache/file_cache.cpp +++ b/src/system/kernel/cache/file_cache.cpp @@ -917,8 +917,8 @@ satisfy_cache_io(file_cache_ref *ref, cache_func function, off_t offset, return B_OK; size_t requestSize = buffer - lastBuffer; - reservePages = min_c(MAX_IO_VECS, - (lastLeft - requestSize + B_PAGE_SIZE - 1) >> PAGE_SHIFT); + reservePages = min_c(MAX_IO_VECS, (lastLeft - requestSize + + lastPageOffset + B_PAGE_SIZE - 1) >> PAGE_SHIFT); status_t status = function(ref, lastOffset, lastPageOffset, lastBuffer, requestSize, lastReservedPages, reservePages); @@ -990,8 +990,8 @@ cache_io(void *_cacheRef, off_t offset, addr_t buffer, size_t *_size, int32 lastPageOffset = pageOffset; addr_t lastBuffer = buffer; off_t lastOffset = offset; - size_t lastReservedPages = min_c(MAX_IO_VECS, - (bytesLeft + B_PAGE_SIZE - 1) >> PAGE_SHIFT); + size_t lastReservedPages = min_c(MAX_IO_VECS, (pageOffset + bytesLeft + + B_PAGE_SIZE - 1) >> PAGE_SHIFT); size_t reservePages = 0; reserve_pages(ref, lastReservedPages, doWrite);