1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:48:11 +00:00

Kernel: Protect InodeWatcher internals with spinlock instead of mutex

This commit is contained in:
Andreas Kling 2022-02-03 15:47:21 +01:00
parent 64254b5df8
commit 0bebf013e3
2 changed files with 8 additions and 8 deletions

View file

@ -24,13 +24,13 @@ InodeWatcher::~InodeWatcher()
bool InodeWatcher::can_read(const OpenFileDescription&, u64) const
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
return !m_queue.is_empty();
}
ErrorOr<size_t> InodeWatcher::read(OpenFileDescription&, u64, UserOrKernelBuffer& buffer, size_t buffer_size)
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
if (m_queue.is_empty())
// can_read will catch the blocking case.
return EAGAIN;
@ -69,7 +69,7 @@ ErrorOr<size_t> InodeWatcher::read(OpenFileDescription&, u64, UserOrKernelBuffer
ErrorOr<void> InodeWatcher::close()
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
for (auto& entry : m_wd_to_watches) {
auto& inode = const_cast<Inode&>(entry.value->inode);
@ -88,7 +88,7 @@ ErrorOr<NonnullOwnPtr<KString>> InodeWatcher::pseudo_path(const OpenFileDescript
void InodeWatcher::notify_inode_event(Badge<Inode>, InodeIdentifier inode_id, InodeWatcherEvent::Type event_type, StringView name)
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
auto it = m_inode_to_watches.find(inode_id);
if (it == m_inode_to_watches.end())
@ -107,7 +107,7 @@ void InodeWatcher::notify_inode_event(Badge<Inode>, InodeIdentifier inode_id, In
ErrorOr<int> InodeWatcher::register_inode(Inode& inode, unsigned event_mask)
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
if (m_inode_to_watches.find(inode.identifier()) != m_inode_to_watches.end())
return EEXIST;
@ -142,7 +142,7 @@ ErrorOr<int> InodeWatcher::register_inode(Inode& inode, unsigned event_mask)
ErrorOr<void> InodeWatcher::unregister_by_wd(int wd)
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
auto it = m_wd_to_watches.find(wd);
if (it == m_wd_to_watches.end())
@ -159,7 +159,7 @@ ErrorOr<void> InodeWatcher::unregister_by_wd(int wd)
void InodeWatcher::unregister_by_inode(Badge<Inode>, InodeIdentifier identifier)
{
MutexLocker locker(m_lock);
SpinlockLocker locker(m_lock);
auto it = m_inode_to_watches.find(identifier);
if (it == m_inode_to_watches.end())