quota: clear speculative delalloc when checking quota usage
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 26 Oct 2017 05:51:39 +0000 (22:51 -0700)
committerEryu Guan <eguan@redhat.com>
Fri, 27 Oct 2017 03:46:29 +0000 (11:46 +0800)
Occasionally speculative preallocation kicks in when writing files
to a filesystem under test.  These preallocations consume quota and
/usually/ aren't around after we drop_caches, but there's nothing to
guarantee that they actually have, so the quota reports will be
different before and after the fs remount, causing sporadic test
failures in generic/{23[123],270}.

We now have xfs_spaceman which can instruct XFS to forcibly remove
the speculative preallocations.  This fixes the sporadic failures,
at least for XFS.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
common/config
common/quota

index 8844173f321843920a22c1e7d67e9aab23c9f74a..96503c67aec08e3d994cdb08a5994fdec1b5d243 100644 (file)
@@ -149,6 +149,7 @@ export XFS_LOGPRINT_PROG="`set_prog_path xfs_logprint`"
 export XFS_REPAIR_PROG="`set_prog_path xfs_repair`"
 export XFS_DB_PROG="`set_prog_path xfs_db`"
 export XFS_GROWFS_PROG=`set_prog_path xfs_growfs`
+export XFS_SPACEMAN_PROG="`set_prog_path xfs_spaceman`"
 export XFS_SCRUB_PROG="`set_prog_path xfs_scrub`"
 export XFS_PARALLEL_REPAIR_PROG="`set_prog_path xfs_prepair`"
 export XFS_PARALLEL_REPAIR64_PROG="`set_prog_path xfs_prepair64`"
index d027a8c117e0df11976d1a09a8e9d9b76e0da1c1..2611c484ee35a8f3437ca8507b8e17c4d19fe486 100644 (file)
@@ -267,6 +267,12 @@ _check_quota_usage()
                VFS_QUOTA=1
                quotaon -f -u -g $SCRATCH_MNT 2>/dev/null
                ;;
+       xfs)
+               # Clear out speculative preallocations to eliminate them
+               # as a source of intermittent orig/checked differences.
+               test -x "$XFS_SPACEMAN_PROG" && \
+                       "$XFS_SPACEMAN_PROG" -c 'prealloc -s' $SCRATCH_MNT
+               ;;
        *)
                ;;
        esac