From b6670723e10c2065fd7c156a93b3046d4c1994fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 12 Nov 2009 12:52:51 +0000 Subject: [PATCH] * Only remove the inode from the Volume::RemovedNodes() list when it has gone through the VFS. * This fixes bug #4942. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34007 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/bfs/Inode.cpp | 3 --- src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/Inode.cpp b/src/add-ons/kernel/file_systems/bfs/Inode.cpp index 8c763c298a..999258b1aa 100644 --- a/src/add-ons/kernel/file_systems/bfs/Inode.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Inode.cpp @@ -398,9 +398,6 @@ Inode::~Inode() file_map_delete(Map()); delete fTree; - if ((Flags() & INODE_DELETED) != 0) - fVolume->RemovedInodes().Remove(this); - rw_lock_destroy(&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 cc17b47f09..d11552e457 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -363,6 +363,8 @@ bfs_remove_vnode(fs_volume* _volume, fs_vnode* _node, bool reenter) return B_OK; } + ASSERT((inode->Flags() & INODE_DELETED) != 0); + status_t status = inode->Free(transaction); if (status == B_OK) { status = transaction.Done(); @@ -371,6 +373,8 @@ bfs_remove_vnode(fs_volume* _volume, fs_vnode* _node, bool reenter) status = transaction.Done(); } + volume->RemovedInodes().Remove(inode); + // TODO: the VFS currently does not allow this to fail delete inode;