+ /* the qmt automatically shuts down when the mdt disconnects */
+ obd_disconnect(mdt->mdt_qmt_exp);
+ mdt->mdt_qmt_exp = NULL;
+ mdt->mdt_qmt_dev = NULL;
+ EXIT;
+}
+
+/* mdt_getxattr() is used from mdt_intent_getxattr(), use this wrapper
+ * for now. This will be removed along with converting rest of MDT code
+ * to use tgt_session_info */
+int mdt_tgt_getxattr(struct tgt_session_info *tsi)
+{
+ struct mdt_thread_info *info = tsi2mdt_info(tsi);
+ int rc;
+
+ rc = mdt_getxattr(info);
+
+ mdt_thread_info_fini(info);
+ return rc;
+}
+
+static struct tgt_handler mdt_tgt_handlers[] = {
+TGT_RPC_HANDLER(MDS_FIRST_OPC,
+ 0, MDS_CONNECT, mdt_tgt_connect,
+ &RQF_CONNECT, LUSTRE_OBD_VERSION),
+TGT_RPC_HANDLER(MDS_FIRST_OPC,
+ 0, MDS_DISCONNECT, tgt_disconnect,
+ &RQF_MDS_DISCONNECT, LUSTRE_OBD_VERSION),
+TGT_RPC_HANDLER(MDS_FIRST_OPC,
+ HABEO_REFERO, MDS_SET_INFO, mdt_set_info,
+ &RQF_OBD_SET_INFO, LUSTRE_MDS_VERSION),
+TGT_MDT_HDL(0, MDS_GET_INFO, mdt_get_info),
+TGT_MDT_HDL(0 | HABEO_REFERO, MDS_GETSTATUS, mdt_getstatus),
+TGT_MDT_HDL(HABEO_CORPUS, MDS_GETATTR, mdt_getattr),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_GETATTR_NAME,
+ mdt_getattr_name),
+TGT_MDT_HDL(HABEO_CORPUS, MDS_GETXATTR, mdt_tgt_getxattr),
+TGT_MDT_HDL(0 | HABEO_REFERO, MDS_STATFS, mdt_statfs),
+TGT_MDT_HDL(0 | MUTABOR, MDS_REINT, mdt_reint),
+TGT_MDT_HDL(HABEO_CORPUS, MDS_CLOSE, mdt_close),
+TGT_MDT_HDL(HABEO_CORPUS, MDS_DONE_WRITING,
+ mdt_done_writing),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_READPAGE, mdt_readpage),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_SYNC, mdt_sync),
+TGT_MDT_HDL(0, MDS_QUOTACTL, mdt_quotactl),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO | MUTABOR, MDS_HSM_PROGRESS,
+ mdt_hsm_progress),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO | MUTABOR, MDS_HSM_CT_REGISTER,
+ mdt_hsm_ct_register),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO | MUTABOR, MDS_HSM_CT_UNREGISTER,
+ mdt_hsm_ct_unregister),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_STATE_GET,
+ mdt_hsm_state_get),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO | MUTABOR, MDS_HSM_STATE_SET,
+ mdt_hsm_state_set),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_ACTION, mdt_hsm_action),
+TGT_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_REQUEST,
+ mdt_hsm_request),
+TGT_MDT_HDL(HABEO_CLAVIS | HABEO_CORPUS | HABEO_REFERO | MUTABOR,
+ MDS_SWAP_LAYOUTS,
+ mdt_swap_layouts),
+};
+
+static struct tgt_handler mdt_sec_ctx_ops[] = {
+TGT_SEC_HDL_VAR(0, SEC_CTX_INIT, mdt_sec_ctx_handle),
+TGT_SEC_HDL_VAR(0, SEC_CTX_INIT_CONT,mdt_sec_ctx_handle),
+TGT_SEC_HDL_VAR(0, SEC_CTX_FINI, mdt_sec_ctx_handle)
+};
+
+static struct tgt_handler mdt_quota_ops[] = {
+TGT_QUOTA_HDL(HABEO_REFERO, QUOTA_DQACQ, mdt_quota_dqacq),
+};
+
+static struct tgt_opc_slice mdt_common_slice[] = {
+ {
+ .tos_opc_start = MDS_FIRST_OPC,
+ .tos_opc_end = MDS_LAST_OPC,
+ .tos_hs = mdt_tgt_handlers
+ },
+ {
+ .tos_opc_start = OBD_FIRST_OPC,
+ .tos_opc_end = OBD_LAST_OPC,
+ .tos_hs = tgt_obd_handlers
+ },
+ {
+ .tos_opc_start = LDLM_FIRST_OPC,
+ .tos_opc_end = LDLM_LAST_OPC,
+ .tos_hs = tgt_dlm_handlers
+ },
+ {
+ .tos_opc_start = SEC_FIRST_OPC,
+ .tos_opc_end = SEC_LAST_OPC,
+ .tos_hs = mdt_sec_ctx_ops
+ },
+ {
+ .tos_opc_start = OUT_UPDATE_FIRST_OPC,
+ .tos_opc_end = OUT_UPDATE_LAST_OPC,
+ .tos_hs = tgt_out_handlers
+ },
+ {
+ .tos_opc_start = FLD_FIRST_OPC,
+ .tos_opc_end = FLD_LAST_OPC,
+ .tos_hs = fld_handlers
+ },
+ {
+ .tos_opc_start = SEQ_FIRST_OPC,
+ .tos_opc_end = SEQ_LAST_OPC,
+ .tos_hs = seq_handlers
+ },
+ {
+ .tos_opc_start = QUOTA_DQACQ,
+ .tos_opc_end = QUOTA_LAST_OPC,
+ .tos_hs = mdt_quota_ops
+ },
+ {
+ .tos_opc_start = LLOG_FIRST_OPC,
+ .tos_opc_end = LLOG_LAST_OPC,
+ .tos_hs = tgt_llog_handlers
+ },
+ {
+ .tos_opc_start = LFSCK_FIRST_OPC,
+ .tos_opc_end = LFSCK_LAST_OPC,
+ .tos_hs = tgt_lfsck_handlers
+ },
+
+ {
+ .tos_hs = NULL
+ }
+};