Whamcloud - gitweb
LU-6535 utils: fix updating index and fsname
[fs/lustre-release.git] / lustre / utils / mkfs_lustre.c
index 21ab322..bae26df 100644 (file)
@@ -54,6 +54,7 @@
 #include <fcntl.h>
 #include <stdarg.h>
 #include <mntent.h>
+#include <stdbool.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -315,6 +316,8 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop,
        int rc, longidx;
        int failnode_set = 0, servicenode_set = 0;
        int replace = 0;
+       bool index_option = false;
+       bool fsname_option = false;
 
         while ((opt = getopt_long(argc, argv, optstring, long_opt, &longidx)) !=
                EOF) {
@@ -399,13 +402,7 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop,
                         usage(stdout);
                         return 1;
                 case 'i':
-                        if (!(mop->mo_ldd.ldd_flags &
-                              (LDD_F_UPGRADE14 | LDD_F_VIRGIN |
-                               LDD_F_WRITECONF))) {
-                                fprintf(stderr, "%s: cannot change the index of"
-                                        " a registered target\n", progname);
-                                return 1;
-                        }
+                       index_option = true;
                        /* LU-2374: check whether it is OST/MDT later */
                        mop->mo_ldd.ldd_svindex = atol(optarg);
                        if (mop->mo_ldd.ldd_svindex >= INDEX_UNASSIGNED) {
@@ -423,14 +420,6 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop,
                         break;
                 case 'L': {
                         char *tmp;
-                        if (!(mop->mo_flags & MO_FORCEFORMAT) &&
-                            (!(mop->mo_ldd.ldd_flags &
-                               (LDD_F_UPGRADE14 | LDD_F_VIRGIN |
-                                LDD_F_WRITECONF)))) {
-                                fprintf(stderr, "%s: cannot change the name of"
-                                        " a registered target\n", progname);
-                                return 1;
-                        }
                         if ((strlen(optarg) < 1) || (strlen(optarg) > 8)) {
                                 fprintf(stderr, "%s: filesystem name must be "
                                         "1-8 chars\n", progname);
@@ -443,6 +432,7 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop,
                         }
                         strscpy(mop->mo_ldd.ldd_fsname, optarg,
                                 sizeof(mop->mo_ldd.ldd_fsname));
+                       fsname_option = true;
                         break;
                 }
                 case 'm': {
@@ -531,6 +521,23 @@ int parse_opts(int argc, char *const argv[], struct mkfs_opts *mop,
                 }
         }//while
 
+       if (fsname_option &&
+           !(mop->mo_flags & MO_FORCEFORMAT) &&
+           (!(mop->mo_ldd.ldd_flags &
+              (LDD_F_UPGRADE14 | LDD_F_VIRGIN |
+               LDD_F_WRITECONF)))) {
+               fprintf(stderr, "%s: cannot change the name of"
+                       " a registered target\n", progname);
+               return 1;
+       }
+       if (index_option && !(mop->mo_ldd.ldd_flags &
+             (LDD_F_UPGRADE14 | LDD_F_VIRGIN |
+              LDD_F_WRITECONF))) {
+               fprintf(stderr, "%s: cannot change the index of"
+                       " a registered target\n", progname);
+               return 1;
+       }
+
        /* Need to clear this flag after parsing 'L' and 'i' options. */
        if (replace)
                mop->mo_ldd.ldd_flags &= ~LDD_F_VIRGIN;
@@ -645,7 +652,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 */