int osd_procfs_init(struct osd_device *osd, const char *name) { struct obd_type *type; int rc; ENTRY; if (osd->od_proc_entry) RETURN(0); /* at the moment there is no linkage between lu_type * and obd_type, so we lookup obd_type this way */ type = class_search_type(LUSTRE_OSD_ZFS_NAME); LASSERT(name != NULL); LASSERT(type != NULL); osd->od_proc_entry = lprocfs_register(name, type->typ_procroot, lprocfs_osd_obd_vars, &osd->od_dt_dev); if (IS_ERR(osd->od_proc_entry)) { rc = PTR_ERR(osd->od_proc_entry); CERROR("Error %d setting up lprocfs for %s\n", rc, name); osd->od_proc_entry = NULL; GOTO(out, rc); } rc = osd_stats_init(osd); GOTO(out, rc); out: if (rc) osd_procfs_fini(osd); return rc; }
int osd_procfs_init(struct osd_device *osd, const char *name) { struct lprocfs_static_vars lvars; struct lu_device *ld = &osd->od_dt_dev.dd_lu_dev; struct obd_type *type; int rc; ENTRY; type = ld->ld_type->ldt_obd_type; LASSERT(name != NULL); LASSERT(type != NULL); /* Find the type procroot and add the proc entry for this device */ lprocfs_osd_init_vars(&lvars); osd->od_proc_entry = lprocfs_register(name, type->typ_procroot, lvars.obd_vars, osd); if (IS_ERR(osd->od_proc_entry)) { rc = PTR_ERR(osd->od_proc_entry); CERROR("Error %d setting up lprocfs for %s\n", rc, name); osd->od_proc_entry = NULL; GOTO(out, rc); } rc = lu_time_init(&osd->od_stats, osd->od_proc_entry, osd_counter_names, ARRAY_SIZE(osd_counter_names)); EXIT; out: if (rc) osd_procfs_fini(osd); return rc; }