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
This commit is contained in:
@@ -102,6 +102,7 @@ BufferPool::ReleaseBuffers()
|
|||||||
free(buffer);
|
free(buffer);
|
||||||
buffer = nextBuffer;
|
buffer = nextBuffer;
|
||||||
}
|
}
|
||||||
|
fFirstFree = buffer;
|
||||||
|
|
||||||
release_sem(fLock);
|
release_sem(fLock);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -525,13 +525,16 @@ bfs_ioctl(void *_ns, void *_node, void *_cookie, int cmd, void *buffer, size_t b
|
|||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case IOCTL_FILE_UNCACHED_IO:
|
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 the inode is already set up for uncached access, bail out
|
||||||
if (inode->Flags() & INODE_NO_CACHE) {
|
if (inode->Flags() & INODE_NO_CACHE) {
|
||||||
FATAL(("File %Ld is already uncached\n", inode->ID()));
|
FATAL(("File %Ld is already uncached\n", inode->ID()));
|
||||||
return B_ERROR;
|
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!
|
// ToDo: sync the cache for this file!
|
||||||
// Unfortunately, we can't remove any blocks from the cache in BeOS,
|
// 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());
|
status_t status = volume->Pool().RequestBuffers(volume->BlockSize());
|
||||||
if (status == B_OK)
|
if (status == B_OK)
|
||||||
inode->Node()->flags |= INODE_NO_CACHE;
|
inode->Node()->flags |= INODE_NO_CACHE;
|
||||||
return B_ERROR;
|
return status;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
case 56742:
|
case 56742:
|
||||||
|
|||||||
Reference in New Issue
Block a user