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