linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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.
  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: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: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

* [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

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

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