xfs
[Top] [All Lists]

Re: [PATCH 2/3] optimize xfs_ichgtime

To: Christoph Hellwig <hch@xxxxxx>, xfs@xxxxxxxxxxx
Subject: Re: [PATCH 2/3] optimize xfs_ichgtime
From: Christoph Hellwig <hch@xxxxxx>
Date: Fri, 1 Aug 2008 23:18:06 +0200
In-reply-to: <20080726091230.GS5947@disturbed>
References: <20080726063335.GB22603@xxxxxx> <20080726091230.GS5947@disturbed>
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Mutt/1.3.28i
On Sat, Jul 26, 2008 at 07:12:30PM +1000, Dave Chinner wrote:
> On Sat, Jul 26, 2008 at 08:33:35AM +0200, Christoph Hellwig wrote:
> > Port a little optmization from file_update_time to xfs_ichgtime, and
> > only update the timestamp and mark the inode dirty if the timestamp
> > actually changes in the timer tick resultion supported by the running
> > kernel.
> 
> Looks ok.

Updated version that removes the I_NEW check (I could do this in patch
1, but doing it here causes less churn)


Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c      2008-07-26 
11:14:45.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c   2008-07-26 11:15:54.000000000 
+0200
@@ -97,17 +97,23 @@ xfs_ichgtime(
 {
        struct inode    *inode = VFS_I(ip);
        timespec_t      tv;
+       int             sync_it = 0;
 
-       nanotime(&tv);
-       if (flags & XFS_ICHGTIME_MOD) {
+       tv = current_fs_time(inode->i_sb);
+
+       if ((flags & XFS_ICHGTIME_MOD) &&
+           !timespec_equal(&inode->i_mtime, &tv)) {
                inode->i_mtime = tv;
                ip->i_d.di_mtime.t_sec = (__int32_t)tv.tv_sec;
                ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec;
+               sync_it = 1;
        }
-       if (flags & XFS_ICHGTIME_CHG) {
+       if ((flags & XFS_ICHGTIME_CHG) &&
+           !timespec_equal(&inode->i_ctime, &tv)) {
                inode->i_ctime = tv;
                ip->i_d.di_ctime.t_sec = (__int32_t)tv.tv_sec;
                ip->i_d.di_ctime.t_nsec = (__int32_t)tv.tv_nsec;
+               sync_it = 1;
        }
 
        /*
@@ -119,10 +125,11 @@ xfs_ichgtime(
         * ensure that the compiler does not reorder the update
         * of i_update_core above the timestamp updates above.
         */
-       SYNCHRONIZE();
-       ip->i_update_core = 1;
-       if (!(inode->i_state & I_NEW))
+       if (sync_it) {
+               SYNCHRONIZE();
+               ip->i_update_core = 1;
                mark_inode_dirty_sync(inode);
+       }
 }
 
 /*


<Prev in Thread] Current Thread [Next in Thread>
  • Re: [PATCH 2/3] optimize xfs_ichgtime, Christoph Hellwig <=