qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Cc: qemu-stable@nongnu.org, "Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [PATCH] tests/tcg/multiarch/linux/linux-test: Don't try to test atime update
Date: Thu, 16 Oct 2025 11:41:43 +0100	[thread overview]
Message-ID: <CAFEAcA_KzHLCV4GsHWAKSN-p6018HGLCCFuPZNOia4B_+oWDRw@mail.gmail.com> (raw)
In-Reply-To: <20251010121435.3885228-1-peter.maydell@linaro.org>

Ping for review?

thanks
-- PMM

On Fri, 10 Oct 2025 at 13:14, Peter Maydell <peter.maydell@linaro.org> wrote:
>
> The linux-test test includes an attempt to check the utime and stat
> syscalls by setting the atime and mtime of a file to specific values,
> and then calling stat() to check that the values read back correctly.
>
> Unfortunately this is flaky, as it will fail if some other process
> (for instance a virus scanner, backup program, etc) gets in and reads
> the file between the utime() and stat() call, resulting in a host
> syscall sequence like this:
>
> utimensat(AT_FDCWD, "file2",
>   [{tv_sec=1001, tv_nsec=0} /* 1970-01-01T01:16:41+0100 */,
>    {tv_sec=1000, tv_nsec=0} /* 1970-01-01T01:16:40+0100 */], 0) = 0
> # successfully set atime to 1001 and mtime to 1000
> statx(AT_FDCWD, "file2", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT,
>   STATX_BASIC_STATS,
>   {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID,
>    stx_blksize=4096, stx_attributes=0, stx_nlink=1, stx_uid=32808,
>    stx_gid=32808, stx_mode=S_IFREG|0600, stx_ino=21659016,
>    stx_size=100, stx_blocks=8,
>    stx_attributes_mask=STATX_ATTR_COMPRESSED|STATX_ATTR_IMMUTABLE|
>          STATX_ATTR_APPEND|STATX_ATTR_NODUMP|STATX_ATTR_ENCRYPTED|
>          STATX_ATTR_AUTOMOUNT|STATX_ATTR_MOUNT_ROOT|STATX_ATTR_VERITY|
>          STATX_ATTR_DAX,
>    stx_atime={tv_sec=1760091862, tv_nsec=63509009} /* 2025-10-10T11:24:22.063509009+0100 */,
>    stx_ctime={tv_sec=1760091862, tv_nsec=63509009} /* 2025-10-10T11:24:22.063509009+0100 */,
>    stx_mtime={tv_sec=1000, tv_nsec=0} /* 1970-01-01T01:16:40+0100 */,
>    stx_rdev_major=0, stx_rdev_minor=0, stx_dev_major=252,
>    stx_dev_minor=0, stx_mnt_id=0x1f}) = 0
> # but when we statx the file, we get back an mtime of 1000
> # but an atime corresponding to when the other process read it
>
> and which will cause the test program to fail with the error
> message "stat time".
>
> In theory we could defend against this by e.g.  operating on files in
> a dummy loopback mount filesystem which we mounted as 'noatime', but
> this isn't worth the hassle.  Just drop the check on atime.
>
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> The failure happens to me occasionally on my local system.
> ---
>  tests/tcg/multiarch/linux/linux-test.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/tests/tcg/multiarch/linux/linux-test.c b/tests/tcg/multiarch/linux/linux-test.c
> index 64f57cb287e..bf6e0fda262 100644
> --- a/tests/tcg/multiarch/linux/linux-test.c
> +++ b/tests/tcg/multiarch/linux/linux-test.c
> @@ -155,9 +155,14 @@ static void test_file(void)
>          error("stat mode");
>      if ((st.st_mode & 0777) != 0600)
>          error("stat mode2");
> -    if (st.st_atime != 1001 ||
> -        st.st_mtime != 1000)
> +    /*
> +     * Only check mtime, not atime: other processes such as
> +     * virus scanners might race with this test program and get
> +     * in and update the atime, causing random failures.
> +     */
> +    if (st.st_mtime != 1000) {
>          error("stat time");
> +    }
>
>      chk_error(stat(tmpdir, &st));
>      if (!S_ISDIR(st.st_mode))
> --
> 2.43.0


  reply	other threads:[~2025-10-16 10:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-10 12:14 [PATCH] tests/tcg/multiarch/linux/linux-test: Don't try to test atime update Peter Maydell
2025-10-16 10:41 ` Peter Maydell [this message]
2025-10-16 12:08 ` Thomas Huth
2025-10-16 12:11   ` Peter Maydell
2025-10-16 14:34 ` Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFEAcA_KzHLCV4GsHWAKSN-p6018HGLCCFuPZNOia4B_+oWDRw@mail.gmail.com \
    --to=peter.maydell@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).