LASSERT(mc != NULL);
CDEBUG(D_CONFIG, "notify %s ev=%d\n", watched->obd_name, ev);
+ if (ev == OBD_NOTIFY_OCD) {
+ struct obd_connect_data *conn_data =
+ &watched->u.cli.cl_import->imp_connect_data;
+ /*
+ * Update exp_connect_flags.
+ */
+ mc->mc_desc.cl_exp->exp_connect_flags =
+ conn_data->ocd_connect_flags;
+ CDEBUG(D_INFO, "Update connect_flags: "LPX64"\n",
+ conn_data->ocd_connect_flags);
+ }
+
RETURN(rc);
}
/* MDC OBD is set up already and connected to the proper MDS
const char *uuid_str = lustre_cfg_string(cfg, 1);
const char *index = lustre_cfg_string(cfg, 2);
const char *mdc_uuid_str = lustre_cfg_string(cfg, 4);
+ struct lu_site *ls = mdc2lu_dev(mc)->ld_site;
char *p;
int rc = 0;
OBD_ALLOC_PTR(ocd);
if (!ocd)
RETURN(-ENOMEM);
- /* The connection between MDS must be local */
- ocd->ocd_connect_flags = OBD_CONNECT_LCL_CLIENT |
+ /*
+ * The connection between MDS must be local,
+ * IBITS are needed for rename_lock (INODELOCK_UPDATE)
+ */
+ ocd->ocd_ibits_known = MDS_INODELOCK_UPDATE;
+ ocd->ocd_connect_flags = OBD_CONNECT_VERSION |
+ OBD_CONNECT_ACL |
+ OBD_CONNECT_LCL_CLIENT |
OBD_CONNECT_MDS_CAPA |
- OBD_CONNECT_OSS_CAPA;
+ OBD_CONNECT_OSS_CAPA |
+ OBD_CONNECT_IBITS;
rc = obd_connect(env, conn, mdc, &mdc->obd_uuid, ocd);
OBD_FREE_PTR(ocd);
if (rc) {
mdc->obd_name, rc);
} else {
desc->cl_exp = class_conn2export(conn);
-
+ /* set seq controller export for MDC0 if exists */
+ if (mc->mc_num == 0)
+ ls->ls_control_exp =
+ class_export_get(desc->cl_exp);
rc = obd_fid_init(desc->cl_exp);
if (rc)
CERROR("fid init error %d \n", rc);
mdc->obd_upcall.onu_upcall = mdc_obd_update;
}
}
+
if (rc) {
obd_disconnect(desc->cl_exp);
desc->cl_exp = NULL;
mdc_obd->obd_force = mdt_obd->obd_force;
mdc_obd->obd_fail = 0;
}
-
+
rc = obd_fid_fini(desc->cl_exp);
if (rc)
CERROR("Fid fini error %d\n", rc);
return rc;
}
-
-static int mdt_md_connect(const struct lu_env *env,
- struct lustre_handle *conn,
- struct obd_device *mdc)
-{
- struct obd_connect_data *ocd;
- int rc;
-
- OBD_ALLOC_PTR(ocd);
- if (!ocd)
- RETURN(-ENOMEM);
- /* The connection between MDS must be local */
- ocd->ocd_connect_flags = OBD_CONNECT_LCL_CLIENT |
- OBD_CONNECT_MDS_CAPA |
- OBD_CONNECT_OSS_CAPA;
- rc = obd_connect(env, conn, mdc, &mdc->obd_uuid, ocd);
-
- OBD_FREE_PTR(ocd);
-
- RETURN(rc);
-}
-
/*
* Init client sequence manager which is used by local MDS to talk to sequence
* controller on remote node.
CERROR("target %s not set up\n", mdc->obd_name);
rc = -EINVAL;
} else {
- struct lustre_handle conn = {0, };
-
- CDEBUG(D_CONFIG, "connect to controller %s(%s)\n",
- mdc->obd_name, mdc->obd_uuid.uuid);
-
- rc = mdt_md_connect(env, &conn, mdc);
- if (rc) {
- CERROR("target %s connect error %d\n",
- mdc->obd_name, rc);
- } else {
- ls->ls_control_exp = class_conn2export(&conn);
-
+ LASSERT(ls->ls_control_exp);
OBD_ALLOC_PTR(ls->ls_client_seq);
-
if (ls->ls_client_seq != NULL) {
char *prefix;
rc = seq_server_set_cli(ls->ls_server_seq,
ls->ls_client_seq,
env);
- }
}
RETURN(rc);
static void mdt_seq_fini_cli(struct mdt_device *m)
{
struct lu_site *ls;
- int rc;
ENTRY;
NULL, NULL);
if (ls && ls->ls_control_exp) {
- rc = obd_disconnect(ls->ls_control_exp);
- if (rc) {
- CERROR("failure to disconnect "
- "obd: %d\n", rc);
- }
+ class_export_put(ls->ls_control_exp);
ls->ls_control_exp = NULL;
}
EXIT;
* Add mdc hook to get first MDT uuid and connect it to
* ls->controller to use for seq manager.
*/
- rc = mdt_seq_init_cli(env, mdt_dev(d), cfg);
- if (rc) {
- CERROR("can't initialize controller export, "
- "rc %d\n", rc);
- }
+ rc = next->ld_ops->ldo_process_config(env, next, cfg);
+ if (rc)
+ CERROR("Can't add mdc, rc %d\n", rc);
+ else
+ rc = mdt_seq_init_cli(env, mdt_dev(d), cfg);
+ break;
default:
/* others are passed further */
rc = next->ld_ops->ldo_process_config(env, next, cfg);