Re: [PATCH v2 1/1] eal: update xz read support and ignore warning
From: David Marchand <hidden>
Date: 2023-09-26 13:57:16
On Tue, Sep 26, 2023 at 3:30 PM Srikanth Yalavarthi [off-list ref] wrote:
archive_read_support_filter_xz returns a warning when compression is not fully supported and is supported through external program. This warning can be ignored when reading the files through firmware open as only decompression is required.
Same comment as before, this sentence is confusing.
Compressing files does not matter in DPDK rte_firmware_ API.
The commit title and commitlog won't help people understand in which
case the issue is reproduced, and how this patch fixes it.
Suggesting the following title and commitlog:
"""
eal/unix: fix firmware reading with external xz support
libarchive may support xz decompression only through an external
(slower) helper.
In such a case, archive_read_support_filter_xz() returns ARCHIVE_WARN.
Fixes: 40edb9c0d36b ("eal: handle compressed firmware")
Cc: stable@dpdk.org
"""
Fixes: 40edb9c0d36b ("eal: handle compressed firmware")
Cc: stable@dpdk.org
Signed-off-by: Srikanth Yalavarthi <redacted>
Change-Id: I38cce556ec637af03dbde74d7d18318af48082d6This is internal scm stuff and must be dropped.
quoted hunk ↗ jump to hunk
--- lib/eal/unix/eal_firmware.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-)diff --git a/lib/eal/unix/eal_firmware.c b/lib/eal/unix/eal_firmware.c index d1616b0bd9..16690b4245 100644 --- a/lib/eal/unix/eal_firmware.c +++ b/lib/eal/unix/eal_firmware.c@@ -25,19 +25,31 @@ static int firmware_open(struct firmware_read_ctx *ctx, const char *name, size_t blocksize) { struct archive_entry *e; + int err; ctx->a = archive_read_new(); if (ctx->a == NULL) return -1; - if (archive_read_support_format_raw(ctx->a) != ARCHIVE_OK || - archive_read_support_filter_xz(ctx->a) != ARCHIVE_OK || - archive_read_open_filename(ctx->a, name, blocksize) != ARCHIVE_OK || - archive_read_next_header(ctx->a, &e) != ARCHIVE_OK) { - archive_read_free(ctx->a); - ctx->a = NULL; - return -1; - } + + if (archive_read_support_format_raw(ctx->a) != ARCHIVE_OK) + goto error; + + err = archive_read_support_filter_xz(ctx->a); + if (err != ARCHIVE_OK && err != ARCHIVE_WARN) + goto error; + + if (archive_read_open_filename(ctx->a, name, blocksize) != ARCHIVE_OK) + goto error; + + if (archive_read_next_header(ctx->a, &e))
I did a typo when quickly writting the snippet previously. It should be "archive_read_next_header(ctx->a, &e) != ARCHIVE_OK"
+ goto error;
+
return 0;
+
+error:
+ archive_read_free(ctx->a);
+ ctx->a = NULL;
+ return -1;
}
static ssize_t
--
2.41.0-- David Marchand