Skip to contentSkip to conversation

support strictatime in ocfs2

PATCH New Tiger Yang 2 participants 8 messages Mar 2, 2011 – May 24, 2011

Subsystems (2)
lore
Share & tools
lore

Tiger Yang

author
#0 lore raw

cover support strictatime in ocfs2

Hi, all,

As strictatime was introduced into vfs, we must support it in ocfs2. This two patches (one for kernel, one for tools) adding support to it and update the relative document in ocfs2.
Vfs set RELATIME by default at the beginning, so we need STRICTATIME to clear that flag, otherwise we can not always update atime. With strictatime, the the minimum update interval is specified by atime_quantum, and these two options need work together.

thanks,
tiger

author
#1 lore raw

PATCH 1/1 ocfs2-tools: support strictatime in ocfs2

Strictatime was introduced into vfs, so this patch adding support to it in ocfs2. Now we have three types behavior about update atime, noatime, relatime and strictatime. With strictatime, the minimum update interval is specified by atime_quantum, which defaults to 60 secs.

---
 mount.ocfs2/mount.ocfs2.8.in  |   11 ++++++-----
 mount.ocfs2/mount_constants.h |    3 +++
 mount.ocfs2/opts.c            |    2 +-
 3 files changed, 10 insertions(+), 6 deletions(-)
mount.ocfs2/mount.ocfs2.8.in +6 -5
index b367bf1..3bd1d09 100644
@@ -20,17 +20,18 @@ specify this mount option to delay the system from mounting the volume until
 after the network has been enabled.
 
 .TP
-\fBatime\_quantum=nrsec\fR
-The file system will not update atime unless this number of seconds has passed
-since the last update. Set to zero to always update atime. It defaults to 60 secs.
+\fBnoatime\fR
+The file system will not update access time.
 
 .TP
 \fBrelatime\fR
 The file system only update atime if the previous atime is older than mtime or ctime.
 
 .TP
-\fBnoatime\fR
-The file system will not update access time.
+\fBstrictatime,atime\_quantum=nrsec\fR
+The file system will always perform atime updates, but the minimum update
+interval is specified by atime_quantum. Atime_quantum defaults to 60 secs,
+set it to zero to always update atime. These two options need work together.
 
 .TP
 \fBacl / noacl\fR
mount.ocfs2/mount_constants.h +3 -0
index ed475db..feffe8f 100644
@@ -60,6 +60,9 @@ if we have a stack or plain mount - mount atop of it, forming a stack. */
 #ifndef MS_RELATIME
 #define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */
 #endif
+#ifndef MS_STRICTATIME
+#define MS_STRICTATIME	(1<<24)	/* Strict atime semantics */
+#endif
 /*
  * Magic mount flag number. Had to be or-ed to the flag values.
  */
