Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/Bitmap.h>
10#include <Kernel/Memory/VMObject.h>
11#include <Kernel/UnixTypes.h>
12
13namespace Kernel::Memory {
14
15class InodeVMObject : public VMObject {
16public:
17 virtual ~InodeVMObject() override;
18
19 Inode& inode() { return *m_inode; }
20 Inode const& inode() const { return *m_inode; }
21
22 size_t amount_dirty() const;
23 size_t amount_clean() const;
24
25 int release_all_clean_pages();
26 int try_release_clean_pages(int page_amount);
27
28 u32 writable_mappings() const;
29
30protected:
31 explicit InodeVMObject(Inode&, FixedArray<RefPtr<PhysicalPage>>&&, Bitmap dirty_pages);
32 explicit InodeVMObject(InodeVMObject const&, FixedArray<RefPtr<PhysicalPage>>&&, Bitmap dirty_pages);
33
34 InodeVMObject& operator=(InodeVMObject const&) = delete;
35 InodeVMObject& operator=(InodeVMObject&&) = delete;
36 InodeVMObject(InodeVMObject&&) = delete;
37
38 virtual bool is_inode() const final { return true; }
39
40 NonnullRefPtr<Inode> m_inode;
41 Bitmap m_dirty_pages;
42};
43
44}