1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 23:07:34 +00:00

Kernel: Rename InodeVMObject => SharedInodeVMObject

This commit is contained in:
Andreas Kling 2020-02-28 20:07:51 +01:00
parent 46256da7b0
commit 07a26aece3
9 changed files with 63 additions and 63 deletions

View file

@ -29,7 +29,7 @@
#include <Kernel/FileSystem/Inode.h> #include <Kernel/FileSystem/Inode.h>
#include <Kernel/FileSystem/InodeWatcher.h> #include <Kernel/FileSystem/InodeWatcher.h>
#include <Kernel/Net/LocalSocket.h> #include <Kernel/Net/LocalSocket.h>
#include <Kernel/VM/InodeVMObject.h> #include <Kernel/VM/SharedInodeVMObject.h>
#include <Kernel/FileSystem/VirtualFileSystem.h> #include <Kernel/FileSystem/VirtualFileSystem.h>
#include <Kernel/FileSystem/Custody.h> #include <Kernel/FileSystem/Custody.h>
@ -128,14 +128,14 @@ void Inode::will_be_destroyed()
void Inode::inode_contents_changed(off_t offset, ssize_t size, const u8* data) void Inode::inode_contents_changed(off_t offset, ssize_t size, const u8* data)
{ {
if (m_vmobject) if (m_shared_vmobject)
m_vmobject->inode_contents_changed({}, offset, size, data); m_shared_vmobject->inode_contents_changed({}, offset, size, data);
} }
void Inode::inode_size_changed(size_t old_size, size_t new_size) void Inode::inode_size_changed(size_t old_size, size_t new_size)
{ {
if (m_vmobject) if (m_shared_vmobject)
m_vmobject->inode_size_changed({}, old_size, new_size); m_shared_vmobject->inode_size_changed({}, old_size, new_size);
} }
int Inode::set_atime(time_t) int Inode::set_atime(time_t)
@ -163,9 +163,9 @@ KResult Inode::decrement_link_count()
return KResult(-ENOTIMPL); return KResult(-ENOTIMPL);
} }
void Inode::set_vmobject(VMObject& vmobject) void Inode::set_shared_vmobject(SharedInodeVMObject& vmobject)
{ {
m_vmobject = vmobject.make_weak_ptr(); m_shared_vmobject = vmobject.make_weak_ptr();
} }
bool Inode::bind_socket(LocalSocket& socket) bool Inode::bind_socket(LocalSocket& socket)

View file

@ -99,9 +99,9 @@ public:
void will_be_destroyed(); void will_be_destroyed();
void set_vmobject(VMObject&); void set_shared_vmobject(SharedInodeVMObject&);
InodeVMObject* vmobject() { return m_vmobject.ptr(); } SharedInodeVMObject* shared_vmobject() { return m_shared_vmobject.ptr(); }
const InodeVMObject* vmobject() const { return m_vmobject.ptr(); } const SharedInodeVMObject* shared_vmobject() const { return m_shared_vmobject.ptr(); }
static void sync(); static void sync();
@ -125,7 +125,7 @@ protected:
private: private:
FS& m_fs; FS& m_fs;
unsigned m_index { 0 }; unsigned m_index { 0 };
WeakPtr<InodeVMObject> m_vmobject; WeakPtr<SharedInodeVMObject> m_shared_vmobject;
RefPtr<LocalSocket> m_socket; RefPtr<LocalSocket> m_socket;
HashTable<InodeWatcher*> m_watchers; HashTable<InodeWatcher*> m_watchers;
bool m_metadata_dirty { false }; bool m_metadata_dirty { false };

View file

@ -39,7 +39,7 @@ class FileDescription;
class IPv4Socket; class IPv4Socket;
class Inode; class Inode;
class InodeIdentifier; class InodeIdentifier;
class InodeVMObject; class SharedInodeVMObject;
class InodeWatcher; class InodeWatcher;
class KBuffer; class KBuffer;
class KResult; class KResult;

View file

