struct lu_device_type *ldt, struct lustre_cfg *cfg)
{
struct dt_device_param ddp;
- struct proc_dir_entry *lov_proc_dir;
struct obd_device *obd;
int rc;
ENTRY;
if (rc)
GOTO(out_disconnect, rc);
- /* for compatibility we link old procfs's OSC entries to osp ones */
- lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
- if (lov_proc_dir) {
- cfs_proc_dir_entry_t *symlink = NULL;
- char *name;
- OBD_ALLOC(name, strlen(obd->obd_name) + 1);
- if (name) {
- strcpy(name, obd->obd_name);
- if (strstr(name, "lov"))
- symlink = lprocfs_add_symlink(name,
- lov_proc_dir,
- "../lod/%s",
- obd->obd_name);
- OBD_FREE(name, strlen(obd->obd_name) + 1);
- lod->lod_symlink = symlink;
- }
- }
+ rc = lod_procfs_init(lod);
+ if (rc)
+ GOTO(out_pools, rc);
mutex_init(&lod->lod_mutex);
init_rwsem(&lod->lod_rw_sem);
RETURN(0);
+out_pools:
+ lod_pools_fini(lod);
out_disconnect:
obd_disconnect(lod->lod_child_exp);
RETURN(rc);
struct lod_device *lod = lu2lod_dev(d);
ENTRY;
- if (lod->lod_symlink)
- lprocfs_remove(&lod->lod_symlink);
-
lod_pools_fini(lod);
+ lod_procfs_fini(lod);
+
RETURN(NULL);
}
int lod_pools_init(struct lod_device *lod, struct lustre_cfg *lcfg)
{
- struct lprocfs_static_vars lvars = { 0 };
struct obd_device *obd;
struct lov_desc *desc;
int rc;
lod->lod_death_row = 0;
lod->lod_refcount = 0;
- lprocfs_lod_init_vars(&lvars);
- lprocfs_obd_setup(obd, lvars.obd_vars);
-
-#ifdef LPROCFS
- rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
- 0444, &lod_proc_target_fops, obd);
- if (rc) {
- CWARN("%s: Error adding the target_obd file %d\n",
- obd->obd_name, rc);
- GOTO(out_lproc, rc);
- }
- lod->lod_pool_proc_entry = lprocfs_register("pools",
- obd->obd_proc_entry,
- NULL, NULL);
- if (IS_ERR(lod->lod_pool_proc_entry)) {
- int ret = PTR_ERR(lod->lod_pool_proc_entry);
- lod->lod_pool_proc_entry = NULL;
- CWARN("%s: Failed to create pool proc file %d\n",
- obd->obd_name, ret);
- rc = lod_pools_fini(lod);
- RETURN(ret);
- }
-#endif
-
RETURN(0);
-out_lproc:
- lprocfs_obd_cleanup(obd);
- lod_ost_pool_free(&lod->lod_qos.lq_rr.lqr_pool);
out_pool_info:
lod_ost_pool_free(&lod->lod_pool_info);
out_hash:
cfs_hash_putref(lod->lod_pools_hash_body);
lod_ost_pool_free(&(lod->lod_qos.lq_rr.lqr_pool));
lod_ost_pool_free(&lod->lod_pool_info);
-
- /* clear pools parent proc entry only after all pools are killed */
- if (lod->lod_pool_proc_entry) {
- lprocfs_remove(&lod->lod_pool_proc_entry);
- lod->lod_pool_proc_entry = NULL;
- }
-
- lprocfs_obd_cleanup(obd);
-
OBD_FREE_PTR(lod->lod_qos.lq_statfs_data);
RETURN(0);
}
active ? "" : "IN");
}
-struct seq_operations lod_osts_sops = {
+static const struct seq_operations lod_osts_sops = {
.start = lod_osts_seq_start,
.stop = lod_osts_seq_stop,
.next = lod_osts_seq_next,
return 0;
}
-struct lprocfs_vars lprocfs_lod_obd_vars[] = {
+static struct lprocfs_vars lprocfs_lod_obd_vars[] = {
{ "uuid", lprocfs_rd_uuid, 0, 0 },
{ "stripesize", lod_rd_stripesize, lod_wr_stripesize, 0 },
{ "stripeoffset", lod_rd_stripeoffset, lod_wr_stripeoffset, 0 },
{ "stripetype", lod_rd_stripetype, lod_wr_stripetype, 0 },
{ "numobd", lod_rd_numobd, 0, 0 },
{ "activeobd", lod_rd_activeobd, 0, 0 },
- { "filestotal", lprocfs_rd_filestotal, 0, 0 },
- { "filesfree", lprocfs_rd_filesfree, 0, 0 },
- /*{ "filegroups", lprocfs_rd_filegroups, 0, 0 },*/
- { "blocksize", lprocfs_rd_blksize, 0, 0 },
- { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 },
- { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 },
- { "kbytesavail", lprocfs_rd_kbytesavail, 0, 0 },
{ "desc_uuid", lod_rd_desc_uuid, 0, 0 },
{ "qos_prio_free",lod_rd_qos_priofree, lod_wr_qos_priofree, 0 },
{ "qos_threshold_rr", lod_rd_qos_thresholdrr, lod_wr_qos_thresholdrr, 0 },
{ 0 }
};
+static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
+ { "blocksize", lprocfs_osd_rd_blksize, 0, 0 },
+ { "kbytestotal", lprocfs_osd_rd_kbytestotal, 0, 0 },
+ { "kbytesfree", lprocfs_osd_rd_kbytesfree, 0, 0 },
+ { "kbytesavail", lprocfs_osd_rd_kbytesavail, 0, 0 },
+ { "filestotal", lprocfs_osd_rd_filestotal, 0, 0 },
+ { "filesfree", lprocfs_osd_rd_filesfree, 0, 0 },
+ { 0 }
+};
+
static struct lprocfs_vars lprocfs_lod_module_vars[] = {
{ "num_refs", lprocfs_rd_numrefs, 0, 0 },
{ 0 }
lvars->obd_vars = lprocfs_lod_obd_vars;
}
-struct file_operations lod_proc_target_fops = {
+static const struct file_operations lod_proc_target_fops = {
.owner = THIS_MODULE,
.open = lod_osts_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = lprocfs_seq_release,
};
+
+int lod_procfs_init(struct lod_device *lod)
+{
+ struct obd_device *obd = lod2obd(lod);
+ struct lprocfs_static_vars lvars;
+ cfs_proc_dir_entry_t *lov_proc_dir;
+ int rc;
+
+ lprocfs_lod_init_vars(&lvars);
+ rc = lprocfs_obd_setup(obd, lvars.obd_vars);
+ if (rc) {
+ CERROR("%s: cannot setup procfs entry: %d\n",
+ obd->obd_name, rc);
+ RETURN(rc);
+ }
+
+ rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_lod_osd_vars,
+ &lod->lod_dt_dev);
+ if (rc) {
+ CERROR("%s: cannot setup procfs entry: %d\n",
+ obd->obd_name, rc);
+ GOTO(out, rc);
+ }
+
+ rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
+ 0444, &lod_proc_target_fops, obd);
+ if (rc) {
+ CWARN("%s: Error adding the target_obd file %d\n",
+ obd->obd_name, rc);
+ GOTO(out, rc);
+ }
+
+ lod->lod_pool_proc_entry = lprocfs_register("pools",
+ obd->obd_proc_entry,
+ NULL, NULL);
+ if (IS_ERR(lod->lod_pool_proc_entry)) {
+ rc = PTR_ERR(lod->lod_pool_proc_entry);
+ lod->lod_pool_proc_entry = NULL;
+ CWARN("%s: Failed to create pool proc file: %d\n",
+ obd->obd_name, rc);
+ GOTO(out, rc);
+ }
+
+ /* for compatibility we link old procfs's OSC entries to osp ones */
+ lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
+ if (lov_proc_dir != NULL && strstr(obd->obd_name, "lov") != NULL)
+ lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
+ lov_proc_dir,
+ "../lod/%s",
+ obd->obd_name);
+
+ RETURN(0);
+
+out:
+ lprocfs_obd_cleanup(obd);
+
+ return rc;
+}
+
+void lod_procfs_fini(struct lod_device *lod)
+{
+ struct obd_device *obd = lod2obd(lod);
+
+ if (lod->lod_symlink != NULL)
+ lprocfs_remove(&lod->lod_symlink);
+
+ if (lod->lod_pool_proc_entry != NULL) {
+ lprocfs_remove(&lod->lod_pool_proc_entry);
+ lod->lod_pool_proc_entry = NULL;
+ }
+
+ lprocfs_obd_cleanup(obd);
+}
+
#endif /* LPROCFS */