summaryrefslogtreecommitdiff
path: root/Kernel
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-07-21 21:23:39 +0200
committerAndreas Kling <kling@serenityos.org>2021-07-21 21:24:26 +0200
commitf9b7ea6de93c71d387052192773641c414718365 (patch)
tree2764f5d70c365da689bf5a2745cee39bed08e860 /Kernel
parent687a12d7fb480cf3586c97e30cdb4f67d7e72da5 (diff)
downloadserenity-f9b7ea6de93c71d387052192773641c414718365.zip
Revert "Kernel: Use IntrusiveList for keeping track of InodeWatchers"
This reverts commit 43d6a7e74ec76bf23f78ca281d54c60bb7b952d1. This breaks multi-inode watchers.
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/FileSystem/Inode.cpp22
-rw-r--r--Kernel/FileSystem/Inode.h6
-rw-r--r--Kernel/FileSystem/InodeWatcher.h5
3 files changed, 14 insertions, 19 deletions
diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp
index 435f7a7eac..d8e31de11c 100644
--- a/Kernel/FileSystem/Inode.cpp
+++ b/Kernel/FileSystem/Inode.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, sin-ack <sin-ack@protonmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
@@ -105,7 +105,7 @@ Inode::~Inode()
all_with_lock().remove(*this);
for (auto& watcher : m_watchers) {
- watcher.unregister_by_inode({}, identifier());
+ watcher->unregister_by_inode({}, identifier());
}
}
@@ -168,15 +168,15 @@ bool Inode::unbind_socket()
void Inode::register_watcher(Badge<InodeWatcher>, InodeWatcher& watcher)
{
MutexLocker locker(m_inode_lock);
- VERIFY(!m_watchers.contains(watcher));
- m_watchers.append(watcher);
+ VERIFY(!m_watchers.contains(&watcher));
+ m_watchers.set(&watcher);
}
void Inode::unregister_watcher(Badge<InodeWatcher>, InodeWatcher& watcher)
{
MutexLocker locker(m_inode_lock);
- VERIFY(m_watchers.contains(watcher));
- m_watchers.remove(watcher);
+ VERIFY(m_watchers.contains(&watcher));
+ m_watchers.remove(&watcher);
}
NonnullRefPtr<FIFO> Inode::fifo()
@@ -209,7 +209,7 @@ void Inode::set_metadata_dirty(bool metadata_dirty)
// FIXME: Maybe we should hook into modification events somewhere else, I'm not sure where.
// We don't always end up on this particular code path, for instance when writing to an ext2fs file.
for (auto& watcher : m_watchers) {
- watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::MetadataModified);
+ watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::MetadataModified);
}
}
}
@@ -219,7 +219,7 @@ void Inode::did_add_child(InodeIdentifier const&, String const& name)
MutexLocker locker(m_inode_lock);
for (auto& watcher : m_watchers) {
- watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildCreated, name);
+ watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildCreated, name);
}
}
@@ -233,7 +233,7 @@ void Inode::did_remove_child(InodeIdentifier const&, String const& name)
}
for (auto& watcher : m_watchers) {
- watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildDeleted, name);
+ watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ChildDeleted, name);
}
}
@@ -241,7 +241,7 @@ void Inode::did_modify_contents()
{
MutexLocker locker(m_inode_lock);
for (auto& watcher : m_watchers) {
- watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ContentModified);
+ watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ContentModified);
}
}
@@ -249,7 +249,7 @@ void Inode::did_delete_self()
{
MutexLocker locker(m_inode_lock);
for (auto& watcher : m_watchers) {
- watcher.notify_inode_event({}, identifier(), InodeWatcherEvent::Type::Deleted);
+ watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::Deleted);
}
}
diff --git a/Kernel/FileSystem/Inode.h b/Kernel/FileSystem/Inode.h
index a055936775..f35a27e71b 100644
--- a/Kernel/FileSystem/Inode.h
+++ b/Kernel/FileSystem/Inode.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, sin-ack <sin-ack@protonmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
@@ -8,6 +8,7 @@
#pragma once
#include <AK/Function.h>
+#include <AK/HashTable.h>
#include <AK/IntrusiveList.h>
#include <AK/RefCounted.h>
#include <AK/String.h>
@@ -16,7 +17,6 @@
#include <Kernel/FileSystem/FileSystem.h>
#include <Kernel/FileSystem/InodeIdentifier.h>
#include <Kernel/FileSystem/InodeMetadata.h>
-#include <Kernel/FileSystem/InodeWatcher.h>
#include <Kernel/Forward.h>
#include <Kernel/KResult.h>
#include <Kernel/Mutex.h>
@@ -118,7 +118,7 @@ private:
InodeIndex m_index { 0 };
WeakPtr<SharedInodeVMObject> m_shared_vmobject;
RefPtr<LocalSocket> m_socket;
- InodeWatcher::List m_watchers;
+ HashTable<InodeWatcher*> m_watchers;
bool m_metadata_dirty { false };
RefPtr<FIFO> m_fifo;
IntrusiveListNode<Inode> m_inode_list_node;
diff --git a/Kernel/FileSystem/InodeWatcher.h b/Kernel/FileSystem/InodeWatcher.h
index 6fe43e7473..e7dca21499 100644
--- a/Kernel/FileSystem/InodeWatcher.h
+++ b/Kernel/FileSystem/InodeWatcher.h
@@ -80,11 +80,6 @@ private:
// watch description, so they will overlap.
HashMap<int, NonnullOwnPtr<WatchDescription>> m_wd_to_watches;
HashMap<InodeIdentifier, WatchDescription*> m_inode_to_watches;
-
- IntrusiveListNode<InodeWatcher> m_list_node;
-
-public:
- using List = IntrusiveList<InodeWatcher, RawPtr<InodeWatcher>, &InodeWatcher::m_list_node>;
};
}