From 26f8f18b1c651cdcb0af9cb1a5e6c4c738d0449b Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 5 Mar 2026 15:56:48 -0500 Subject: [PATCH] BFS: Assert in RemovedInodes(), don't just have a comment. This would've caught the cause of #19953. --- src/add-ons/kernel/file_systems/bfs/Journal.h | 2 +- src/add-ons/kernel/file_systems/bfs/Volume.cpp | 9 +++++++++ src/add-ons/kernel/file_systems/bfs/Volume.h | 3 +-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/Journal.h b/src/add-ons/kernel/file_systems/bfs/Journal.h index 42f6d2a7c5..2e1b4d37d4 100644 --- a/src/add-ons/kernel/file_systems/bfs/Journal.h +++ b/src/add-ons/kernel/file_systems/bfs/Journal.h @@ -28,10 +28,10 @@ public: status_t Lock(Transaction* owner, bool separateSubTransactions); status_t Unlock(Transaction* owner, bool success); + void AssertLocked() { ASSERT_LOCKED_RECURSIVE(&fLock); } status_t ReplayLog(); - Transaction* CurrentTransaction() const { return fOwner; } size_t CurrentTransactionSize() const; bool CurrentTransactionTooLarge() const; diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.cpp b/src/add-ons/kernel/file_systems/bfs/Volume.cpp index 82087f67fe..e3261ce7c9 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Volume.cpp @@ -414,6 +414,15 @@ Volume::WriteSuperBlock() } +InodeList& +Volume::RemovedInodes() +{ + // This list is guarded by the transaction lock. + fJournal->AssertLocked(); + return fRemovedInodes; +} + + void Volume::UpdateLiveQueries(Inode* inode, const char* attribute, int32 type, const uint8* oldKey, size_t oldLength, const uint8* newKey, diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.h b/src/add-ons/kernel/file_systems/bfs/Volume.h index 6352b8650c..245bf8202d 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.h +++ b/src/add-ons/kernel/file_systems/bfs/Volume.h @@ -99,8 +99,7 @@ public: status_t CreateVolumeID(Transaction& transaction); - InodeList& RemovedInodes() { return fRemovedInodes; } - // This list is guarded by the transaction lock + InodeList& RemovedInodes(); // block bitmap BlockAllocator& Allocator();