diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp index aa1c97b4fa..ec410bcac3 100644 --- a/Kernel/FileSystem/Inode.cpp +++ b/Kernel/FileSystem/Inode.cpp @@ -36,8 +36,12 @@ namespace Kernel { +static SpinLock s_all_inodes_lock; + InlineLinkedList& all_inodes() { + ASSERT(s_all_inodes_lock.is_locked()); + static InlineLinkedList* list; if (!list) list = new InlineLinkedList; @@ -48,7 +52,7 @@ void Inode::sync() { NonnullRefPtrVector inodes; { - InterruptDisabler disabler; + ScopedSpinLock all_inodes_lock(s_all_inodes_lock); for (auto& inode : all_inodes()) { if (inode.is_metadata_dirty()) inodes.append(inode); @@ -111,11 +115,13 @@ Inode::Inode(FS& fs, unsigned index) : m_fs(fs) , m_index(index) { + ScopedSpinLock all_inodes_lock(s_all_inodes_lock); all_inodes().append(this); } Inode::~Inode() { + ScopedSpinLock all_inodes_lock(s_all_inodes_lock); all_inodes().remove(this); }