/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Kernel::Memory { class InodeVMObject : public VMObject { public: virtual ~InodeVMObject() override; Inode& inode() { return *m_inode; } Inode const& inode() const { return *m_inode; } size_t amount_dirty() const; size_t amount_clean() const; int release_all_clean_pages(); int try_release_clean_pages(int page_amount); u32 writable_mappings() const; protected: explicit InodeVMObject(Inode&, FixedArray>&&, Bitmap dirty_pages); explicit InodeVMObject(InodeVMObject const&, FixedArray>&&, Bitmap dirty_pages); InodeVMObject& operator=(InodeVMObject const&) = delete; InodeVMObject& operator=(InodeVMObject&&) = delete; InodeVMObject(InodeVMObject&&) = delete; virtual bool is_inode() const final { return true; } NonnullRefPtr const m_inode; Bitmap m_dirty_pages; }; }