* [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; 11+ 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] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2010-12-29 13:58 [PATCH] Update atime from future 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
1 sibling, 2 replies; 11+ messages in thread
From: Andrew Morton @ 2011-01-03 10:17 UTC (permalink / raw)
To: yangsheng; +Cc: linux-kernel, linux-fsdevel, adilger.kernel, linux-ext4
On Wed, 29 Dec 2010 21:58:41 +0800 yangsheng <sickamd@gmail.com> wrote:
> 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)
Why do you believe this change is needed? Did you observe some problem
which it fixes? If so, please fully describe that problem.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2011-01-03 10:17 ` Andrew Morton
@ 2011-01-03 12:54 ` YangSheng
2011-01-04 14:56 ` Rogier Wolff
1 sibling, 0 replies; 11+ messages in thread
From: YangSheng @ 2011-01-03 12:54 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-fsdevel, adilger.kernel, linux-ext4
On 01/03/2011 06:17 PM, Andrew Morton wrote:
> On Wed, 29 Dec 2010 21:58:41 +0800 yangsheng<sickamd@gmail.com> wrote:
>
>
>> 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)
>>
> Why do you believe this change is needed? Did you observe some problem
> which it fixes? If so, please fully describe that problem.
>
If atime has been set to future(maybe cause by some accident system time
adjust or wrong set by touch). It cannot be update to reflect fact
access time before system time running over one day.
Thanks
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2011-01-03 10:17 ` Andrew Morton
2011-01-03 12:54 ` YangSheng
@ 2011-01-04 14:56 ` Rogier Wolff
1 sibling, 0 replies; 11+ messages in thread
From: Rogier Wolff @ 2011-01-04 14:56 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, linux-ext4, linux-fsdevel
On Mon, Jan 03, 2011 at 02:17:08AM -0800, Andrew Morton wrote:
> On Wed, 29 Dec 2010 21:58:41 +0800 yangsheng <sickamd@gmail.com> wrote:
> > - * Is the previous atime value older than a day? If yes,
> > + * Is the previous atime value old than a day? If yes,
You introduced a typo.
Roger.
--
** R.E.Wolff@BitWizard.nl ** http://www.BitWizard.nl/ ** +31-15-2600998 **
** Delftechpark 26 2628 XH Delft, The Netherlands. KVK: 27239233 **
*-- BitWizard writes Linux device drivers for any device you may have! --*
Q: It doesn't work. A: Look buddy, doesn't work is an ambiguous statement.
Does it sit on the couch all day? Is it unemployed? Please be specific!
Define 'it' and what it isn't doing. --------- Adapted from lxrbot FAQ
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2010-12-29 13:58 [PATCH] Update atime from future yangsheng
2011-01-03 10:17 ` Andrew Morton
@ 2011-01-03 10:27 ` Steven Whitehouse
2011-01-03 16:27 ` Andreas Dilger
` (2 more replies)
1 sibling, 3 replies; 11+ messages in thread
From: Steven Whitehouse @ 2011-01-03 10:27 UTC (permalink / raw)
To: yangsheng; +Cc: linux-kernel, linux-fsdevel, adilger.kernel, linux-ext4
Hi,
On Wed, 2010-12-29 at 21:58 +0800, yangsheng wrote:
> 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)
I don't think this is a good plan for cluster filesystems, since if the
times on the nodes are not exactly synchronised (we do highly recommend
people run ntp or similar) then this might lead to excessive atime
updating. The current behaviour is to ignore atimes which are in the
future for exactly this reason,
Steve.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
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
2 siblings, 1 reply; 11+ messages in thread
From: Andreas Dilger @ 2011-01-03 16:27 UTC (permalink / raw)
To: Steven Whitehouse
Cc: yangsheng, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, adilger.kernel@dilger.ca,
linux-ext4@vger.kernel.org
On 2011-01-03, at 3:27, Steven Whitehouse <swhiteho@redhat.com> wrote:
> On Wed, 2010-12-29 at 21:58 +0800, yangsheng wrote:
>> 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)
>
> I don't think this is a good plan for cluster filesystems, since if the
> times on the nodes are not exactly synchronised (we do highly recommend
> people run ntp or similar) then this might lead to excessive atime
> updating. The current behaviour is to ignore atimes which are in the
> future for exactly this reason,
The problem that is seen is if a tarball has stored a bad atime, or someone fat-fingers a "touch" then 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. One if our regression tests for Lustre caught this.
I wouldn't mind changing the relatime check so that it only updates the atime if it is more than one day in the future. That will avoid thrashing atime if the clocks are only slightly out of sync, but still allow fixing completely bogus atimes.
Cheers, Andreas
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2011-01-03 16:27 ` Andreas Dilger
@ 2011-01-03 16:41 ` Steven Whitehouse
0 siblings, 0 replies; 11+ messages in thread
From: Steven Whitehouse @ 2011-01-03 16:41 UTC (permalink / raw)
To: Andreas Dilger
Cc: yangsheng, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, adilger.kernel@dilger.ca,
linux-ext4@vger.kernel.org
Hi,
On Mon, 2011-01-03 at 09:27 -0700, Andreas Dilger wrote:
> On 2011-01-03, at 3:27, Steven Whitehouse <swhiteho@redhat.com> wrote:
> > On Wed, 2010-12-29 at 21:58 +0800, yangsheng wrote:
> >> 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)
> >
> > I don't think this is a good plan for cluster filesystems, since if the
> > times on the nodes are not exactly synchronised (we do highly recommend
> > people run ntp or similar) then this might lead to excessive atime
> > updating. The current behaviour is to ignore atimes which are in the
> > future for exactly this reason,
>
> The problem that is seen is if a tarball has stored a bad atime, or someone fat-fingers a "touch" then 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. One if our regression tests for Lustre caught this.
>
> I wouldn't mind changing the relatime check so that it only updates the atime if it is more than one day in the future. That will avoid thrashing atime if the clocks are only slightly out of sync, but still allow fixing completely bogus atimes.
>
> Cheers, Andreas
That sounds like a good solution to me,
Steve.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2011-01-03 10:27 ` Steven Whitehouse
2011-01-03 16:27 ` Andreas Dilger
@ 2011-01-03 16:44 ` YangSheng
2011-01-11 13:33 ` Pavel Machek
2 siblings, 0 replies; 11+ messages in thread
From: YangSheng @ 2011-01-03 16:44 UTC (permalink / raw)
To: Steven Whitehouse; +Cc: linux-kernel, linux-fsdevel, adilger.kernel, linux-ext4
On 01/03/2011 06:27 PM, Steven Whitehouse wrote:
> Hi,
>
> On Wed, 2010-12-29 at 21:58 +0800, yangsheng wrote:
>
>> 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)
>>
> I don't think this is a good plan for cluster filesystems, since if the
> times on the nodes are not exactly synchronised (we do highly recommend
> people run ntp or similar) then this might lead to excessive atime
> updating. The current behaviour is to ignore atimes which are in the
> future for exactly this reason,
>
I agreed in theory. Anyway, a two-way update may cause shake in some
case. Like a cluster environment with time gap between cluster members.
But future atime also is a trouble things i think. Of course, I hope a
clever patch to fix them all.
Thanks
yangsheng
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2011-01-03 10:27 ` Steven Whitehouse
2011-01-03 16:27 ` Andreas Dilger
2011-01-03 16:44 ` YangSheng
@ 2011-01-11 13:33 ` Pavel Machek
2011-01-13 14:18 ` Steven Whitehouse
2 siblings, 1 reply; 11+ messages in thread
From: Pavel Machek @ 2011-01-11 13:33 UTC (permalink / raw)
To: Steven Whitehouse
Cc: yangsheng, linux-kernel, linux-fsdevel, adilger.kernel,
linux-ext4
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)
>
> I don't think this is a good plan for cluster filesystems, since if the
> times on the nodes are not exactly synchronised (we do highly recommend
> people run ntp or similar) then this might lead to excessive atime
> updating. The current behaviour is to ignore atimes which are in the
> future for exactly this reason,
Well, would these "update storms" really be a problem?
AFAICT they should be fairly non-frequent, and worst thing that can
happen is that you'll do as many updates as different time settings,
settling for the lowest value...?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Update atime from future.
2011-01-11 13:33 ` Pavel Machek
@ 2011-01-13 14:18 ` Steven Whitehouse
0 siblings, 0 replies; 11+ messages in thread
From: Steven Whitehouse @ 2011-01-13 14:18 UTC (permalink / raw)
To: Pavel Machek
Cc: yangsheng, linux-kernel, linux-fsdevel, adilger.kernel,
linux-ext4
Hi,
On Tue, 2011-01-11 at 14:33 +0100, Pavel Machek wrote:
> 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)
> >
> > I don't think this is a good plan for cluster filesystems, since if the
> > times on the nodes are not exactly synchronised (we do highly recommend
> > people run ntp or similar) then this might lead to excessive atime
> > updating. The current behaviour is to ignore atimes which are in the
> > future for exactly this reason,
>
> Well, would these "update storms" really be a problem?
>
> AFAICT they should be fairly non-frequent, and worst thing that can
> happen is that you'll do as many updates as different time settings,
> settling for the lowest value...?
> Pavel
Sorry for the delay in replying. It has been a problem in the past,
certainly. I think it is best to be cautious in this case, since that
way we can be sure it won't be a problem. The chosen solution looks ok
to me,
Steve.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] Update atime from future.
@ 2011-01-04 9:08 yangsheng
0 siblings, 0 replies; 11+ 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] 11+ messages in thread
end of thread, other threads:[~2011-01-13 14:17 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-29 13:58 [PATCH] Update atime from future 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
-- strict thread matches above, loose matches on Subject: below --
2011-01-04 9:08 yangsheng
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).