From 7c3a45ec5e2387c4a2aa68c6f8bd39f8655db775 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 4 Aug 2007 00:24:13 +0000 Subject: [PATCH] Although probably not used ATM, cache_prefetch_vnode() should respect busy pages. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21815 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/cache/file_cache.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/system/kernel/cache/file_cache.cpp b/src/system/kernel/cache/file_cache.cpp index 7d27b581b9..51e3a0118f 100644 --- a/src/system/kernel/cache/file_cache.cpp +++ b/src/system/kernel/cache/file_cache.cpp @@ -1112,6 +1112,15 @@ cache_prefetch_vnode(void *vnode, off_t offset, size_t size) restart: vm_page *page = vm_cache_lookup_page(cache, offset); if (page != NULL) { + if (page->state == PAGE_STATE_BUSY) { + // if busy retry again a little later + mutex_unlock(&cache->lock); + snooze(20000); + mutex_lock(&cache->lock); + + goto restart; + } + // it is, so let's satisfy in the first part of the request if (lastOffset < offset) { size_t requestSize = offset - lastOffset;