+/*
+ * Init client sequence manager which is used by local MDS to talk to sequence
+ * controller on remote node.
+ */
+static int lod_seq_init_cli(const struct lu_env *env,
+ struct lod_device *lod,
+ char *tgtuuid, int index)
+{
+ struct seq_server_site *ss;
+ struct obd_device *osp;
+ int rc;
+ char *prefix;
+ struct obd_uuid obd_uuid;
+ ENTRY;
+
+ ss = lu_site2seq(lod2lu_dev(lod)->ld_site);
+ LASSERT(ss != NULL);
+
+ /* check if this is adding the first MDC and controller is not yet
+ * initialized. */
+ if (index != 0 || ss->ss_client_seq)
+ RETURN(0);
+
+ obd_str2uuid(&obd_uuid, tgtuuid);
+ osp = class_find_client_obd(&obd_uuid, LUSTRE_OSP_NAME,
+ &lod->lod_dt_dev.dd_lu_dev.ld_obd->obd_uuid);
+ if (osp == NULL) {
+ CERROR("%s: can't find %s device\n",
+ lod->lod_dt_dev.dd_lu_dev.ld_obd->obd_name,
+ tgtuuid);
+ RETURN(-EINVAL);
+ }
+
+ if (!osp->obd_set_up) {
+ CERROR("target %s not set up\n", osp->obd_name);
+ rc = -EINVAL;
+ }
+
+ LASSERT(ss->ss_control_exp);
+ OBD_ALLOC_PTR(ss->ss_client_seq);
+ if (ss->ss_client_seq == NULL)
+ RETURN(-ENOMEM);
+
+ OBD_ALLOC(prefix, MAX_OBD_NAME + 5);
+ if (!prefix) {
+ OBD_FREE_PTR(ss->ss_client_seq);
+ ss->ss_client_seq = NULL;
+ RETURN(-ENOMEM);
+ }
+
+ snprintf(prefix, MAX_OBD_NAME + 5, "ctl-%s", osp->obd_name);
+ rc = seq_client_init(ss->ss_client_seq, ss->ss_control_exp,
+ LUSTRE_SEQ_METADATA, prefix, NULL);
+ OBD_FREE(prefix, MAX_OBD_NAME + 5);
+ if (rc) {
+ OBD_FREE_PTR(ss->ss_client_seq);
+ ss->ss_client_seq = NULL;
+ RETURN(rc);
+ }
+
+ LASSERT(ss->ss_server_seq != NULL);
+ rc = seq_server_set_cli(ss->ss_server_seq, ss->ss_client_seq,
+ env);
+
+ RETURN(rc);
+}
+
+static void lod_seq_fini_cli(struct lod_device *lod)
+{
+ struct seq_server_site *ss;
+
+ ENTRY;
+
+ ss = lu_site2seq(lod2lu_dev(lod)->ld_site);
+ if (ss == NULL) {
+ EXIT;
+ return;
+ }
+
+ if (ss->ss_server_seq)
+ seq_server_set_cli(ss->ss_server_seq,
+ NULL, NULL);
+
+ if (ss->ss_control_exp) {
+ class_export_put(ss->ss_control_exp);
+ ss->ss_control_exp = NULL;
+ }
+
+ EXIT;
+ return;
+}
+
+/**
+ * Procss config log on LOD
+ * \param env environment info
+ * \param dev lod device
+ * \param lcfg config log
+ *
+ * Add osc config log,
+ * marker 20 (flags=0x01, v2.2.49.56) lustre-OST0001 'add osc'
+ * add_uuid nid=192.168.122.162@tcp(0x20000c0a87aa2) 0: 1:nidxxx
+ * attach 0:lustre-OST0001-osc-MDT0001 1:osc 2:lustre-MDT0001-mdtlov_UUID
+ * setup 0:lustre-OST0001-osc-MDT0001 1:lustre-OST0001_UUID 2:nid
+ * lov_modify_tgts add 0:lustre-MDT0001-mdtlov 1:lustre-OST0001_UUID 2:1 3:1
+ * marker 20 (flags=0x02, v2.2.49.56) lustre-OST0001 'add osc'
+ *
+ * Add mdc config log
+ * marker 10 (flags=0x01, v2.2.49.56) lustre-MDT0000 'add osp'
+ * add_uuid nid=192.168.122.162@tcp(0x20000c0a87aa2) 0: 1:nid
+ * attach 0:lustre-MDT0000-osp-MDT0001 1:osp 2:lustre-MDT0001-mdtlov_UUID
+ * setup 0:lustre-MDT0000-osp-MDT0001 1:lustre-MDT0000_UUID 2:nid
+ * modify_mdc_tgts add 0:lustre-MDT0001 1:lustre-MDT0000_UUID 2:0 3:1
+ * marker 10 (flags=0x02, v2.2.49.56) lustre-MDT0000_UUID 'add osp'
+ **/