1
Fork 0
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:
Andreas Kling 2018-11-08 15:39:26 +01:00
parent 862f108cb5
commit 3b2dcd5929
8 changed files with 59 additions and 10 deletions

View file

@ -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));
}

View file

@ -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;