@@ -52,6 +52,7 @@ typedef struct xfs_mount {
char *m_fsname; /* filesystem name */
int m_bsize; /* fs logical block size */
spinlock_t m_agirotor_lock;
+ xfs_rgnumber_t m_rtgrotor; /* last rtgroup rtpicked */
xfs_agnumber_t m_agfrotor; /* last ag where space found */
xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */
xfs_agnumber_t m_maxagi; /* highest inode alloc group */
@@ -1060,10 +1060,14 @@ xfs_rtfree_extent(
if (!(mp->m_rbmip->i_diflags & XFS_DIFLAG_NEWRTBM))
mp->m_rbmip->i_diflags |= XFS_DIFLAG_NEWRTBM;
- atime = inode_get_atime(VFS_I(mp->m_rbmip));
- atime.tv_sec = 0;
- inode_set_atime_to_ts(VFS_I(mp->m_rbmip), atime);
- xfs_trans_log_inode(tp, mp->m_rbmip, XFS_ILOG_CORE);
+ if (xfs_has_rtgroups(mp)) {
+ mp->m_rtgrotor = 0;
+ } else {
+ atime = inode_get_atime(VFS_I(mp->m_rbmip));
+ atime.tv_sec = 0;
+ inode_set_atime_to_ts(VFS_I(mp->m_rbmip), atime);
+ xfs_trans_log_inode(tp, mp->m_rbmip, XFS_ILOG_CORE);
+ }
}
error = 0;
out:
@@ -810,7 +810,8 @@ rtbitmap_create(
rbmip->i_disk_size = mp->m_sb.sb_rbmblocks * mp->m_sb.sb_blocksize;
rbmip->i_diflags |= XFS_DIFLAG_NEWRTBM;
- inode_set_atime(VFS_I(rbmip), 0, 0);
+ if (!xfs_has_rtgroups(mp))
+ inode_set_atime(VFS_I(rbmip), 0, 0);
libxfs_trans_log_inode(upd.tp, rbmip, XFS_ILOG_CORE);
error = -libxfs_imeta_commit_update(&upd);