Whamcloud - gitweb
LU-5710 all: second batch of corrected typos and grammar errors
[fs/lustre-release.git] / lustre / utils / mkfs_lustre.c
index ec85e08..2b9e5a6 100644 (file)
@@ -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 <getopt.h>
 #include <limits.h>
 #include <ctype.h>
-
+#include <lnet/nidstr.h>
 #include <lustre_disk.h>
 #include <lustre_param.h>
 #include <lnet/lnetctl.h>
@@ -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 <target type> [--backfstype="FSLIST"] "
                "--fsname=<filesystem name>\n"
                "\t--index=<target index> [options] <device>\n", progname);
@@ -162,6 +162,8 @@ void usage(FILE *out)
                "\t\t--comment=<user 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))