Serenity Operating System
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}