Whamcloud - gitweb
LU-8436 nodemap: MGS local MGC should not get_config 00/21500/3
authorKit Westneat <kit.westneat@gmail.com>
Mon, 25 Jul 2016 19:45:25 +0000 (15:45 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 11 Aug 2016 05:52:00 +0000 (05:52 +0000)
An MGC that is co-located with an MGS does not need to pull the
nodemap config as the MGS will manage it directly. Having the MGC
pull the config could lead to a race condition where new config
changes are overwritten by the old config.

Signed-off-by: Kit Westneat <kit.westneat@gmail.com>
Change-Id: Ief62f44dd3ef75abb704edee0e55f7f1b1334e42
Reviewed-on: http://review.whamcloud.com/21500
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/mgc/mgc_request.c

index b263c4b..7d35508 100644 (file)
@@ -1573,6 +1573,7 @@ static int mgc_apply_recover_logs(struct obd_device *mgc,
 static int mgc_process_recover_nodemap_log(struct obd_device *obd,
                                           struct config_llog_data *cld)
 {
+       struct ptlrpc_connection *mgc_conn;
        struct ptlrpc_request *req = NULL;
        struct config_llog_instance *cfg = &cld->cld_cfg;
        struct mgs_config_body *body;
@@ -1580,17 +1581,23 @@ static int mgc_process_recover_nodemap_log(struct obd_device *obd,
        struct nodemap_config *new_config = NULL;
        struct lu_nodemap *recent_nodemap = NULL;
        struct ptlrpc_bulk_desc *desc;
-       struct page **pages;
+       struct page **pages = NULL;
        __u64 config_read_offset = 0;
-       int nrpages;
+       int nrpages = 0;
        bool eof = true;
        bool mne_swab = false;
        int i;
        int ealen;
        int rc;
-
        ENTRY;
 
+       mgc_conn = class_exp2cliimp(cld->cld_mgcexp)->imp_connection;
+
+       /* don't need to get local config */
+       if (cld_is_nodemap(cld) &&
+           (LNET_NETTYP(LNET_NIDNET(mgc_conn->c_peer.nid)) == LOLND))
+               GOTO(out, rc = 0);
+
         /* allocate buffer for bulk transfer.
          * if this is the first time for this mgs to read logs,
          * CONFIG_READ_NRPAGES_INIT will be used since it will read all logs