linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 0/1] Relative atime
@ 2006-08-25 23:52 Valerie Henson
  2006-08-25 23:52 ` [patch 1/1] Relative atime - kernel side Valerie Henson
  2006-08-25 23:56 ` [patch] Relative atime - userspace Valerie Henson
  0 siblings, 2 replies; 5+ messages in thread
From: Valerie Henson @ 2006-08-25 23:52 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Akkana Peck, Mark Fasheh, Jesse Barnes, Arjan van de Ven,
	Chris Wedgewood, jsipek, Al Viro, Christoph Hellwig, Adrian Bunk

There was enough interest in the relative atime patches that I went
ahead and implemented support in the mount command as well, and
cleaned up the patches for inclusion.  Relative atime only updates the
atime if the previous atime is older than the mtime or ctime.  It's
like noatime, but useful for applications like mutt that need to know
whether a file has been read since it was last modified.

-VAL

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [patch 1/1] Relative atime - kernel side
  2006-08-25 23:52 [patch 0/1] Relative atime Valerie Henson
@ 2006-08-25 23:52 ` Valerie Henson
  2006-08-25 23:56 ` [patch] Relative atime - userspace Valerie Henson
  1 sibling, 0 replies; 5+ messages in thread
From: Valerie Henson @ 2006-08-25 23:52 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Akkana Peck, Mark Fasheh, Jesse Barnes, Arjan van de Ven,
	Chris Wedgewood, jsipek, Al Viro, Christoph Hellwig, Adrian Bunk,
	Valerie Henson