@ -101,7 +101,6 @@ OBJS = \
TTY/VirtualConsole.o \ TTY/VirtualConsole.o \
Thread.o \ Thread.o \
VM/AnonymousVMObject.o \ VM/AnonymousVMObject.o \
VM/InodeVMObject.o \
VM/MemoryManager.o \ VM/MemoryManager.o \
VM/PageDirectory.o \ VM/PageDirectory.o \
VM/PhysicalPage.o \ VM/PhysicalPage.o \
@ -109,6 +108,7 @@ OBJS = \
VM/PurgeableVMObject.o \ VM/PurgeableVMObject.o \
VM/RangeAllocator.o \ VM/RangeAllocator.o \
VM/Region.o \ VM/Region.o \
VM/SharedInodeVMObject.o \
VM/VMObject.o \ VM/VMObject.o \
ACPI/ACPIParser.o \ ACPI/ACPIParser.o \
ACPI/ACPIStaticParser.o \ ACPI/ACPIStaticParser.o \

View file

@ -66,7 +66,7 @@
#include <Kernel/TTY/MasterPTY.h> #include <Kernel/TTY/MasterPTY.h>
#include <Kernel/TTY/TTY.h> #include <Kernel/TTY/TTY.h>
#include <Kernel/Thread.h> #include <Kernel/Thread.h>
#include <Kernel/VM/InodeVMObject.h> #include <Kernel/VM/SharedInodeVMObject.h>
#include <Kernel/VM/PageDirectory.h> #include <Kernel/VM/PageDirectory.h>
#include <Kernel/VM/PurgeableVMObject.h> #include <Kernel/VM/PurgeableVMObject.h>
#include <LibBareMetal/IO.h> #include <LibBareMetal/IO.h>
@ -340,10 +340,10 @@ static bool validate_inode_mmap_prot(const Process& process, int prot, const Ino
if ((prot & PROT_READ) && !metadata.may_read(process)) if ((prot & PROT_READ) && !metadata.may_read(process))
return false; return false;
InterruptDisabler disabler; InterruptDisabler disabler;
if (inode.vmobject()) { if (inode.shared_vmobject()) {
if ((prot & PROT_EXEC) && inode.vmobject()->writable_mappings()) if ((prot & PROT_EXEC) && inode.shared_vmobject()->writable_mappings())
return false; return false;
if ((prot & PROT_WRITE) && inode.vmobject()->executable_mappings()) if ((prot & PROT_WRITE) && inode.shared_vmobject()->executable_mappings())
return false; return false;
} }
return true; return true;
@ -548,7 +548,7 @@ int Process::sys$mprotect(void* addr, size_t size, int prot)
if (whole_region->access() == prot_to_region_access_flags(prot)) if (whole_region->access() == prot_to_region_access_flags(prot))
return 0; return 0;
if (whole_region->vmobject().is_inode() if (whole_region->vmobject().is_inode()
&& !validate_inode_mmap_prot(*this, prot, static_cast<const InodeVMObject&>(whole_region->vmobject()).inode())) { && !validate_inode_mmap_prot(*this, prot, static_cast<const SharedInodeVMObject&>(whole_region->vmobject()).inode())) {
return -EACCES; return -EACCES;
} }
whole_region->set_readable(prot & PROT_READ); whole_region->set_readable(prot & PROT_READ);
@ -567,7 +567,7 @@ int Process::sys$mprotect(void* addr, size_t size, int prot)
if (old_region->access() == prot_to_region_access_flags(prot)) if (old_region->access() == prot_to_region_access_flags(prot))
return 0; return 0;
if (old_region->vmobject().is_inode() if (old_region->vmobject().is_inode()
&& !validate_inode_mmap_prot(*this, prot, static_cast<const InodeVMObject&>(old_region->vmobject()).inode())) { && !validate_inode_mmap_prot(*this, prot, static_cast<const SharedInodeVMObject&>(old_region->vmobject()).inode())) {
return -EACCES; return -EACCES;
} }
@ -663,12 +663,12 @@ int Process::sys$purge(int mode)
} }
} }
if (mode & PURGE_ALL_CLEAN_INODE) { if (mode & PURGE_ALL_CLEAN_INODE) {
NonnullRefPtrVector<InodeVMObject> vmobjects; NonnullRefPtrVector<SharedInodeVMObject> vmobjects;
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
MM.for_each_vmobject([&](auto& vmobject) { MM.for_each_vmobject([&](auto& vmobject) {
if (vmobject.is_inode()) if (vmobject.is_inode())
vmobjects.append(static_cast<InodeVMObject&>(vmobject)); vmobjects.append(static_cast<SharedInodeVMObject&>(vmobject));
return IterationDecision::Continue; return IterationDecision::Continue;
}); });
} }
@ -816,14 +816,14 @@ int Process::do_exec(NonnullRefPtr<FileDescription> main_program_description, Ve
if (parts.is_empty()) if (parts.is_empty())
return -ENOENT; return -ENOENT;
RefPtr<InodeVMObject> vmobject; RefPtr<SharedInodeVMObject> vmobject;
if (interpreter_description) { if (interpreter_description) {
vmobject = InodeVMObject::create_with_inode(*interpreter_description->inode()); vmobject = SharedInodeVMObject::create_with_inode(*interpreter_description->inode());
} else { } else {
vmobject = InodeVMObject::create_with_inode(*main_program_description->inode()); vmobject = SharedInodeVMObject::create_with_inode(*main_program_description->inode());
} }
if (static_cast<const InodeVMObject&>(*vmobject).writable_mappings()) { if (static_cast<const SharedInodeVMObject&>(*vmobject).writable_mappings()) {
dbg() << "Refusing to execute a write-mapped program"; dbg() << "Refusing to execute a write-mapped program";
return -ETXTBSY; return -ETXTBSY;
} }
@ -3107,10 +3107,10 @@ size_t Process::amount_dirty_private() const
size_t Process::amount_clean_inode() const size_t Process::amount_clean_inode() const
{ {
HashTable<const InodeVMObject*> vmobjects; HashTable<const SharedInodeVMObject*> vmobjects;
for (auto& region : m_regions) { for (auto& region : m_regions) {
if (region.vmobject().is_inode()) if (region.vmobject().is_inode())
vmobjects.set(&static_cast<const InodeVMObject&>(region.vmobject())); vmobjects.set(&static_cast<const SharedInodeVMObject&>(region.vmobject()));
} }
size_t amount = 0; size_t amount = 0;
for (auto& vmobject : vmobjects) for (auto& vmobject : vmobjects)

View file

@ -31,7 +31,7 @@
#include <Kernel/FileSystem/Inode.h> #include <Kernel/FileSystem/Inode.h>
#include <Kernel/Multiboot.h> #include <Kernel/Multiboot.h>
#include <Kernel/VM/AnonymousVMObject.h> #include <Kernel/VM/AnonymousVMObject.h>
#include <Kernel/VM/InodeVMObject.h> #include <Kernel/VM/SharedInodeVMObject.h>
#include <Kernel/VM/MemoryManager.h> #include <Kernel/VM/MemoryManager.h>
#include <Kernel/VM/PageDirectory.h> #include <Kernel/VM/PageDirectory.h>
#include <Kernel/VM/PhysicalRegion.h> #include <Kernel/VM/PhysicalRegion.h>

View file

@ -28,7 +28,7 @@
#include <Kernel/Process.h> #include <Kernel/Process.h>
#include <Kernel/Thread.h> #include <Kernel/Thread.h>
#include <Kernel/VM/AnonymousVMObject.h> #include <Kernel/VM/AnonymousVMObject.h>
#include <Kernel/VM/InodeVMObject.h> #include <Kernel/VM/SharedInodeVMObject.h>
#include <Kernel/VM/MemoryManager.h> #include <Kernel/VM/MemoryManager.h>
#include <Kernel/VM/PageDirectory.h> #include <Kernel/VM/PageDirectory.h>
#include <Kernel/VM/Region.h> #include <Kernel/VM/Region.h>
@ -50,7 +50,7 @@ Region::Region(const Range& range, const String& name, u8 access, bool cacheable
Region::Region(const Range& range, NonnullRefPtr<Inode> inode, const String& name, u8 access, bool cacheable) Region::Region(const Range& range, NonnullRefPtr<Inode> inode, const String& name, u8 access, bool cacheable)
: m_range(range) : m_range(range)
, m_vmobject(InodeVMObject::create_with_inode(*inode)) , m_vmobject(SharedInodeVMObject::create_with_inode(*inode))
, m_name(name) , m_name(name)
, m_access(access) , m_access(access)
, m_cacheable(cacheable) , m_cacheable(cacheable)
@ -86,7 +86,7 @@ NonnullOwnPtr<Region> Region::clone()
{ {
ASSERT(Process::current); ASSERT(Process::current);
// FIXME: What should we do for privately mapped InodeVMObjects? // FIXME: What should we do for privately mapped SharedInodeVMObjects?
if (m_shared || vmobject().is_inode()) { if (m_shared || vmobject().is_inode()) {
ASSERT(!m_stack); ASSERT(!m_stack);
#ifdef MM_DEBUG #ifdef MM_DEBUG
@ -167,7 +167,7 @@ size_t Region::amount_dirty() const
{ {
if (!vmobject().is_inode()) if (!vmobject().is_inode())
return amount_resident(); return amount_resident();
return static_cast<const InodeVMObject&>(vmobject()).amount_dirty(); return static_cast<const SharedInodeVMObject&>(vmobject()).amount_dirty();
} }
size_t Region::amount_resident() const size_t Region::amount_resident() const
@ -452,7 +452,7 @@ PageFaultResponse Region::handle_inode_fault(size_t page_index_in_region)
LOCKER(vmobject().m_paging_lock); LOCKER(vmobject().m_paging_lock);
cli(); cli();
auto& inode_vmobject = static_cast<InodeVMObject&>(vmobject()); auto& inode_vmobject = static_cast<SharedInodeVMObject&>(vmobject());
auto& vmobject_physical_page_entry = inode_vmobject.physical_pages()[first_page_index() + page_index_in_region]; auto& vmobject_physical_page_entry = inode_vmobject.physical_pages()[first_page_index() + page_index_in_region];
#ifdef PAGE_FAULT_DEBUG #ifdef PAGE_FAULT_DEBUG

View file

@ -25,46 +25,46 @@
*/ */
#include <Kernel/FileSystem/Inode.h> #include <Kernel/FileSystem/Inode.h>
#include <Kernel/VM/InodeVMObject.h> #include <Kernel/VM/SharedInodeVMObject.h>
#include <Kernel/VM/MemoryManager.h> #include <Kernel/VM/MemoryManager.h>
#include <Kernel/VM/Region.h> #include <Kernel/VM/Region.h>
namespace Kernel { namespace Kernel {
NonnullRefPtr<InodeVMObject> InodeVMObject::create_with_inode(Inode& inode) NonnullRefPtr<SharedInodeVMObject> SharedInodeVMObject::create_with_inode(Inode& inode)
{ {
size_t size = inode.size(); size_t size = inode.size();
if (inode.vmobject()) if (inode.shared_vmobject())
return *inode.vmobject(); return *inode.shared_vmobject();
auto vmobject = adopt(*new InodeVMObject(inode, size)); auto vmobject = adopt(*new SharedInodeVMObject(inode, size));
vmobject->inode().set_vmobject(*vmobject); vmobject->inode().set_shared_vmobject(*vmobject);
return vmobject; return vmobject;
} }
NonnullRefPtr<VMObject> InodeVMObject::clone() NonnullRefPtr<VMObject> SharedInodeVMObject::clone()
{ {
return adopt(*new InodeVMObject(*this)); return adopt(*new SharedInodeVMObject(*this));
} }
InodeVMObject::InodeVMObject(Inode& inode, size_t size) SharedInodeVMObject::SharedInodeVMObject(Inode& inode, size_t size)
: VMObject(size) : VMObject(size)
, m_inode(inode) , m_inode(inode)
, m_dirty_pages(page_count(), false) , m_dirty_pages(page_count(), false)
{ {
} }
InodeVMObject::InodeVMObject(const InodeVMObject& other) SharedInodeVMObject::SharedInodeVMObject(const SharedInodeVMObject& other)
: VMObject(other) : VMObject(other)
, m_inode(other.m_inode) , m_inode(other.m_inode)
{ {
} }
InodeVMObject::~InodeVMObject() SharedInodeVMObject::~SharedInodeVMObject()
{ {
ASSERT(inode().vmobject() == this); ASSERT(inode().shared_vmobject() == this);
} }
size_t InodeVMObject::amount_clean() const size_t SharedInodeVMObject::amount_clean() const
{ {
size_t count = 0; size_t count = 0;
ASSERT(page_count() == (size_t)m_dirty_pages.size()); ASSERT(page_count() == (size_t)m_dirty_pages.size());
@ -75,7 +75,7 @@ size_t InodeVMObject::amount_clean() const
return count * PAGE_SIZE; return count * PAGE_SIZE;
} }
size_t InodeVMObject::amount_dirty() const size_t SharedInodeVMObject::amount_dirty() const
{ {
size_t count = 0; size_t count = 0;
for (size_t i = 0; i < m_dirty_pages.size(); ++i) { for (size_t i = 0; i < m_dirty_pages.size(); ++i) {
@ -85,7 +85,7 @@ size_t InodeVMObject::amount_dirty() const
return count * PAGE_SIZE; return count * PAGE_SIZE;
} }
void InodeVMObject::inode_size_changed(Badge<Inode>, size_t old_size, size_t new_size) void SharedInodeVMObject::inode_size_changed(Badge<Inode>, size_t old_size, size_t new_size)
{ {
dbg() << "VMObject::inode_size_changed: {" << m_inode->fsid() << ":" << m_inode->index() << "} " << old_size << " -> " << new_size; dbg() << "VMObject::inode_size_changed: {" << m_inode->fsid() << ":" << m_inode->index() << "} " << old_size << " -> " << new_size;
@ -102,7 +102,7 @@ void InodeVMObject::inode_size_changed(Badge<Inode>, size_t old_size, size_t new
}); });
} }
void InodeVMObject::inode_contents_changed(Badge<Inode>, off_t offset, ssize_t size, const u8* data) void SharedInodeVMObject::inode_contents_changed(Badge<Inode>, off_t offset, ssize_t size, const u8* data)
{ {
(void)size; (void)size;
(void)data; (void)data;
@ -153,13 +153,13 @@ void InodeVMObject::inode_contents_changed(Badge<Inode>, off_t offset, ssize_t s
}); });
} }
int InodeVMObject::release_all_clean_pages() int SharedInodeVMObject::release_all_clean_pages()
{ {
LOCKER(m_paging_lock); LOCKER(m_paging_lock);
return release_all_clean_pages_impl(); return release_all_clean_pages_impl();
} }
int InodeVMObject::release_all_clean_pages_impl() int SharedInodeVMObject::release_all_clean_pages_impl()
{ {
int count = 0; int count = 0;
InterruptDisabler disabler; InterruptDisabler disabler;
@ -175,20 +175,20 @@ int InodeVMObject::release_all_clean_pages_impl()
return count; return count;
} }
u32 InodeVMObject::writable_mappings() const u32 SharedInodeVMObject::writable_mappings() const
{ {
u32 count = 0; u32 count = 0;
const_cast<InodeVMObject&>(*this).for_each_region([&](auto& region) { const_cast<SharedInodeVMObject&>(*this).for_each_region([&](auto& region) {
if (region.is_writable()) if (region.is_writable())
++count; ++count;
}); });
return count; return count;
} }
u32 InodeVMObject::executable_mappings() const u32 SharedInodeVMObject::executable_mappings() const
{ {
u32 count = 0; u32 count = 0;
const_cast<InodeVMObject&>(*this).for_each_region([&](auto& region) { const_cast<SharedInodeVMObject&>(*this).for_each_region([&](auto& region) {
if (region.is_executable()) if (region.is_executable())
++count; ++count;
}); });

View file

@ -32,11 +32,11 @@
namespace Kernel { namespace Kernel {
class InodeVMObject final : public VMObject { class SharedInodeVMObject final : public VMObject {
public: public:
virtual ~InodeVMObject() override; virtual ~SharedInodeVMObject() override;
static NonnullRefPtr<InodeVMObject> create_with_inode(Inode&); static NonnullRefPtr<SharedInodeVMObject> create_with_inode(Inode&);
virtual NonnullRefPtr<VMObject> clone() override; virtual NonnullRefPtr<VMObject> clone() override;
Inode& inode() { return *m_inode; } Inode& inode() { return *m_inode; }
@ -54,12 +54,12 @@ public:
u32 executable_mappings() const; u32 executable_mappings() const;
private: private:
explicit InodeVMObject(Inode&, size_t); explicit SharedInodeVMObject(Inode&, size_t);
explicit InodeVMObject(const InodeVMObject&); explicit SharedInodeVMObject(const SharedInodeVMObject&);
InodeVMObject& operator=(const InodeVMObject&) = delete; SharedInodeVMObject& operator=(const SharedInodeVMObject&) = delete;
InodeVMObject& operator=(InodeVMObject&&) = delete; SharedInodeVMObject& operator=(SharedInodeVMObject&&) = delete;
InodeVMObject(InodeVMObject&&) = delete; SharedInodeVMObject(SharedInodeVMObject&&) = delete;
virtual bool is_inode() const override { return true; } virtual bool is_inode() const override { return true; }