diff options
Diffstat (limited to 'fs/xfs/xfs_inode_item.c')
| -rw-r--r-- | fs/xfs/xfs_inode_item.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index 47d5b663c37e..9794b876d6ff 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c | |||
| @@ -232,6 +232,15 @@ xfs_inode_item_format( | |||
| 232 | nvecs = 1; | 232 | nvecs = 1; |
| 233 | 233 | ||
| 234 | /* | 234 | /* |
| 235 | * Make sure the linux inode is dirty. We do this before | ||
| 236 | * clearing i_update_core as the VFS will call back into | ||
| 237 | * XFS here and set i_update_core, so we need to dirty the | ||
| 238 | * inode first so that the ordering of i_update_core and | ||
| 239 | * unlogged modifications still works as described below. | ||
| 240 | */ | ||
| 241 | xfs_mark_inode_dirty_sync(ip); | ||
| 242 | |||
| 243 | /* | ||
| 235 | * Clear i_update_core if the timestamps (or any other | 244 | * Clear i_update_core if the timestamps (or any other |
| 236 | * non-transactional modification) need flushing/logging | 245 | * non-transactional modification) need flushing/logging |
| 237 | * and we're about to log them with the rest of the core. | 246 | * and we're about to log them with the rest of the core. |
| @@ -263,14 +272,9 @@ xfs_inode_item_format( | |||
| 263 | } | 272 | } |
| 264 | 273 | ||
| 265 | /* | 274 | /* |
| 266 | * Make sure to get the latest atime from the Linux inode. | 275 | * Make sure to get the latest timestamps from the Linux inode. |
| 267 | */ | 276 | */ |
| 268 | xfs_synchronize_atime(ip); | 277 | xfs_synchronize_times(ip); |
| 269 | |||
| 270 | /* | ||
| 271 | * make sure the linux inode is dirty | ||
| 272 | */ | ||
| 273 | xfs_mark_inode_dirty_sync(ip); | ||
| 274 | 278 | ||
| 275 | vecp->i_addr = (xfs_caddr_t)&ip->i_d; | 279 | vecp->i_addr = (xfs_caddr_t)&ip->i_d; |
| 276 | vecp->i_len = sizeof(struct xfs_icdinode); | 280 | vecp->i_len = sizeof(struct xfs_icdinode); |