mount.ocfs2/opts.c +1 -1
index 5ecd36b..96037da 100644
@@ -78,12 +78,12 @@ static const struct opt_map opt_map[] = {
   { "mand",	0, 0, MS_MANDLOCK },	/* Allow mandatory locks on this FS */
   { "nomand",	0, 1, MS_MANDLOCK },	/* Forbid mandatory locks on this FS */
   { "loop",	1, 0, MS_LOOP	},	/* use a loop device */
-  { "atime",	0, 1, MS_NOATIME },	/* Update access time */
   { "noatime",	0, 0, MS_NOATIME },	/* Do not update access time */
   { "relatime",	0, 0, MS_RELATIME },	/* only update atime if previous */
 					/* atime is older than mtime/ctime */
   { "diratime",	0, 1, MS_NODIRATIME },	/* Update dir access times */
   { "nodiratime", 0, 0, MS_NODIRATIME },/* Do not update dir access times */
+  { "strictatime", 0, 0, MS_STRICTATIME },/* Strict atime semantics */
   { "kudzu",	0, 0, MS_COMMENT },	/* Silently remove this option (backwards compat use only) */
   { "managed",	0, 0, MS_COMMENT },	/* Silently remove this option */
   { NULL,	0, 0, 0	}
Signature · 1 line
1.7.2.1
maintainer
#2 lore raw

PATCH 1/1 ocfs2-tools: support strictatime in ocfs2

Quoted 4 lines · Tiger Yang

Strictatime was introduced into vfs, so this patch adding support to it in ocfs2. Now we have three types behavior about update atime, noatime, relatime and strictatime. With strictatime, the minimum update interval is specified by atime_quantum, which defaults to 60 secs.

<snip>

mount.ocfs2/opts.c static const struct opt_map opt_map[] = { · line 81

Quoted 9 lines
mount.ocfs2/opts.c +0 -1
index 5ecd36b..96037da 100644
@@ -78,12 +78,12 @@ static const struct opt_map opt_map[] = {
   { "mand",	0, 0, MS_MANDLOCK },	/* Allow mandatory locks on this FS */
   { "nomand",	0, 1, MS_MANDLOCK },	/* Forbid mandatory locks on this FS */
   { "loop",	1, 0, MS_LOOP	},	/* use a loop device */
-  { "atime",	0, 1, MS_NOATIME },	/* Update access time */

Won't this break people saying 'mount -o noatime'?

Joel

Signature · 6 lines
"Maybe the time has drawn the faces I recall.
 But things in this life change very slowly,
 If they ever change at all."

			http://www.jlbec.org/
			jlbec at evilplan.org
author
#3 lore raw

PATCH 1/1 ocfs2-tools: support strictatime in ocfs2

mount.ocfs2/opts.c static const struct opt_map opt_map[] = { · line 81

Quoted 10 lines · Joel Becker
mount.ocfs2/opts.c +0 -1
index 5ecd36b..96037da 100644
@@ -78,12 +78,12 @@ static const struct opt_map opt_map[] = {
    { "mand",	0, 0, MS_MANDLOCK },	/* Allow mandatory locks on this FS */
    { "nomand",	0, 1, MS_MANDLOCK },	/* Forbid mandatory locks on this FS */
    { "loop",	1, 0, MS_LOOP	},	/* use a loop device */
-  { "atime",	0, 1, MS_NOATIME },	/* Update access time */
 	Won't this break people saying 'mount -o noatime'?

No, It would not affect "-o noatime", actually it just disallowed "-o atime".

Thanks,
Tiger

author
#4 lore raw

PATCH 1/1 ocfs2: clean up mount option about atime in ocfs2.txt

In reply to Tiger Yang

As ocfs2 supports relatime and strictatime, we need update the relative document. Atime_quantum need work with strictatime, so only show it in procfs when mount with strictatime.

---
 Documentation/filesystems/ocfs2.txt |    8 +++++++-
 fs/ocfs2/super.c                    |    2 +-
 2 files changed, 8 insertions(+), 2 deletions(-)
Documentation/filesystems/ocfs2.txt +7 -1
index 5393e66..a149606 100644
@@ -46,9 +46,15 @@ errors=panic		Panic and halt the machine if an error occurs.
 intr		(*)	Allow signals to interrupt cluster operations.
 nointr			Do not allow signals to interrupt cluster
 			operations.
+noatime			Do not update access time.
+relatime(*)		Update atime if the previous atime is older than
+			mtime or ctime
+strictatime		Always update atime, but the minimum update interval
+			is specified by atime_quantum.
 atime_quantum=60(*)	OCFS2 will not update atime unless this number
 			of seconds has passed since the last update.
-			Set to zero to always update atime.
+			Set to zero to always update atime. This option need
+			work with strictatime.
 data=ordered	(*)	All data are forced directly out to the main file
 			system prior to its metadata being committed to the
 			journal.
fs/ocfs2/super.c +1 -1
index 38f986d..f5463a6 100644
@@ -1564,7 +1564,7 @@ static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
 	if (osb->preferred_slot != OCFS2_INVALID_SLOT)
 		seq_printf(s, ",preferred_slot=%d", osb->preferred_slot);
 
-	if (osb->s_atime_quantum != OCFS2_DEFAULT_ATIME_QUANTUM)
+	if (!(mnt->mnt_flags & MNT_NOATIME) && !(mnt->mnt_flags & MNT_RELATIME))
 		seq_printf(s, ",atime_quantum=%u", osb->s_atime_quantum);
 
 	if (osb->osb_commit_interval)
Signature · 1 line
1.7.2.1
maintainer
#5 lore raw

PATCH 1/1 ocfs2: clean up mount option about atime in ocfs2.txt

fs/ocfs2/super.c static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt) · line 1568

Quoted 3 lines · Tiger Yang
fs/ocfs2/super.c +1 -1
-	if (osb->s_atime_quantum != OCFS2_DEFAULT_ATIME_QUANTUM)
+	if (!(mnt->mnt_flags & MNT_NOATIME) && !(mnt->mnt_flags & MNT_RELATIME))
 		seq_printf(s, ",atime_quantum=%u", osb->s_atime_quantum);

I can see why you don't print in the case of noatime or
relatime, but you should keep the check for DEFAULT_ATIME_QUANTUM. There's no point in printing it if it is the default.

Joel

Signature · 6 lines
Life's Little Instruction Book #510

	"Count your blessings."

			http://www.jlbec.org/
			jlbec at evilplan.org
author
#6 lore raw

PATCH 1/1 ocfs2: clean up mount option about atime in ocfs2.txt

Quoted 7 lines · Joel Becker

fs/ocfs2/super.c static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt) · line 1568

Quoted 3 lines · Tiger Yang
fs/ocfs2/super.c +1 -1
-	if (osb->s_atime_quantum != OCFS2_DEFAULT_ATIME_QUANTUM)
+	if (!(mnt->mnt_flags&  MNT_NOATIME)&&  !(mnt->mnt_flags&  MNT_RELATIME))
  		seq_printf(s, ",atime_quantum=%u", osb->s_atime_quantum);

I can see why you don't print in the case of noatime or
relatime, but you should keep the check for DEFAULT_ATIME_QUANTUM. There's no point in printing it if it is the default.

Hi, Joel,
I have thought this issue, I choose to show the quantum value when user mount with strictatime, because we don't as "strict" as the other file system to update atime by default. If we don't show the default quantum value, that may be confuse the new user to ocfs2.

Thanks,
tiger

maintainer
#7 lore raw

PATCH 1/1 ocfs2: clean up mount option about atime in ocfs2.txt

In reply to Tiger Yang
Quoted 5 lines · Tiger Yang

As ocfs2 supports relatime and strictatime, we need update the relative document. Atime_quantum need work with strictatime, so only show it in procfs when mount with strictatime.

This patch is now in the merge-window branch of ocfs2.git.

Joel

Signature · 8 lines
"Too much walking shoes worn thin.
 Too much trippin' and my soul's worn thin.
 Time to catch a ride it leaves today
 Her name is what it means.
 Too much walking shoes worn thin."

			http://www.jlbec.org/
			jlbec at evilplan.org