X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Flustre_lfsck.c;h=4cf35d1ae4e9de9182ae30b45ac94ff45f49d0e4;hb=71b3cc3315114b2101bc32707fa66740279fff54;hp=f3393799e747fb651368666c043cb94054763688;hpb=dbe544883a59d7eecaace16400c575b416c51002;p=fs%2Flustre-release.git diff --git a/lustre/utils/lustre_lfsck.c b/lustre/utils/lustre_lfsck.c index f339379..4cf35d1 100644 --- a/lustre/utils/lustre_lfsck.c +++ b/lustre/utils/lustre_lfsck.c @@ -20,7 +20,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2012, 2013, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * lustre/utils/lustre_lfsck.c @@ -41,14 +41,16 @@ #include "obdctl.h" #include -#include #include #include +/* Needs to be last to avoid clashes */ +#include static struct option long_opt_start[] = { {"device", required_argument, 0, 'M'}, {"all", no_argument, 0, 'A'}, {"create_ostobj", optional_argument, 0, 'c'}, + {"create_mdtobj", optional_argument, 0, 'C'}, {"error", required_argument, 0, 'e'}, {"help", no_argument, 0, 'h'}, {"dryrun", optional_argument, 0, 'n'}, @@ -98,6 +100,7 @@ static void usage_start(void) "usage:\n" "lfsck_start <-M | --device {MDT,OST}_device>\n" " [-A | --all] [-c | --create_ostobj [on | off]]\n" + " [-C | --create_mdtobj [on | off]]\n" " [-e | --error {continue | abort}] [-h | --help]\n" " [-n | --dryrun [on | off]] [-o | --orphan]\n" " [-r | --reset] [-s | --speed ops_per_sec_limit]\n" @@ -108,6 +111,8 @@ static void usage_start(void) "-A: start LFSCK on all MDT devices\n" "-c: create the lost OST-object for dangling LOV EA " "(default 'off', or 'on')\n" + "-C: create the lost MDT-object for dangling name entry " + "(default 'off', or 'on')\n" "-e: error handle mode (default 'continue', or 'abort')\n" "-h: this help message\n" "-n: check with no modification (default 'off', or 'on')\n" @@ -155,7 +160,7 @@ int jt_lfsck_start(int argc, char **argv) char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; char device[MAX_OBD_NAME]; struct lfsck_start start; - char *optstring = "Ac::e:hM:n::ors:t:w:"; + char *optstring = "Ac::C::e:hM:n::ors:t:w:"; int opt, index, rc, val, i; memset(&data, 0, sizeof(data)); @@ -186,6 +191,19 @@ int jt_lfsck_start(int argc, char **argv) } start.ls_valid |= LSV_CREATE_OSTOBJ; break; + case 'C': + if (optarg == NULL || strcmp(optarg, "on") == 0) { + start.ls_flags |= LPF_CREATE_MDTOBJ; + } else if (strcmp(optarg, "off") != 0) { + fprintf(stderr, "invalid switch: -C '%s'. " + "valid switches are:\n" + "empty ('on'), or 'off' without space. " + "For example:\n" + "'-C', '-Con', '-Coff'\n", optarg); + return -EINVAL; + } + start.ls_valid |= LSV_CREATE_MDTOBJ; + break; case 'e': if (strcmp(optarg, "abort") == 0) { start.ls_flags |= LPF_FAILOUT; @@ -255,14 +273,11 @@ bad_type: } case 'w': val = atoi(optarg); - if (val < 0 || val > LFSCK_ASYNC_WIN_MAX) { + if (val < 1 || val > LFSCK_ASYNC_WIN_MAX) { fprintf(stderr, - "Too large async window size, " - "which may cause memory issues. " - "The valid range is [0 - %u]. " - "If you do not want to restrict " - "the window size for async reqeusts " - "pipeline, just set it as 0.\n", + "Invalid async window size that " + "may cause memory issues. The valid " + "range is [1 - %u].\n", LFSCK_ASYNC_WIN_MAX); return -EINVAL; }