summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChunwei Chen <[email protected]>2016-04-01 13:12:06 -0700
committerBrian Behlendorf <[email protected]>2016-04-05 18:55:59 -0700
commit676007719462edf6ae1f0779252b99a0cb86b630 (patch)
tree0bcbc7b414b0668f8bc9fdd0becea8c50a51ceee
parent704cd0758a1a4ecef47b0dfa097acd94c8e4f57d (diff)
Make zfs mount according to relatime config in dataset
Also enable lazytime in mount.zfs Signed-off-by: Chunwei Chen <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #4482
-rw-r--r--cmd/mount_zfs/mount_zfs.c5
-rw-r--r--include/sys/mntent.h5
-rw-r--r--lib/libzfs/libzfs_mount.c8
3 files changed, 15 insertions, 3 deletions
diff --git a/cmd/mount_zfs/mount_zfs.c b/cmd/mount_zfs/mount_zfs.c
index 3a0462127..b78c91c7c 100644
--- a/cmd/mount_zfs/mount_zfs.c
+++ b/cmd/mount_zfs/mount_zfs.c
@@ -78,7 +78,10 @@ static const option_map_t option_map[] = {
{ MNTOPT_RELATIME, MS_RELATIME, ZS_COMMENT },
#endif
#ifdef MS_STRICTATIME
- { MNTOPT_DFRATIME, MS_STRICTATIME, ZS_COMMENT },
+ { MNTOPT_STRICTATIME, MS_STRICTATIME, ZS_COMMENT },
+#endif
+#ifdef MS_LAZYTIME
+ { MNTOPT_LAZYTIME, MS_LAZYTIME, ZS_COMMENT },
#endif
{ MNTOPT_CONTEXT, MS_COMMENT, ZS_COMMENT },
{ MNTOPT_FSCONTEXT, MS_COMMENT, ZS_COMMENT },
diff --git a/include/sys/mntent.h b/include/sys/mntent.h
index 7284f05b1..fac751b46 100644
--- a/include/sys/mntent.h
+++ b/include/sys/mntent.h
@@ -68,8 +68,9 @@
#define MNTOPT_NOFAIL "nofail" /* no failure */
#define MNTOPT_RELATIME "relatime" /* allow relative time updates */
#define MNTOPT_NORELATIME "norelatime" /* do not allow relative time updates */
-#define MNTOPT_DFRATIME "strictatime" /* Deferred access time updates */
-#define MNTOPT_NODFRATIME "nostrictatime" /* No Deferred access time updates */
+#define MNTOPT_STRICTATIME "strictatime" /* strict access time updates */
+#define MNTOPT_NOSTRICTATIME "nostrictatime" /* No strict access time updates */
+#define MNTOPT_LAZYTIME "lazytime" /* Defer access time writing */
#define MNTOPT_SETUID "suid" /* Both setuid and devices allowed */
#define MNTOPT_NOSETUID "nosuid" /* Neither setuid nor devices allowed */
#define MNTOPT_OWNER "owner" /* allow owner mount */
diff --git a/lib/libzfs/libzfs_mount.c b/lib/libzfs/libzfs_mount.c
index b6c47a25d..29907dc8b 100644
--- a/lib/libzfs/libzfs_mount.c
+++ b/lib/libzfs/libzfs_mount.c
@@ -365,6 +365,14 @@ zfs_add_options(zfs_handle_t *zhp, char *options, int len)
error = zfs_add_option(zhp, options, len,
ZFS_PROP_ATIME, MNTOPT_ATIME, MNTOPT_NOATIME);
+ /*
+ * don't add relatime/strictatime when atime=off, otherwise strictatime
+ * will force atime=on
+ */
+ if (strstr(options, MNTOPT_NOATIME) == NULL) {
+ error = zfs_add_option(zhp, options, len,
+ ZFS_PROP_RELATIME, MNTOPT_RELATIME, MNTOPT_STRICTATIME);
+ }
error = error ? error : zfs_add_option(zhp, options, len,
ZFS_PROP_DEVICES, MNTOPT_DEVICES, MNTOPT_NODEVICES);
error = error ? error : zfs_add_option(zhp, options, len,