public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Stefano Brivio <sbrivio@redhat.com>
Cc: passt-dev@passt.top, lvivier@redhat.com,
	David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH v2 3/4] Split "auto" compression mode into its own path
Date: Fri, 26 Apr 2024 12:01:07 +1000	[thread overview]
Message-ID: <20240426020108.1522375-4-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20240426020108.1522375-1-david@gibson.dropbear.id.au>

mbuto supports "auto" compression mode where we detect the fastest to
decompress and use it.  This is structured a bit oddly - cpio_compress()
first handles the case of an explicitly selected compressor, then handles
the auto-detected case, redundantly implementing the compression once it
has picked one.

Make this a bit clearer: first handle the "auto" case by calling out to
the testing code, and using that to set the parameter for the specific
compression path.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 mbuto | 53 ++++++++++++++++++++++++-----------------------------
 1 file changed, 24 insertions(+), 29 deletions(-)

diff --git a/mbuto b/mbuto
index 49d032c..eb559fb 100755
--- a/mbuto
+++ b/mbuto
@@ -566,31 +566,11 @@ cpio_init() {
 	fi
 }
 
-# cpio_compress() - Compress archive, test available methods if none is selected
+# compress_select() - Try compressors and pick the fastest to decompress image
 # $1:	Existing CPIO archive
-cpio_compress() {
-	{ [ -z "${COMPRESS}" ] || [ "${COMPRESS}" = "none" ]; } && return
-
-	info "Compressing CPIO archive ${1}"
-
-	if [ "${COMPRESS}" != "auto" ]; then
-		[ "${COMPRESS}" = "lzo" ] && __cmd="lzop" || __cmd="${COMPRESS}"
-
-		cmd_check "${__cmd}"
-		if [ "${__cmd}" = "lz4" ]; then
-			"${__cmd}" -l -f -q -9 "${1}" "${1}.lz4"
-		else
-			"${__cmd}" -f -q -9 -S .lz4 "${1}"
-		fi
-
-		mv "${1}.lz4" "${1}"
-
-		return
-	fi
-
+compress_select() {
 	if [ ! -f "/boot/config-${KERNEL}" ]; then
-		"${GZIP}" -9 "${1}"
-		"${MV}" "${1}.gz" "${1}"
+		echo "gzip"
 		return
 	fi
 
@@ -639,14 +619,29 @@ cpio_compress() {
 		       "${__a}:" "${__size} bytes" "${__time}s"
 	done
 
-	[ "${__pick}" = "lzo" ] && __cmd="lzop" || __cmd="${__pick}"
-	[ "${__cmd}" = "lz4" ] && __opt="-l" || __opt=""
-
-	"${__cmd}" ${__opt} -q -9 -c "${1}" > "${compress_test1}"
 	notice "Picked ${__pick} compression for CPIO"
+	rm ${compress_test1} ${compress_test2}
+	echo "${__pick}"
+}
+
+# cpio_compress() - Compress archive, test available methods if none is selected
+# $1:	Existing CPIO archive
+cpio_compress() {
+	{ [ -z "${COMPRESS}" ] || [ "${COMPRESS}" = "none" ]; } && return
+	[ "${COMPRESS}" = "auto" ] && COMPRESS=$(compress_select "$1")
+
+	info "Compressing CPIO archive ${1}"
+
+	[ "${COMPRESS}" = "lzo" ] && __cmd="lzop" || __cmd="${COMPRESS}"
+
+	cmd_check "${__cmd}"
+	if [ "${__cmd}" = "lz4" ]; then
+		"${__cmd}" -l -f -q -9 "${1}" "${1}.lz4"
+	else
+		"${__cmd}" -f -q -9 -S .lz4 "${1}"
+	fi
 
-	mv "${compress_test1}" "${OUT}"
-	rm "${compress_test2}"
+	mv "${1}.lz4" "${1}"
 }
 
 ################################################################################
-- 
@@ -566,31 +566,11 @@ cpio_init() {
 	fi
 }
 
-# cpio_compress() - Compress archive, test available methods if none is selected
+# compress_select() - Try compressors and pick the fastest to decompress image
 # $1:	Existing CPIO archive
-cpio_compress() {
-	{ [ -z "${COMPRESS}" ] || [ "${COMPRESS}" = "none" ]; } && return
-
-	info "Compressing CPIO archive ${1}"
-
-	if [ "${COMPRESS}" != "auto" ]; then
-		[ "${COMPRESS}" = "lzo" ] && __cmd="lzop" || __cmd="${COMPRESS}"
-
-		cmd_check "${__cmd}"
-		if [ "${__cmd}" = "lz4" ]; then
-			"${__cmd}" -l -f -q -9 "${1}" "${1}.lz4"
-		else
-			"${__cmd}" -f -q -9 -S .lz4 "${1}"
-		fi
-
-		mv "${1}.lz4" "${1}"
-
-		return
-	fi
-
+compress_select() {
 	if [ ! -f "/boot/config-${KERNEL}" ]; then
-		"${GZIP}" -9 "${1}"
-		"${MV}" "${1}.gz" "${1}"
+		echo "gzip"
 		return
 	fi
 
@@ -639,14 +619,29 @@ cpio_compress() {
 		       "${__a}:" "${__size} bytes" "${__time}s"
 	done
 
-	[ "${__pick}" = "lzo" ] && __cmd="lzop" || __cmd="${__pick}"
-	[ "${__cmd}" = "lz4" ] && __opt="-l" || __opt=""
-
-	"${__cmd}" ${__opt} -q -9 -c "${1}" > "${compress_test1}"
 	notice "Picked ${__pick} compression for CPIO"
+	rm ${compress_test1} ${compress_test2}
+	echo "${__pick}"
+}
+
+# cpio_compress() - Compress archive, test available methods if none is selected
+# $1:	Existing CPIO archive
+cpio_compress() {
+	{ [ -z "${COMPRESS}" ] || [ "${COMPRESS}" = "none" ]; } && return
+	[ "${COMPRESS}" = "auto" ] && COMPRESS=$(compress_select "$1")
+
+	info "Compressing CPIO archive ${1}"
+
+	[ "${COMPRESS}" = "lzo" ] && __cmd="lzop" || __cmd="${COMPRESS}"
+
+	cmd_check "${__cmd}"
+	if [ "${__cmd}" = "lz4" ]; then
+		"${__cmd}" -l -f -q -9 "${1}" "${1}.lz4"
+	else
+		"${__cmd}" -f -q -9 -S .lz4 "${1}"
+	fi
 
-	mv "${compress_test1}" "${OUT}"
-	rm "${compress_test2}"
+	mv "${1}.lz4" "${1}"
 }
 
 ################################################################################
-- 
2.44.0


  parent reply	other threads:[~2024-04-26  2:01 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-26  2:01 [PATCH v2 0/4] mbuto: Assorted fixes and simplifications David Gibson
2024-04-26  2:01 ` [PATCH v2 1/4] ${wd} is always set, no need to test for it David Gibson
2024-04-26  2:01 ` [PATCH v2 2/4] Remove stale archivemount support David Gibson
2024-04-26  2:01 ` David Gibson [this message]
2024-04-26  2:01 ` [PATCH v2 4/4] Remove unnecessary cpio_init function David Gibson
2024-04-26  6:14 ` [PATCH v2 0/4] mbuto: Assorted fixes and simplifications Stefano Brivio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240426020108.1522375-4-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=lvivier@redhat.com \
    --cc=passt-dev@passt.top \
    --cc=sbrivio@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).