@@ -405,7 +405,6 @@ static int print_replace_status(int fd, const char *path, int once)
return ret;
}
- status = &args.status;
if (args.result != BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR) {
fprintf(stderr, "ERROR: ioctl(DEV_REPLACE_STATUS) on \"%s\" returns error: %s\n",
path,
@@ -413,6 +412,8 @@ static int print_replace_status(int fd, const char *path, int once)
return -1;
}
+ status = &args.status;
+
skip_stats = 0;
num_chars = 0;
switch (status->replace_state) {
@@ -457,12 +458,9 @@ static int print_replace_status(int fd, const char *path, int once)
printf("Never started");
break;
default:
- prevent_loop = 1;
- fprintf(stderr,
- "Unknown btrfs dev replace status:%llu",
- status->replace_state);
- ret = -EINVAL;
- break;
+ fprintf(stderr, "ERROR: ioctl(DEV_REPLACE_STATUS) on \"%s\" got unknown status: %llu\n",
+ path, status->replace_state);
+ return -EINVAL;
}
if (!skip_stats)
@@ -471,9 +469,9 @@ static int print_replace_status(int fd, const char *path, int once)
(unsigned long long)status->num_write_errors,
(unsigned long long)
status->num_uncorrectable_read_errors);
- if (once || prevent_loop || ret) {
+ if (once || prevent_loop) {
printf("\n");
- return ret;
+ break;
}
fflush(stdout);
Current code of print_replace_status() mixed stdout and stderr in error case, output a error string to stderr without "\n", then output "\n" to stdout to end the line. This patch fixed above problem by using unified error handle way for 3 type of errors in print_replace_status(). Also include some small logic cleanup. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> --- cmds-replace.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)