syscalls: Define 'MS_NODIRATIME' and recognize "nodiratime".
authorLudovic Courtès <ludo@gnu.org>
Thu, 20 Oct 2022 19:16:49 +0000 (21:16 +0200)
committerLudovic Courtès <ludo@gnu.org>
Thu, 20 Oct 2022 21:07:37 +0000 (23:07 +0200)
Fixes <https://issues.guix.gnu.org/58663>.

This is a followup to b665dd4a9902b5722b9e06fd89c203e2221b19e0 and
dcb640f02b1f9590c3bd4301a22bf31bd60c56d4, allowing "nodiratime" to be
preserved for bind mounts.

* guix/build/syscalls.scm (MS_NODIRATIME): New variable.
(option-string->mount-flags): Recognize it.
(statfs-flags->mount-flags): Likewise.

guix/build/syscalls.scm

index 7842b0a..61926be 100644 (file)
@@ -46,6 +46,7 @@
             MS_NOEXEC
             MS_REMOUNT
             MS_NOATIME
+            MS_NODIRATIME
             MS_STRICTATIME
             MS_RELATIME
             MS_BIND
@@ -537,6 +538,7 @@ the last argument of `mknod'."
 (define MS_NOEXEC             8)
 (define MS_REMOUNT           32)
 (define MS_NOATIME         1024)
+(define MS_NODIRATIME      2048)
 (define MS_BIND            4096)
 (define MS_MOVE            8192)
 (define MS_SHARED       1048576)
@@ -640,7 +642,8 @@ the remaining unprocessed options."
                         ("nodev"      => MS_NODEV)
                         ("noexec"     => MS_NOEXEC)
                         ("relatime"   => MS_RELATIME)
-                        ("noatime"    => MS_NOATIME)))))))
+                        ("noatime"    => MS_NOATIME)
+                        ("nodiratime" => MS_NODIRATIME)))))))
 
 (define (mount-flags mount)
   "Return the mount flags of MOUNT, a <mount> record, as an inclusive or of
@@ -873,7 +876,7 @@ fdatasync(2) on the underlying file descriptor."
      (ST_NODEV      => MS_NODEV)
      (ST_NOEXEC     => MS_NOEXEC)
      (ST_NOATIME    => MS_NOATIME)
-     (ST_NODIRATIME => 0)                         ;FIXME
+     (ST_NODIRATIME => MS_NODIRATIME)
      (ST_RELATIME   => MS_RELATIME))))
 
 (define-c-struct %statfs                          ;<bits/statfs.h>