diff --git a/src/add-ons/kernel/file_systems/bfs/Inode.cpp b/src/add-ons/kernel/file_systems/bfs/Inode.cpp index d325723baf..ce4ae8ff84 100644 --- a/src/add-ons/kernel/file_systems/bfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Inode.cpp @@ -1965,7 +1965,12 @@ Inode::Create(Transaction *transaction, Inode *parent, const char *name, int32 m bfs_inode *node = inode->Node(); - node->parent = parentRun; + if (parent == NULL) { + // we set the parent to itself in this case + // (only happens for the root and indices node) + node->parent = run; + } else + node->parent = parentRun; node->uid = HOST_ENDIAN_TO_BFS_INT32(geteuid()); node->gid = HOST_ENDIAN_TO_BFS_INT32(parent ? parent->Node()->gid : getegid()); @@ -2035,8 +2040,9 @@ Inode::Create(Transaction *transaction, Inode *parent, const char *name, int32 m index.InsertLastModified(transaction, inode); } - if (new_vnode(volume->ID(), inode->ID(), inode) != B_OK) { + if ((status = new_vnode(volume->ID(), inode->ID(), inode)) != B_OK) { // this is a really fatal error, and we can't recover from that + FATAL(("new_vnode() failed with: %s\n", strerror(status))); DIE(("new_vnode() failed for inode!")); } diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.cpp b/src/add-ons/kernel/file_systems/bfs/Volume.cpp index e5bb0b808e..cb8281d2cb 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Volume.cpp @@ -576,6 +576,11 @@ Volume::Initialize(const char *device, const char *name, uint32 blockSize, uint3 if (fIndicesNode != NULL) put_vnode(ID(), fIndicesNode->ID()); + delete fIndicesNode; + delete fRootNode; + // ToDo: this is a temporary hack until new_vnode()/put_vnode() is working + // correctly in the mkbfs command + Sync(); opener.RemoveCache(ALLOW_WRITES); return B_OK;