Serenity Operating System
1/*
2 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <Kernel/Memory/InodeVMObject.h>
10#include <Kernel/UnixTypes.h>
11
12namespace Kernel::Memory {
13
14class PrivateInodeVMObject final : public InodeVMObject {
15 AK_MAKE_NONMOVABLE(PrivateInodeVMObject);
16
17public:
18 virtual ~PrivateInodeVMObject() override;
19
20 static ErrorOr<NonnullLockRefPtr<PrivateInodeVMObject>> try_create_with_inode(Inode&);
21 static ErrorOr<NonnullLockRefPtr<PrivateInodeVMObject>> try_create_with_inode_and_range(Inode&, u64 offset, size_t range_size);
22 virtual ErrorOr<NonnullLockRefPtr<VMObject>> try_clone() override;
23
24private:
25 virtual bool is_private_inode() const override { return true; }
26
27 explicit PrivateInodeVMObject(Inode&, FixedArray<RefPtr<PhysicalPage>>&&, Bitmap dirty_pages);
28 explicit PrivateInodeVMObject(PrivateInodeVMObject const&, FixedArray<RefPtr<PhysicalPage>>&&, Bitmap dirty_pages);
29
30 virtual StringView class_name() const override { return "PrivateInodeVMObject"sv; }
31
32 PrivateInodeVMObject& operator=(PrivateInodeVMObject const&) = delete;
33};
34
35}