_qmount
echo "*** turn off $off_opts quotas"
- xfs_quota -x -c "off -$off_opts" $SCRATCH_MNT
- xfs_quota -x -c "remove -$off_opts" $SCRATCH_MNT
+ $XFS_QUOTA_PROG -x -c "off -$off_opts" $SCRATCH_MNT
+
+ # Remount the filesystem with no quota options to force quotas off.
+ # This takes care of newer kernels where quotaoff clears the superblock
+ # quota enforcement flags but doesn't shut down accounting.
+ _scratch_unmount
+ _qmount_option ""
+ _scratch_mount
+
+ rm_commands=(-x -c "remove -$off_opts")
+
+ # Remounting a V4 fs with no quota options means that the internal
+ # gquotino -> pquotino remapping does not happen. If we want to
+ # truncate the "project" quota file we must run remove -g. However,
+ # xfs_quota has a nasty sharp edge wherein passing '-g' and '-p' only
+ # results in a QUOTARM call for the group quota file, so we must make
+ # a separate remove call.
+ [ $_fs_has_crcs == 0 ] && [ "$off_opts" = "up" ] && \
+ rm_commands+=(-c "remove -g")
+
+ $XFS_QUOTA_PROG "${rm_commands[@]}" $SCRATCH_MNT
+
echo "*** umount"
_scratch_unmount