From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E44243148DA for ; Fri, 12 Dec 2025 09:34:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765532057; cv=none; b=MrDhjGxOqe1rkdHQE4U6lbetGgvLiIeGxI0+zc942MQ40/maN3F4GYmXPVYqIeEBDFPGP8s6/g2CQSihjEcQomOmTjT2gl79AeNlusVUPMGVVGcy27p7/MPphHfGxSrNj8nttdNvW8y52LeOCtgAHzOMyr7Fk2GQuWEjGs8gcsY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765532057; c=relaxed/simple; bh=DyuyJZr/zGOCjSvf0bfQ4OmRhKJdxqwmWDZvUn80e9g=; h=Message-ID:Date:MIME-Version:From:Subject:To:Cc:Content-Type; b=qVUM/oHUOj0k9kwp/TWslmNbU2unKtl/7Tm8tUUwou0vtxCY5iAuNXsGMRHbPnyrNIAjl6bd6U0+rQSA4kyd2a0Y8L2JtlqAmvp27rCRRnTCO5RzUE0T5wJj9R9F2xtKnDIgcM4G1A60+JzhMEaUM0say2pV7UtBBW+pBdpqLrQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Mm7x1uSa; arc=none smtp.client-ip=209.85.167.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mm7x1uSa" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-59581e32163so1212903e87.1 for ; Fri, 12 Dec 2025 01:34:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765532052; x=1766136852; darn=vger.kernel.org; h=content-transfer-encoding:content-language:cc:to:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=4AWttxVRHI1d6ipzZzd8zoDg1U+sxthQSDMa6ba25Zk=; b=Mm7x1uSa+3SuRbfpJUQ0eviwi4bQTMqFPVAQZ6P336uqLcXFs4mOxH86PMNe8fau7a zg9HaCCzFoBNCEQMS8Z/emRKnccWD1bPLadQ7dXFmUuquX+vBzLzRpF+DAn+94jJwJ51 XubNFWJcr8+uTekSVBdtJfDYKwxOdAvtpILSGA/LjoAywwVhxJKDu97Gzx1bKxZgwmIm E/7mp755Ha+NZJMaIpO+jVknLl22RqtD9qJHVx9iizhMfz0Znb2GVZ/TZ0FrzmyJ6mpy DgyOFvUZtd7foXsVfC2NdBefwmbUDdP4awPFXjRk7zV1ZTCzA6TzcQ7q7OEft/gbnKxW y4lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765532052; x=1766136852; h=content-transfer-encoding:content-language:cc:to:subject:from :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=4AWttxVRHI1d6ipzZzd8zoDg1U+sxthQSDMa6ba25Zk=; b=Ee2AbAn9R3FwlLqU7G6K5y7tafgalmFdOcu8bD72Dg6nNtqd6UH7NikXh0CjD3c+Za 4Ys/zHbnptuhUMuemX5jFns8+9QZZ9SHVtqZ13VwqTr+nydMESPqoBiI1BU03pJMnASt ks9S8cBebvi0uljWX/wWmyF/97KwfbtHWV0SiQu0aqsoKQMhaXtKE52QkY51gu7VkFC1 5BxdmlaEkumaxC9OXnZ4aGHt5wjHMOQuFaBkPrQYTW0uJRSHpxBWRgLBf8SbESdSs2e6 pWdFMwJQ7M/9rpIrDuCqrlO8nMf0qMUvq3PPzdSUzM3gGBW6KstydADYwyovikc7j7UX dDlQ== X-Forwarded-Encrypted: i=1; AJvYcCXn3VZH1LZvOhJZh5U6RPIZ7XIbq+VhfvvPPuhQRrCBHqGGqxFmqC1YNQxdhrcO4QdBVit8aqwGTOO+pO4=@vger.kernel.org X-Gm-Message-State: AOJu0YyWf4tiq9PaEGjHCfohej6aFKh7JW4ye5taavFJ0Fziv4p0sOm8 AHbSxPaLR1JQHULRwp+n7k/6Qw9bMRzOfqVYPMSmMSJV0IM3CDffhQVj X-Gm-Gg: AY/fxX7WoxTwHEa5/SWtjBKv8B3vtOnfU71JF+Oa8vewIpcRUFfzlLlhS7MLJabtxyy w463aMS2LNPh97HNVAf63cXwbO1q5UOSa5BUlaikijHJhDS/B6MeAZvvrrW6ThKbr5cR+jVl8av U2SHxJoOZQFLypX6lnRJXvSc13dJSyA8pNyJ5BWbYJ7REuIj+B/gsYUt0UUft5fdgAjc13Sewtn fKszkTDUsmPLDLFgEObD1Gx0moXE06nmvbPZygoGwQae/MQ4F2xNJASFx0eydmcjtYigVPaBl81 5wNauroHvPAnG+yEJDhzbWYA9gVgKu7A+XznaaXz8G4x24NrFky3EkOWyMl2hFnrx1U1hIUU3Oe ByNhxMPKvQ5/sqizg7puyr+xg4OARNSXc6XqYwJYerR19/LcxVMizXkZJedllS+RkLKTReHSLD/ 6/moeqTlzBThxcmfQi8BpH7VIR/jg6Yuam X-Google-Smtp-Source: AGHT+IFeRom6bEgV+mWLlLO3RNs9UQhbtwjLhvGhRqNIy39ug72iCpbd6Zn3WnEwHxfKr6i1NlSCsA== X-Received: by 2002:a05:6512:3c97:b0:598:853e:4868 with SMTP id 2adb3069b0e04-598faaa232fmr410566e87.53.1765532051623; Fri, 12 Dec 2025 01:34:11 -0800 (PST) Received: from [10.128.170.160] ([77.234.210.12]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-37fd2be23d5sm3248621fa.28.2025.12.12.01.34.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 12 Dec 2025 01:34:11 -0800 (PST) Message-ID: <3d517755-3ed1-46eb-9fee-c4e56193ebc4@gmail.com> Date: Fri, 12 Dec 2025 12:34:10 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Vyacheslav Kovalevsky Subject: mtime and ctime is not updated after truncate operation if file length was not changed To: clm@fb.com, dsterba@suse.com Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Detailed description ==================== Last data modification and last file status change timestamps are not updated after truncate operation if the file content was not changed (truncate length == file length). ext4 updates both mtime and ctime. But many (if not all?) other file systems (btrfs, xfs, nilfs2, f2fs, ???) do not update any timestamps. The latter behavior seems to violate the POSIX.1-2024 standard. Documentation for `truncate()`: “Upon successful completion, truncate() shall mark for update the last data modification and last file status change timestamps of the file". No special cases described for (not) updating timestamps. `ftruncate` behaves as expected though. Maybe I should also report this to the developers of other file systems. System info =========== Linux version 6.18. How to reproduce ================ ``` #include #include #include #include #include #include #include int main() {   int status;   struct stat file_stat;   status = creat("file", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);   printf("CREAT: %d\n", status);   close(status);   status = stat("file", &file_stat);   printf("STAT: %d\n", status);   printf("atime=%ld\n", file_stat.st_atim.tv_nsec);   printf("mtime=%ld\n", file_stat.st_mtim.tv_nsec);   printf("ctime=%ld\n", file_stat.st_ctim.tv_nsec);   status = truncate("file", 0);   printf("TRUNCATE: %d\n", status);   status = stat("file", &file_stat);   printf("STAT: %d\n", status);   printf("atime=%ld\n", file_stat.st_atim.tv_nsec);   printf("mtime=%ld\n", file_stat.st_mtim.tv_nsec);   printf("ctime=%ld\n", file_stat.st_ctim.tv_nsec); } ``` Expected output (ext4): ``` CREAT: 3 STAT: 0 atime=122561651 mtime=122561651 ctime=122561651 TRUNCATE: 0 STAT: 0 atime=122561651 mtime=124063093 ctime=124063093 ``` Actual output (Btrfs): ``` CREAT: 3 STAT: 0 atime=502902570 mtime=502902570 ctime=502902570 TRUNCATE: 0 STAT: 0 atime=502902570 mtime=502902570 ctime=502902570 ```