summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendiadyoin1 <leon.a@serenityos.org>2022-06-18 19:08:18 +0200
committerAndreas Kling <kling@serenityos.org>2022-07-15 12:42:43 +0200
commitc3e57bfccbfab78b4fce94edc8f2ffb33da69d29 (patch)
treec832b1c5ebc3c70704feba6a3d161b288fd00b01
parent10d9bb93be15560f5a30e253028518109ca0c7c1 (diff)
downloadserenity-c3e57bfccbfab78b4fce94edc8f2ffb33da69d29.zip
Kernel: Try to set [cm]time in Inode::did_modify_contents
This indirectly resolves a fixme in sys$msync
-rw-r--r--Kernel/FileSystem/Inode.cpp6
-rw-r--r--Kernel/Syscalls/mmap.cpp1
2 files changed, 6 insertions, 1 deletions
diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp
index 1f59a1d967..3721ccf777 100644
--- a/Kernel/FileSystem/Inode.cpp
+++ b/Kernel/FileSystem/Inode.cpp
@@ -232,6 +232,12 @@ void Inode::did_remove_child(InodeIdentifier, StringView name)
void Inode::did_modify_contents()
{
+ // FIXME: What happens if this fails?
+ // ENOTIMPL would be a meaningless error to return here
+ auto time = kgettimeofday().to_truncated_seconds();
+ (void)set_mtime(time);
+ (void)set_ctime(time);
+
m_watchers.for_each([&](auto& watcher) {
watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ContentModified);
});
diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp
index 8359709bc9..eb7f9b5490 100644
--- a/Kernel/Syscalls/mmap.cpp
+++ b/Kernel/Syscalls/mmap.cpp
@@ -600,7 +600,6 @@ ErrorOr<FlatPtr> Process::sys$msync(Userspace<void*> address, size_t size, int f
// FIXME: Handle MS_ASYNC
TRY(inode_vmobject.sync(offset / PAGE_SIZE, rounded_size / PAGE_SIZE));
// FIXME: Handle MS_INVALIDATE
- // FIXME: If msync() causes any write to a file, the file's st_ctime and st_mtime fields shall be marked for update.
}
return 0;
}