From patchwork Tue Sep 5 20:21:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13375038 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 B6656CA100C for ; Tue, 5 Sep 2023 20:22:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243373AbjIEUWI (ORCPT ); Tue, 5 Sep 2023 16:22:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233651AbjIEUWH (ORCPT ); Tue, 5 Sep 2023 16:22:07 -0400 Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12380D2 for ; Tue, 5 Sep 2023 13:21:59 -0700 (PDT) Received: by mail-qk1-x72f.google.com with SMTP id af79cd13be357-76f0807acb6so174884385a.1 for ; Tue, 05 Sep 2023 13:21:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1693945318; x=1694550118; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Htt9joSIkNadrNgi0VqCKp8H6PmG5zv4leFkC0grZ8w=; b=etcxllOqu19buZSaLg0R2iZisbqBzNLUm0oMlX06uQ/2+Nbg5ILtk2SPEdshhl4w2c U5u2TvbwBejaPSfIKiVt8Ty+DJtL+0TMVMgDNRIhu9G4X9L3HQVAwU9rxM9kf4zXthZq 7a7MSeiI7Mi/qduVooJSb9xOSNZYB2XHMezneGeX6D4MDoP1Ssm014lJc/Vz5XkBVW7X o6ZicvfiKTJHwxvZFqjyH/iL98FyKFp9jBbnwRfTHZizn+6wuTSslA5T/CoTK+Jp6NfP hbiGx2N3Z/sJCrVEeBIYxosXCw6rTqi1mM2AFw09/NTx2XuxeZO4laRgdRwp2hQlbdx4 Upfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693945318; x=1694550118; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Htt9joSIkNadrNgi0VqCKp8H6PmG5zv4leFkC0grZ8w=; b=kP7DR1GNUpfQUpMsdROH//uExeto4nDfHjylEO+keD8eNeWTJtfCM9ymI6YR/P7QbC sDT8/qhxU7CW1DRdSjnCkz8W5PaN6yUBrMoGOyp3A/RUp4Sfoh98Fvv+AdXJ90spB3bz C7E7Mcsnw0Z+6X4H/PCLUtM7EG3keKTDoOp1EkgVxTW/Zc0BcpH1FFDMcdpOLieTXmQY fhrKrWxh1IsxNMdDb6FHZcaR8ZWjC9qo2ahx3sDSfgSlHiHv69Ra24+eTtlfbw1hbytm C6JFR5VMMwW6AcUyuizxhyJ3meKNAqqUbLeAEtDwDQbcT6Rc1noRcp3FXoG1Ed2qB9B4 GC4w== X-Gm-Message-State: AOJu0YzxyqZcs3A3UJdHyAXokPKI4CAdQquvw/pNMRe1WJlLx8MiL9rQ 8+vU3FhVv+C5Wb8W7kqc6i22GUwHda3yfHwyOuQ= X-Google-Smtp-Source: AGHT+IGdAu6biTaVomkYpQPCuaQ4n79mpRh6wj/mEnJ6ylisFHyn5B+fY5gtMGVmJIMagyMOqw/C9Q== X-Received: by 2002:a05:620a:995:b0:76c:d4b7:5dbd with SMTP id x21-20020a05620a099500b0076cd4b75dbdmr12547433qkx.45.1693945317957; Tue, 05 Sep 2023 13:21:57 -0700 (PDT) Received: from localhost (cpe-76-182-20-124.nc.res.rr.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id z7-20020ae9c107000000b0076eedc31b5esm4350528qki.128.2023.09.05.13.21.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 13:21:57 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 1/3] btrfs-progs: cleanup dirty buffers on transaction abort Date: Tue, 5 Sep 2023 16:21:51 -0400 Message-ID: <0f71fe47579f137a626d9c9f4e68419bad9dd4c7.1693945163.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org When adding the extent buffer leak detection I started getting failures on some of the fuzz tests. This is because we don't clean up dirty buffers for aborted transactions, we just leave them dirty and thus we leak them. Fix this up by making btrfs_commit_transaction() on an aborted transaction properly cleanup the dirty buffers that exist in the system. Signed-off-by: Josef Bacik --- kernel-shared/transaction.c | 45 +++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/kernel-shared/transaction.c b/kernel-shared/transaction.c index fcd8e6e0..01f08f0f 100644 --- a/kernel-shared/transaction.c +++ b/kernel-shared/transaction.c @@ -132,6 +132,25 @@ int commit_tree_roots(struct btrfs_trans_handle *trans, return 0; } +static void clean_dirty_buffers(struct btrfs_trans_handle *trans) +{ + struct btrfs_fs_info *fs_info = trans->fs_info; + struct extent_io_tree *tree = &fs_info->dirty_buffers; + struct extent_buffer *eb; + u64 start, end; + + while (find_first_extent_bit(tree, 0, &start, &end, EXTENT_DIRTY, + NULL) == 0) { + while (start <= end) { + eb = find_first_extent_buffer(fs_info, start); + BUG_ON(!eb || eb->start != start); + start += eb->len; + btrfs_clear_buffer_dirty(trans, eb); + free_extent_buffer(eb); + } + } +} + int __commit_transaction(struct btrfs_trans_handle *trans, struct btrfs_root *root) { @@ -174,23 +193,7 @@ cleanup: * Mark all remaining dirty ebs clean, as they have no chance to be written * back anymore. */ - while (1) { - int find_ret; - - find_ret = find_first_extent_bit(tree, 0, &start, &end, - EXTENT_DIRTY, NULL); - - if (find_ret) - break; - - while (start <= end) { - eb = find_first_extent_buffer(fs_info, start); - BUG_ON(!eb || eb->start != start); - start += eb->len; - btrfs_clear_buffer_dirty(trans, eb); - free_extent_buffer(eb); - } - } + clean_dirty_buffers(trans); return ret; } @@ -202,8 +205,11 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, struct btrfs_fs_info *fs_info = root->fs_info; struct btrfs_space_info *sinfo; - if (trans->fs_info->transaction_aborted) - return -EROFS; + if (trans->fs_info->transaction_aborted) { + ret = -EROFS; + goto error; + } + /* * Flush all accumulated delayed refs so that root-tree updates are * consistent @@ -277,6 +283,7 @@ commit_tree: return ret; error: btrfs_abort_transaction(trans, ret); + clean_dirty_buffers(trans); btrfs_destroy_delayed_refs(trans); free(trans); return ret; From patchwork Tue Sep 5 20:21:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13375039 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 450B1CA100D for ; Tue, 5 Sep 2023 20:22:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232376AbjIEUWI (ORCPT ); Tue, 5 Sep 2023 16:22:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243372AbjIEUWI (ORCPT ); Tue, 5 Sep 2023 16:22:08 -0400 Received: from mail-qk1-x72a.google.com (mail-qk1-x72a.google.com [IPv6:2607:f8b0:4864:20::72a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5EB5712C for ; Tue, 5 Sep 2023 13:22:00 -0700 (PDT) Received: by mail-qk1-x72a.google.com with SMTP id af79cd13be357-76ef6d98d7eso146862985a.0 for ; Tue, 05 Sep 2023 13:22:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1693945319; x=1694550119; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=l4Lg3uk8pJwHv6OajIfeyZNGvy+zggrEHV/Gxzfguro=; b=WXBLE0/LGLtHdwJWxBT6OPD8Qwu264ylwRNfiND5U1hccHjse3C7OgnjBeWDh9I+66 MKUIgFKXwceQt8NiaoXJmSpOtw3/a+RYu6I2MlkOyFHvtP5zn5+8NmXLYwDOmgSG/66q Lg7Ul9cDQkoFZls0bAuE+Oh5ZqKD6E90LugqdaqZqlSNFl3+4FfjTJes1xbkyiviMLxE HM3cnzRQGZZyWpsHCW7Y7JjrdVsZbVlGhx/+9dsNlS+GfWV9skiGolqecR5HMkj9GnUy e3zu2COfnhs9YbHijFa4YGgg3Hd92gJycC/JfheoHXGoMq82ukNooRvrCujwN2/RZGeH niCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693945319; x=1694550119; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l4Lg3uk8pJwHv6OajIfeyZNGvy+zggrEHV/Gxzfguro=; b=F6v6ze2qY3JyvhljrV5Rr6bemtVIC4v/I408j3QWT/BuCRy0ik50/wIF3tNyAomC3P JS8SeP98vx+YJbFcZ3JoJTThxApxsKpuOR+pZNzcQ2P++CIRM6hV0BKast06bWlh5TkZ Zd92Pqj9KYXyVxtJ4ZZu+jLFt0N9qDLFQQO/UjBVUTOPDIKWB4fxc081tA/J5e9DMl0B Qj82P0hUipdL9E5U26Im9wjxxXdFyEvWYYybWke/MO5P+JCeXgd6w281PT77Ve/vQHeI KoPTw+tiM16nT0ti26r5nWj478/pXWVMDgPtKZ9Spv4+7djlHo++wRbE5aBMQKR9HCEz BlcQ== X-Gm-Message-State: AOJu0Yz3rTQbptfBIlk0Kguhe61mqvKS/Hkd2IOjQNCAHI8DiwOABfdm 5hzouhLHTnLeLFGNwGvTIUNdHDqXwG3cFVwD0B8= X-Google-Smtp-Source: AGHT+IHtJQxHuC+X/vKuvUTRvugVyGSUeEKes9CpprM6iPcBOMoCzhJm9UTaQzZk6NjeSeIEmbz6Ew== X-Received: by 2002:a05:620a:4d0:b0:766:f9b8:55f3 with SMTP id 16-20020a05620a04d000b00766f9b855f3mr11863147qks.70.1693945319346; Tue, 05 Sep 2023 13:21:59 -0700 (PDT) Received: from localhost (cpe-76-182-20-124.nc.res.rr.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id m12-20020ae9e00c000000b007684220a08csm4349015qkk.70.2023.09.05.13.21.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 13:21:58 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 2/3] btrfs-progs: properly cleanup aborted transactions in check Date: Tue, 5 Sep 2023 16:21:52 -0400 Message-ID: X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org There are several places that we call btrfs_abort_transaction() in a failure case, but never call btrfs_commit_transaction(). This leaks the trans handle and the associated extent buffers and such. Fix all these sites by making sure we call btrfs_commit_transaction() after we call btrfs_abort_transaction() to make sure all the appropriate cleanup is done. This gets rid of the leaked extent buffer errors. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- check/main.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/check/main.c b/check/main.c index c99092a2..1d5f570a 100644 --- a/check/main.c +++ b/check/main.c @@ -3114,6 +3114,7 @@ static int check_inode_recs(struct btrfs_root *root, ret = btrfs_make_root_dir(trans, root, root_dirid); if (ret < 0) { btrfs_abort_transaction(trans, ret); + btrfs_commit_transaction(trans, root); return ret; } @@ -8011,8 +8012,10 @@ static int repair_extent_item_generation(struct extent_record *rec) rec->generation = new_gen; out: btrfs_release_path(&path); - if (ret < 0) + if (ret < 0) { btrfs_abort_transaction(trans, ret); + btrfs_commit_transaction(trans, extent_root); + } return ret; } @@ -8223,8 +8226,11 @@ repair_abort: } ret = btrfs_fix_block_accounting(trans); - if (ret) + if (ret) { + btrfs_abort_transaction(trans, ret); + btrfs_commit_transaction(trans, root); goto repair_abort; + } ret = btrfs_commit_transaction(trans, root); if (ret) goto repair_abort; From patchwork Tue Sep 5 20:21:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13375040 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 69473CA100A for ; Tue, 5 Sep 2023 20:22:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243405AbjIEUWO (ORCPT ); Tue, 5 Sep 2023 16:22:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235503AbjIEUWN (ORCPT ); Tue, 5 Sep 2023 16:22:13 -0400 Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84E961A4 for ; Tue, 5 Sep 2023 13:22:01 -0700 (PDT) Received: by mail-qk1-x732.google.com with SMTP id af79cd13be357-76df3d8fb4eso169989485a.1 for ; Tue, 05 Sep 2023 13:22:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1693945320; x=1694550120; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=/wEk+ZX0NZDw+7/gtMgUr/G930GHBc2VHWc4PmHHmjs=; b=Yf/c4oTqiq2XmfdiWK9BlmuJyAAR23tiwdYe5+TbnWVEqtwuFTG6vIaGeqTa4X4RHb +3YZsW3xhqwpXjHCDbXVEU/AAkxml71QzVPxQGREho2YE/x01jMApxQ2uDp5l8YRqIQy ikKUeS2U4GWFZFblFWWBAC6ZWGE0xEd0l1Qd7LtZcR08RUBmhat4mxBjoLvIcP5v08IN 9KnqD9WZJni0SOyP+m2PDO82mjRc8MjoJX4GIDK3ywFgs0rAYkBMfESw3max7V/IjYky c96AwB/VHzhECENO9SE/aGN/89Cn8w4wKPaGsHWgcQwudEOY9sRmKkuF3ZLOPFIBST12 BglQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693945320; x=1694550120; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/wEk+ZX0NZDw+7/gtMgUr/G930GHBc2VHWc4PmHHmjs=; b=iLvxIuzYi3jv2N9vgPk2clMHl/k/bs5RpZ7pUvAN0o6DCI9gjmWnnKgsvbJcHogRgc NhhzrJehkcByJcwGAzlxNRfueip0lvqMm2iKkGOQChMe7noKgOreyS55yUM4PSaGFljj 9nQSJYBp/F0NHpBCvDyRzn8dUch1lYSVotDlFLhIV9HZD/8tYGmzfrC2Eq4Xa8tye78u WYakmka7glJdqqVLpQoTmPfKQx0TDEz5+aSEOG/qxdB0jlTn5O0AoQ2hd53bpFnMnkjY V0Q9eaRniq5RIxuAeMl+VOqmZ+r61vI60YLNmv6IDGGTr74ULYvSB8SicbnonYZNY4IR wY/A== X-Gm-Message-State: AOJu0YxpG5cTpFNUWJ27iAdDBqisha1VNH2QQa0eifsRQ+aGh4tB9wWh sAAPI8MrXVOiiTMOPoFihzqLeSjuUJqrueBdiBU= X-Google-Smtp-Source: AGHT+IHdfBEAg3v8mXlGSPSuTxdKqMthCg49mFjbUhnwD7UcTdwdjexpNtIGQtCFMRW+lf/oVPUQ6w== X-Received: by 2002:a05:620a:1aa8:b0:76d:a008:f713 with SMTP id bl40-20020a05620a1aa800b0076da008f713mr17333910qkb.60.1693945320465; Tue, 05 Sep 2023 13:22:00 -0700 (PDT) Received: from localhost (cpe-76-182-20-124.nc.res.rr.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id a20-20020a05620a103400b0076cc4610d0asm4349034qkk.85.2023.09.05.13.22.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 13:22:00 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 3/3] btrfs-progs: add extent buffer leak detection to make test Date: Tue, 5 Sep 2023 16:21:53 -0400 Message-ID: <4df1b25365287e0fa3e7b4c8d1400ad5d576d992.1693945163.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org I introduced a regression where we were leaking extent buffers, and this resulted in the CI failing because we were spewing these errors. Instead of waiting for fstests to catch my mistakes, check every command output for leak messages, and fail the test if we detect any of these messages. I've made this generic enough that we could check for other debug messages in the future. Signed-off-by: Josef Bacik --- tests/common | 108 +++++++++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 47 deletions(-) diff --git a/tests/common b/tests/common index 602a4122..607ad747 100644 --- a/tests/common +++ b/tests/common @@ -160,6 +160,18 @@ _is_target_command() return 1 } +# Check to see if there's any debug messages that may mean we have a problem. +_check_output() +{ + local results="$1" + + if grep -q "extent buffer leak" "$results"; then + _fail "extent buffer leak reported" + return 1 + fi + return 0 +} + # Expanding extra commands/options for current command string # This function is responsible for inserting the following things: # - @INSTRUMENT before 'btrfs' commands @@ -206,6 +218,48 @@ expand_command() done } +# This is the helper for the run_check variants. +# The first argument is the run_check type +# The second argument is the run_check type that will get logged to tty +# The third argument is wether we want the output echo'ed +# The rest of the arguments are the command +_run_check() +{ + local header_type + local test_log_type + local do_stdout + local tmp_output + + run_type="$1" + shift + + test_log_type="$1" + shift + + do_stdout="$1" + shift + + tmp_output=$(mktemp --tmpdir btrfs-progs-leak-detect.XXXXXX) + + expand_command "$@" + echo "====== RUN $run_type ${cmd_array[@]}" >> "$RESULTS" 2>&1 + if [[ $TEST_LOG =~ tty ]]; then echo "$test_log_type: ${cmd_array[@]}" \ + > /dev/tty; fi + "${cmd_array[@]}" > "$tmp_output" 2>&1 + ret=$? + + cat "$tmp_output" >> "$RESULTS" + [ "$do_stdout" = true ] && cat "$tmp_output" + + if ! _check_output "$tmp_output"; then + _fail "bad output" + rm "$tmp_output" + return 1 + fi + rm "$tmp_output" + return "$ret" +} + # Argument passing magic: # the command passed to run_* helpers is inspected, if there's 'btrfs command' # found and there are defined additional arguments, they're inserted just after @@ -216,11 +270,7 @@ expand_command() run_check() { - expand_command "$@" - echo "====== RUN CHECK ${cmd_array[@]}" >> "$RESULTS" 2>&1 - if [[ $TEST_LOG =~ tty ]]; then echo "CMD: ${cmd_array[@]}" > /dev/tty; fi - - "${cmd_array[@]}" >> "$RESULTS" 2>&1 || _fail "failed: ${cmd_array[@]}" + _run_check "CHECK" "CMD" "false" "$@" || _fail "failed: ${cmd_array[@]}" } # same as run_check but the stderr+stdout output is duplicated on stdout and @@ -230,12 +280,8 @@ run_check() # filter the output, as INSTRUMENT can easily pollute the output. run_check_stdout() { - expand_command "$@" - echo "====== RUN CHECK ${cmd_array[@]}" >> "$RESULTS" 2>&1 - if [[ $TEST_LOG =~ tty ]]; then echo "CMD(stdout): ${cmd_array[@]}" \ - > /dev/tty; fi - "${cmd_array[@]}" 2>&1 | tee -a "$RESULTS" - if [ ${PIPESTATUS[0]} -ne 0 ]; then + _run_check "CHECK" "CMD(stdout)" "true" "$@" + if [ $? -ne 0 ]; then _fail "failed: $@" fi } @@ -245,11 +291,7 @@ run_check_stdout() # output is logged run_mayfail() { - expand_command "$@" - echo "====== RUN MAYFAIL ${cmd_array[@]}" >> "$RESULTS" 2>&1 - if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mayfail): ${cmd_array[@]}" \ - > /dev/tty; fi - "${cmd_array[@]}" >> "$RESULTS" 2>&1 + _run_check "MAYFAIL" "CMD(mayfail)" "false" "$@" ret=$? if [ $ret != 0 ]; then echo "failed (ignored, ret=$ret): $@" >> "$RESULTS" @@ -271,19 +313,8 @@ run_mayfail() # store the output to a variable for further processing. run_mayfail_stdout() { - tmp_output=$(mktemp --tmpdir btrfs-progs-mayfail-stdout.XXXXXX) - - expand_command "$@" - echo "====== RUN MAYFAIL ${cmd_array[@]}" >> "$RESULTS" 2>&1 - if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mayfail): ${cmd_array[@]}" \ - > /dev/tty; fi - "${cmd_array[@]}" 2>&1 > "$tmp_output" + _run_check "MAYFAIL" "CMD(mayfail)" "true" "$@" ret=$? - - cat "$tmp_output" >> "$RESULTS" - cat "$tmp_output" - rm -- "$tmp_output" - if [ "$ret" != 0 ]; then echo "failed (ignored, ret=$ret): $@" >> "$RESULTS" if [ "$ret" == 139 ]; then @@ -312,12 +343,7 @@ run_mustfail() exit 1 fi - - expand_command "$@" - echo "====== RUN MUSTFAIL ${cmd_array[@]}" >> "$RESULTS" 2>&1 - if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mustfail): ${cmd_array[@]}" \ - > /dev/tty; fi - "${cmd_array[@]}" >> "$RESULTS" 2>&1 + _run_check "MUSTFAIL" "CMD(mustfail)" "false" "$@" if [ $? != 0 ]; then echo "failed (expected): $@" >> "$RESULTS" return 0 @@ -337,9 +363,6 @@ run_mustfail_stdout() { local msg local ret - local tmp_output - - tmp_output=$(mktemp --tmpdir btrfs-progs-mustfail-stdout.XXXXXX) msg="$1" shift @@ -349,17 +372,8 @@ run_mustfail_stdout() exit 1 fi - expand_command "$@" - echo "====== RUN MUSTFAIL ${cmd_array[@]}" >> "$RESULTS" 2>&1 - if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mustfail): ${cmd_array[@]}" \ - > /dev/tty; fi - "${cmd_array[@]}" 2>&1 > "$tmp_output" + _run_check "MUSTFAIL" "CMD(mustfail)" "true" "$@" ret=$? - - cat "$tmp_output" >> "$RESULTS" - cat "$tmp_output" - rm "$tmp_output" - if [ "$ret" != 0 ]; then echo "failed (expected): $@" >> "$RESULTS" return 0