diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc index 9449399bf..6543a7980 100644 --- a/repos/os/src/server/vfs/main.cc +++ b/repos/os/src/server/vfs/main.cc @@ -512,6 +512,7 @@ class Vfs_server::Session_component : private Session_resources, } fs_stat.size = vfs_stat.size; + fs_stat.modification_time.value = vfs_stat.modification_time.value; }); return fs_stat; } diff --git a/repos/os/src/server/vfs/node.h b/repos/os/src/server/vfs/node.h index db9425c92..c99199155 100644 --- a/repos/os/src/server/vfs/node.h +++ b/repos/os/src/server/vfs/node.h @@ -379,6 +379,20 @@ class Vfs_server::Io_node : public Vfs_server::Node, /* discard this packet */ _drop_packet(); break; + + case Packet_descriptor::WRITE_TIMESTAMP: + try { + _packet.with_timestamp([&] (File_system::Timestamp const time) { + Vfs::Timestamp ts { .value = time.value }; + _handle.fs().update_modification_timestamp(&_handle, ts); + }); + _packet.succeeded(true); + _ack_packet(0); + } catch (Vfs::File_io_service::Insufficient_buffer) { + /* packet is pending */ + result = false; + } + break; } return result;