X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Futils%2Fmkfs_lustre.c;h=2b9e5a61d9581bdf9014a404fce94c9b5389dda1;hb=f625f670afbe954030ff81f0f8522137d6cdd335;hp=ec85e08293297b614b8ae7adab94c10bbb1aef62;hpb=db6613f5bed1606cc8f97b46d1b298746af03a75;p=fs%2Flustre-release.git diff --git a/lustre/utils/mkfs_lustre.c b/lustre/utils/mkfs_lustre.c index ec85e08..2b9e5a6 100644 --- a/lustre/utils/mkfs_lustre.c +++ b/lustre/utils/mkfs_lustre.c @@ -27,7 +27,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2012, Intel Corporation. + * Copyright (c) 2011, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -64,7 +64,7 @@ #include #include #include - +#include #include #include #include @@ -76,6 +76,7 @@ char *progname; int verbose = 1; +int version; static int print_only = 0; #ifdef HAVE_LDISKFS_OSD @@ -103,7 +104,6 @@ static int print_only = 0; void usage(FILE *out) { - fprintf(out, "%s v"LUSTRE_VERSION_STRING"\n", progname); fprintf(out, "usage: %s [--backfstype="FSLIST"] " "--fsname=\n" "\t--index= [options] \n", progname); @@ -162,6 +162,8 @@ void usage(FILE *out) "\t\t--comment=: arbitrary string (%d bytes)\n" "\t\t--dryrun: report what we would do; don't write to disk\n" "\t\t--verbose: e.g. show mkfs progress\n" + "\t\t-V|--version: output build version of the utility and\n" + "\t\t\texit\n" "\t\t--quiet\n", (int)sizeof(((struct lustre_disk_data *)0)->ldd_userdata)); return; @@ -248,8 +250,8 @@ static char *convert_hostnames(char *s1) *s2 = sep; if (nid == LNET_NID_ANY) { - fprintf(stderr, "%s: Can't parse NID '%s'\n", - progname, s1); + fprintf(stderr, "%s: Cannot resolve hostname '%s'.\n", + progname, s1); free(converted); return NULL; } @@ -304,10 +306,11 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, { "servicenode", required_argument, NULL, 's' }, { "network", required_argument, NULL, 't' }, { "verbose", no_argument, NULL, 'v' }, + { "version", no_argument, NULL, 'V' }, { "writeconf", no_argument, NULL, 'w' }, { 0, 0, NULL, 0 } }; - char *optstring = "b:c:C:d:ef:Ghi:k:L:m:MnNo:Op:PqrRs:t:Uu:vw"; + char *optstring = "b:c:C:d:ef:Ghi:k:L:m:MnNo:Op:PqrRs:t:Uu:vVw"; int opt; int rc, longidx; int failnode_set = 0, servicenode_set = 0; @@ -350,9 +353,9 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, //FIXME printf("Configdev not implemented\n"); return 1; - case 'd': - mop->mo_device_sz = atol(optarg); - break; + case 'd': + mop->mo_device_kb = atol(optarg); + break; case 'e': mop->mo_ldd.ldd_params[0] = '\0'; /* Must update the mgs logs */ @@ -373,8 +376,8 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, nids = convert_hostnames(optarg); if (!nids) return 1; - rc = add_param(mop->mo_ldd.ldd_params, PARAM_FAILNODE, - nids); + rc = append_param(mop->mo_ldd.ldd_params, + PARAM_FAILNODE, nids, ':'); free(nids); if (rc) return rc; @@ -405,6 +408,13 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, } /* LU-2374: check whether it is OST/MDT later */ mop->mo_ldd.ldd_svindex = atol(optarg); + if (mop->mo_ldd.ldd_svindex >= INDEX_UNASSIGNED) { + fprintf(stderr, "%s: wrong index %u. " + "Target index must be less than %u.\n", + progname, mop->mo_ldd.ldd_svindex, + INDEX_UNASSIGNED); + return 1; + } mop->mo_ldd.ldd_flags &= ~LDD_F_NEED_INDEX; break; case 'k': @@ -439,8 +449,8 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, char *nids = convert_hostnames(optarg); if (!nids) return 1; - rc = add_param(mop->mo_ldd.ldd_params, PARAM_MGSNODE, - nids); + rc = append_param(mop->mo_ldd.ldd_params, + PARAM_MGSNODE, nids, ':'); free(nids); if (rc) return rc; @@ -498,12 +508,17 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, strscpy(mop->mo_ldd.ldd_userdata, optarg, sizeof(mop->mo_ldd.ldd_userdata)); break; - case 'v': - verbose++; - break; - case 'w': - mop->mo_ldd.ldd_flags |= LDD_F_WRITECONF; - break; + case 'v': + verbose++; + break; + case 'V': + ++version; + fprintf(stdout, "%s %s\n", progname, + LUSTRE_VERSION_STRING); + return 0; + case 'w': + mop->mo_ldd.ldd_flags |= LDD_F_WRITECONF; + break; case 'Q': mop->mo_flags |= MO_QUOTA; break; @@ -540,13 +555,14 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop, int main(int argc, char *const argv[]) { - struct mkfs_opts mop; - struct lustre_disk_data *ldd; - char *mountopts = NULL; - char always_mountopts[512] = ""; - char default_mountopts[512] = ""; + struct mkfs_opts mop; + struct lustre_disk_data *ldd; + char *mountopts = NULL; + char always_mountopts[512] = ""; + char default_mountopts[512] = ""; unsigned mount_type; - int ret = 0; + int ret = 0; + int ret2 = 0; if ((progname = strrchr(argv[0], '/')) != NULL) progname++; @@ -602,16 +618,16 @@ int main(int argc, char *const argv[]) mop.mo_ldd.ldd_flags |= LDD_F_WRITECONF; } - if (strstr(mop.mo_ldd.ldd_params, PARAM_MGSNODE)) - mop.mo_mgs_failnodes++; + if (strstr(mop.mo_ldd.ldd_params, PARAM_MGSNODE)) + mop.mo_mgs_failnodes++; - if (verbose > 0) - print_ldd("Read previous values", &(mop.mo_ldd)); + if (verbose > 0) + print_ldd("Read previous values", &(mop.mo_ldd)); #endif - ret = parse_opts(argc, argv, &mop, &mountopts); - if (ret) - goto out; + ret = parse_opts(argc, argv, &mop, &mountopts); + if (ret || version) + goto out; ldd = &mop.mo_ldd; @@ -629,7 +645,7 @@ int main(int argc, char *const argv[]) goto out; } - /* Stand alone MGS doesn't need a index */ + /* Stand alone MGS doesn't need an index */ if (!IS_MDT(ldd) && IS_MGS(ldd)) { #ifndef TUNEFS /* mkfs.lustre */ /* But if --index was specified flag an error */ @@ -660,27 +676,15 @@ int main(int argc, char *const argv[]) mop.mo_ldd.ldd_flags &= ~LDD_F_NEED_INDEX; mop.mo_ldd.ldd_svindex = 0; } - -#if 0 - /* - * Comment out these 2 checks temporarily, since for multi-MDSes - * in single node only 1 mds node could have mgs service - */ - if (IS_MDT(ldd) && !IS_MGS(ldd) && (mop.mo_mgs_failnodes == 0)) { - verrprint("No management node specified, adding MGS to this " - "MDT\n"); - ldd->ldd_flags |= LDD_F_SV_TYPE_MGS; - } - if (!IS_MGS(ldd) && (mop.mo_mgs_failnodes == 0)) { - fatal(); - if (IS_MDT(ldd)) - fprintf(stderr, "Must specify --mgs or --mgsnode=\n"); - else - fprintf(stderr, "Must specify --mgsnode=\n"); - ret = EINVAL; - goto out; - } -#endif + if (!IS_MGS(ldd) && (mop.mo_mgs_failnodes == 0)) { + fatal(); + if (IS_MDT(ldd)) + fprintf(stderr, "Must specify --mgs or --mgsnode\n"); + else + fprintf(stderr, "Must specify --mgsnode\n"); + ret = EINVAL; + goto out; + } if ((IS_MDT(ldd) || IS_OST(ldd)) && mop.mo_ldd.ldd_fsname[0] == '\0') { fatal(); fprintf(stderr, "Must specify --fsname for MDT/OST device\n"); @@ -802,8 +806,10 @@ int main(int argc, char *const argv[]) } out: - loop_cleanup(&mop); osd_fini(); + ret2 = loop_cleanup(&mop); + if (ret == 0) + ret = ret2; /* Fix any crazy return values from system() */ if (ret && ((ret & 255) == 0))