mirror of https://gitee.com/openkylin/linux.git
[XFS] update timestamp in xfs_ialloc manually
In xfs_ialloc we just want to set all timestamps to the current time. We don't need to mark the inode dirty like xfs_ichgtime does, and we don't need nor want the opimizations in xfs_ichgtime that I will introduce in the next patch. So just opencode the timestamp update in xfs_ialloc, and remove the new unused XFS_ICHGTIME_ACC case in xfs_ichgtime. SGI-PV: 981498 SGI-Modid: xfs-linux-melb:xfs-kern:31825a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
parent
ab4a9b04a3
commit
dff35fd41f
|
@ -89,12 +89,6 @@ xfs_mark_inode_dirty_sync(
|
|||
* Change the requested timestamp in the given inode.
|
||||
* We don't lock across timestamp updates, and we don't log them but
|
||||
* we do record the fact that there is dirty information in core.
|
||||
*
|
||||
* NOTE -- callers MUST combine XFS_ICHGTIME_MOD or XFS_ICHGTIME_CHG
|
||||
* with XFS_ICHGTIME_ACC to be sure that access time
|
||||
* update will take. Calling first with XFS_ICHGTIME_ACC
|
||||
* and then XFS_ICHGTIME_MOD may fail to modify the access
|
||||
* timestamp if the filesystem is mounted noacctm.
|
||||
*/
|
||||
void
|
||||
xfs_ichgtime(
|
||||
|
@ -110,11 +104,6 @@ xfs_ichgtime(
|
|||
ip->i_d.di_mtime.t_sec = (__int32_t)tv.tv_sec;
|
||||
ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec;
|
||||
}
|
||||
if (flags & XFS_ICHGTIME_ACC) {
|
||||
inode->i_atime = tv;
|
||||
ip->i_d.di_atime.t_sec = (__int32_t)tv.tv_sec;
|
||||
ip->i_d.di_atime.t_nsec = (__int32_t)tv.tv_nsec;
|
||||
}
|
||||
if (flags & XFS_ICHGTIME_CHG) {
|
||||
inode->i_ctime = tv;
|
||||
ip->i_d.di_ctime.t_sec = (__int32_t)tv.tv_sec;
|
||||
|
@ -149,12 +138,6 @@ xfs_ichgtime_fast(
|
|||
{
|
||||
timespec_t *tvp;
|
||||
|
||||
/*
|
||||
* Atime updates for read() & friends are handled lazily now, and
|
||||
* explicit updates must go through xfs_ichgtime()
|
||||
*/
|
||||
ASSERT((flags & XFS_ICHGTIME_ACC) == 0);
|
||||
|
||||
if (flags & XFS_ICHGTIME_MOD) {
|
||||
tvp = &inode->i_mtime;
|
||||
ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec;
|
||||
|
|
|
@ -1048,6 +1048,7 @@ xfs_ialloc(
|
|||
xfs_inode_t *ip;
|
||||
uint flags;
|
||||
int error;
|
||||
timespec_t tv;
|
||||
|
||||
/*
|
||||
* Call the space management code to pick
|
||||
|
@ -1128,7 +1129,13 @@ xfs_ialloc(
|
|||
ip->i_size = 0;
|
||||
ip->i_d.di_nextents = 0;
|
||||
ASSERT(ip->i_d.di_nblocks == 0);
|
||||
xfs_ichgtime(ip, XFS_ICHGTIME_CHG|XFS_ICHGTIME_ACC|XFS_ICHGTIME_MOD);
|
||||
|
||||
nanotime(&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;
|
||||
ip->i_d.di_atime = ip->i_d.di_mtime;
|
||||
ip->i_d.di_ctime = ip->i_d.di_mtime;
|
||||
|
||||
/*
|
||||
* di_gen will have been taken care of in xfs_iread.
|
||||
*/
|
||||
|
|
|
@ -87,8 +87,7 @@ typedef struct xfs_ifork {
|
|||
* Flags for xfs_ichgtime().
|
||||
*/
|
||||
#define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */
|
||||
#define XFS_ICHGTIME_ACC 0x2 /* data fork access timestamp */
|
||||
#define XFS_ICHGTIME_CHG 0x4 /* inode field change timestamp */
|
||||
#define XFS_ICHGTIME_CHG 0x2 /* inode field change timestamp */
|
||||
|
||||
/*
|
||||
* Per-fork incore inode flags.
|
||||
|
|
|
@ -513,7 +513,6 @@ xfs_setattr(
|
|||
ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec;
|
||||
ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec;
|
||||
ip->i_update_core = 1;
|
||||
timeflags &= ~XFS_ICHGTIME_ACC;
|
||||
}
|
||||
if (mask & ATTR_MTIME) {
|
||||
inode->i_mtime = iattr->ia_mtime;
|
||||
|
|
Loading…
Reference in New Issue