From e238bce6f5a96d7aabf4a18aab2a063eda645759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 12 Aug 2002 16:55:12 +0000 Subject: [PATCH] BufferPool::ReleaseBuffers() didn't set fFirstFree correctly. Setting uncached access to a file no longer returns an error (if it succeeds). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@716 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/BufferPool.cpp | 1 + src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp b/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp index e6182e73aa..246bf3bf4d 100644 --- a/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp +++ b/src/add-ons/kernel/file_systems/bfs/BufferPool.cpp @@ -102,6 +102,7 @@ BufferPool::ReleaseBuffers() free(buffer); buffer = nextBuffer; } + fFirstFree = buffer; release_sem(fLock); } diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index 3809f6ae5a..7ff843f901 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -525,13 +525,16 @@ bfs_ioctl(void *_ns, void *_node, void *_cookie, int cmd, void *buffer, size_t b switch (cmd) { case IOCTL_FILE_UNCACHED_IO: { + if (inode == NULL) + return B_BAD_VALUE; + // if the inode is already set up for uncached access, bail out if (inode->Flags() & INODE_NO_CACHE) { FATAL(("File %Ld is already uncached\n", inode->ID())); return B_ERROR; } - if (inode != NULL) - PRINT(("trying to make access to inode %Ld uncached. Not yet implemented!\n",inode->ID())); + + PRINT(("uncached access to inode %Ld\n", inode->ID())); // ToDo: sync the cache for this file! // Unfortunately, we can't remove any blocks from the cache in BeOS, @@ -543,7 +546,7 @@ bfs_ioctl(void *_ns, void *_node, void *_cookie, int cmd, void *buffer, size_t b status_t status = volume->Pool().RequestBuffers(volume->BlockSize()); if (status == B_OK) inode->Node()->flags |= INODE_NO_CACHE; - return B_ERROR; + return status; } #ifdef DEBUG case 56742: