Missing name index update with a late failed rename operation fixed (the
same as in kernel_interface_r5.cpp). {add|remove}_debugger_commands() are now called in B_MODULE_[UN]INIT, no longer in bfs_[un]mount(). Removed empty cache implementation as it's in the kernel itself for now. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7836 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
fcf3d20e94
commit
83d9569570
@ -1,6 +1,6 @@
|
||||
/* kernel_interface - file system interface to BeOS' vnode layer
|
||||
**
|
||||
** Initial version by Axel Dörfler, axeld@pinc-software.de
|
||||
** Copyright 2001-2004, Axel Dörfler, axeld@pinc-software.de
|
||||
** This file may be used under the terms of the OpenBeOS License.
|
||||
*/
|
||||
|
||||
@ -26,10 +26,9 @@
|
||||
# define _IMPEXP_KERNEL
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
#include <lock.h>
|
||||
#include <cache.h>
|
||||
}
|
||||
#include <cache.h>
|
||||
#include <lock.h>
|
||||
|
||||
#include <fs_attr.h>
|
||||
#include <fs_info.h>
|
||||
#include <fs_index.h>
|
||||
@ -49,97 +48,6 @@ strtod(const char */*start*/, char **/*end*/)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
force_cache_flush(int dev, int prefer_log_blocks)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
flush_blocks(int dev, off_t bnum, int nblocks)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
flush_device(int dev, int warn_locked)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
init_cache_for_device(int fd, off_t max_blocks)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
remove_cached_device_blocks(int dev, int allow_write)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
get_block(int dev, off_t bnum, int bsize)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
get_empty_block(int dev, off_t bnum, int bsize)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
release_block(int dev, off_t bnum)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
int
|
||||
mark_blocks_dirty(int dev, off_t bnum, int nblocks)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
cached_read(int dev, off_t bnum, void *data, off_t num_blocks, int bsize)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
cached_write(int dev, off_t bnum, const void *data, off_t num_blocks, int bsize)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
cached_write_locked(int dev, off_t bnum, const void *data, off_t num_blocks, int bsize)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
set_blocks_info(int dev, off_t *blocks, int nblocks,
|
||||
void (*func)(off_t bnum, size_t nblocks, void *arg),
|
||||
void *arg)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
@ -158,10 +66,6 @@ bfs_mount(mount_id mountID, const char *device, void *args, void **data, vnode_i
|
||||
*rootID = volume->ToVnode(volume->Root());
|
||||
INFORM(("mounted \"%s\" (root node at %Ld, device = %s)\n",
|
||||
volume->Name(), *rootID, device));
|
||||
|
||||
#ifdef DEBUG
|
||||
add_debugger_commands();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
delete volume;
|
||||
@ -179,9 +83,6 @@ bfs_unmount(void *ns)
|
||||
status_t status = volume->Unmount();
|
||||
delete volume;
|
||||
|
||||
#ifdef DEBUG
|
||||
remove_debugger_commands();
|
||||
#endif
|
||||
RETURN_ERROR(status);
|
||||
}
|
||||
|
||||
@ -456,7 +357,7 @@ bfs_lookup(void *_ns, void *_directory, const char *file, vnode_id *_vnodeID, in
|
||||
static status_t
|
||||
bfs_ioctl(void *_ns, void *_node, void *_cookie, ulong cmd, void *buffer, size_t bufferLength)
|
||||
{
|
||||
FUNCTION_START(("node = %p, cmd = %d, buf = %p, len = %ld\n", _node, cmd, buffer, bufferLength));
|
||||
FUNCTION_START(("node = %p, cmd = %lu, buf = %p, len = %ld\n", _node, cmd, buffer, bufferLength));
|
||||
|
||||
if (_ns == NULL)
|
||||
return B_BAD_VALUE;
|
||||
@ -985,7 +886,7 @@ bfs_rename(void *_ns, void *_oldDir, const char *oldName, void *_newDir, const c
|
||||
// If anything fails now, we have to remove the inode from the
|
||||
// new directory in any case to restore the previous state
|
||||
status_t bailStatus = B_OK;
|
||||
|
||||
|
||||
// update the name only when they differ
|
||||
bool nameUpdated = false;
|
||||
if (strcmp(oldName, newName)) {
|
||||
@ -996,12 +897,12 @@ bfs_rename(void *_ns, void *_oldDir, const char *oldName, void *_newDir, const c
|
||||
nameUpdated = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (status == B_OK) {
|
||||
status = tree->Remove(&transaction, (const uint8 *)oldName, strlen(oldName), id);
|
||||
if (status == B_OK) {
|
||||
inode->Node()->parent = newDirectory->BlockRun();
|
||||
|
||||
|
||||
// if it's a directory, update the parent directory pointer
|
||||
// in its tree if necessary
|
||||
BPlusTree *movedTree = NULL;
|
||||
@ -1020,6 +921,8 @@ bfs_rename(void *_ns, void *_oldDir, const char *oldName, void *_newDir, const c
|
||||
return B_OK;
|
||||
}
|
||||
}
|
||||
// If we get here, something has gone wrong already!
|
||||
|
||||
// Those better don't fail, or we switch to a read-only
|
||||
// device for safety reasons (Volume::Panic() does this
|
||||
// for us)
|
||||
@ -1030,8 +933,17 @@ bfs_rename(void *_ns, void *_oldDir, const char *oldName, void *_newDir, const c
|
||||
movedTree->Replace(&transaction, (const uint8 *)"..", 2, oldDirectory->ID());
|
||||
}
|
||||
}
|
||||
if (bailStatus == B_OK && nameUpdated)
|
||||
|
||||
if (bailStatus == B_OK && nameUpdated) {
|
||||
bailStatus = inode->SetName(&transaction, oldName);
|
||||
if (status == B_OK) {
|
||||
// update inode and index
|
||||
inode->WriteBack(&transaction);
|
||||
|
||||
Index index(volume);
|
||||
index.UpdateName(&transaction, newName, oldName, inode);
|
||||
}
|
||||
}
|
||||
|
||||
if (bailStatus == B_OK)
|
||||
bailStatus = newTree->Remove(&transaction, (const uint8 *)newName, strlen(newName), id);
|
||||
@ -2003,7 +1915,14 @@ bfs_std_ops(int32 op, ...)
|
||||
{
|
||||
switch (op) {
|
||||
case B_MODULE_INIT:
|
||||
#ifdef DEBUG
|
||||
add_debugger_commands();
|
||||
#endif
|
||||
return B_OK;
|
||||
case B_MODULE_UNINIT:
|
||||
#ifdef DEBUG
|
||||
remove_debugger_commands();
|
||||
#endif
|
||||
return B_OK;
|
||||
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user