summaryrefslogtreecommitdiff
path: root/cmds-scrub.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmds-scrub.c')
-rw-r--r--cmds-scrub.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/cmds-scrub.c b/cmds-scrub.c
index b9337707..25d4ef5a 100644
--- a/cmds-scrub.c
+++ b/cmds-scrub.c
@@ -1096,9 +1096,10 @@ static int scrub_start(int argc, char **argv, int resume)
void *terr;
u64 devid;
DIR *dirstream = NULL;
+ int force = 0;
optind = 1;
- while ((c = getopt(argc, argv, "BdqrRc:n:")) != -1) {
+ while ((c = getopt(argc, argv, "BdqrRc:n:f")) != -1) {
switch (c) {
case 'B':
do_background = 0;
@@ -1123,6 +1124,9 @@ static int scrub_start(int argc, char **argv, int resume)
case 'n':
ioprio_classdata = (int)strtol(optarg, NULL, 10);
break;
+ case 'f':
+ force = 1;
+ break;
case '?':
default:
usage(resume ? cmd_scrub_resume_usage :
@@ -1195,7 +1199,7 @@ static int scrub_start(int argc, char **argv, int resume)
* is a normal mode of operation to start scrub on multiple
* single devices, there is no reason to prevent this.
*/
- if (is_scrub_running_on_fs(&fi_args, di_args, past_scrubs)) {
+ if (!force && is_scrub_running_on_fs(&fi_args, di_args, past_scrubs)) {
ERR(!do_quiet,
"ERROR: scrub is already running.\n"
"To cancel use 'btrfs scrub cancel %s'.\n"
@@ -1507,7 +1511,7 @@ out:
}
static const char * const cmd_scrub_start_usage[] = {
- "btrfs scrub start [-BdqrR] [-c ioprio_class -n ioprio_classdata] <path>|<device>",
+ "btrfs scrub start [-BdqrRf] [-c ioprio_class -n ioprio_classdata] <path>|<device>",
"Start a new scrub",
"",
"-B do not background",
@@ -1517,6 +1521,8 @@ static const char * const cmd_scrub_start_usage[] = {
"-R raw print mode, print full data instead of summary"
"-c set ioprio class (see ionice(1) manpage)",
"-n set ioprio classdata (see ionice(1) manpage)",
+ "-f force to skip checking whether scrub has started/resumed in userspace ",
+ " this is useful when scrub stats record file is damaged",
NULL
};