diff --git a/Documentation/btrfs-device.asciidoc b/Documentation/btrfs-device.asciidoc index 1e3b3a39..58dc9b00 100644 --- a/Documentation/btrfs-device.asciidoc +++ b/Documentation/btrfs-device.asciidoc @@ -98,7 +98,7 @@ remain as such. Reloading the kernel module will drop this information. There's an alternative way of mounting multiple-device filesystem without the need for prior scanning. See the mount option 'device'. -*stats* [-zs] |:: +*stats* [options] |:: Read and print the device IO error statistics for all devices of the given filesystem identified by or for a single . The filesystem must be mounted. See section *DEVICE STATS* for more information about the reported @@ -109,8 +109,10 @@ statistics and the meaning. -z|--reset:::: Print the stats and reset the values to zero afterwards. --s:::: -Set bit 6 of the return-code if any error statistics are non-zero. +-c|--check:::: +Check if the stats are all zeros and return 0 it it is so. Set bit 6 of the +return code if any of the statistics is no-zero. The error values is 65 if +reading stats from at least one device failed, otherwise it's 64. *usage* [options] [...]:: Show detailed information about internal allocations in devices. diff --git a/cmds-device.c b/cmds-device.c index 3e053d9e..de62cd42 100644 --- a/cmds-device.c +++ b/cmds-device.c @@ -377,8 +377,8 @@ static const char * const cmd_device_stats_usage[] = { "Show device IO error statistics for all devices of the given filesystem", "identified by PATH or DEVICE. The filesystem must be mounted.", "", + "-c|--check return non-zero if any stat counter is not zero", "-z|--reset show current stats and reset values to zero", - "-s return non-zero if any stat counter is not zero", NULL }; @@ -391,7 +391,7 @@ static int cmd_device_stats(int argc, char **argv) int fdmnt; int i; int err = 0; - int status = 0; + int check = 0; __u64 flags = 0; DIR *dirstream = NULL; @@ -402,17 +402,17 @@ static int cmd_device_stats(int argc, char **argv) {NULL, 0, NULL, 0} }; - c = getopt_long(argc, argv, "zs", long_options, NULL); + c = getopt_long(argc, argv, "cz", long_options, NULL); if (c < 0) break; switch (c) { + case 'c': + check = 1; + break; case 'z': flags = BTRFS_DEV_STATS_RESET; break; - case 's': - status = 1; - break; case '?': default: usage(cmd_device_stats_usage); @@ -494,7 +494,7 @@ static int cmd_device_stats(int argc, char **argv) dev_stats[j].name, (unsigned long long) args.values[dev_stats[j].num]); - if ((status == 1) + if ((check == 1) && (args.values[dev_stats[j].num] > 0)) err |= 64; }