diff options
Diffstat (limited to 'fs/xfs/xfs_trans_inode.c')
-rw-r--r-- | fs/xfs/xfs_trans_inode.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/fs/xfs/xfs_trans_inode.c b/fs/xfs/xfs_trans_inode.c index cdc53a1050c5..ccb34532768b 100644 --- a/fs/xfs/xfs_trans_inode.c +++ b/fs/xfs/xfs_trans_inode.c | |||
@@ -118,6 +118,36 @@ xfs_trans_ijoin_ref( | |||
118 | } | 118 | } |
119 | 119 | ||
120 | /* | 120 | /* |
121 | * Transactional inode timestamp update. Requires the inode to be locked and | ||
122 | * joined to the transaction supplied. Relies on the transaction subsystem to | ||
123 | * track dirty state and update/writeback the inode accordingly. | ||
124 | */ | ||
125 | void | ||
126 | xfs_trans_ichgtime( | ||
127 | struct xfs_trans *tp, | ||
128 | struct xfs_inode *ip, | ||
129 | int flags) | ||
130 | { | ||
131 | struct inode *inode = VFS_I(ip); | ||
132 | timespec_t tv; | ||
133 | |||
134 | ASSERT(tp); | ||
135 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
136 | ASSERT(ip->i_transp == tp); | ||
137 | |||
138 | tv = current_fs_time(inode->i_sb); | ||
139 | |||
140 | if ((flags & XFS_ICHGTIME_MOD) && | ||
141 | !timespec_equal(&inode->i_mtime, &tv)) { | ||
142 | inode->i_mtime = tv; | ||
143 | } | ||
144 | if ((flags & XFS_ICHGTIME_CHG) && | ||
145 | !timespec_equal(&inode->i_ctime, &tv)) { | ||
146 | inode->i_ctime = tv; | ||
147 | } | ||
148 | } | ||
149 | |||
150 | /* | ||
121 | * This is called to mark the fields indicated in fieldmask as needing | 151 | * This is called to mark the fields indicated in fieldmask as needing |
122 | * to be logged when the transaction is committed. The inode must | 152 | * to be logged when the transaction is committed. The inode must |
123 | * already be associated with the given transaction. | 153 | * already be associated with the given transaction. |