소스 검색

Kernel/DevFS: Add the ability to remove device nodes

In order to make this kind of operation simpler, we no longer use a
Vector to store pointers to DevFSDeviceInode, but an IntrusiveList is
used instead. Also, we only allow to remove device nodes for now, but
in theory we can allow to remove all kinds of files from the DevFS.
Liav A 3 년 전
부모
커밋
750ca2190b
2개의 변경된 파일13개의 추가작업 그리고 0개의 파일을 삭제
  1. 12 0
      Kernel/FileSystem/DevFS.cpp
  2. 1 0
      Kernel/FileSystem/DevFS.h

+ 12 - 0
Kernel/FileSystem/DevFS.cpp

@@ -194,6 +194,18 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::lookup(StringView name)
     }
     return ENOENT;
 }
+
+KResult DevFSRootDirectoryInode::remove_child(const StringView& name)
+{
+    MutexLocker locker(fs().m_lock);
+    for (auto& node : m_nodes) {
+        if (node.name() == name) {
+            m_nodes.remove(node);
+            return KSuccess;
+        }
+    }
+    return KResult(ENOENT);
+}
 KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(StringView name, mode_t mode, dev_t device_mode, UserID, GroupID)
 {
     MutexLocker locker(fs().m_lock);

+ 1 - 0
Kernel/FileSystem/DevFS.h

@@ -151,6 +151,7 @@ private:
     virtual KResult traverse_as_directory(Function<bool(FileSystem::DirectoryEntryView const&)>) const override;
     virtual KResultOr<NonnullRefPtr<Inode>> lookup(StringView name) override;
     virtual InodeMetadata metadata() const override;
+    virtual KResult remove_child(const StringView& name) override;
 };
 
 }