From 9e72b7739de05a0fde76a720fabcb639700aa1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 26 Jan 2004 03:38:08 +0000 Subject: [PATCH] Inode::Create() now prints out a reason if new_vnode() failed. If the parent is NULL, Inode::Create() will now set node::parent to the node itself, like BFS is doing it (for root and indices nodes only). Added a temporary hack in Volume::Initialize() to get the inodes freed. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6320 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/Inode.cpp | 10 ++++++++-- src/add-ons/kernel/file_systems/bfs/Volume.cpp | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) 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;