Selaa lähdekoodia

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

This indirectly resolves a fixme in sys$msync
Hendiadyoin1 3 vuotta sitten
vanhempi
commit
c3e57bfccb
2 muutettua tiedostoa jossa 6 lisäystä ja 1 poistoa
  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()
 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) {
     m_watchers.for_each([&](auto& watcher) {
         watcher->notify_inode_event({}, identifier(), InodeWatcherEvent::Type::ContentModified);
         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
         // FIXME: Handle MS_ASYNC
         TRY(inode_vmobject.sync(offset / PAGE_SIZE, rounded_size / PAGE_SIZE));
         TRY(inode_vmobject.sync(offset / PAGE_SIZE, rounded_size / PAGE_SIZE));
         // FIXME: Handle MS_INVALIDATE
         // 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;
     return 0;
 }
 }