FileBackedFileSystem.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/FileSystem/FileSystem.h>
  8. #include <Kernel/FileSystem/OpenFileDescription.h>
  9. namespace Kernel {
  10. class FileBackedFileSystem : public FileSystem {
  11. friend class VirtualFileSystem;
  12. public:
  13. virtual ~FileBackedFileSystem() override;
  14. File& file() { return m_file_description->file(); }
  15. OpenFileDescription& file_description() { return *m_file_description; }
  16. File const& file() const { return m_file_description->file(); }
  17. OpenFileDescription& file_description() const { return *m_file_description; }
  18. protected:
  19. explicit FileBackedFileSystem(OpenFileDescription&);
  20. // Note: We require all FileBackedFileSystem to implement something that actually
  21. // takes into account the fact that we will clean the last mount of the filesystem,
  22. // therefore, removing the file system with it from the Kernel memory.
  23. virtual ErrorOr<void> prepare_to_clear_last_mount() override = 0;
  24. virtual ErrorOr<void> initialize_while_locked() = 0;
  25. virtual bool is_initialized_while_locked() = 0;
  26. private:
  27. virtual ErrorOr<void> initialize() override final;
  28. virtual bool is_file_backed() const override { return true; }
  29. IntrusiveListNode<FileBackedFileSystem> m_file_backed_file_system_node;
  30. NonnullRefPtr<OpenFileDescription> m_file_description;
  31. };
  32. }