mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 04:08:11 +00:00

This allows userspace to trigger a full (FIXME) flush of a shared file mapping to disk. We iterate over all the mapped pages in the VMObject and write them out to the underlying inode, one by one. This is rather naive, and there's lots of room for improvement. Note that shared file mappings are currently not possible since mmap() returns ENOTSUP for PROT_WRITE+MAP_SHARED. That restriction will be removed in a subsequent commit. :^)
34 lines
880 B
C++
34 lines
880 B
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/Memory/InodeVMObject.h>
|
|
#include <Kernel/UnixTypes.h>
|
|
|
|
namespace Kernel::Memory {
|
|
|
|
class SharedInodeVMObject final : public InodeVMObject {
|
|
AK_MAKE_NONMOVABLE(SharedInodeVMObject);
|
|
|
|
public:
|
|
static ErrorOr<NonnullRefPtr<SharedInodeVMObject>> try_create_with_inode(Inode&);
|
|
virtual ErrorOr<NonnullRefPtr<VMObject>> try_clone() override;
|
|
|
|
ErrorOr<void> sync();
|
|
|
|
private:
|
|
virtual bool is_shared_inode() const override { return true; }
|
|
|
|
explicit SharedInodeVMObject(Inode&, size_t);
|
|
explicit SharedInodeVMObject(SharedInodeVMObject const&);
|
|
|
|
virtual StringView class_name() const override { return "SharedInodeVMObject"sv; }
|
|
|
|
SharedInodeVMObject& operator=(SharedInodeVMObject const&) = delete;
|
|
};
|
|
|
|
}
|