X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Flustre_lfsck.c;h=5e4893299ee0590b9c1d576d480beb3f8ce8f37b;hb=eadccb33ac4bbe54a01da5168f6170702f9b2629;hp=fc533dacf85ec10ec0acb5f9d036469a39bf6ddb;hpb=b2c88463370dbed1539e6d7a232f8096ac735c30;p=fs%2Flustre-release.git diff --git a/lustre/utils/lustre_lfsck.c b/lustre/utils/lustre_lfsck.c index fc533da..5e48932 100644 --- a/lustre/utils/lustre_lfsck.c +++ b/lustre/utils/lustre_lfsck.c @@ -20,7 +20,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2012, 2016, Intel Corporation. + * Copyright (c) 2012, 2017, Intel Corporation. */ /* * lustre/utils/lustre_lfsck.c @@ -42,9 +42,9 @@ #include "obdctl.h" #include "lustreapi_internal.h" -#include -#include -#include +#include +#include +#include /* Needs to be last to avoid clashes */ #include #include @@ -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; @@ -434,7 +450,7 @@ bad_type: data.ioc_inlbuf1 = (char *)&start; data.ioc_inllen1 = sizeof(start); memset(buf, 0, sizeof(rawbuf)); - rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf)); if (rc != 0) { fprintf(stderr, "Fail to pack ioctl data: rc = %d.\n", rc); return rc; @@ -446,7 +462,7 @@ bad_type: return rc; } - obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + llapi_ioctl_unpack(&data, buf, sizeof(rawbuf)); printf("Started LFSCK on the device %s: scrub", device); for (i = 0; lfsck_types_names[i].ltn_name != NULL; i++) { if (start.ls_active & lfsck_types_names[i].ltn_type) { @@ -507,7 +523,7 @@ int jt_lfsck_stop(int argc, char **argv) data.ioc_inlbuf1 = (char *)&stop; data.ioc_inllen1 = sizeof(stop); memset(buf, 0, sizeof(rawbuf)); - rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf)); if (rc != 0) { fprintf(stderr, "Fail to pack ioctl data: rc = %d.\n", rc); return rc; @@ -584,7 +600,7 @@ bad_type: data.ioc_inlbuf1 = (char *)&query; data.ioc_inllen1 = sizeof(query); memset(buf, 0, sizeof(rawbuf)); - rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf)); if (rc != 0) { fprintf(stderr, "Fail to pack ioctl data: rc = %d.\n", rc); return rc; @@ -596,7 +612,7 @@ bad_type: return rc; } - obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + llapi_ioctl_unpack(&data, buf, sizeof(rawbuf)); for (i = 0, type = 1 << i; i < LFSCK_TYPE_BITS; i++, type = 1 << i) { const char *name; int j; @@ -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;