|
@@ -1231,13 +1231,25 @@ xfs_ioctl_setattr(
|
|
|
|
|
|
}
|
|
|
|
|
|
- if (mask & FSX_EXTSIZE)
|
|
|
- ip->i_d.di_extsize = fa->fsx_extsize >> mp->m_sb.sb_blocklog;
|
|
|
if (mask & FSX_XFLAGS) {
|
|
|
xfs_set_diflags(ip, fa->fsx_xflags);
|
|
|
xfs_diflags_to_linux(ip);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Only set the extent size hint if we've already determined that the
|
|
|
+ * extent size hint should be set on the inode. If no extent size flags
|
|
|
+ * are set on the inode then unconditionally clear the extent size hint.
|
|
|
+ */
|
|
|
+ if (mask & FSX_EXTSIZE) {
|
|
|
+ int extsize = 0;
|
|
|
+
|
|
|
+ if (ip->i_d.di_flags &
|
|
|
+ (XFS_DIFLAG_EXTSIZE | XFS_DIFLAG_EXTSZINHERIT))
|
|
|
+ extsize = fa->fsx_extsize >> mp->m_sb.sb_blocklog;
|
|
|
+ ip->i_d.di_extsize = extsize;
|
|
|
+ }
|
|
|
+
|
|
|
xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG);
|
|
|
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
|
|
|