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:
parent
64254b5df8
commit
0bebf013e3
2 changed files with 8 additions and 8 deletions
|
@ -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())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue