[PATCH 01/16] common/populate: refactor caching of metadumps to a helper

Darrick J. Wong
2024-10-11T01:41:15Z

Hoist out of _scratch_populate_cached all the code that we use to save a
metadump of the populated filesystem. We're going to make this more
involved for XFS in the next few patches so that we can take advantage
of the new support for external devices in metadump/mdrestore.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
common/populate | 37 ++++++++++++++++++++++++++++---------
1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/common/populate b/common/populate
index 88c8ba2b32767c..82f526dcf9e2d5 100644
--- a/common/populate
+++ b/common/populate
@@ -1051,6 +1051,31 @@ _scratch_populate_restore_cached() {
return 1
}

+# Take a metadump of the scratch filesystem and cache it for later.
+_scratch_populate_save_metadump()
+{
+ local metadump_file="$1"
+
+ case "${FSTYP}" in
+ "xfs")
+ local logdev=none
+ [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+ logdev=$SCRATCH_LOGDEV
+
+ _xfs_metadump "$metadump_file" "$SCRATCH_DEV" "$logdev" \
+ compress -a -o
+ res=$?
+ ;;
+ "ext2"|"ext3"|"ext4")
+ _ext4_metadump "${SCRATCH_DEV}" "${metadump_file}" compress
+ res=$?
+ ;;
+ *)
+ _fail "Don't know how to save a ${FSTYP} filesystem."
+ esac
+ return $res
+}
+
# Populate a scratch FS from scratch or from a cached image.
_scratch_populate_cached() {
local meta_descr="$(_scratch_populate_cache_tag "$@")"
@@ -1074,26 +1099,20 @@ _scratch_populate_cached() {

# Oh well, just create one from scratch
_scratch_mkfs
- echo "${meta_descr}" > "${populate_metadump_descr}"
case "${FSTYP}" in
"xfs")
_scratch_xfs_populate $@
_scratch_xfs_populate_check
-
- local logdev=none
- [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
- logdev=$SCRATCH_LOGDEV
-
- _xfs_metadump "$POPULATE_METADUMP" "$SCRATCH_DEV" "$logdev" \
- compress -a -o
;;
"ext2"|"ext3"|"ext4")
_scratch_ext4_populate $@
_scratch_ext4_populate_check
- _ext4_metadump "${SCRATCH_DEV}" "${POPULATE_METADUMP}" compress
;;
*)
_fail "Don't know how to populate a ${FSTYP} filesystem."
;;
esac
+
+ _scratch_populate_save_metadump "${POPULATE_METADUMP}" && \
+ echo "${meta_descr}" > "${populate_metadump_descr}"
}