+int mds_attach(struct obd_device *dev,
+ obd_count len, void *data)
+{
+ int rc;
+ rc = lprocfs_reg_obd(dev, (lprocfs_vars_t*)status_var_nm_1, (void*)dev);
+ return rc;
+}
+
+int mds_detach(struct obd_device *dev)
+{
+ int rc;
+ rc = lprocfs_dereg_obd(dev);
+ return rc;
+
+}
+
+#define MDT_NUM_THREADS 8
+static int mdt_setup(struct obd_device *obddev, obd_count len, void *buf)
+{
+ int i;
+ // struct obd_ioctl_data* data = buf;
+ struct mds_obd *mds = &obddev->u.mds;
+ int rc = 0;
+ ENTRY;
+
+ MOD_INC_USE_COUNT;
+
+ mds->mds_service = ptlrpc_init_svc(MDS_NEVENTS, MDS_NBUFS,
+ MDS_BUFSIZE, MDS_MAXREQSIZE,
+ MDS_REQUEST_PORTAL, MDC_REPLY_PORTAL,
+ "self", mds_handle, "mds");
+ if (!mds->mds_service) {
+ CERROR("failed to start service\n");
+ GOTO(err_dec, rc = -EINVAL);
+ }
+
+ for (i = 0; i < MDT_NUM_THREADS; i++) {
+ char name[32];
+ sprintf(name, "lustre_MDT_%02d", i);
+ rc = ptlrpc_start_thread(obddev, mds->mds_service, name);
+ if (rc) {
+ CERROR("cannot start MDT thread #%d: rc %d\n", i, rc);
+ GOTO(err_thread, rc);
+ }
+ }
+
+ RETURN(0);
+
+err_thread:
+ ptlrpc_stop_all_threads(mds->mds_service);
+ ptlrpc_unregister_service(mds->mds_service);
+err_dec:
+ MOD_DEC_USE_COUNT;
+ RETURN(rc);
+}
+
+
+static int mdt_cleanup(struct obd_device *obddev)
+{
+ struct mds_obd *mds = &obddev->u.mds;
+ ENTRY;
+
+ ptlrpc_stop_all_threads(mds->mds_service);
+ ptlrpc_unregister_service(mds->mds_service);
+
+ MOD_DEC_USE_COUNT;
+ RETURN(0);
+}