diff --git a/src/system/kernel/cache/file_cache.cpp b/src/system/kernel/cache/file_cache.cpp index 0bd3993b8b..f88adc932b 100644 --- a/src/system/kernel/cache/file_cache.cpp +++ b/src/system/kernel/cache/file_cache.cpp @@ -824,13 +824,6 @@ cache_io(void* _cacheRef, void* cookie, off_t offset, addr_t buffer, cache->MarkPageUnbusy(page); } - if (bytesLeft <= bytesInPage) { - // we've read the last page, so we're done! - locker.Unlock(); - vm_page_unreserve_pages(&reservation); - return B_OK; - } - // If it is cached only, requeue the page, so the respective queue // roughly remains LRU first sorted. if (page->state == PAGE_STATE_CACHED @@ -840,6 +833,13 @@ cache_io(void* _cacheRef, void* cookie, off_t offset, addr_t buffer, DEBUG_PAGE_ACCESS_END(page); } + if (bytesLeft <= bytesInPage) { + // we've read the last page, so we're done! + locker.Unlock(); + vm_page_unreserve_pages(&reservation); + return B_OK; + } + // prepare a potential gap request lastBuffer = buffer + bytesInPage; lastLeft = bytesLeft - bytesInPage;