forked from Minki/linux
[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.
|
* Change the requested timestamp in the given inode.
|
||||||
* We don't lock across timestamp updates, and we don't log them but
|
* 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.
|
* 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
|
void
|
||||||
xfs_ichgtime(
|
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_sec = (__int32_t)tv.tv_sec;
|
||||||
ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec;
|
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) {
|
if (flags & XFS_ICHGTIME_CHG) {
|
||||||
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_sec = (__int32_t)tv.tv_sec;
|
||||||
@ -149,12 +138,6 @@ xfs_ichgtime_fast(
|
|||||||
{
|
{
|
||||||
timespec_t *tvp;
|
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) {
|
if (flags & XFS_ICHGTIME_MOD) {
|
||||||
tvp = &inode->i_mtime;
|
tvp = &inode->i_mtime;
|
||||||
ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec;
|
ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec;
|
||||||
|
@ -1048,6 +1048,7 @@ xfs_ialloc(
|
|||||||
xfs_inode_t *ip;
|
xfs_inode_t *ip;
|
||||||
uint flags;
|
uint flags;
|
||||||
int error;
|
int error;
|
||||||
|
timespec_t tv;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call the space management code to pick
|
* Call the space management code to pick
|
||||||
@ -1128,7 +1129,13 @@ xfs_ialloc(
|
|||||||
ip->i_size = 0;
|
ip->i_size = 0;
|
||||||
ip->i_d.di_nextents = 0;
|
ip->i_d.di_nextents = 0;
|
||||||
ASSERT(ip->i_d.di_nblocks == 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.
|
* di_gen will have been taken care of in xfs_iread.
|
||||||
*/
|
*/
|
||||||
|
@ -87,8 +87,7 @@ typedef struct xfs_ifork {
|
|||||||
* Flags for xfs_ichgtime().
|
* Flags for xfs_ichgtime().
|
||||||
*/
|
*/
|
||||||
#define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */
|
#define XFS_ICHGTIME_MOD 0x1 /* data fork modification timestamp */
|
||||||
#define XFS_ICHGTIME_ACC 0x2 /* data fork access timestamp */
|
#define XFS_ICHGTIME_CHG 0x2 /* inode field change timestamp */
|
||||||
#define XFS_ICHGTIME_CHG 0x4 /* inode field change timestamp */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Per-fork incore inode flags.
|
* 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_sec = iattr->ia_atime.tv_sec;
|
||||||
ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec;
|
ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec;
|
||||||
ip->i_update_core = 1;
|
ip->i_update_core = 1;
|
||||||
timeflags &= ~XFS_ICHGTIME_ACC;
|
|
||||||
}
|
}
|
||||||
if (mask & ATTR_MTIME) {
|
if (mask & ATTR_MTIME) {
|
||||||
inode->i_mtime = iattr->ia_mtime;
|
inode->i_mtime = iattr->ia_mtime;
|
||||||
|
Loading…
Reference in New Issue
Block a user