Whamcloud - gitweb
LU-1014 mountconf: MGS should process parameter config
authorLai Siyao <laisiyao@whamcloud.com>
Thu, 23 Feb 2012 08:23:25 +0000 (16:23 +0800)
committerOleg Drokin <green@whamcloud.com>
Thu, 1 Mar 2012 17:40:37 +0000 (12:40 -0500)
MGS doesn't have llog config of its own, but it should process
<profile>-params config which is global parameters for the whole
system.

Signed-off-by: Lai Siyao <laisiyao@whamcloud.com>
Change-Id: I62147dfff17f28c537d75652b49ed3582b0fa64c
Reviewed-on: http://review.whamcloud.com/2139
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Mike Pershin <tappro@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mgc/mgc_request.c
lustre/obdclass/obd_mount.c

index 49262b4..57ffa55 100644 (file)
@@ -265,7 +265,7 @@ static struct config_llog_data *config_recover_log_add(struct obd_device *obd,
         struct config_llog_data *cld;
         char logname[32];
 
         struct config_llog_data *cld;
         char logname[32];
 
-        if ((lsi->lsi_flags & LSI_SERVER) && IS_OST(lsi->lsi_ldd))
+        if ((lsi->lsi_flags & LSI_SERVER) && !IS_MDT(lsi->lsi_ldd))
                 return NULL;
 
         /* we have to use different llog for clients and mdts for cmd
                 return NULL;
 
         /* we have to use different llog for clients and mdts for cmd
index 5618337..cea8fb2 100644 (file)
@@ -1603,8 +1603,23 @@ static void server_put_super(struct super_block *sb)
            should have put it on a different device. */
         if (IS_MGS(lsi->lsi_ldd)) {
                 /* if MDS start with --nomgs, don't stop MGS then */
            should have put it on a different device. */
         if (IS_MGS(lsi->lsi_ldd)) {
                 /* if MDS start with --nomgs, don't stop MGS then */
-                if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS))
+                if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)) {
+                        char *logname;
+
+                        OBD_ALLOC(logname, MGS_PARAM_MAXLEN);
+                        if (!logname) {
+                                LCONSOLE_WARN("Stopping mgs failed %d, please "
+                                              "try again.", -ENOMEM);
+                                return;
+                        }
+                        strcpy(logname, lsi->lsi_ldd->ldd_fsname);
+                        strcat(logname, "-params");
+                        /* tell the mgc to drop parameter config log */
+                        lustre_end_log(sb, logname, NULL);
+                        OBD_FREE(logname, MGS_PARAM_MAXLEN);
+
                         server_stop_mgs(sb);
                         server_stop_mgs(sb);
+                }
         }
 
         /* Clean the mgc and sb */
         }
 
         /* Clean the mgc and sb */
@@ -1817,6 +1832,25 @@ static int server_fill_super(struct super_block *sb)
            Client will not finish until all servers are connected.
            Note - MGS-only server does NOT get a client, since there is no
            lustre fs associated - the MGS is for all lustre fs's */
            Client will not finish until all servers are connected.
            Note - MGS-only server does NOT get a client, since there is no
            lustre fs associated - the MGS is for all lustre fs's */
+        } else if (IS_MGS(lsi->lsi_ldd) &&
+                   !(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)){
+                struct config_llog_instance cfg;
+                char *logname;
+
+                OBD_ALLOC(logname, MGS_PARAM_MAXLEN);
+                if (logname == NULL)
+                        GOTO(out_mnt, rc = -ENOMEM);
+                strcpy(logname, lsi->lsi_ldd->ldd_fsname);
+                strcat(logname, "-params");
+
+                memset(&cfg, 0, sizeof(cfg));
+                rc = lustre_process_log(sb, logname, &cfg);
+                OBD_FREE(logname, MGS_PARAM_MAXLEN);
+                if (rc) {
+                        CERROR("failed to process parameters %s: %d\n",
+                               logname, rc);
+                        GOTO(out_mnt, rc);
+                }
         }
 
         rc = server_fill_super_common(sb);
         }
 
         rc = server_fill_super_common(sb);