struct mds_device {
/* super-class */
- struct md_device mds_md_dev;
- struct ptlrpc_service *mds_regular_service;
- struct ptlrpc_service *mds_readpage_service;
- struct ptlrpc_service *mds_out_service;
- struct ptlrpc_service *mds_setattr_service;
- struct ptlrpc_service *mds_mdsc_service;
- struct ptlrpc_service *mds_mdss_service;
- struct ptlrpc_service *mds_fld_service;
+ struct md_device mds_md_dev;
+ struct ptlrpc_service *mds_regular_service;
+ struct ptlrpc_service *mds_readpage_service;
+ struct ptlrpc_service *mds_out_service;
+ struct ptlrpc_service *mds_setattr_service;
+ struct ptlrpc_service *mds_mdsc_service;
+ struct ptlrpc_service *mds_mdss_service;
+ struct ptlrpc_service *mds_fld_service;
+ struct mutex mds_health_mutex;
};
/*
static void mds_stop_ptlrpc_service(struct mds_device *m)
{
ENTRY;
+
+ mutex_lock(&m->mds_health_mutex);
if (m->mds_regular_service != NULL) {
ptlrpc_unregister_service(m->mds_regular_service);
m->mds_regular_service = NULL;
ptlrpc_unregister_service(m->mds_fld_service);
m->mds_fld_service = NULL;
}
+ mutex_unlock(&m->mds_health_mutex);
+
EXIT;
}
{
static struct ptlrpc_service_conf conf;
struct obd_device *obd = m->mds_md_dev.md_lu_dev.ld_obd;
- cfs_proc_dir_entry_t *procfs_entry;
+ struct proc_dir_entry *procfs_entry;
int rc = 0;
ENTRY;
RETURN(NULL);
}
+LPROC_SEQ_FOPS_RO_TYPE(mds, uuid);
+
+static struct lprocfs_vars lprocfs_mds_obd_vars[] = {
+ { "uuid", &mds_uuid_fops },
+ { NULL }
+};
+
static struct lu_device *mds_device_alloc(const struct lu_env *env,
struct lu_device_type *t,
struct lustre_cfg *cfg)
/* set this lu_device to obd, because error handling need it */
obd->obd_lu_dev = l;
- rc = lprocfs_obd_setup(obd, lprocfs_mds_obd_vars);
+ obd->obd_vars = lprocfs_mds_obd_vars;
+ rc = lprocfs_obd_setup(obd);
if (rc != 0) {
mds_device_free(env, l);
l = ERR_PTR(rc);
return l;
}
+ mutex_init(&m->mds_health_mutex);
+
rc = mds_start_ptlrpc_service(m);
if (rc != 0) {
.ldt_ctx_tags = LCT_MD_THREAD
};
+static int mds_health_check(const struct lu_env *env, struct obd_device *obd)
+{
+ struct mds_device *mds = mds_dev(obd->obd_lu_dev);
+ int rc = 0;
+
+
+ mutex_lock(&mds->mds_health_mutex);
+ rc |= ptlrpc_service_health_check(mds->mds_regular_service);
+ rc |= ptlrpc_service_health_check(mds->mds_readpage_service);
+ rc |= ptlrpc_service_health_check(mds->mds_out_service);
+ rc |= ptlrpc_service_health_check(mds->mds_setattr_service);
+ rc |= ptlrpc_service_health_check(mds->mds_mdsc_service);
+ rc |= ptlrpc_service_health_check(mds->mds_mdss_service);
+ rc |= ptlrpc_service_health_check(mds->mds_fld_service);
+ mutex_unlock(&mds->mds_health_mutex);
+
+ return rc != 0 ? 1 : 0;
+}
+
static struct obd_ops mds_obd_device_ops = {
.o_owner = THIS_MODULE,
+ .o_health_check = mds_health_check,
};
int mds_mod_init(void)
mds_num_threads = mdt_num_threads;
}
- return class_register_type(&mds_obd_device_ops, NULL, NULL,
-#ifndef HAVE_ONLY_PROCFS_SEQ
- lprocfs_mds_module_vars,
-#endif
- LUSTRE_MDS_NAME, &mds_device_type);
+ return class_register_type(&mds_obd_device_ops, NULL, true, NULL,
+ LUSTRE_MDS_NAME, &mds_device_type);
}
void mds_mod_exit(void)