Ver código fonte

Kernel: Try to set [cm]time in Inode::did_modify_contents

This indirectly resolves a fixme in sys$msync
Hendiadyoin1 3 anos atrás
pai
commit
c3e57bfccb
2 arquivos alterados com 6 adições e 1 exclusões
  1. 6 0
      Kernel/FileSystem/Inode.cpp
  2. 0 1
      Kernel/Syscalls/mmap.cpp

+ 6 - 0
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);
     });

+ 0 - 1
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;
 }