Whamcloud - gitweb
LU-11971 utils: Send file creation time to clients
[fs/lustre-release.git] / lustre / utils / lustre_lfsck.c
index 82daa11..5e48932 100644 (file)
@@ -20,7 +20,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2012, 2016, Intel Corporation.
+ * Copyright (c) 2012, 2017, Intel Corporation.
  */
 /*
  * lustre/utils/lustre_lfsck.c
@@ -87,12 +87,14 @@ struct lfsck_type_name {
        enum lfsck_type  ltn_type;
 };
 
+/* Note types must be in order of increasing value so we can iterate through
+ * this correctly.  See enum lfsck_type for values. LU-9894. */
 static struct lfsck_type_name lfsck_types_names[] = {
-       { .ltn_name = "all",            .ltn_type = LFSCK_TYPES_SUPPORTED },
-       { .ltn_name = "default",        .ltn_type = LFSCK_TYPES_DEF },
        { .ltn_name = "layout",         .ltn_type = LFSCK_TYPE_LAYOUT },
        { .ltn_name = "namespace",      .ltn_type = LFSCK_TYPE_NAMESPACE },
        { .ltn_name = "scrub",          .ltn_type = LFSCK_TYPE_SCRUB },
+       { .ltn_name = "all",            .ltn_type = LFSCK_TYPES_SUPPORTED },
+       { .ltn_name = "default",        .ltn_type = LFSCK_TYPES_DEF },
        { .ltn_name = NULL } };
 
 static enum lfsck_type lfsck_name2type(const char *name)
@@ -120,7 +122,7 @@ static const char *lfsck_type2name(__u16 type)
 
 static void usage_start(void)
 {
-       fprintf(stderr, "start LFSCK\n"
+       fprintf(stdout, "start LFSCK\n"
                "usage:\n"
                "lfsck_start [-M | --device {MDT,OST}_device]\n"
                "            [-A | --all] [-c | --create_ostobj [on | off]]\n"
@@ -155,7 +157,7 @@ static void usage_start(void)
 
 static void usage_stop(void)
 {
-       fprintf(stderr, "stop LFSCK\n"
+       fprintf(stdout, "stop LFSCK\n"
                "usage:\n"
                "lfsck_stop [-M | --device {MDT,OST}_device]\n"
                "           [-A | --all] [-h | --help]\n"
@@ -168,7 +170,7 @@ static void usage_stop(void)
 
 static void usage_query(void)
 {
-       fprintf(stderr, "check the LFSCK global status\n"
+       fprintf(stdout, "check the LFSCK global status\n"
                "usage:\n"
                "lfsck_query [-M | --device MDT_device] [-h | --help]\n"
                "            [-t | --type check_type[,check_type...]]\n"
@@ -201,6 +203,7 @@ static int lfsck_get_dev_name(struct obd_ioctl_data *data, char *device,
                              int types, bool multipe_devices)
 {
        glob_t param = { 0 };
+       size_t count = 0;
        char *ptr;
        int rc;
        int i;
@@ -224,7 +227,16 @@ static int lfsck_get_dev_name(struct obd_ioctl_data *data, char *device,
                }
        }
 
-       if (param.gl_pathc == 1)
+       /* we have both sysfs and debugfs entries so to get the correct number
+        * of devices only count the entries in the sysfs tree
+        */
+       for (i = 0; i < param.gl_pathc; i++) {
+               if (strstr(param.gl_pathv[i], "/sys/kernel/debug/lustre"))
+                       continue;
+               count++;
+       }
+
+       if (count == 1)
                goto pack;
 
        if (!multipe_devices) {
@@ -243,8 +255,12 @@ static int lfsck_get_dev_name(struct obd_ioctl_data *data, char *device,
        }
 
        for (i = 1; i < param.gl_pathc; i++) {
-               char *ptr2 = strrchr(param.gl_pathv[i], '-');
+               char *ptr2;
+
+               if (strstr(param.gl_pathv[i], "/sys/kernel/debug/lustre"))
+                       continue;
 
+               ptr2 = strrchr(param.gl_pathv[i], '-');
                if (ptr2 == NULL) {
                        rc = -EINVAL;
                        goto out;
@@ -613,7 +629,8 @@ bad_type:
                        printf("%s_osts_%s: %d\n", name,
                               lfsck_status2name(j), query.lu_osts_count[i][j]);
 
-               printf("%s_repaired: %llu\n", name, query.lu_repaired[i]);
+               printf("%s_repaired: %llu\n", name,
+                      (unsigned long long)query.lu_repaired[i]);
        }
 
        return 0;