From 5991043ea4e825f002d58472554cee4475dffb0d Mon Sep 17 00:00:00 2001 From: Wang Shilong Date: Wed, 4 Sep 2013 23:22:37 +0800 Subject: [PATCH] Btrfs-progs: fix magic return value in cmds-scrub.c There will be four kinds of return value for command "scrub start": 0: scrub dosen't find errors and return success. 1: usage or syntax errors. 3: scrub finds errors and correct all of them. 4: scrub finds errors and some of them are not correctable. Three kinds of return values for scrub cancel/resume: 0: cancel successfully. 1: usage or syntax errors. 2: cancel a not started or finished scrub. Signed-off-by: Wang Shilong Signed-off-by: David Sterba Signed-off-by: Chris Mason --- cmds-scrub.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/cmds-scrub.c b/cmds-scrub.c index 55da405..605af45 100644 --- a/cmds-scrub.c +++ b/cmds-scrub.c @@ -1018,7 +1018,7 @@ static int mkdir_p(char *path) path[i] = '\0'; ret = mkdir(path, 0777); if (ret && errno != EEXIST) - return 1; + return -errno; path[i] = '/'; } @@ -1155,7 +1155,7 @@ static int scrub_start(int argc, char **argv, int resume) if (fdmnt < 0) { ERR(!do_quiet, "ERROR: can't access '%s'\n", path); - return 12; + return 1; } ret = get_fs_info(path, &fi_args, &di_args); @@ -1261,8 +1261,7 @@ static int scrub_start(int argc, char **argv, int resume) if (!do_quiet) printf("scrub: nothing to resume for %s, fsid %s\n", path, fsid); - err = 0; - goto out; + return 2; } ret = prg_fd = socket(AF_UNIX, SOCK_STREAM, 0); @@ -1501,9 +1500,9 @@ out: if (err) return 1; if (e_correctable) - return 7; + return 3; if (e_uncorrectable) - return 8; + return 4; return 0; } @@ -1557,7 +1556,10 @@ static int cmd_scrub_cancel(int argc, char **argv) if (ret < 0) { fprintf(stderr, "ERROR: scrub cancel failed on %s: %s\n", path, errno == ENOTCONN ? "not running" : strerror(errno)); - ret = 1; + if (errno == ENOTCONN) + ret = 2; + else + ret = 1; goto out; } @@ -1642,7 +1644,7 @@ static int cmd_scrub_status(int argc, char **argv) if (fdmnt < 0) { fprintf(stderr, "ERROR: can't access to '%s'\n", path); - return 12; + return 1; } ret = get_fs_info(path, &fi_args, &di_args); @@ -1727,7 +1729,7 @@ out: close(fdres); close_file_or_dir(fdmnt, dirstream); - return err; + return !!err; } const struct cmd_group scrub_cmd_group = { -- 2.7.4