diff options
author | Ryan Jeffrey <ryan@ryanmj.xyz> | 2020-09-30 21:19:52 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-09-30 21:26:09 +0200 |
commit | da5b44eaf131c748caeedf59b3dc9e42b94c82f0 (patch) | |
tree | 12de42e27672510e59aa91100331c458ea3d135e /libdiskfs/priv.h | |
parent | 88d7363db23f8dba06ed260e10b5c7f40538565c (diff) | |
download | hurd-da5b44eaf131c748caeedf59b3dc9e42b94c82f0.tar.gz hurd-da5b44eaf131c748caeedf59b3dc9e42b94c82f0.tar.bz2 hurd-da5b44eaf131c748caeedf59b3dc9e42b94c82f0.zip |
libdiskfs: Add relatime support
* doc/hurd.texi (diskfs_set_node_atime): Document relatime behavior.
* libdiskfs/diskfs.h (diskfs_set_node_atime): Likewise.
* libdiskfs/init-init.c (_diskfs_relatime): Add variable.
* libdiskfs/file-statfs.c (ST_RELATIME): Define if not defined already.
(diskfs_S_file_statfs): Report ST_RELATIME when _diskfs_relatime is set.
* libdiskfs/node-times.c (atime_should_update): New function.
(diskfs_set_node_atime): Document relatime behavior. Call
atime_should_update instead of reading _diskfs_noatime.
* libdiskfs/opts-common.c (diskfs_common_options): Add --strictatime and
-R/--relatime options.
* libdiskfs/opts-std-runtime.c (struct parse_hook): Add relatime field.
(set_opts): Set _diskfs_relatime from relatime field.
(parse_opt): Parse -R option.
* libdiskfs/opts-std-startup.c (parse_startup_opt): Parse -R option.
* libdiskfs/priv.h (_diskfs_relatime): Declare variable.
(atime_should_update): Declare function.
* libdiskfs/opts-append-std.c (diskfs_append_std_options): Add reporting
--relatime option.
* libdiskfs/conch-fetch.c (iohelp_fetch_shared_data): Call
atime_should_update instead of reading _diskfs_noatime.
* libdiskfs/rdwr-internal.c (_diskfs_rdwr_internal): Likewise.
Diffstat (limited to 'libdiskfs/priv.h')
-rw-r--r-- | libdiskfs/priv.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libdiskfs/priv.h b/libdiskfs/priv.h index 5be7c2b5..420323dd 100644 --- a/libdiskfs/priv.h +++ b/libdiskfs/priv.h @@ -38,6 +38,10 @@ extern int _diskfs_nosuid, _diskfs_noexec; /* This relaxes the requirement to set `st_atim'. */ extern int _diskfs_noatime; +/* Will set `st_atim' if it has not been updated in 24 hours or + if `st_ctim' or `st_mtim' are younger than `st_atim'. */ +extern int _diskfs_relatime; + /* This enables SysV style group behaviour. New nodes inherit the GID of the user creating them unless the SGID bit is set of the parent directory. */ @@ -98,6 +102,13 @@ void _diskfs_control_clean (void *); links, then request soft references to be dropped. */ void _diskfs_lastref (struct node *np); +/* If the disk is not readonly and noatime is not set, then check relatime + conditions: if either `np->dn_stat.st_mtim.tv_sec' or + `np->dn_stat.st_ctim.tv_sec' is greater than `np->dn_stat.st_atim.tv_sec', + or if the atime is greater than 24 hours old, return true. + */ +int atime_should_update (struct node *np); + /* Number of outstanding PT_CTL ports. */ extern int _diskfs_ncontrol_ports; |