Whamcloud - gitweb
Branch b1_6
authorbobijam <bobijam>
Fri, 30 May 2008 02:53:32 +0000 (02:53 +0000)
committerbobijam <bobijam>
Fri, 30 May 2008 02:53:32 +0000 (02:53 +0000)
b=14134
i=nathan, johann

Description: enable MGS and MDT services start separately
Details    : add a 'nomgs' option in mount.lustre to enable start a MDT with
             a co-located MGS without starting the MGS, which is a complement
             to 'nosvc' mount option.

lustre/ChangeLog
lustre/doc/mount.lustre.8
lustre/include/lustre_disk.h
lustre/obdclass/obd_mount.c
lustre/tests/conf-sanity.sh
lustre/utils/mount_lustre.c

index acc00b6..34a1498 100644 (file)
@@ -24,6 +24,13 @@ tbd Sun Microsystems, Inc.
                'tunefs.lustre --param="mdt.quota_type=ug1" $MDTDEV'.
          For more information, please refer to bugzilla 13904.
 
+Severity   : major
+Bugzilla   : 14134
+Description: enable MGS and MDT services start separately
+Details    : add a 'nomgs' option in mount.lustre to enable start a MDT with
+             a co-located MGS without starting the MGS, which is a complement
+             to 'nosvc' mount option.
+
 Severity   : normal
 Frequency  : always, on ppc.
 Bugzilla   : 14856
index ae3c842..4980db3 100644 (file)
@@ -96,6 +96,9 @@ options:
 .BI nosvc
 Only start the MGC (and MGS, if co-located) for a target service, and not the actual service.
 .TP
+.BI nomgs
+Start a MDT with a co-located MGS without starting the MGS.
+.TP
 .BI exclude= ostlist
 Start a client or MDT with a (colon-separated) list of known inactive OSTs.
 .TP
index 805cf40..5dd36a3 100644 (file)
@@ -151,6 +151,8 @@ struct lustre_mount_data {
 #define LMD_FLG_ABORT_RECOV  0x0008  /* Abort recovery */
 #define LMD_FLG_NOSVC        0x0010  /* Only start MGS/MGC for servers, 
                                         no other services */
+#define LMD_FLG_NOMGS        0x0020  /* Only start target for servers, reusing
+                                        existing MGS services */
 
 #define lmd_is_client(x) ((x)->lmd_flags & LMD_FLG_CLIENT) 
 
index 8e42a9a..663015d 100644 (file)
@@ -744,8 +744,8 @@ static int lustre_stop_mgc(struct super_block *sb)
         obd = lsi->lsi_mgc;
         if (!obd)
                 RETURN(-ENOENT);
-
         lsi->lsi_mgc = NULL;
+
         mutex_down(&mgc_start_lock);
         if (!atomic_dec_and_test(&obd->u.cli.cl_mgc_refcount)) {
                 /* This is not fatal, every client that stops
@@ -1354,7 +1354,8 @@ static void server_put_super(struct super_block *sb)
         CDEBUG(D_MOUNT, "server put_super %s\n", tmpname);
 
         /* Stop the target */
-        if (IS_MDT(lsi->lsi_ldd) || IS_OST(lsi->lsi_ldd)) {
+        if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOSVC) && 
+            (IS_MDT(lsi->lsi_ldd) || IS_OST(lsi->lsi_ldd))) {
                 struct lustre_profile *lprof = NULL;
 
                 /* tell the mgc to drop the config log */
@@ -1391,7 +1392,9 @@ static void server_put_super(struct super_block *sb)
                 /* stop the mgc before the mgs so the connection gets cleaned
                    up */
                 lustre_stop_mgc(sb);
-                server_stop_mgs(sb);
+                /* if MDS start with --nomgs, don't stop MGS then */
+                if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS))
+                        server_stop_mgs(sb);
         }
 
         /* Clean the mgc and sb */
@@ -1579,7 +1582,7 @@ static int server_fill_super(struct super_block *sb)
         }
 
         /* start MGS before MGC */
-        if (IS_MGS(lsi->lsi_ldd)) {
+        if (IS_MGS(lsi->lsi_ldd) && !(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)) {
                 rc = server_start_mgs(sb);
                 if (rc)
                         GOTO(out_mnt, rc);
@@ -1816,6 +1819,9 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
                 } else if (strncmp(s1, "nosvc", 5) == 0) {
                         lmd->lmd_flags |= LMD_FLG_NOSVC;
                         clear++;
+                } else if (strncmp(s1, "nomgs", 5) == 0) {
+                        lmd->lmd_flags |= LMD_FLG_NOMGS;
+                        clear++;
                 /* ost exclusion list */
                 } else if (strncmp(s1, "exclude=", 8) == 0) {
                         rc = lmd_make_exclusion(lmd, s1 + 7);
index 4499f2c..e3b7f97 100644 (file)
@@ -1579,5 +1579,26 @@ test_40() { # bug 15759
 }
 run_test 40 "race during service thread startup"
 
+test_41() { #bug 14134
+        local rc
+        start mds $MDSDEV $MDS_MOUNT_OPTS -o nosvc
+        start ost `ostdevname 1` $OST_MOUNT_OPTS
+        start mds $MDSDEV $MDS_MOUNT_OPTS -o nomgs
+        mkdir -p $MOUNT
+        mount_client $MOUNT || return 1
+        sleep 5
+
+        echo "blah blah" > $MOUNT/$tfile
+        cat $MOUNT/$tfile
+
+        umount_client $MOUNT
+        stop ost -f || return 201
+        stop mds -f || return 202
+        stop mds -f || return 203
+        unload_modules || return 204
+        return $rc
+}
+run_test 41 "mount mds with --nosvc and --nomgs"
+
 equals_msg `basename $0`: test complete
 [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG || true
index 004890c..906a10a 100644 (file)
@@ -69,6 +69,7 @@ void usage(FILE *out)
                 "\t<mntopt>: one or more comma separated of:\n"
                 "\t\t(no)flock,(no)user_xattr,(no)acl\n"
                 "\t\tnosvc: only start MGC/MGS obds\n"
+                "\t\tnomgs: only start target obds, using existing MGS\n"
                 "\t\texclude=<ostname>[:<ostname>] : colon-separated list of "
                 "inactive OSTs (e.g. lustre-OST0001)\n"
                 );