From: Vladimir Panteleev <git@vladimir.panteleev.md>
To: linux-btrfs@vger.kernel.org
Cc: Vladimir Panteleev <git@vladimir.panteleev.md>
Subject: [PATCH] btrfs-progs: balance: check for full-balance before background fork
Date: Sat, 17 Aug 2019 23:14:34 +0000 [thread overview]
Message-ID: <20190817231434.1034-1-git@vladimir.panteleev.md> (raw)
Move the full-balance warning to before the fork, so that the user can
see and react to it.
Notes on test:
- Don't use grep -q, as it causes a SIGPIPE during the countdown, and
the balance thus doesn't start.
- The "balance cancel" is superfluous as the last command, but it
provides some idempotence and allows adding more tests below it.
Fixes: https://github.com/kdave/btrfs-progs/issues/168
Signed-off-by: Vladimir Panteleev <git@vladimir.panteleev.md>
---
cmds/balance.c | 36 +++++++++----------
.../002-balance-full-no-filters/test.sh | 5 +++
2 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/cmds/balance.c b/cmds/balance.c
index 6f2d4803..32830002 100644
--- a/cmds/balance.c
+++ b/cmds/balance.c
@@ -437,24 +437,6 @@ static int do_balance(const char *path, struct btrfs_ioctl_balance_args *args,
if (fd < 0)
return 1;
- if (!(flags & BALANCE_START_FILTERS) && !(flags & BALANCE_START_NOWARN)) {
- int delay = 10;
-
- printf("WARNING:\n\n");
- printf("\tFull balance without filters requested. This operation is very\n");
- printf("\tintense and takes potentially very long. It is recommended to\n");
- printf("\tuse the balance filters to narrow down the scope of balance.\n");
- printf("\tUse 'btrfs balance start --full-balance' option to skip this\n");
- printf("\twarning. The operation will start in %d seconds.\n", delay);
- printf("\tUse Ctrl-C to stop it.\n");
- while (delay) {
- printf("%2d", delay--);
- fflush(stdout);
- sleep(1);
- }
- printf("\nStarting balance without any filters.\n");
- }
-
ret = ioctl(fd, BTRFS_IOC_BALANCE_V2, args);
if (ret < 0) {
/*
@@ -634,6 +616,24 @@ static int cmd_balance_start(const struct cmd_struct *cmd,
}
}
+ if (!(start_flags & BALANCE_START_FILTERS) && !(start_flags & BALANCE_START_NOWARN)) {
+ int delay = 10;
+
+ printf("WARNING:\n\n");
+ printf("\tFull balance without filters requested. This operation is very\n");
+ printf("\tintense and takes potentially very long. It is recommended to\n");
+ printf("\tuse the balance filters to narrow down the scope of balance.\n");
+ printf("\tUse 'btrfs balance start --full-balance' option to skip this\n");
+ printf("\twarning. The operation will start in %d seconds.\n", delay);
+ printf("\tUse Ctrl-C to stop it.\n");
+ while (delay) {
+ printf("%2d", delay--);
+ fflush(stdout);
+ sleep(1);
+ }
+ printf("\nStarting balance without any filters.\n");
+ }
+
if (force)
args.flags |= BTRFS_BALANCE_FORCE;
if (verbose)
diff --git a/tests/cli-tests/002-balance-full-no-filters/test.sh b/tests/cli-tests/002-balance-full-no-filters/test.sh
index 9c31dd6f..daadcc44 100755
--- a/tests/cli-tests/002-balance-full-no-filters/test.sh
+++ b/tests/cli-tests/002-balance-full-no-filters/test.sh
@@ -18,4 +18,9 @@ run_check $SUDO_HELPER "$TOP/btrfs" balance start "$TEST_MNT"
run_check $SUDO_HELPER "$TOP/btrfs" balance --full-balance "$TEST_MNT"
run_check $SUDO_HELPER "$TOP/btrfs" balance "$TEST_MNT"
+run_check_stdout $SUDO_HELPER "$TOP/btrfs" balance start --background "$TEST_MNT" |
+ grep -F "Full balance without filters requested." ||
+ _fail "full balance warning not in the output"
+run_mayfail $SUDO_HELPER "$TOP/btrfs" balance cancel "$TEST_MNT"
+
run_check_umount_test_dev
--
2.22.0
next reply other threads:[~2019-08-17 23:14 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-17 23:14 Vladimir Panteleev [this message]
2019-08-20 14:32 ` [PATCH] btrfs-progs: balance: check for full-balance before background fork David Sterba
2019-08-20 14:46 ` Vladimir Panteleev
2019-08-26 16:57 ` David Sterba
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=20190817231434.1034-1-git@vladimir.panteleev.md \
--to=git@vladimir.panteleev.md \
--cc=linux-btrfs@vger.kernel.org \
/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.
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 NNTP newsgroup(s).