From patchwork Thu Dec 2 12:24:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12652465 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04E4CC433FE for ; Thu, 2 Dec 2021 12:25:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234072AbhLBM2p (ORCPT ); Thu, 2 Dec 2021 07:28:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234914AbhLBM2o (ORCPT ); Thu, 2 Dec 2021 07:28:44 -0500 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A613C06174A for ; Thu, 2 Dec 2021 04:25:22 -0800 (PST) Received: by mail-ed1-x52f.google.com with SMTP id r25so49163706edq.7 for ; Thu, 02 Dec 2021 04:25:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N3oqLot0YlcbRcNAc07Y6XrPI/fvmTo4H4nilHDSxes=; b=SCqdnSNMTkFe0oBjZKCxM3e6Bxh8QP16PSH2ePVD7wYBGwrUWrqbpjSLNCpKcDBuO8 SFXAUnX966zn00nVyFcbVEwKTszItMFxqz4i4dcmfwWfrZjtwb8E51QKnWit08ldH6Vt gBbH1OwtGvFYGTwOT4GnOHc7drk/WtaWIjhOQ1UUpO6tRk1FtOKl/pyS17YzTQ+1P7ZD JLqFhz/2D8v/RP1haIhBgS4mByfLNxhEYCY+3VlMhLRbNOydEynJ+JaaOyyYBL+jXpIl 0eKLdIC5tQE4xDTLAkmAJ/uFBSWetxm7Ea24RYcsX5cfwz1zmVd/gRCmz6TsRxoxJ74E yPJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N3oqLot0YlcbRcNAc07Y6XrPI/fvmTo4H4nilHDSxes=; b=PPRJkEyaLmCO9zyFWjXPunm/fCcGIMjOZXLeinR7fMbARl/LvAeHXMNIxIlEPrJ3j9 Ra+HRpmtt/Ea534LcVxKT+dX3MH6WaXqzoEjD+t16Q/KId5kdn+JR807u8uUwouf3Uob oe81SetOi/xO9dv1HmSXHlkW1FeO+uZswKQHJfytCopZHKJ4kYcaoZjlR6L/NAWkM12s GiITHNPPsOyGzBtlH04mnFZuvtda6x4sr4aA/Z8XqT1sUjDoTyN3mxDveWvL238jbpdZ irdTw1JXcisnjmQ/1S9AP8ygg7k7L6Ho54sOzUzO+/5hfpfwurFMSwFUv3orYz5LKuXX 0VeA== X-Gm-Message-State: AOAM533q3mU6lPIZyLoAnX9qeBioS+8QIeqCMQ4ZOGQdRBnqJ5JVuIga XZoqfKm8xDxYbGx9u4+Uv+iWfN8Gx86VgQ== X-Google-Smtp-Source: ABdhPJw5nIq0U7WDMKDAyrhtujXgC0srPn/xSw7MC8YtsfPOV7GoYnUpJGX0RoOQOtMhzIwKK+aaOg== X-Received: by 2002:a17:907:7664:: with SMTP id kk4mr14550477ejc.319.1638447919059; Thu, 02 Dec 2021 04:25:19 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id eg8sm1998507edb.75.2021.12.02.04.25.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Dec 2021 04:25:18 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v5 11/20] trace-cmd library: Read compression header Date: Thu, 2 Dec 2021 14:24:58 +0200 Message-Id: <20211202122507.43572-12-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211202122507.43572-1-tz.stoyanov@gmail.com> References: <20211202122507.43572-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Trace file version 7 introduced new mandatory compression header, storing information about the compression algorithm used to compress the trace file. Added code to read that header and to initialize compression context according to it. Signed-off-by: Tzvetomir Stoyanov (VMware) --- lib/trace-cmd/trace-input.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c index bd655d0c..3d67fb97 100644 --- a/lib/trace-cmd/trace-input.c +++ b/lib/trace-cmd/trace-input.c @@ -190,6 +190,7 @@ __thread struct tracecmd_input *tracecmd_curr_thread_handle; #define CHECK_READ_STATE(H, S) ((H)->file_version < FILE_VERSION_SECTIONS && (H)->file_state >= (S)) #define HAS_SECTIONS(H) ((H)->flags & TRACECMD_FL_SECTIONED) +#define HAS_COMPRESSION(H) ((H)->flags & TRACECMD_FL_COMPRESSION) static int read_options_type(struct tracecmd_input *handle); @@ -3784,7 +3785,9 @@ struct tracecmd_input *tracecmd_alloc_fd(int fd, int flags) char test[] = TRACECMD_MAGIC; unsigned int page_size; size_t offset; - char *version; + char *version = NULL; + char *zver = NULL; + char *zname = NULL; char buf[BUFSIZ]; unsigned long ver; @@ -3822,9 +3825,12 @@ struct tracecmd_input *tracecmd_alloc_fd(int fd, int flags) } handle->file_version = ver; free(version); + version = NULL; if (handle->file_version >= FILE_VERSION_SECTIONS) handle->flags |= TRACECMD_FL_SECTIONED; + if (handle->file_version >= FILE_VERSION_COMPRESSION) + handle->flags |= TRACECMD_FL_COMPRESSION; if (do_read_check(handle, buf, 1)) goto failed_read; @@ -3854,6 +3860,26 @@ struct tracecmd_input *tracecmd_alloc_fd(int fd, int flags) handle->total_file_size = lseek64(handle->fd, 0, SEEK_END); lseek64(handle->fd, offset, SEEK_SET); + if (HAS_COMPRESSION(handle)) { + zname = read_string(handle); + if (!zname) + goto failed_read; + zver = read_string(handle); + if (!zver) + goto failed_read; + if (strcmp(zname, "none")) { + handle->compress = tracecmd_compress_alloc(zname, zver, + handle->fd, + handle->pevent, NULL); + if (!handle->compress) { + tracecmd_warning("Unsupported file compression %s %s", zname, zver); + goto failed_read; + } + } + free(zname); + free(zver); + } + if (HAS_SECTIONS(handle)) { if (read8(handle, &(handle->options_start))) { tracecmd_warning("Filed to read the offset of the first option section"); @@ -3866,6 +3892,9 @@ struct tracecmd_input *tracecmd_alloc_fd(int fd, int flags) return handle; failed_read: + free(version); + free(zname); + free(zver); free(handle); return NULL; @@ -4064,7 +4093,8 @@ void tracecmd_close(struct tracecmd_input *handle) if (handle->flags & TRACECMD_FL_BUFFER_INSTANCE) tracecmd_close(handle->parent); else { - /* Only main handle frees plugins and pevent */ + /* Only main handle frees plugins, pevent and compression context */ + tracecmd_compress_destroy(handle->compress); tep_unload_plugins(handle->plugin_list, handle->pevent); tep_free(handle->pevent); }