mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 05:48:12 +00:00
Kernel: InodeVMObject can't call Inode::size() with interrupts disabled
Inode::size() may try to take a lock, so we can't be calling it with interrupts disabled. This fixes a kernel hang when trying to execute a binary in a TmpFS.
This commit is contained in:
parent
1dc64ec064
commit
aba7829724
2 changed files with 5 additions and 4 deletions
|
@ -5,10 +5,11 @@
|
||||||
|
|
||||||
NonnullRefPtr<InodeVMObject> InodeVMObject::create_with_inode(Inode& inode)
|
NonnullRefPtr<InodeVMObject> InodeVMObject::create_with_inode(Inode& inode)
|
||||||
{
|
{
|
||||||
|
size_t size = inode.size();
|
||||||
InterruptDisabler disabler;
|
InterruptDisabler disabler;
|
||||||
if (inode.vmobject())
|
if (inode.vmobject())
|
||||||
return *inode.vmobject();
|
return *inode.vmobject();
|
||||||
auto vmobject = adopt(*new InodeVMObject(inode));
|
auto vmobject = adopt(*new InodeVMObject(inode, size));
|
||||||
vmobject->inode().set_vmobject(*vmobject);
|
vmobject->inode().set_vmobject(*vmobject);
|
||||||
return vmobject;
|
return vmobject;
|
||||||
}
|
}
|
||||||
|
@ -18,8 +19,8 @@ NonnullRefPtr<VMObject> InodeVMObject::clone()
|
||||||
return adopt(*new InodeVMObject(*this));
|
return adopt(*new InodeVMObject(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
InodeVMObject::InodeVMObject(Inode& inode)
|
InodeVMObject::InodeVMObject(Inode& inode, size_t size)
|
||||||
: VMObject(inode.size())
|
: VMObject(size)
|
||||||
, m_inode(inode)
|
, m_inode(inode)
|
||||||
, m_dirty_pages(page_count(), false)
|
, m_dirty_pages(page_count(), false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,7 @@ public:
|
||||||
int release_all_clean_pages();
|
int release_all_clean_pages();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit InodeVMObject(Inode&);
|
explicit InodeVMObject(Inode&, size_t);
|
||||||
explicit InodeVMObject(const InodeVMObject&);
|
explicit InodeVMObject(const InodeVMObject&);
|
||||||
|
|
||||||
InodeVMObject& operator=(const InodeVMObject&) = delete;
|
InodeVMObject& operator=(const InodeVMObject&) = delete;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue