Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a76c1ea authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Lachlan McIlroy
Browse files

[XFS] stop using file_update_time



xfs_ichtime updates the xfs_inode and Linux inode timestamps just fine, no
need to call file_update_time and then copy the values over to the XFS
inode. The only additional thing in file_update_time are checks not
applicable to the write path.

SGI-PV: 981498

SGI-Modid: xfs-linux-melb:xfs-kern:31829a

Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
Signed-off-by: default avatarDavid Chinner <david@fromorbit.com>
parent 8e5975c8
Loading
Loading
Loading
Loading
+0 −39
Original line number Original line Diff line number Diff line
@@ -132,45 +132,6 @@ xfs_ichgtime(
	}
	}
}
}


/*
 * Variant on the above which avoids querying the system clock
 * in situations where we know the Linux inode timestamps have
 * just been updated (and so we can update our inode cheaply).
 */
void
xfs_ichgtime_fast(
	xfs_inode_t	*ip,
	struct inode	*inode,
	int		flags)
{
	timespec_t	*tvp;

	if (flags & XFS_ICHGTIME_MOD) {
		tvp = &inode->i_mtime;
		ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec;
		ip->i_d.di_mtime.t_nsec = (__int32_t)tvp->tv_nsec;
	}
	if (flags & XFS_ICHGTIME_CHG) {
		tvp = &inode->i_ctime;
		ip->i_d.di_ctime.t_sec = (__int32_t)tvp->tv_sec;
		ip->i_d.di_ctime.t_nsec = (__int32_t)tvp->tv_nsec;
	}

	/*
	 * We update the i_update_core field _after_ changing
	 * the timestamps in order to coordinate properly with
	 * xfs_iflush() so that we don't lose timestamp updates.
	 * This keeps us from having to hold the inode lock
	 * while doing this.  We use the SYNCHRONIZE macro to
	 * 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))
		mark_inode_dirty_sync(inode);
}

/*
/*
 * Hook in SELinux.  This is not quite correct yet, what we really need
 * Hook in SELinux.  This is not quite correct yet, what we really need
 * here (as we do for default ACLs) is a mechanism by which creation of
 * here (as we do for default ACLs) is a mechanism by which creation of
+0 −3
Original line number Original line Diff line number Diff line
@@ -26,9 +26,6 @@ extern const struct file_operations xfs_invis_file_operations;


extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size);
extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size);


extern void xfs_ichgtime(struct xfs_inode *, int);
extern void xfs_ichgtime_fast(struct xfs_inode *, struct inode *, int);

extern void xfs_setup_inode(struct xfs_inode *);
extern void xfs_setup_inode(struct xfs_inode *);


#endif /* __XFS_IOPS_H__ */
#endif /* __XFS_IOPS_H__ */
+1 −3
Original line number Original line Diff line number Diff line
@@ -674,9 +674,7 @@ xfs_write(
	 */
	 */
	if (likely(!(ioflags & IO_INVIS) &&
	if (likely(!(ioflags & IO_INVIS) &&
		   !mnt_want_write(file->f_path.mnt))) {
		   !mnt_want_write(file->f_path.mnt))) {
		file_update_time(file);
		xfs_ichgtime(xip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
		xfs_ichgtime_fast(xip, inode,
				  XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
		mnt_drop_write(file->f_path.mnt);
		mnt_drop_write(file->f_path.mnt);
	}
	}