mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 10:08:10 +00:00
Add a VMO pointer to VNode.
This way, if anyone tries to map an already mapped file, we share the VMO.
This commit is contained in:
parent
862f108cb5
commit
3b2dcd5929
8 changed files with 59 additions and 10 deletions
|
@ -180,6 +180,7 @@ auto VirtualFileSystem::allocateNode() -> RetainPtr<Node>
|
|||
ASSERT(node->retainCount == 0);
|
||||
node->retainCount = 1;
|
||||
node->m_vfs = this;
|
||||
node->m_vmo = nullptr;
|
||||
return adopt(*node);
|
||||
}
|
||||
|
||||
|
@ -197,6 +198,8 @@ void VirtualFileSystem::freeNode(Node* node)
|
|||
m_device2vnode.remove(encodedDevice(node->m_characterDevice->major(), node->m_characterDevice->minor()));
|
||||
node->m_characterDevice = nullptr;
|
||||
}
|
||||
node->m_vfs = nullptr;
|
||||
node->m_vmo = nullptr;
|
||||
m_nodeFreeList.append(move(node));
|
||||
}
|
||||
|
||||
|
|
|
@ -65,12 +65,16 @@ public:
|
|||
VirtualFileSystem* vfs() { return m_vfs; }
|
||||
const VirtualFileSystem* vfs() const { return m_vfs; }
|
||||
|
||||
void* vmo() { return m_vmo; }
|
||||
void set_vmo(void* vmo) { m_vmo = vmo; }
|
||||
|
||||
private:
|
||||
friend class VirtualFileSystem;
|
||||
VirtualFileSystem* m_vfs { nullptr };
|
||||
unsigned retainCount { 0 };
|
||||
CharacterDevice* m_characterDevice { nullptr };
|
||||
mutable InodeMetadata m_cachedMetadata;
|
||||
void* m_vmo { nullptr };
|
||||
};
|
||||
|
||||
static VirtualFileSystem& the() PURE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue