From patchwork Fri Feb 14 16:47:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Racz Zoltan X-Patchwork-Id: 13975270 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48D9F26773C for ; Fri, 14 Feb 2025 16:47:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551639; cv=none; b=qF/Ra3jhknD0YBr5swbS3qJNkNYlB3KD87HdorfqdmwvWDwVuAp5ZBOUpepdCsljkJo5oTqHP6G8hazZRZ2bfQTqbpcsAcAKfqmUH7P7ghRsp1UtZs0ibHz8oWC/cO6ccnNrfXRr52mH9LAutp5+lsRNZg5mnUNtXA7/TIOWylQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551639; c=relaxed/simple; bh=FfU1709jXSdh8cXj6i1JL9YzG+JkuXKqq/1gZX5mFxs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qUlCNR54l89ys2OYeFjdaP1GBO5wndSmhPspltOXKyomGEPBEunj++tWoqoujMP3Utt6rHjhlIg7S6o6JEUsPfaca7+ApiurMLkmwcXHJC9QYhR2ExeUscPKhxJl8AgQS9cU3adxOefTIIRa9WvI69Y4XmoddJMZ4MkJ0FAahVk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VmdXayxT; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VmdXayxT" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-ab7cc0c1a37so422245566b.0 for ; Fri, 14 Feb 2025 08:47:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739551635; x=1740156435; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eAKfgHF3EWnefLOKEDxUvxYcMb7kjH4Hs3f4TlPDgIU=; b=VmdXayxTe9C/l6yIrJiYb92+cXioN+9JsLbFtO+U2nLEIU7YOInWaqjUKcf2KlL5U1 AOd1dhvfKU0ajiLjW0OFwx4Val6Ew99OuUMokGGaTp3fuIfgMrV6kmkLrj03AwWax4qF rHXj0blcXCX7rsTPTm3QOee8u/IWcXKOq6Ljh1ynWpFwlIIW91lxs9/QsO9/DsyDw+bj 62qKwJgY5fgiRbYgejuai7xX9ysDjv6D+PVczIJ1dRU85QqsDCUpq4t2VX04a7yxeAe/ NI9l85qp3sUBuitoMRruFWLp3x6gXBODUeX3fPMlTm2P/XvJnwKbCSU4lO6SLiGlEjBh HV/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739551635; x=1740156435; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eAKfgHF3EWnefLOKEDxUvxYcMb7kjH4Hs3f4TlPDgIU=; b=oUG5OagP2SCktO3404E+IuENCpPr/wCRARrNI7GZarCPLfWsQWILCfKEeEHCu3vmZj sZMDGAF6hAvJzH9Zl3AFbxk/GKIoLTKbo25GytTA9UtEZD5YmvMmJ6PrYnKGwr5XR20p 2N+CaMMsxZjUUGZKSxBA/KCGfQOmOYVv+gPEaUVV82medtlOtc0OjZO8IfBBoOlqL3Bf EQ2MNp0w2bLuw1Df4GYEVVEfjDisw7aKjxB+V9sFXZ2CVUdTh1Zel5R0CjUAc0/4469E FDflXMnfxymsVosK32M2ZrA9B803+SKpjdRgS0h1bIJb41O8te/lEbk8HDzySONMHdk+ AuMQ== X-Gm-Message-State: AOJu0YwJ3dqckfOarDiIf757mDyTfIlkfVyF0RUZeEC7073snNUU0atn Fdl+TVWLY9jsT7U/d+w7gZ5Xsc7vsD5hh/+xLFr1W1pxCGGUyMeB X-Gm-Gg: ASbGncuMhIwBRnsAKAjwy6/9EajKx5yAoH0W4OJbdOK1Ze2nZYuz6ylyNJmoUpo7pg6 m4e1zxdpXIwo626dUy2yK7R5Rzy+zM3BhOChr8x/DsERoxshf1rKtNSAvMZlMN/JjsbSvx5eMYo S9slUsAtZCmuWqwGclLQhT63Dae/osjpj7P63rlL2MqcaMv+R3xoRdTps/+17Nm66NEa6Cwf7jr ChhnrsIYeaLjWKfdfDTWxnuljiKfA0qgKj+2kW039U2amcH0m4nDBvPqX03fObRE/LeIF6JJYLS 3/6sQhmSdqK9 X-Google-Smtp-Source: AGHT+IHUMYZ7AywObXTWuIlCHSvsq5tpPSXcEY2HJWpNCmiVJO1zRxWx9ekodmIOZeeoC6fJmRPJRQ== X-Received: by 2002:a17:907:c282:b0:ab7:bcc0:9050 with SMTP id a640c23a62f3a-ab7f33da7c2mr1276849966b.27.1739551635147; Fri, 14 Feb 2025 08:47:15 -0800 (PST) Received: from 192.168.1.3 ([82.78.85.163]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba533984f2sm375019266b.131.2025.02.14.08.47.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 08:47:14 -0800 (PST) From: Racz Zoltan To: dsterba@suse.cz Cc: linux-btrfs@vger.kernel.org, Racz Zoltan Subject: [PATCH 1/6] btrfs-progs: Added rowspec struct and neccesary include file for json output format Date: Fri, 14 Feb 2025 18:47:04 +0200 Message-ID: <20250214164709.51465-2-racz.zoli@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214164709.51465-1-racz.zoli@gmail.com> References: <20250214164709.51465-1-racz.zoli@gmail.com> Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- cmds/scrub.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/cmds/scrub.c b/cmds/scrub.c index f769188a..f049e1ed 100644 --- a/cmds/scrub.c +++ b/cmds/scrub.c @@ -53,6 +53,7 @@ #include "common/sysfs-utils.h" #include "common/string-table.h" #include "common/string-utils.h" +#include "common/format-output.h" #include "common/help.h" #include "cmds/commands.h" @@ -124,6 +125,41 @@ struct scrub_fs_stat { int i; }; +struct format_ctx fctx; + +static const struct rowspec scrub_status_rowspec[] = { + { .key = "uuid", .fmt = "%s", .out_json = "uuid"}, + { .key = "dev", .fmt = "%s", .out_json = "dev"}, + { .key = "id", .fmt = "%llu", .out_json = "id"}, + { .key = "status", .fmt = "%s", .out_json = "status"}, + { .key = "duration", .fmt = "duration", .out_json = "duration"}, + { .key = "started-at", .fmt = "date-time", .out_json = "started-at"}, + { .key = "resumed-at", .fmt = "date-time", .out_json = "resumed-at"}, + { .key = "data-extents-scrubbed", .fmt = "%llu", .out_json = "data-extents-scrubbed"}, + { .key = "tree-extents-scrubbed", .fmt = "%llu", .out_json = "tree-extents-scrubbed"}, + { .key = "data-bytes-scrubbed", .fmt = "%llu", .out_json = "data-bytes-scrubbed"}, + { .key = "tree-bytes-scrubbed", .fmt = "%llu", .out_json = "tree-bytes-scrubbed"}, + { .key = "read-errors", .fmt = "%llu", .out_json = "read-errors"}, + { .key = "csum-errors", .fmt = "%llu", .out_json = "csum-errors"}, + { .key = "verify-errors", .fmt = "%llu", .out_json = "verify-errors"}, + { .key = "no-csum", .fmt = "%llu", .out_json = "no-csum"}, + { .key = "csum-discards", .fmt = "%llu", .out_json = "csum-discards"}, + { .key = "super-errors", .fmt = "%llu", .out_json = "super-errors"}, + { .key = "malloc-errors", .fmt = "%llu", .out_json = "malloc-errors"}, + { .key = "uncorrectable-errors", .fmt = "%llu", .out_json = "uncorrectable-errors"}, + { .key = "unverified-errors", .fmt = "%llu", .out_json = "unverified-errors"}, + { .key = "corrected-errors", .fmt = "%llu", .out_json = "corrected-errors"}, + { .key = "last-physical", .fmt = "%llu", .out_json = "last-physical"}, + { .key = "time-left", .fmt = "duration", .out_json = "time-left"}, + { .key = "eta", .fmt = "date-time", .out_json = "eta"}, + { .key = "total-bytes-to-scrub", .fmt = "%llu", .out_json = "total-bytes-to-scrub"}, + { .key = "bytes-scrubbed", .fmt = "%llu", .out_json = "bytes-scrubbed"}, + { .key = "rate", .fmt = "%llu", .out_json = "rate"}, + { .key = "limit", .fmt = "%llu", .out_json = "limit"}, + + ROWSPEC_END +}; + static void print_scrub_full(struct btrfs_scrub_progress *sp) { pr_verbose(LOG_DEFAULT, "\tdata_extents_scrubbed: %llu\n", sp->data_extents_scrubbed); From patchwork Fri Feb 14 16:47:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Racz Zoltan X-Patchwork-Id: 13975271 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD4A7267B93 for ; Fri, 14 Feb 2025 16:47:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551641; cv=none; b=BLGu3P3UOCQpQWZ5bLVHx7shJAJV7XGX/gFbOtRT1IT4lg5fg7+vjSvOunC8Ssyyp0W+tfFDN14M04lQ4/bparerY7KY0AOExS9/HdM9arW/CHZcKXh7azS9JfjIMG0YnUku6tgwjHEXHTMsKgxA/EZoMjXJzwRHngDa8s7iM5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551641; c=relaxed/simple; bh=h9VC7ia3NboQIqnCFyUNSDF36KFQNuPUm9JazifEehA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AEtzH825+yxvpKDjoXVx+WbaLNlFh+KCBusxwBGC+99QpTjzb73zIwRiv4VqejDnQMg/dRy0+cDNsdI9tXfpHtdjMT11M+ihcHG8vheu4PSYXdRyUV6ClGcDOBpFHl+vfjLpomreIWJPV86XSz13oQW3Ca3tEfOzoM4dOxzapBk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IQwakCcX; arc=none smtp.client-ip=209.85.208.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IQwakCcX" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-5dca468c5e4so4043560a12.1 for ; Fri, 14 Feb 2025 08:47:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739551638; x=1740156438; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6R+HK/X5VMpBmqx5xn03kG1XjHDGI5xpiTtfkHXYnXI=; b=IQwakCcXOM4XNOyD24FcTaePjiUP1A3cgCFLAw6OU0EeCGoiISayCTWDLKTxLMfyIH pB5AqZJjZaoiUC4wy0wWrkEKfVjPoW0aOOT8m7U2sKxJVByKwZVB/bdLkAzgbqSWPV2v zjT6vE53IuecIaxYRHoI5Xn6JQhBa9pDfJ55xcfjjS7CIqX2sVuoebhf3qr/1TwBXJgh BoWBVYgdYBoJpiDjadiFgjbGnigj6TXLnQ4FU4phbgzWjLHQvSS54XJBZMUx1csPefjE LJXaL21FowQVJnSvXoz0HXKxvD22sZ0H66M6ImrgUaFJHsBQBVgNoRduB78cxeZPNITL D48w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739551638; x=1740156438; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6R+HK/X5VMpBmqx5xn03kG1XjHDGI5xpiTtfkHXYnXI=; b=OCuFFbnrRg1cB2vcg10YY5wmoJaM6OkRpJfI0wgfxwTHfsrYN+l9qXUGbz7spASiD9 LZ7gFaSV9D12EZiK5smsZZCa8W/ZOct+ygIFb3iA/COKLnTUUDKZVZ7h0v/+itkVc7UB o/KicSb7pjEe0WK6BCVP9ElBZlIRRTi/Z5xlCvBrNl9a+R3BTF+btSVH5+sSFGi89F3/ xqptHPl1BA10WUVJZgxi2+wNuwez/2FpNDRTVRFxsYeMWIFO0md6qQxq1GdWsrQDqvkt XaxO0u1w7GXy+chOWmhooED6VUBhEnVEg77LqHZxOTsVsE6JhMq5FH7vW+C8BwLLoj5N Hi3g== X-Gm-Message-State: AOJu0YwW+hqr0tjRw0QcUJiRKMUc3uBQXFKYeyP2jGNVSrw+tL3vKbfr 0sy0CbwnMjT0f+bxnW66y8lXVQ20NGjwyoIl3hyjIeHBKYTMYlar X-Gm-Gg: ASbGncsOhvHIlOOliChIuvNDhfzz1hvg8qqCVN+y/VUO2bNx4zHjM0j8KItL0i5b14b WpOad0j5HqGYJCebqGyOYhhEJenzSx8SlNEEtNC40ajjauJhCqY90jiuGQ1NEM1yghiF3iIcmEc pkpmNcmjnMoYS66aWzIE3kReVORGFuQeBvswZRCKe4bSpyR6yzXBE4BDkpIu5LyXX0wGszj1jSE wIVoXat34xYn+8R6iwX+ahi5dbiPOeJdQyqKt2MG+HQroL6A/z+aU8du74mUYAK2amJsJgdlPva 47LnF+uFm2iH X-Google-Smtp-Source: AGHT+IGbR4Z4vCYAxCsSC4dCaR0LKV8PWCkL+jCBxvkK0qgymmOGeo0pcCmMsojZN4hfVn+sYk/CjQ== X-Received: by 2002:a17:907:2d2b:b0:ab7:f096:61d8 with SMTP id a640c23a62f3a-aba4ebfb4e8mr828861266b.29.1739551637739; Fri, 14 Feb 2025 08:47:17 -0800 (PST) Received: from 192.168.1.3 ([82.78.85.163]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba533984f2sm375019266b.131.2025.02.14.08.47.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 08:47:17 -0800 (PST) From: Racz Zoltan To: dsterba@suse.cz Cc: linux-btrfs@vger.kernel.org, Racz Zoltan Subject: [PATCH 2/6] btrfs-progs: Added json output format for print_scrub_full Date: Fri, 14 Feb 2025 18:47:05 +0200 Message-ID: <20250214164709.51465-3-racz.zoli@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214164709.51465-1-racz.zoli@gmail.com> References: <20250214164709.51465-1-racz.zoli@gmail.com> Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- cmds/scrub.c | 52 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/cmds/scrub.c b/cmds/scrub.c index f049e1ed..caada704 100644 --- a/cmds/scrub.c +++ b/cmds/scrub.c @@ -162,21 +162,43 @@ static const struct rowspec scrub_status_rowspec[] = { static void print_scrub_full(struct btrfs_scrub_progress *sp) { - pr_verbose(LOG_DEFAULT, "\tdata_extents_scrubbed: %llu\n", sp->data_extents_scrubbed); - pr_verbose(LOG_DEFAULT, "\ttree_extents_scrubbed: %llu\n", sp->tree_extents_scrubbed); - pr_verbose(LOG_DEFAULT, "\tdata_bytes_scrubbed: %llu\n", sp->data_bytes_scrubbed); - pr_verbose(LOG_DEFAULT, "\ttree_bytes_scrubbed: %llu\n", sp->tree_bytes_scrubbed); - pr_verbose(LOG_DEFAULT, "\tread_errors: %llu\n", sp->read_errors); - pr_verbose(LOG_DEFAULT, "\tcsum_errors: %llu\n", sp->csum_errors); - pr_verbose(LOG_DEFAULT, "\tverify_errors: %llu\n", sp->verify_errors); - pr_verbose(LOG_DEFAULT, "\tno_csum: %llu\n", sp->no_csum); - pr_verbose(LOG_DEFAULT, "\tcsum_discards: %llu\n", sp->csum_discards); - pr_verbose(LOG_DEFAULT, "\tsuper_errors: %llu\n", sp->super_errors); - pr_verbose(LOG_DEFAULT, "\tmalloc_errors: %llu\n", sp->malloc_errors); - pr_verbose(LOG_DEFAULT, "\tuncorrectable_errors: %llu\n", sp->uncorrectable_errors); - pr_verbose(LOG_DEFAULT, "\tunverified_errors: %llu\n", sp->unverified_errors); - pr_verbose(LOG_DEFAULT, "\tcorrected_errors: %llu\n", sp->corrected_errors); - pr_verbose(LOG_DEFAULT, "\tlast_physical: %llu\n", sp->last_physical); + if (bconf.output_format == CMD_FORMAT_JSON) { + fmt_print_start_group(&fctx, "scrub", JSON_TYPE_MAP); + + fmt_print(&fctx, "data-extents-scrubbed", sp->data_extents_scrubbed); + fmt_print(&fctx, "tree-extents-scrubbed", sp->tree_extents_scrubbed); + fmt_print(&fctx, "data-bytes-scrubbed", sp->data_bytes_scrubbed); + fmt_print(&fctx, "tree-bytes-scrubbed", sp->tree_bytes_scrubbed); + fmt_print(&fctx, "read-errors", sp->read_errors); + fmt_print(&fctx, "csum-errors", sp->csum_errors); + fmt_print(&fctx, "verify-errors", sp->verify_errors); + fmt_print(&fctx, "no-csum", sp->no_csum); + fmt_print(&fctx, "csum-discards", sp->csum_discards); + fmt_print(&fctx, "super-errors", sp->super_errors); + fmt_print(&fctx, "malloc-errors", sp->malloc_errors); + fmt_print(&fctx, "uncorrectable-errors", sp->uncorrectable_errors); + fmt_print(&fctx, "unverified-errors", sp->unverified_errors); + fmt_print(&fctx, "corrected-errors", sp->corrected_errors); + fmt_print(&fctx, "last-physical", sp->last_physical); + + fmt_print_end_group(&fctx, "scrub"); + } else { + pr_verbose(LOG_DEFAULT, "\tdata_extents_scrubbed: %llu\n", sp->data_extents_scrubbed); + pr_verbose(LOG_DEFAULT, "\ttree_extents_scrubbed: %llu\n", sp->tree_extents_scrubbed); + pr_verbose(LOG_DEFAULT, "\tdata_bytes_scrubbed: %llu\n", sp->data_bytes_scrubbed); + pr_verbose(LOG_DEFAULT, "\ttree_bytes_scrubbed: %llu\n", sp->tree_bytes_scrubbed); + pr_verbose(LOG_DEFAULT, "\tread_errors: %llu\n", sp->read_errors); + pr_verbose(LOG_DEFAULT, "\tcsum_errors: %llu\n", sp->csum_errors); + pr_verbose(LOG_DEFAULT, "\tverify_errors: %llu\n", sp->verify_errors); + pr_verbose(LOG_DEFAULT, "\tno_csum: %llu\n", sp->no_csum); + pr_verbose(LOG_DEFAULT, "\tcsum_discards: %llu\n", sp->csum_discards); + pr_verbose(LOG_DEFAULT, "\tsuper_errors: %llu\n", sp->super_errors); + pr_verbose(LOG_DEFAULT, "\tmalloc_errors: %llu\n", sp->malloc_errors); + pr_verbose(LOG_DEFAULT, "\tuncorrectable_errors: %llu\n", sp->uncorrectable_errors); + pr_verbose(LOG_DEFAULT, "\tunverified_errors: %llu\n", sp->unverified_errors); + pr_verbose(LOG_DEFAULT, "\tcorrected_errors: %llu\n", sp->corrected_errors); + pr_verbose(LOG_DEFAULT, "\tlast_physical: %llu\n", sp->last_physical); + } } #define PRINT_SCRUB_ERROR(test, desc) do { \ From patchwork Fri Feb 14 16:47:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Racz Zoltan X-Patchwork-Id: 13975272 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3252267F5B for ; Fri, 14 Feb 2025 16:47:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551643; cv=none; b=HxiXLuHYb0N8/m1/1rn34quRVf26QEI3KGSCHWd78CRUL9KarqlV7dsSqlWWVuHz/Herdrq2oKACik6HKqpMjo2NptehG1ottvBPAn424pl/w35vto9Gm94M8IT6hMYXuhi5s8yKaGDuY9cGI9V/pubemgPaBFAZ30q8BGWjHcY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551643; c=relaxed/simple; bh=4wras9OqY/xkz1wV2Y9XnUZDl5+9jBCS+AUvcxPZUUE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LjtwExEnWf8xBjuwOWfNNRNfun+J84c/eyuCAoSwwuuUSlj53OjJ/hv1pFbkaKM4i/ekkoYK3BQZT3lqfI0jWmCkRSgdvV6JHSawkUjbfrz19V81Wxqu+iekWvMwvYxQaeppBQ+YPPuAvum4Z2C/g0aUlzo7MTNIex4YEO2wMI0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=baRJNXzO; arc=none smtp.client-ip=209.85.218.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="baRJNXzO" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-aaee2c5ee6eso387292666b.1 for ; Fri, 14 Feb 2025 08:47:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739551640; x=1740156440; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dsK0Dwdh2kF8DOHiWeKNGU5ehJKPYQkFWJQ4lukkYdg=; b=baRJNXzOGrRd5S0eU7hibXE6TPLOxjSfTuXxQscFKFRzg6si3Y58ju1fMYTP9T7Y1/ gWno0j/BlLBVcHeuGL0aLSbfDZ3bVMHPThuyeHKyNX4RB7Xy9oF/UtmI2CYmevDhnIjo MTq67bwgqqZxsq5pgI/eAeWGH3FyN/zvHcGLjDaYLAY4u/pUAF6Gsq1YWOd68uVt3NQs ng0PIuLlFAnyIHYZVh5VauIEQLBeOfzR9w3FW2SnRKWFw3fbxbvHDlu/ydJ4SnHLrhrl hMyPkuSmRF62WnbDwXZMmQs4va+R2RbvtEVDxXNGrryb1OuPwpAtm3U5alXeXZEK08Gy tuwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739551640; x=1740156440; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dsK0Dwdh2kF8DOHiWeKNGU5ehJKPYQkFWJQ4lukkYdg=; b=OX7CrvYIwdF9fC+vb5omBOX0LsfAX1LJELWklPbbiOS2crXzMIzZQuN+BmNJv7cbpH Y1LFFxg++hLclcaDebPhTW1gk5msfkPYPO8FJBe512cGPu1x+24ApeFnWBziPxIUfwhs +w2zTWmLTWya32CzBC5hqnC5zp1c7nCKfKB7aP9i57stmeF1jlApRjVjpryMssfOOMx1 VPuF8R24KZ5aGKArqIz5nx2G4pX9k+8oBMhMERyNKy69p2gd1g35F0YVAejNTlDv/hNB 14y/tsyKOcdkBZDqlFm5ANWxoVcHSBoSYl58JWuQEhW+zBbSeV3/dKbvUIO2J/fAJKtv +6tw== X-Gm-Message-State: AOJu0YykzScbMa1SfYXmVZuHr41yNOL1KEKN3136zDqXVdpM8wq82hfx 28zel1Np3uoMoXRg7tAQDlE7R/dsP1MsBtzcZM7PMBLhbUWlHdm3bknQjQ== X-Gm-Gg: ASbGncvXcHhxP0F8BY2ZrrCKViU+ZADrjO6QQeczONx3PdbGIj50zlDgiky99sYlo1v Em4oc1X62d22hpyyXnQ3PgXqFESLZVVXobz0sOiSA83hHzzp8VthMpREByOOgwX81zLxzfHuoIR YL00hKvDN1BrgKfwQ+49rHY/Q3A8LqUvDCAXQR1FAqBrHp5zZPsmN7Vnk4syJX1bnA9a3oMA+zy Zy39ma8cKSIiXZ2qVtv/FEwsnyfQ4J5bbBDNqZ4Qy1aeH9PoNH54nROAjHr2g3jRp63ZqZslQuk qkV+y6Z+QNMy X-Google-Smtp-Source: AGHT+IExyYMl0M1WeDkNyoGkg3pLNCfhmddd72uQnm0wdSpNJZUiEWVNd4qpIf5W9sAWSGNT9wYs2w== X-Received: by 2002:a17:906:c055:b0:aba:cc21:8b3c with SMTP id a640c23a62f3a-abacc218c05mr167007066b.38.1739551639757; Fri, 14 Feb 2025 08:47:19 -0800 (PST) Received: from 192.168.1.3 ([82.78.85.163]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba533984f2sm375019266b.131.2025.02.14.08.47.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 08:47:19 -0800 (PST) From: Racz Zoltan To: dsterba@suse.cz Cc: linux-btrfs@vger.kernel.org, Racz Zoltan Subject: [PATCH 3/6] btrfs-progs: Added json output format for print_scrub_summary Date: Fri, 14 Feb 2025 18:47:06 +0200 Message-ID: <20250214164709.51465-4-racz.zoli@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214164709.51465-1-racz.zoli@gmail.com> References: <20250214164709.51465-1-racz.zoli@gmail.com> Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- cmds/scrub.c | 110 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 34 deletions(-) diff --git a/cmds/scrub.c b/cmds/scrub.c index caada704..5c05d00f 100644 --- a/cmds/scrub.c +++ b/cmds/scrub.c @@ -216,6 +216,8 @@ static void print_scrub_summary(struct btrfs_scrub_progress *p, struct scrub_sta u64 sec_left = 0; time_t sec_eta; + const bool json_output = (bconf.output_format == CMD_FORMAT_JSON); + bytes_scrubbed = p->data_bytes_scrubbed + p->tree_bytes_scrubbed; /* * If duration is zero seconds (rounded down), then the Rate metric @@ -236,8 +238,12 @@ static void print_scrub_summary(struct btrfs_scrub_progress *p, struct scrub_sta err_cnt2 = p->corrected_errors + p->uncorrectable_errors; + if (json_output) + fmt_print_start_group(&fctx, "scrub", JSON_TYPE_MAP); + if (p->malloc_errors) - pr_verbose(LOG_DEFAULT, "*** WARNING: memory allocation failed while scrubbing. " + if (!json_output) + pr_verbose(LOG_DEFAULT, "*** WARNING: memory allocation failed while scrubbing. " "results may be inaccurate\n"); if (s->in_progress) { @@ -246,21 +252,33 @@ static void print_scrub_summary(struct btrfs_scrub_progress *p, struct scrub_sta sec_eta = time(NULL); sec_eta += sec_left; - localtime_r(&sec_eta, &tm); - t[sizeof(t) - 1] = '\0'; - strftime(t, sizeof(t), "%c", &tm); - pr_verbose(LOG_DEFAULT, "Time left: %llu:%02llu:%02llu\n", - sec_left / 3600, (sec_left / 60) % 60, sec_left % 60); - pr_verbose(LOG_DEFAULT, "ETA: %s\n", t); - pr_verbose(LOG_DEFAULT, "Total to scrub: %s\n", - pretty_size_mode(bytes_total, unit_mode)); - pr_verbose(LOG_DEFAULT, "Bytes scrubbed: %s (%.2f%%)\n", - pretty_size_mode(bytes_scrubbed, unit_mode), - 100.0 * bytes_scrubbed / bytes_total); + if (json_output) { + fmt_print(&fctx, "time-left", sec_left); + fmt_print(&fctx, "eta", sec_eta); + fmt_print(&fctx, "total-bytes-to-scrub", bytes_total); + fmt_print(&fctx, "bytes-scrubbed", bytes_scrubbed); + } + else { + localtime_r(&sec_eta, &tm); + t[sizeof(t) - 1] = '\0'; + strftime(t, sizeof(t), "%c", &tm); + + pr_verbose(LOG_DEFAULT, "Time left: %llu:%02llu:%02llu\n", + sec_left / 3600, (sec_left / 60) % 60, sec_left % 60); + pr_verbose(LOG_DEFAULT, "ETA: %s\n", t); + pr_verbose(LOG_DEFAULT, "Total to scrub: %s\n", + pretty_size_mode(bytes_total, unit_mode)); + pr_verbose(LOG_DEFAULT, "Bytes scrubbed: %s (%.2f%%)\n", + pretty_size_mode(bytes_scrubbed, unit_mode), + 100.0 * bytes_scrubbed / bytes_total); + } } else { - pr_verbose(LOG_DEFAULT, "Total to scrub: %s\n", - pretty_size_mode(bytes_total, unit_mode)); + if (json_output) + fmt_print(&fctx, "total-bytes-to-scrub", bytes_total); + else + pr_verbose(LOG_DEFAULT, "Total to scrub: %s\n", + pretty_size_mode(bytes_total, unit_mode)); } /* @@ -271,28 +289,52 @@ static void print_scrub_summary(struct btrfs_scrub_progress *p, struct scrub_sta if (unit_mode != UNITS_RAW) mode = unit_mode & UNITS_BINARY ? UNITS_HUMAN_BINARY : UNITS_HUMAN_DECIMAL; - pr_verbose(LOG_DEFAULT, "Rate: %s/s", - pretty_size_mode(bytes_per_sec, mode)); - if (limit > 1) - pr_verbose(LOG_DEFAULT, " (limit %s/s)", - pretty_size_mode(limit, mode)); - else if (limit == 1) - pr_verbose(LOG_DEFAULT, " (some device limits set)"); - pr_verbose(LOG_DEFAULT, "\n"); - - pr_verbose(LOG_DEFAULT, "Error summary: "); - if (err_cnt || err_cnt2) { - PRINT_SCRUB_ERROR(p->read_errors, "read"); - PRINT_SCRUB_ERROR(p->super_errors, "super"); - PRINT_SCRUB_ERROR(p->verify_errors, "verify"); - PRINT_SCRUB_ERROR(p->csum_errors, "csum"); - pr_verbose(LOG_DEFAULT, "\n"); - pr_verbose(LOG_DEFAULT, " Corrected: %llu\n", p->corrected_errors); - pr_verbose(LOG_DEFAULT, " Uncorrectable: %llu\n", p->uncorrectable_errors); - pr_verbose(LOG_DEFAULT, " Unverified: %llu\n", p->unverified_errors); + if (json_output) { + fmt_print(&fctx, "rate", bytes_per_sec); + if (limit > 1) + fmt_print(&fctx, "limit", limit); } else { - pr_verbose(LOG_DEFAULT, " no errors found\n"); + pr_verbose(LOG_DEFAULT, "Rate: %s/s", + pretty_size_mode(bytes_per_sec, mode)); + if (limit > 1) + pr_verbose(LOG_DEFAULT, " (limit %s/s)", + pretty_size_mode(limit, mode)); + else if (limit == 1) + pr_verbose(LOG_DEFAULT, " (some device limits set)"); + pr_verbose(LOG_DEFAULT, "\n"); } + + if (json_output) { + if (err_cnt || err_cnt2) { + fmt_print_start_group(&fctx, "error-summary", JSON_TYPE_MAP); + fmt_print(&fctx, "read-errors", p->read_errors); + fmt_print(&fctx, "super-errors", p->super_errors); + fmt_print(&fctx, "verify-errors", p->verify_errors); + fmt_print(&fctx, "csum-errors", p->csum_errors); + fmt_print(&fctx, "corrected-errors", p->corrected_errors); + fmt_print(&fctx, "uncorrectable-errors", p->uncorrectable_errors); + fmt_print(&fctx, "unverified-errors", p->unverified_errors); + fmt_print_end_group(&fctx, "error-summary"); + } + } + else { + pr_verbose(LOG_DEFAULT, "Error summary: "); + if (err_cnt || err_cnt2) { + PRINT_SCRUB_ERROR(p->read_errors, "read"); + PRINT_SCRUB_ERROR(p->super_errors, "super"); + PRINT_SCRUB_ERROR(p->verify_errors, "verify"); + PRINT_SCRUB_ERROR(p->csum_errors, "csum"); + pr_verbose(LOG_DEFAULT, "\n"); + pr_verbose(LOG_DEFAULT, " Corrected: %llu\n", p->corrected_errors); + pr_verbose(LOG_DEFAULT, " Uncorrectable: %llu\n", p->uncorrectable_errors); + pr_verbose(LOG_DEFAULT, " Unverified: %llu\n", p->unverified_errors); + } else { + pr_verbose(LOG_DEFAULT, " no errors found\n"); + } + } + + if (json_output) + fmt_print_end_group(&fctx, "scrub"); } #define _SCRUB_FS_STAT(p, name, fs_stat) do { \ From patchwork Fri Feb 14 16:47:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Racz Zoltan X-Patchwork-Id: 13975273 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A7CB267F79 for ; Fri, 14 Feb 2025 16:47:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551646; cv=none; b=brJCtSf1vUW3VnQC4LUJfF2ymDpPk5Z5HUCrRFS7ECJ3Pj4smjF7wkp3oU4dRThfAEAgf2idTKIzWomLDAGclNZsSdOxQf3pcokr/ONFsACbxqduSBV1BGCUuj/1CVYPc+u8uXgubzz7jGwZgMJCa7c+Ryh2iw/kI5+gTL5glEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551646; c=relaxed/simple; bh=Oold34gvns1nFn3gQ6R2J824L4cnY1KoTzw6iWqHZQk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=COyVgxOTIYBtfkhhOpYNymBKgoVDZ7iYBw0zon15dvM0yqHBdGcIheqlYYvbIKpbj5fg4TaDjQK+swQr9i0zcWTbMFWt4j/IHO2Wizk+pxgM/Crd6/GpHMrFV5ONXHC9pgjG/P1Zq4u+Amv7UbRqFF9fleHJ95x0PCWqjIlYEtY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y0UJFtYu; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y0UJFtYu" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-aaec61d0f65so503482466b.1 for ; Fri, 14 Feb 2025 08:47:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739551642; x=1740156442; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Xb22AeKi64gpzMov1KOUTkvSVj27vxiziS77gybHb7Y=; b=Y0UJFtYuZIUZ46JG5+/4/G+PXKww121sEJt2iMoaTgsvWzo6W+207QcOjhLS31f+fd iz68f3wBaNbw8Qw/LE6xx3QpC9C0/1N2TPplo48z4FG4YNoa2kp9qtN2SMRrCXjplIeF k4I+H7jLZYQotUUvyplbiMLT7JvbC8PhQag/FipFm+s8oNksvIjYk57a7CaFVWzYoRgN YGmZIA2auoFJYjTlixUEZSUVi8cEbZLFNhh06ryVM5ZBviCLZzrMrHicxUG+QbJwNfHC 8XTnoqN4gk4EWazzMxhVI2b9lmIh2iJy/lY89Zb2y59enh/avle116qwRXruR1/ofO6W 9zlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739551642; x=1740156442; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xb22AeKi64gpzMov1KOUTkvSVj27vxiziS77gybHb7Y=; b=MHeqR3nVjCC9Dh33s74/pdEoauUxYfQw7WE74Y1GULiyJy1RMO9iZb55Qdkqx1+yJd tkSBQfJJ4jhy0T2Uk0RkcmDvacLBq8pQOnk6axs355CIIG7Rltef+MJtDz0OQRAvrNjh htbcNi7IzTuNtP4tExDQawMpof4NW4YwyIGY6w1EJDiQZSsmL6RLrTHRxORpMmCpPxrg QaTsbeYvccNWxOeN30idHzUYUyw4GLVSIL8qGKL4Ufcxx+q4jXysnKbUPz50p/p+4W0U cTUDM5tmsDfoWfqxFpxop44o0BVV44aocjCGV0WltQ42cB2G6FUnhdmuws7L2m2wMCQ1 Pn+Q== X-Gm-Message-State: AOJu0YzlBHXeVHQ9kIQSVzGIsQvIvfLhuyvRaAGDx1VBBK9x/OuElCWS Oc4CKuJxQCfOYv9Bks3G2AFWuC9RTGshzNDJFJEq77wcUCkiOAKq X-Gm-Gg: ASbGncuUsYlSOE1mh1MPi6FSC9cE/T97O9LEQM4iedk+9DH5eVO1tK8t9btVj52YtS/ aRVBkkLRO8ALi7ecBnYhORd3vkUUsz2kOBn7Ez8znIGj4EexXKaHbODtCGh5o72/H1eYqren2/d TZixHG8+Ht+EMLWvaJwxw3GiLLkM0VTsAVqGnpyOdT+wwusiwI2YTN5IiprbcHB14Kg+IOIBCWB LNoVYoR1E7ux5ZFlDFMfKeC8k87gh/lbIpi5ZjTONasYMdrocyCbY3MwOtFBJtyRn0fD9LjMaL+ xdNeFPYcKUl2 X-Google-Smtp-Source: AGHT+IGnRmHu0kV9u2EQJRc2WHgfVfVJuad0Px68uHFJ4CPcKxAd7cbdRNMSFrvOWDcza55QJk1NMw== X-Received: by 2002:a17:906:6a0e:b0:aaf:74d6:6467 with SMTP id a640c23a62f3a-aba5017ed07mr934515966b.42.1739551642088; Fri, 14 Feb 2025 08:47:22 -0800 (PST) Received: from 192.168.1.3 ([82.78.85.163]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba533984f2sm375019266b.131.2025.02.14.08.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 08:47:21 -0800 (PST) From: Racz Zoltan To: dsterba@suse.cz Cc: linux-btrfs@vger.kernel.org, Racz Zoltan Subject: [PATCH 4/6] btrfs-progs: Added json output format for _print_scrub_ss and print_scrub_dev Date: Fri, 14 Feb 2025 18:47:07 +0200 Message-ID: <20250214164709.51465-5-racz.zoli@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214164709.51465-1-racz.zoli@gmail.com> References: <20250214164709.51465-1-racz.zoli@gmail.com> Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- cmds/scrub.c | 79 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 59 insertions(+), 20 deletions(-) diff --git a/cmds/scrub.c b/cmds/scrub.c index 5c05d00f..1f3f032f 100644 --- a/cmds/scrub.c +++ b/cmds/scrub.c @@ -403,32 +403,61 @@ static void _print_scrub_ss(struct scrub_stats *ss) struct tm tm; time_t seconds; unsigned hours; + char *status; + + const bool json_output = (bconf.output_format == CMD_FORMAT_JSON); if (!ss || !ss->t_start) { - pr_verbose(LOG_DEFAULT, "\tno stats available\n"); + if (!json_output) + pr_verbose(LOG_DEFAULT, "\tno stats available\n"); + return; } + + if (json_output) + fmt_print_start_group(&fctx, "info", JSON_TYPE_MAP); + if (ss->t_resumed) { - localtime_r(&ss->t_resumed, &tm); - strftime(t, sizeof(t), "%c", &tm); - t[sizeof(t) - 1] = '\0'; - pr_verbose(LOG_DEFAULT, "Scrub resumed: %s\n", t); + if (json_output) + fmt_print(&fctx, "resumed-at", ss->t_resumed); + else { + localtime_r(&ss->t_resumed, &tm); + strftime(t, sizeof(t), "%c", &tm); + t[sizeof(t) - 1] = '\0'; + + pr_verbose(LOG_DEFAULT, "Scrub resumed: %s\n", t); + } } else { - localtime_r(&ss->t_start, &tm); - strftime(t, sizeof(t), "%c", &tm); - t[sizeof(t) - 1] = '\0'; - pr_verbose(LOG_DEFAULT, "Scrub started: %s\n", t); - } - - seconds = ss->duration; - hours = ss->duration / (60 * 60); - gmtime_r(&seconds, &tm); - strftime(t, sizeof(t), "%M:%S", &tm); - pr_verbose(LOG_DEFAULT, "Status: %s\n", - (ss->in_progress ? "running" : + if (json_output) + fmt_print(&fctx, "started-at", ss->t_start); + else { + localtime_r(&ss->t_start, &tm); + strftime(t, sizeof(t), "%c", &tm); + t[sizeof(t) - 1] = '\0'; + + pr_verbose(LOG_DEFAULT, "Scrub started: %s\n", t); + } + } + + status = (ss->in_progress ? "running" : (ss->canceled ? "aborted" : - (ss->finished ? "finished" : "interrupted")))); - pr_verbose(LOG_DEFAULT, "Duration: %u:%s\n", hours, t); + (ss->finished ? "finished" : "interrupted"))); + + + if (json_output) { + fmt_print(&fctx, "status", status); + fmt_print(&fctx, "duration", ss->duration); + fmt_print_end_group(&fctx, "info"); + } else { + seconds = ss->duration; + hours = ss->duration / (60 * 60); + gmtime_r(&seconds, &tm); + strftime(t, sizeof(t), "%M:%S", &tm); + + pr_verbose(LOG_DEFAULT, "Status: %s\n", status); + pr_verbose(LOG_DEFAULT, "Duration: %u:%s\n", hours, t); + } + } static void print_scrub_dev(struct btrfs_ioctl_dev_info_args *di, @@ -436,7 +465,14 @@ static void print_scrub_dev(struct btrfs_ioctl_dev_info_args *di, const char *append, struct scrub_stats *ss, u64 limit) { - pr_verbose(LOG_DEFAULT, "\nScrub device %s (id %llu) %s\n", di->path, di->devid, + const bool json_output = (bconf.output_format == CMD_FORMAT_JSON); + + if (json_output) { + fmt_print_start_group(&fctx, "device", JSON_TYPE_MAP); + fmt_print(&fctx, "dev", di->path); + fmt_print(&fctx, "id", di->devid); + } else + pr_verbose(LOG_DEFAULT, "\nScrub device %s (id %llu) %s\n", di->path, di->devid, append ? append : ""); _print_scrub_ss(ss); @@ -461,6 +497,9 @@ static void print_scrub_dev(struct btrfs_ioctl_dev_info_args *di, print_scrub_summary(p, ss, di->bytes_used, limit); } } + + if (json_output) + fmt_print_end_group(&fctx, "device"); } /* From patchwork Fri Feb 14 16:47:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Racz Zoltan X-Patchwork-Id: 13975274 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 170BC268690 for ; Fri, 14 Feb 2025 16:47:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551647; cv=none; b=EwBnptoyk9sO1UZOY77anXMgA4drRYBXfm3BVSL3GuLy/7XdKI+sBJC9guKvx9YsrkXoxFoU4IiTx4lclBGPplCxhWlZMU/+o5x+5sisfLfh2dC/5vk4681YA2Gh/QG37DzqSxqnCw9KPNiDpvnBIL0BnsYWOPTIdteUw4kriZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551647; c=relaxed/simple; bh=q/KbQOJ3Uy02LtPHjGcUI9wQwAXlVRD3YMvHcHNxuAQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sToHg8eSn61FGrxu7tpCPYTS8Pg9dN8pAJ2bLhEsblwCmoWHkqSSMHxTV4su27wQWLsuQunjBydNKKLKbt5e93/I4eWAt77wv+dhQ5HCgLQKonE2LzNytBxKmpT+mH1nf5iwmXNX///a8jGw/5vrCbaPL9sy11dL+lOPZmDU91g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cCsv+3NJ; arc=none smtp.client-ip=209.85.208.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cCsv+3NJ" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5de56ff9851so4077694a12.2 for ; Fri, 14 Feb 2025 08:47:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739551644; x=1740156444; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YmJkHH+2iwVZXTw72Zfb9KM8s62eylV96gHUFlRH2q8=; b=cCsv+3NJH/D0uUatD8e3utwK6Km7naSOjM8f2du1TLxU/ruaAQalCZ6Y13Znzxx5Uh MrI8PSuOd4rXXYYe//m/YQ9KKiODzzx929U8NjCjGS+b8rJhz39UsVuBl+OEypvYN6hn R1nS/GqOcl/25dFkyMvGdC2ajKbpn2B0xotR/lMYLXKwJeosiyA1sB2MTCzjfFwJAq/u bhC9K+KEEFAz7euiUocYDaEcfC3rWyTtcvzOJX9VkJAcGSmL2Echn+PlvTOIpLwy12FO RqRy8W80p2ANVIECQdBRP2+58kpUqbM6Fcv7yfetdE2r91qGWmaqXI6oEKzEOFhGAbBD uOsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739551644; x=1740156444; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YmJkHH+2iwVZXTw72Zfb9KM8s62eylV96gHUFlRH2q8=; b=JJSlbvdeDgAMVyK8+VtkGlahDo3JNcNvgxF+PlNubimkUoZosF932bNf9A6LPRuDai yTDdfk0B3QbHVgPmXVnBH1qEgYakZrlnpKrawoYsolVk2UMDo61VdPvOxLz54/KbpCFZ inIlsf/YHENEHEmMKti9J/MK4ozWFRWfnuqMdic7MQI0f98tNHpbAbAzg+3ecmmM/vKb OcjbQHHgusoDrEdcDYsv1GLXJTf962sDKH9ildzgETrH/CbjRjzcc9wS4tAynpN9KdRn eME8kzqcJ24M9vBn7TcGmGmWP2CNOrMBwk6eA2Jtt4j0PwkAobA1ZhsKKuXzrZhFsFIa BC6Q== X-Gm-Message-State: AOJu0YxIyIg6F33kKW+CZx+U0ShdZtTKyitphc5Q/Ghbe0y0XSD8L6ZU co3iVazuIv1YhwWWuvTo3epWarsYdCS2m8xE9gXhmajOdAqvOCqN X-Gm-Gg: ASbGncu/wDOQMOKaCyyMjBqYkpGvndsczYiRVLiHYhIj7H+kcNFGK7gdJvEnA/uN0LY y+lUDt6GYB2sVOUnMTm5y6zJOe1P2XpFsYcLWNTaXhdRkmguGXJMZBwBJeK11vznEgP5EPIBoK/ cqo6ev2zK6jF8mbh7ibWx9D4y6BoprcEj+4/mUpJXCvcrvPpuDrfRy0V+/3ZzN1gc/gNe0dYzOO WGnsLZwLYaoQJAWbEg6sgcWbSbjRn7aWkAdSVPPxn/uJPRnxRKi0H0hSrikcD+EQ8Qld7/jbih8 OfORlM/EZ3EJ X-Google-Smtp-Source: AGHT+IFHTz1azqf6FznwgwtW6eLgULiZZtZ0Ztn3IKYnB5DiXqYOJXJErjGcOF7r7v4ihVddUBVOMw== X-Received: by 2002:a17:907:cf8a:b0:ab7:b5d9:525a with SMTP id a640c23a62f3a-ab7f3874115mr1332540766b.37.1739551644339; Fri, 14 Feb 2025 08:47:24 -0800 (PST) Received: from 192.168.1.3 ([82.78.85.163]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba533984f2sm375019266b.131.2025.02.14.08.47.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 08:47:24 -0800 (PST) From: Racz Zoltan To: dsterba@suse.cz Cc: linux-btrfs@vger.kernel.org, Racz Zoltan Subject: [PATCH 5/6] btrfs-progs: Added json output format for cmd_scrub_status Date: Fri, 14 Feb 2025 18:47:08 +0200 Message-ID: <20250214164709.51465-6-racz.zoli@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214164709.51465-1-racz.zoli@gmail.com> References: <20250214164709.51465-1-racz.zoli@gmail.com> Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- cmds/scrub.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/cmds/scrub.c b/cmds/scrub.c index 1f3f032f..e47c1869 100644 --- a/cmds/scrub.c +++ b/cmds/scrub.c @@ -1991,6 +1991,8 @@ static int cmd_scrub_status(const struct cmd_struct *cmd, int argc, char **argv) int fdres = -1; int err = 0; + const bool json_output = (bconf.output_format == CMD_FORMAT_JSON); + unit_mode = get_unit_mode_from_arg(&argc, argv, 0); optind = 0; @@ -2069,9 +2071,18 @@ static int cmd_scrub_status(const struct cmd_struct *cmd, int argc, char **argv) } in_progress = is_scrub_running_in_kernel(fdmnt, di_args, fi_args.num_devices); - pr_verbose(LOG_DEFAULT, "UUID: %s\n", fsid); + + if (json_output) { + fmt_start(&fctx, scrub_status_rowspec, 1, 0); + fmt_print_start_group(&fctx, "scrub-status", JSON_TYPE_MAP); + fmt_print(&fctx, "uuid", fsid); + } else + pr_verbose(LOG_DEFAULT, "UUID: %s\n", fsid); if (do_stats_per_dev) { + if (json_output) + fmt_print_start_group(&fctx, "devices", JSON_TYPE_ARRAY); + for (i = 0; i < fi_args.num_devices; ++i) { u64 limit; @@ -2089,6 +2100,10 @@ static int cmd_scrub_status(const struct cmd_struct *cmd, int argc, char **argv) "history" : "status", &last_scrub->stats, limit); } + + if (json_output) + fmt_print_end_group(&fctx, "devices"); + } else { u64 total_bytes_used = 0; struct btrfs_ioctl_space_info *sp = si_args->spaces; @@ -2116,10 +2131,16 @@ static int cmd_scrub_status(const struct cmd_struct *cmd, int argc, char **argv) /* This is still slightly off for RAID56 */ total_bytes_used += sp->used_bytes * factor; } + print_fs_stat(&fs_stat, print_raw, total_bytes_used, fi_args.num_devices, limit); } + if (json_output) { + fmt_print_end_group(&fctx, "scrub-status"); + fmt_end(&fctx); + } + out: free_history(past_scrubs); free(di_args); @@ -2130,7 +2151,7 @@ out: return !!err; } -static DEFINE_SIMPLE_COMMAND(scrub_status, "status"); +static DEFINE_COMMAND_WITH_FLAGS(scrub_status, "status", CMD_FORMAT_JSON); static const char * const cmd_scrub_limit_usage[] = { "btrfs scrub limit [options] ", From patchwork Fri Feb 14 16:47:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Racz Zoltan X-Patchwork-Id: 13975275 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 736381519BF for ; Fri, 14 Feb 2025 16:47:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551651; cv=none; b=t8JuJzg9lSlvyiKCR8M8O6SlBuprB89Nj2VBjxGpgcIwysdlfALb9bxzKjA1KnbpuFpzsgJcAMsbpqfWhrnwF6gQnN0k9v01guyAMH/F9cPSLRjmg7v40TP75bBcw0XucenuCzsTN0Op0zyzL8caXpZN1qdntIUH7Mguv2Trfkw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739551651; c=relaxed/simple; bh=THBy/knhjQkcKTB9FVvJHc5V+krS0aFCG/OZp7ByjnE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sTcngCViHy2wu3rxOGRxIrFLCrYHFCNnRF/CfGnCzaV7IiXWXHGxX2FSvpdi2oaNWwgMIQeRyFVzgjslM+H9z9QOdEV8diFNwwKmLm5MrZSHQO2R7ud4RqUPEq4HdT/rypJQcxsuehlDWrtycHTFW+Ed6EmTB6VkcM6lb6RpyNI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DaHnxYjm; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DaHnxYjm" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5de63846e56so4216781a12.1 for ; Fri, 14 Feb 2025 08:47:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739551648; x=1740156448; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lhOw+2PFewFDzgiEX/WmuH7JONHbE4qmToURjZcv3Is=; b=DaHnxYjmC6w9t/S1TNk+dF4XDTIZP/QUeqWmZdjOBNEVjG0eIfGTCU79PZZK+8G5jG WfukiMUML/qDIlTLq5mDu7200Gsq5Eldi1fE1EPVo71ov3rpDun/FOvlj6/AKHFuskyt ikckDWUc3JzCJclv1TS5qFNX0ratk4FThGU+4/zHMBqdKawfuZiKDL+tdzVxeTBdUulB l/Vgl7xuICiZWwIsRjCGBUwhWg9AHY8lK5/fX/Ec3QiqRypzuqHnRpFfnNNte9Up1uSR reYIx6kzqpv+4pfLSzhMulLuS+P+XP3oWaClb6yRddZdzUKolivPMbTY6UU9EybtJylP wlaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739551648; x=1740156448; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lhOw+2PFewFDzgiEX/WmuH7JONHbE4qmToURjZcv3Is=; b=fdYj0U1XhblZBsuwiUfO+EaqECXZzFqSdnT3zSXgOA0Oe/RV9oqfF/jjkcSmAkWJAD lJQMF6y6//LPXBvCNYcDuWhS/q+ynYIhj9nsWQBsiWl2YfPHdhV3mjir0chr072Ls5sl wc+fJAU8AzXkmsbc9+vIYyvX7II+RECsyLpPfftr1IKAsDZcfJ9lkSLA225RL7HXz6Am Au7+L//Y69J0A87rwJFi0IGcp0MICO+/Q769A1Z+TBShEh5AiMNErjdWvEJGKP4+5CrN Hx4gk3i/jsLT5pozLNfeltDWZzCN0HNVB+0jPMs483RIFP2XKRkAsQayZ2RoiaqkBBzT YV/g== X-Gm-Message-State: AOJu0Yx9OEZNM+LYZaOrRlFVKp5uy5bQIKfqm/nMdLEKLwOjSzwtjmmp lawlP6cXGLpAi6rbX/L7NCx9Udr6c0Z6aUno0gEMf9wPSXfZN/9b X-Gm-Gg: ASbGncvrZ6nz1WNIqu2as3D4DOiUN+pqoqA9CJ78obabPiPISpwaJSyCMUIF+ctJp0w bibyzK2e8NVt44OA3tJgIhzFUUKrMRfAnrVfqnVqKm2KaLesRbpbLifPo9LaOR0+r15klW1pDCJ ku7jOD9qUGy62U5jdnUt+tnBS5xl2f5JhB36woisolUvV6wc59jaGi4j81aednGMtJZOZDWhkgm r0n7AItRk3t3rC9QiLjm+XRVDp4ndC5SmWzcR/Bxzt3lkQsH5WClP+loT8GZE7dQcPZsOepUJ3h PTr6iHRuOLmh X-Google-Smtp-Source: AGHT+IFm4gQnyazS6rXADl4N+qjY19r1zNB2DTo5RtDjqVhkRzrsOy9/4AVlgdchuQFg52jO4iYGqg== X-Received: by 2002:a17:907:2d91:b0:ab7:98e8:dcd4 with SMTP id a640c23a62f3a-ab7f3765a63mr1215945666b.20.1739551647537; Fri, 14 Feb 2025 08:47:27 -0800 (PST) Received: from 192.168.1.3 ([82.78.85.163]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba533984f2sm375019266b.131.2025.02.14.08.47.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 08:47:27 -0800 (PST) From: Racz Zoltan To: dsterba@suse.cz Cc: linux-btrfs@vger.kernel.org, Racz Zoltan Subject: [PATCH 6/6] btrfs-progs: Corrected a minor JSON string error in print_scrub_dev Date: Fri, 14 Feb 2025 18:47:09 +0200 Message-ID: <20250214164709.51465-7-racz.zoli@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250214164709.51465-1-racz.zoli@gmail.com> References: <20250214164709.51465-1-racz.zoli@gmail.com> Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- cmds/scrub.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmds/scrub.c b/cmds/scrub.c index e47c1869..88af88b0 100644 --- a/cmds/scrub.c +++ b/cmds/scrub.c @@ -468,6 +468,7 @@ static void print_scrub_dev(struct btrfs_ioctl_dev_info_args *di, const bool json_output = (bconf.output_format == CMD_FORMAT_JSON); if (json_output) { + fmt_print_start_group(&fctx, NULL, JSON_TYPE_MAP); fmt_print_start_group(&fctx, "device", JSON_TYPE_MAP); fmt_print(&fctx, "dev", di->path); fmt_print(&fctx, "id", di->devid); @@ -498,8 +499,10 @@ static void print_scrub_dev(struct btrfs_ioctl_dev_info_args *di, } } - if (json_output) + if (json_output) { fmt_print_end_group(&fctx, "device"); + fmt_print_end_group(&fctx, NULL); + } } /*