btrfs-progs: lowmem check: Output more detailed information about file extent interrupt
[platform/upstream/btrfs-progs.git] / cmds-device.c
index ba0e436..f4cdb39 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>]",
@@ -222,9 +224,16 @@ static int _cmd_device_remove(int argc, char **argv,
        return !!ret;
 }
 
+#define COMMON_USAGE_REMOVE_DELETE                                     \
+       "If 'missing' is specified for <device>, the first device that is",     \
+       "described by the filesystem metadata, but not present at the mount",   \
+       "time will be removed. (only in degraded mode)"
+
 static const char * const cmd_device_remove_usage[] = {
        "btrfs device remove <device>|<devid> [<device>|<devid>...] <path>",
        "Remove a device from a filesystem",
+       "",
+       COMMON_USAGE_REMOVE_DELETE,
        NULL
 };
 
@@ -235,7 +244,9 @@ static int cmd_device_remove(int argc, char **argv)
 
 static const char * const cmd_device_delete_usage[] = {
        "btrfs device delete <device>|<devid> [<device>|<devid>...] <path>",
-       "Remove a device from a filesystem",
+       "Remove a device from a filesystem (alias of \"btrfs device remove\")",
+       "",
+       COMMON_USAGE_REMOVE_DELETE,
        NULL
 };
 
@@ -372,11 +383,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.",
        "",
+       "-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
 };
 
@@ -389,28 +402,29 @@ 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;
 
        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, "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);
@@ -492,7 +506,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;
                        }
@@ -531,8 +545,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");
        }