|
@@ -5,6 +5,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <Kernel/FileSystem/Inode.h>
|
|
|
+#include <Kernel/Locking/Spinlock.h>
|
|
|
#include <Kernel/Memory/SharedInodeVMObject.h>
|
|
|
|
|
|
namespace Kernel::Memory {
|
|
@@ -34,4 +35,22 @@ SharedInodeVMObject::SharedInodeVMObject(SharedInodeVMObject const& other)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
+ErrorOr<void> SharedInodeVMObject::sync()
|
|
|
+{
|
|
|
+ SpinlockLocker locker(m_lock);
|
|
|
+
|
|
|
+ for (size_t page_index = 0; page_index < page_count(); ++page_index) {
|
|
|
+ auto& physical_page = m_physical_pages[page_index];
|
|
|
+ if (!physical_page)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ u8 page_buffer[PAGE_SIZE];
|
|
|
+ MM.copy_physical_page(*physical_page, page_buffer);
|
|
|
+
|
|
|
+ TRY(m_inode->write_bytes(page_index * PAGE_SIZE, PAGE_SIZE, UserOrKernelBuffer::for_kernel_buffer(page_buffer), nullptr));
|
|
|
+ }
|
|
|
+
|
|
|
+ return {};
|
|
|
+}
|
|
|
+
|
|
|
}
|