- sbi = lustre_init_sbi(sb);
- if (!sbi)
- RETURN(-ENOMEM);
-
- sbi->ll_flags |= LL_SBI_READAHEAD;
- ll_options(data, &lov, &lmv, &sec, &async, &sbi->ll_flags);
-
- if (!lov) {
- CERROR("no osc\n");
- GOTO(out, err = -EINVAL);
- }
-
- if (!lmv) {
- CERROR("no mdc\n");
- GOTO(out, err = -EINVAL);
- }
-
- err = lustre_common_fill_super(sb, lmv, lov, sec, nllu, async);
- EXIT;
-out:
- if (err)
- lustre_free_sbi(sb);
-
- if (sec)
- OBD_FREE(sec, strlen(sec) + 1);
- if (lmv)
- OBD_FREE(lmv, strlen(lmv) + 1);
- if (lov)
- OBD_FREE(lov, strlen(lov) + 1);
- return err;
-} /* ll_read_super */
-
-static int lustre_process_log(struct lustre_mount_data *lmd, char *profile,
- struct config_llog_instance *cfg, int allow_recov)
-{
- struct lustre_cfg lcfg;
- struct portals_cfg pcfg;
- char *peer = "MDS_PEER_UUID";
- struct obd_device *obd;
- struct lustre_handle md_conn = {0, };
- struct obd_export *exp;
- char *name = "mdc_dev";
- class_uuid_t uuid;
- struct obd_uuid lmv_uuid;
- struct llog_ctxt *ctxt;
- int rc = 0, err = 0;
- ENTRY;
-
- if (lmd_bad_magic(lmd))
- RETURN(-EINVAL);
-
- generate_random_uuid(uuid);
- class_uuid_unparse(uuid, &lmv_uuid);
-
- if (lmd->lmd_local_nid) {
- PCFG_INIT(pcfg, NAL_CMD_REGISTER_MYNID);
- pcfg.pcfg_nal = lmd->lmd_nal;
- pcfg.pcfg_nid = lmd->lmd_local_nid;
- rc = libcfs_nal_cmd(&pcfg);
- if (rc < 0)
- GOTO(out, rc);
- }
-
- if (lmd->lmd_nal == SOCKNAL ||
- lmd->lmd_nal == OPENIBNAL ||
- lmd->lmd_nal == IIBNAL ||
- lmd->lmd_nal == VIBNAL ||
- lmd->lmd_nal == RANAL) {
- PCFG_INIT(pcfg, NAL_CMD_ADD_PEER);
- pcfg.pcfg_nal = lmd->lmd_nal;
- pcfg.pcfg_nid = lmd->lmd_server_nid;
- pcfg.pcfg_id = lmd->lmd_server_ipaddr;
- pcfg.pcfg_misc = lmd->lmd_port;
- rc = libcfs_nal_cmd(&pcfg);
- if (rc < 0)
- GOTO(out, rc);
- }
-
- LCFG_INIT(lcfg, LCFG_ADD_UUID, name);
- lcfg.lcfg_nid = lmd->lmd_server_nid;
- lcfg.lcfg_inllen1 = strlen(peer) + 1;
- lcfg.lcfg_inlbuf1 = peer;
- lcfg.lcfg_nal = lmd->lmd_nal;
- rc = class_process_config(&lcfg);
- if (rc < 0)
- GOTO(out_del_conn, rc);
-
- LCFG_INIT(lcfg, LCFG_ATTACH, name);
- lcfg.lcfg_inlbuf1 = "mdc";
- lcfg.lcfg_inllen1 = strlen(lcfg.lcfg_inlbuf1) + 1;
- lcfg.lcfg_inlbuf2 = lmv_uuid.uuid;
- lcfg.lcfg_inllen2 = strlen(lcfg.lcfg_inlbuf2) + 1;
- err = class_process_config(&lcfg);
- if (rc < 0)
- GOTO(out_del_uuid, rc);
-
- LCFG_INIT(lcfg, LCFG_SETUP, name);
- lcfg.lcfg_inlbuf1 = lmd->lmd_mds;
- lcfg.lcfg_inllen1 = strlen(lcfg.lcfg_inlbuf1) + 1;
- lcfg.lcfg_inlbuf2 = peer;
- lcfg.lcfg_inllen2 = strlen(lcfg.lcfg_inlbuf2) + 1;
- rc = class_process_config(&lcfg);
- if (rc < 0)
- GOTO(out_detach, rc);
-
- obd = class_name2obd(name);
- if (obd == NULL)
- GOTO(out_cleanup, rc = -EINVAL);
-
- rc = obd_set_info(obd->obd_self_export, strlen("sec"), "sec",
- strlen(lmd->lmd_security), lmd->lmd_security);
- if (rc)
- GOTO(out_cleanup, rc);
-
- /* Disable initial recovery on this import */
- rc = obd_set_info(obd->obd_self_export,
- strlen("initial_recov"), "initial_recov",
- sizeof(allow_recov), &allow_recov);
- if (rc)
- GOTO(out_cleanup, rc);
-
- rc = obd_connect(&md_conn, obd, &lmv_uuid, 0);
- if (rc) {
- CERROR("cannot connect to %s: rc = %d\n", lmd->lmd_mds, rc);
- GOTO(out_cleanup, rc);
- }
-
- exp = class_conn2export(&md_conn);
-
- ctxt = llog_get_context(&exp->exp_obd->obd_llogs,LLOG_CONFIG_REPL_CTXT);
- rc = class_config_process_llog(ctxt, profile, cfg);
- if (rc)
- CERROR("class_config_process_llog failed: rc = %d\n", rc);
-
- err = obd_disconnect(exp, 0);
-
- EXIT;
-out_cleanup:
- LCFG_INIT(lcfg, LCFG_CLEANUP, name);
- err = class_process_config(&lcfg);
- if (err < 0)
- GOTO(out, err);
-
-out_detach:
- LCFG_INIT(lcfg, LCFG_DETACH, name);
- err = class_process_config(&lcfg);
- if (err < 0)
- GOTO(out, err);
-
-out_del_uuid:
- LCFG_INIT(lcfg, LCFG_DEL_UUID, name);
- lcfg.lcfg_inllen1 = strlen(peer) + 1;
- lcfg.lcfg_inlbuf1 = peer;
- err = class_process_config(&lcfg);
-
-out_del_conn:
- if (lmd->lmd_nal == SOCKNAL ||
- lmd->lmd_nal == OPENIBNAL ||
- lmd->lmd_nal == IIBNAL ||
- lmd->lmd_nal == VIBNAL ||
- lmd->lmd_nal == RANAL) {
- int err2;
-
- PCFG_INIT(pcfg, NAL_CMD_DEL_PEER);
- pcfg.pcfg_nal = lmd->lmd_nal;
- pcfg.pcfg_nid = lmd->lmd_server_nid;
- pcfg.pcfg_flags = 1; /* single_share */
- err2 = libcfs_nal_cmd(&pcfg);
- if (err2 && !err)
- err = err2;
- if (err < 0)
- GOTO(out, err);
- }
-out:
- if (rc == 0)
- rc = err;
-
- return rc;
-}
-
-static void lustre_manual_cleanup(struct ll_sb_info *sbi)
-{
- struct lustre_cfg lcfg;
- struct obd_device *obd;
- int next = 0;
-
- while ((obd = class_devices_in_group(&sbi->ll_sb_uuid, &next)) != NULL)
- {
- int err;