[-- Attachment #1: relative-atime-kernel --]
[-- Type: text/plain, Size: 2713 bytes --]

Add "relatime" (relative atime) support.  Relative atime only updates
the atime if the previous atime is older than the mtime or ctime.
Like noatime, but useful for applications like mutt that need to know
when a file has been read since it was last modified.

Signed-off-by: Valerie Henson <val_henson@linux.intel.com>

---
 fs/inode.c            |   11 ++++++++++-
 fs/namespace.c        |    5 ++++-
 include/linux/fs.h    |    1 +
 include/linux/mount.h |    1 +
 4 files changed, 16 insertions(+), 2 deletions(-)

--- linux-2.6.18-rc4-relatime.orig/fs/inode.c
+++ linux-2.6.18-rc4-relatime/fs/inode.c
@@ -1200,7 +1200,16 @@ void touch_atime(struct vfsmount *mnt, s
 		return;
 
 	now = current_fs_time(inode->i_sb);
-	if (!timespec_equal(&inode->i_atime, &now)) {
+	if (timespec_equal(&inode->i_atime, &now))
+		return;
+	/*
+	 * With relative atime, only update atime if the previous
+	 * atime is earlier than either the ctime or mtime.
+	 */
+	if (!mnt ||
+	    !(mnt->mnt_flags & MNT_RELATIME) ||
+	    (timespec_compare(&inode->i_atime, &inode->i_mtime) < 0) ||
+	    (timespec_compare(&inode->i_atime, &inode->i_ctime) < 0)) {
 		inode->i_atime = now;
 		mark_inode_dirty_sync(inode);
 	}
--- linux-2.6.18-rc4-relatime.orig/fs/namespace.c
+++ linux-2.6.18-rc4-relatime/fs/namespace.c
@@ -376,6 +376,7 @@ static int show_vfsmnt(struct seq_file *
 		{ MNT_NOEXEC, ",noexec" },
 		{ MNT_NOATIME, ",noatime" },
 		{ MNT_NODIRATIME, ",nodiratime" },
+		{ MNT_RELATIME, ",relatime" },
 		{ 0, NULL }
 	};
 	struct proc_fs_info *fs_infop;
@@ -1413,9 +1414,11 @@ long do_mount(char *dev_name, char *dir_
 		mnt_flags |= MNT_NOATIME;
 	if (flags & MS_NODIRATIME)
 		mnt_flags |= MNT_NODIRATIME;
+	if (flags & MS_RELATIME)
+		mnt_flags |= MNT_RELATIME;
 
 	flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE |
-		   MS_NOATIME | MS_NODIRATIME);
+		   MS_NOATIME | MS_NODIRATIME | MS_RELATIME);
 
 	/* ... and get the mountpoint */
 	retval = path_lookup(dir_name, LOOKUP_FOLLOW, &nd);
--- linux-2.6.18-rc4-relatime.orig/include/linux/fs.h
+++ linux-2.6.18-rc4-relatime/include/linux/fs.h
@@ -119,6 +119,7 @@ extern int dir_notify_enable;
 #define MS_PRIVATE	(1<<18)	/* change to private */
 #define MS_SLAVE	(1<<19)	/* change to slave */
 #define MS_SHARED	(1<<20)	/* change to shared */
+#define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */
 #define MS_ACTIVE	(1<<30)
 #define MS_NOUSER	(1<<31)
 
--- linux-2.6.18-rc4-relatime.orig/include/linux/mount.h
+++ linux-2.6.18-rc4-relatime/include/linux/mount.h
@@ -27,6 +27,7 @@ struct namespace;
 #define MNT_NOEXEC	0x04
 #define MNT_NOATIME	0x08
 #define MNT_NODIRATIME	0x10
+#define MNT_RELATIME	0x20
 
 #define MNT_SHRINKABLE	0x100
 

--

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [patch] Relative atime - userspace
  2006-08-25 23:52 [patch 0/1] Relative atime Valerie Henson
  2006-08-25 23:52 ` [patch 1/1] Relative atime - kernel side Valerie Henson
@ 2006-08-25 23:56 ` Valerie Henson
  2006-08-28 21:49   ` Josef Sipek
  1 sibling, 1 reply; 5+ messages in thread
From: Valerie Henson @ 2006-08-25 23:56 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Akkana Peck, Mark Fasheh, Jesse Barnes, Arjan van de Ven,
	Chris Wedgewood, jsipek, Al Viro, Christoph Hellwig, Adrian Bunk

Add the "relatime" (relative atime) option support to mount.  Relative
atime only updates the atime if the previous atime is older than the
mtime or ctime.  Like noatime, but useful for applications like mutt
that need to know when a file has been read since it was last
modified.

Signed-off-by: Valerie Henson <val_henson@linux.intel.com>

---
 mount/mount.8           |    7 +++++++
 mount/mount.c           |    6 ++++++
 mount/mount_constants.h |    4 ++++
 3 files changed, 17 insertions(+)

--- util-linux-2.13-pre7.orig/mount/mount.8
+++ util-linux-2.13-pre7/mount/mount.8
@@ -586,6 +586,13 @@ access on the news spool to speed up new
 .B nodiratime
 Do not update directory inode access times on this filesystem.
 .TP
+.B relatime
+Update inode access times relative to modify or change time.  Access
+time is only updated if the previous access time was earlier than the
+current modify or change time. (Similar to noatime, but doesn't break
+mutt or other applications that need to know if a file has been read
+since the last time it was modified.)
+.TP
 .B noauto
 Can only be mounted explicitly (i.e., the
 .B \-a
--- util-linux-2.13-pre7.orig/mount/mount.c
+++ util-linux-2.13-pre7/mount/mount.c
@@ -164,6 +164,12 @@ static const struct opt_map opt_map[] = 
   { "diratime",	0, 1, MS_NODIRATIME },	/* Update dir access times */
   { "nodiratime", 0, 0, MS_NODIRATIME },/* Do not update dir access times */
 #endif
+#ifdef MS_RELATIME
+  { "relatime", 0, 0, MS_RELATIME },	/* Update access times relative to
+					   mtime/ctime */
+  { "norelatime", 0, 1, MS_RELATIME },	/* Update access time without regard
+					   to mtime/ctime */
+#endif
   { NULL,	0, 0, 0		}
 };
 
--- util-linux-2.13-pre7.orig/mount/mount_constants.h
+++ util-linux-2.13-pre7/mount/mount_constants.h
@@ -57,6 +57,10 @@ if we have a stack or plain mount - moun
 #ifndef MS_VERBOSE
 #define MS_VERBOSE	0x8000	/* 32768 */
 #endif
+#ifndef MS_RELATIME
+#define MS_RELATIME   0x200000	/* 200000: Update access times relative
+				   to mtime/ctime */
+#endif
 /*
  * Magic mount flag number. Had to be or-ed to the flag values.
  */

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] Relative atime - userspace
  2006-08-25 23:56 ` [patch] Relative atime - userspace Valerie Henson
@ 2006-08-28 21:49   ` Josef Sipek
  2006-08-29  0:14     ` Valerie Henson
  0 siblings, 1 reply; 5+ messages in thread
From: Josef Sipek @ 2006-08-28 21:49 UTC (permalink / raw)
  To: Valerie Henson
  Cc: linux-kernel, linux-fsdevel, Akkana Peck, Mark Fasheh,
	Jesse Barnes, Arjan van de Ven, Chris Wedgewood, jsipek, Al Viro,
	Christoph Hellwig, Adrian Bunk

On Fri, Aug 25, 2006 at 04:56:19PM -0700, Valerie Henson wrote:
>  #define MS_VERBOSE	0x8000	/* 32768 */
...
> +#define MS_RELATIME   0x200000	/* 200000: Update access times relative

Just a small thing... 0x200000 != 200000

Josef "Jeff" Sipek.

-- 
Evolution, n.:
  A hypothetical process whereby infinitely improbable events occur with
  alarming frequency, order arises from chaos, and no one is given credit.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] Relative atime - userspace
  2006-08-28 21:49   ` Josef Sipek
@ 2006-08-29  0:14     ` Valerie Henson
  0 siblings, 0 replies; 5+ messages in thread
From: Valerie Henson @ 2006-08-29  0:14 UTC (permalink / raw)
  To: Josef Sipek
  Cc: linux-kernel, linux-fsdevel, Akkana Peck, Mark Fasheh,
	Jesse Barnes, Arjan van de Ven, Chris Wedgewood, jsipek, Al Viro,
	Christoph Hellwig, Adrian Bunk

On Mon, Aug 28, 2006 at 05:49:01PM -0400, Josef Sipek wrote:
> On Fri, Aug 25, 2006 at 04:56:19PM -0700, Valerie Henson wrote:
> >  #define MS_VERBOSE	0x8000	/* 32768 */
> ...
> > +#define MS_RELATIME   0x200000	/* 200000: Update access times relative
> 
> Just a small thing... 0x200000 != 200000

Just goes to show what my default base is... :)

