Hi Robert,

Robert Millan wrote:

> $ cat ./build-tree/kfreebsd-amd64-libc/libio/tst-atime.out
> atime has not changed
>
> Note: Following suggestion by Petr I retested on another filesystem.
> It seems that this bug only appears when /tmp is mounted on ZFS.

Ah, sounds like /tmp was mounted with the noatime flag.  How about
something like this (untested)?

2011-07-18  Jonathan Nieder  <[email protected]>

        Teach statvfs and fstatvfs to retrieve the noatime flag, so
        libio/tst-atime can know what to expect.
        Reported by Robert Millan.
        * bits/statvfs.h: Define ST_NOATIME.  Value is from the generic
        bits/statvfs.h.
        * statfsconv.c (statfs5_to_statvfs): Set ST_NOATIME bit when the
        MNT_NOATIME flag is set.

 bits/statvfs.h |    4 +++-
 statfsconv.c   |    6 ++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

--- a/bits/statvfs.h    
+++ b/bits/statvfs.h    
@@ -89,7 +89,9 @@ enum
 # define ST_NODEV      ST_NODEV
   ST_NOEXEC = 8,               /* Disallow program execution.  */
 # define ST_NOEXEC     ST_NOEXEC
-  ST_SYNCHRONOUS = 16          /* Writes are synced at once.  */
+  ST_SYNCHRONOUS = 16,         /* Writes are synced at once.  */
 # define ST_SYNCHRONOUS        ST_SYNCHRONOUS
+  ST_NOATIME = 1024,           /* Do not update access times.  */
+# define ST_NOATIME    ST_NOATIME
 #endif /* Use GNU.  */
 };
--- a/statfsconv.c      
+++ b/statfsconv.c      
@@ -164,7 +164,8 @@ statfs5_to_statvfs (const struct statfs_fbsd5 *pk,
     | (pk->f_flags & MNT_NOSUID ? ST_NOSUID : 0)
     | (pk->f_flags & MNT_NODEV ? ST_NODEV : 0)
     | (pk->f_flags & MNT_NOEXEC ? ST_NOEXEC : 0)
-    | (pk->f_flags & MNT_SYNCHRONOUS ? ST_SYNCHRONOUS : 0);
+    | (pk->f_flags & MNT_SYNCHRONOUS ? ST_SYNCHRONOUS : 0)
+    | (pk->f_flags & MNT_NOATIME ? ST_NOATIME : 0);
   p32->f_namemax       = pk->f_namemax;
 
   memset (p32->f_spare, '\0', sizeof (p32->f_spare));
@@ -196,7 +197,8 @@ statfs5_to_statvfs64 (const struct statfs_fbsd5 *p
     | (pk->f_flags & MNT_NOSUID ? ST_NOSUID : 0)
     | (pk->f_flags & MNT_NODEV ? ST_NODEV : 0)
     | (pk->f_flags & MNT_NOEXEC ? ST_NOEXEC : 0)
-    | (pk->f_flags & MNT_SYNCHRONOUS ? ST_SYNCHRONOUS : 0);
+    | (pk->f_flags & MNT_SYNCHRONOUS ? ST_SYNCHRONOUS : 0)
+    | (pk->f_flags & MNT_NOATIME ? ST_NOATIME : 0);
   p64->f_namemax       = pk->f_namemax;
 
   memset (p64->f_spare, '\0', sizeof (p64->f_spare));
-- 



-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to