Whamcloud - gitweb
LU-5092 nodemap: transfer nodemaps between MGS, MDTs, and OSTs
[fs/lustre-release.git] / lustre / mgs / mgs_handler.c
index f1a643e..b60aef9 100644 (file)
@@ -238,6 +238,7 @@ void mgs_revoke_lock(struct mgs_device *mgs, struct fs_db *fsdb, int type)
        LASSERT(rc == 0);
        switch (type) {
        case CONFIG_T_CONFIG:
+       case CONFIG_T_NODEMAP:
                cp = mgs_completion_ast_config;
                if (test_and_set_bit(FSDB_REVOKING_LOCK, &fsdb->fsdb_flags))
                        rc = -EALREADY;
@@ -514,6 +515,9 @@ static int mgs_config_read(struct tgt_session_info *tsi)
        case CONFIG_T_RECOVER:
                rc = mgs_get_ir_logs(req);
                break;
+       case CONFIG_T_NODEMAP:
+               rc = nodemap_get_config_req(req->rq_export->exp_obd, req);
+               break;
        case CONFIG_T_CONFIG:
                rc = -EOPNOTSUPP;
                break;
@@ -652,6 +656,7 @@ static int mgs_iocontrol_nodemap(const struct lu_env *env,
                                 struct obd_ioctl_data *data)
 {
        struct lustre_cfg       *lcfg = NULL;
+       struct fs_db            *fsdb;
        lnet_nid_t              nid;
        const char              *nodemap_name = NULL;
        const char              *nidstr = NULL;
@@ -774,6 +779,14 @@ static int mgs_iocontrol_nodemap(const struct lu_env *env,
                GOTO(out_lcfg, rc);
        }
 
+       /* revoke nodemap lock */
+       rc = mgs_find_or_make_fsdb(env, mgs, LUSTRE_NODEMAP_NAME, &fsdb);
+       if (rc < 0)
+               CWARN("%s: cannot make nodemap fsdb: rc = %d\n",
+                     mgs->mgs_obd->obd_name, rc);
+       else
+               mgs_revoke_lock(mgs, fsdb, CONFIG_T_NODEMAP);
+
 out_lcfg:
        OBD_FREE(lcfg, data->ioc_plen1);
 out: