linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Update atime from future.
@ 2012-12-03 17:56 yangsheng
  2012-12-03 18:08 ` Greg KH
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: yangsheng @ 2012-12-03 17:56 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel; +Cc: stable, adilger, yangsheng

Relatime should update the inode atime if it is more than a day in the
future.  The original problem seen was a tarball that had a bad atime,
but could also happen if someone fat-fingers a "touch".  The future
atime will never be fixed.  Before the relatime patch, the future atime
would be updated back to the current time on the next access.

Only update the atime if it is more than one day in the future.  That
avoids thrashing the atime if the clocks on clients of a network fs are
only slightly out of sync, but still allows fixing bogus atimes.

Signed-off-by: yangsheng <sickamd@gmail.com>
Reviewed-by: adilger@dilger.ca
---
 fs/inode.c | 10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/fs/inode.c b/fs/inode.c
index 14084b7..5c4379a 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1465,6 +1465,7 @@ sector_t bmap(struct inode *inode, sector_t block)
 }
 EXPORT_SYMBOL(bmap);
 
+#define RELATIME_MARGIN (24*60*60)
 /*
  * With relative atime, only update atime if the previous atime is
  * earlier than either the ctime or mtime or if at least a day has
@@ -1488,10 +1489,17 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
 		return 1;
 
 	/*
+	 * Is the previous atime value in future? If yes,
+	 * update atime:
+	 */
+	if ((long)(now.tv_sec - inode->i_atime.tv_sec) < -RELATIME_MARGIN)
+		return 1;
+
+	/*
 	 * Is the previous atime value older than a day? If yes,
 	 * update atime:
 	 */
-	if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
+	if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= RELATIME_MARGIN)
 		return 1;
 	/*
 	 * Good, we can skip the atime update:
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 17+ messages in thread
* [PATCH] Update atime from future.
@ 2011-01-04  9:08 yangsheng
  0 siblings, 0 replies; 17+ messages in thread
From: yangsheng @ 2011-01-04  9:08 UTC (permalink / raw)
  To: linux-kernel; +Cc: adilger, linux-fsdevel, linux-ext4, swhiteho, yangsheng

If atime has been wrong set to future, then it cannot
be updated back to current time.

Signed-off-by: sickamd@gmail.com
Reviewed-by: adilger@dilger.ca
---
 fs/inode.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/fs/inode.c b/fs/inode.c
index da85e56..d92779f 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1446,6 +1446,8 @@ sector_t bmap(struct inode *inode, sector_t block)
 }
 EXPORT_SYMBOL(bmap);
 
+#define RELATIME_MARGIN (24 * 60 * 60)
+
 /*
  * With relative atime, only update atime if the previous atime is
  * earlier than either the ctime or mtime or if at least a day has
@@ -1469,10 +1471,16 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
 		return 1;
 
 	/*
+	 * Is the previous atime value in future? If yes,
+	 * update atime:
+	 */
+	if ((long)(now.tv_sec - inode->i_atime.tv_sec) < -RELATIME_MARGIN)
+		return 1;
+	/*
 	 * Is the previous atime value older than a day? If yes,
 	 * update atime:
 	 */
-	if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
+	if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= RELATIME_MARGIN)
 		return 1;
 	/*
 	 * Good, we can skip the atime update:
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 17+ messages in thread
* [PATCH] Update atime from future.
@ 2010-12-29 13:58 yangsheng
  2011-01-03 10:17 ` Andrew Morton
  2011-01-03 10:27 ` Steven Whitehouse
  0 siblings, 2 replies; 17+ messages in thread
From: yangsheng @ 2010-12-29 13:58 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-fsdevel, adilger.kernel, linux-ext4, yangsheng

Signed-off-by: sickamd@gmail.com
---
 fs/inode.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/fs/inode.c b/fs/inode.c
index da85e56..6c8effd 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1469,7 +1469,13 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
 		return 1;
 
 	/*
-	 * Is the previous atime value older than a day? If yes,
+	 * Is the previous atime value in future? If yes,
+	 * update atime:
+	 */
+	if ((long)(now.tv_sec - inode->i_atime.tv_sec) < 0)
+		return 1;
+	/*
+	 * Is the previous atime value old than a day? If yes,
 	 * update atime:
 	 */
 	if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
-- 
1.7.2.3


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

end of thread, other threads:[~2012-12-07  0:49 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-03 17:56 [PATCH] Update atime from future yangsheng
2012-12-03 18:08 ` Greg KH
2012-12-04 19:41 ` Zach Brown
2012-12-04 20:24 ` Dave Chinner
2012-12-05  0:22   ` Andreas Dilger
2012-12-07  0:49     ` Dave Chinner
  -- strict thread matches above, loose matches on Subject: below --
2011-01-04  9:08 yangsheng
2010-12-29 13:58 yangsheng
2011-01-03 10:17 ` Andrew Morton
2011-01-03 12:54   ` YangSheng
2011-01-04 14:56   ` Rogier Wolff
2011-01-03 10:27 ` Steven Whitehouse
2011-01-03 16:27   ` Andreas Dilger
2011-01-03 16:41     ` Steven Whitehouse
2011-01-03 16:44   ` YangSheng
2011-01-11 13:33   ` Pavel Machek
2011-01-13 14:18     ` Steven Whitehouse

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).