diff mbox series

[3/4] populate: support compressing metadumps

Message ID 161526476250.1212855.18197470277954527515.stgit@magnolia (mailing list archive)
State New, archived
Headers show
Series fstests: improve metadata dump capture helpers | expand

Commit Message

Darrick J. Wong March 9, 2021, 4:39 a.m. UTC
From: Darrick J. Wong <djwong@kernel.org>

If the test runner passed in a DUMP_COMPRESSOR program, make it so that
the metadumps we generate are also compressed.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 README          |    5 +++++
 common/populate |   21 +++++++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/README b/README
index b00328ac..3d369438 100644
--- a/README
+++ b/README
@@ -111,6 +111,11 @@  Preparing system for tests:
                the module is the same as FSTYP.
              - Set DUMP_CORRUPT_FS=1 to record metadata dumps of XFS
                filesystems if a filesystem check fails.
+             - Set DUMP_COMPRESSOR to a compression program to compress
+               metadumps of filesystems.  This program must accept '-f' and the
+               name of a file to compress; and it must accept '-d -f -k' and
+               the name of a file to decompress.  In other words, it must
+               emulate gzip.
 
         - or add a case to the switch in common/config assigning
           these variables based on the hostname of your test
diff --git a/common/populate b/common/populate
index 4e5b645f..b897922c 100644
--- a/common/populate
+++ b/common/populate
@@ -824,6 +824,17 @@  _scratch_populate_cache_tag() {
 _scratch_populate_restore_cached() {
 	local metadump="$1"
 
+	# If we're configured for compressed dumps and there isn't already an
+	# uncompressed dump, see if we can use DUMP_COMPRESSOR to decompress
+	# something.
+	if [ -n "$DUMP_COMPRESSOR" ]; then
+		for compr in "$metadump".*; do
+			[ -e "$compr" ] && $DUMP_COMPRESSOR -d -f -k "$compr" && break
+		done
+	fi
+
+	test -r "$metadump" || return 1
+
 	case "${FSTYP}" in
 	"xfs")
 		xfs_mdrestore "${metadump}" "${SCRATCH_DEV}" && return 0
@@ -855,8 +866,7 @@  _scratch_populate_cached() {
 		rm -rf "${POPULATE_METADUMP}"
 
 	# Try to restore from the metadump
-	test -r "${POPULATE_METADUMP}" && \
-		_scratch_populate_restore_cached "${POPULATE_METADUMP}" && \
+	_scratch_populate_restore_cached "${POPULATE_METADUMP}" && \
 		return
 
 	# Oh well, just create one from scratch
@@ -867,6 +877,13 @@  _scratch_populate_cached() {
 		_scratch_xfs_populate $@
 		_scratch_xfs_populate_check
 		_scratch_xfs_metadump "${POPULATE_METADUMP}"
+
+		local logdev=
+		[ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+			logdev=$SCRATCH_LOGDEV
+
+		_xfs_metadump "$POPULATE_METADUMP" "$SCRATCH_DEV" "$logdev" \
+			compress
 		;;
 	"ext2"|"ext3"|"ext4")
 		_scratch_ext4_populate $@