btrfs-progs: check: repair dir_item and inode_ref in lowmem mode
[platform/upstream/btrfs-progs.git] / cmds-device.c
index aeaaa1d..4337eb2 100644 (file)
@@ -32,6 +32,8 @@
 #include "cmds-fi-usage.h"
 
 #include "commands.h"
+#include "help.h"
+#include "mkfs/common.h"
 
 static const char * const device_cmd_group_usage[] = {
        "btrfs device <command> [<args>]",
@@ -372,11 +374,13 @@ out:
 }
 
 static const char * const cmd_device_stats_usage[] = {
-       "btrfs device stats [-z] <path>|<device>",
-       "Show current device IO stats.",
+       "btrfs device stats [options] <path>|<device>",
+       "Show device IO error statistics",
+       "Show device IO error statistics for all devices of the given filesystem",
+       "identified by PATH or DEVICE. The filesystem must be mounted.",
        "",
-       "-z                     show current stats and reset values to zero",
-       "-s                     return non-zero if any stat counter is not zero",
+       "-c|--check             return non-zero if any stat counter is not zero",
+       "-z|--reset             show current stats and reset values to zero",
        NULL
 };
 
@@ -388,20 +392,30 @@ static int cmd_device_stats(int argc, char **argv)
        int ret;
        int fdmnt;
        int i;
-       int c;
        int err = 0;
-       int status = 0;
+       int check = 0;
        __u64 flags = 0;
        DIR *dirstream = NULL;
 
-       while ((c = getopt(argc, argv, "zs")) != -1) {
+       while (1) {
+               int c;
+               static const struct option long_options[] = {
+                       {"check", no_argument, NULL, 'c'},
+                       {"reset", no_argument, NULL, 'z'},
+                       {NULL, 0, NULL, 0}
+               };
+
+               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);
@@ -483,7 +497,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;
                        }
@@ -522,8 +536,8 @@ static int _cmd_device_usage(int fd, char *path, unsigned unit_mode)
 
        for (i = 0; i < devcount; i++) {
                printf("%s, ID: %llu\n", devinfo[i].path, devinfo[i].devid);
-               print_device_sizes(fd, &devinfo[i], unit_mode);
-               print_device_chunks(fd, &devinfo[i], chunkinfo, chunkcount,
+               print_device_sizes(&devinfo[i], unit_mode);
+               print_device_chunks(&devinfo[i], chunkinfo, chunkcount,
                                unit_mode);
                printf("\n");
        }