Somehow "2097152: blah blah blah" just doesn't seem helpful - I just
removed it.  Fresh patch below.

-VAL

---
 mount/mount.8           |    7 +++++++
 mount/mount.c           |    6 ++++++
 mount/mount_constants.h |    4 ++++
 3 files changed, 17 insertions(+)

--- util-linux-2.13-pre7.orig/mount/mount.8
+++ util-linux-2.13-pre7/mount/mount.8
@@ -586,6 +586,13 @@ access on the news spool to speed up new
 .B nodiratime
 Do not update directory inode access times on this filesystem.
 .TP
+.B relatime
+Update inode access times relative to modify or change time.  Access
+time is only updated if the previous access time was earlier than the
+current modify or change time. (Similar to noatime, but doesn't break
+mutt or other applications that need to know if a file has been read
+since the last time it was modified.)
+.TP
 .B noauto
 Can only be mounted explicitly (i.e., the
 .B \-a
--- util-linux-2.13-pre7.orig/mount/mount.c
+++ util-linux-2.13-pre7/mount/mount.c
@@ -164,6 +164,12 @@ static const struct opt_map opt_map[] = 
   { "diratime",	0, 1, MS_NODIRATIME },	/* Update dir access times */
   { "nodiratime", 0, 0, MS_NODIRATIME },/* Do not update dir access times */
 #endif
+#ifdef MS_RELATIME
+  { "relatime", 0, 0, MS_RELATIME },	/* Update access times relative to
+					   mtime/ctime */
+  { "norelatime", 0, 1, MS_RELATIME },	/* Update access time without regard
+					   to mtime/ctime */
+#endif
   { NULL,	0, 0, 0		}
 };
 
--- util-linux-2.13-pre7.orig/mount/mount_constants.h
+++ util-linux-2.13-pre7/mount/mount_constants.h
@@ -57,6 +57,10 @@ if we have a stack or plain mount - moun
 #ifndef MS_VERBOSE
 #define MS_VERBOSE	0x8000	/* 32768 */
 #endif
+#ifndef MS_RELATIME
+#define MS_RELATIME   0x200000	/* Update access times relative
+				   to mtime/ctime */
+#endif
 /*
  * Magic mount flag number. Had to be or-ed to the flag values.
  */

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-08-29  0:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-08-25 23:52 [patch 0/1] Relative atime Valerie Henson
2006-08-25 23:52 ` [patch 1/1] Relative atime - kernel side Valerie Henson
2006-08-25 23:56 ` [patch] Relative atime - userspace Valerie Henson
2006-08-28 21:49   ` Josef Sipek
2006-08-29  0:14     ` Valerie Henson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).