From 5180e41918d6bd0eaf548b0e14d26c89ac02d4a3 Mon Sep 17 00:00:00 2001 From: Fabian Dellwing Date: Mon, 12 Feb 2024 20:25:34 +0100 Subject: [PATCH] Kernel: Call `did_modify_contents()` after `truncate()` Truncating a file should absolutly mark it as modified. With this change our `tail` implementation can correctly handle it. --- Kernel/FileSystem/Ext2FS/Inode.cpp | 1 + Kernel/FileSystem/InodeFile.cpp | 1 + Kernel/FileSystem/RAMFS/Inode.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/Kernel/FileSystem/Ext2FS/Inode.cpp b/Kernel/FileSystem/Ext2FS/Inode.cpp index 868b6aa253..a555ee1653 100644 --- a/Kernel/FileSystem/Ext2FS/Inode.cpp +++ b/Kernel/FileSystem/Ext2FS/Inode.cpp @@ -1078,6 +1078,7 @@ ErrorOr Ext2FSInode::truncate(u64 size) return {}; TRY(resize(size)); set_metadata_dirty(true); + did_modify_contents(); return {}; } diff --git a/Kernel/FileSystem/InodeFile.cpp b/Kernel/FileSystem/InodeFile.cpp index cd429b101b..b646e39b7c 100644 --- a/Kernel/FileSystem/InodeFile.cpp +++ b/Kernel/FileSystem/InodeFile.cpp @@ -96,6 +96,7 @@ ErrorOr> InodeFile::pseudo_path(OpenFileDescription const ErrorOr InodeFile::truncate(u64 size) { TRY(m_inode->truncate(size)); + // FIXME: Make sure that the timestamps are updated by Inode::truncate for all filesystems before removing this. auto truncated_at = kgettimeofday(); TRY(m_inode->update_timestamps({}, truncated_at, truncated_at)); return {}; diff --git a/Kernel/FileSystem/RAMFS/Inode.cpp b/Kernel/FileSystem/RAMFS/Inode.cpp index d96bffd4d7..ae0ada01f6 100644 --- a/Kernel/FileSystem/RAMFS/Inode.cpp +++ b/Kernel/FileSystem/RAMFS/Inode.cpp @@ -380,6 +380,7 @@ ErrorOr RAMFSInode::truncate(u64 size) } m_metadata.size = size; set_metadata_dirty(true); + did_modify_contents(); return {}; }