int mdt_export_stats_init(struct obd_device *obd, struct obd_export *exp, void *localdata) { lnet_nid_t *client_nid = localdata; int rc, newnid; ENTRY; LASSERT(!obd->obd_uses_nid_stats); rc = lprocfs_exp_setup(exp, client_nid, &newnid); if (rc) { /* Mask error for already created * /proc entries */ if (rc == -EALREADY) rc = 0; RETURN(rc); } if (newnid) { struct nid_stat *tmp = exp->exp_nid_stats; tmp->nid_stats = lprocfs_alloc_stats(LPROC_MDT_LAST, LPROCFS_STATS_FLAG_NOPERCPU); if (tmp->nid_stats == NULL) RETURN(-ENOMEM); mdt_stats_counter_init(tmp->nid_stats); rc = lprocfs_register_stats(tmp->nid_proc, "stats", tmp->nid_stats); if (rc) GOTO(clean, rc); rc = lprocfs_nid_ldlm_stats_init(tmp); if (rc) GOTO(clean, rc); rc = lprocfs_seq_create(tmp->nid_proc, "open_files", 0444, &mdt_open_files_seq_fops, tmp); if (rc) { CWARN("%s: error adding the open_files file: rc = %d\n", obd->obd_name, rc); GOTO(clean, rc); } } RETURN(0); clean: return rc; }
/** * Initialize MDT per-export statistics. * * This function sets up procfs entries for various MDT export counters. These * counters are for per-client statistics tracked on the server. * * \param[in] obd OBD device * \param[in] exp OBD export * \param[in] localdata NID of client * * \retval 0 if successful * \retval negative value on error */ int mdt_export_stats_init(struct obd_device *obd, struct obd_export *exp, void *localdata) { lnet_nid_t *client_nid = localdata; struct nid_stat *stats; int rc; ENTRY; rc = lprocfs_exp_setup(exp, client_nid); if (rc != 0) /* Mask error for already created /proc entries */ RETURN(rc == -EALREADY ? 0 : rc); stats = exp->exp_nid_stats; stats->nid_stats = lprocfs_alloc_stats(LPROC_MDT_LAST, LPROCFS_STATS_FLAG_NOPERCPU); if (stats->nid_stats == NULL) RETURN(-ENOMEM); mdt_stats_counter_init(stats->nid_stats); rc = lprocfs_register_stats(stats->nid_proc, "stats", stats->nid_stats); if (rc != 0) { lprocfs_free_stats(&stats->nid_stats); GOTO(out, rc); } rc = lprocfs_nid_ldlm_stats_init(stats); if (rc != 0) GOTO(out, rc); rc = lprocfs_seq_create(stats->nid_proc, "open_files", 0444, &mdt_open_files_seq_fops, stats); if (rc != 0) { CWARN("%s: error adding the open_files file: rc = %d\n", obd->obd_name, rc); GOTO(out, rc); } out: RETURN(rc); }
int mdt_export_stats_init(struct obd_device *obd, struct obd_export *exp, int reconnect, void *localdata) { lnet_nid_t *client_nid = localdata; int rc, newnid; ENTRY; rc = lprocfs_exp_setup(exp, client_nid, reconnect, &newnid); if (rc) { /* Mask error for already created * /proc entries */ if (rc == -EALREADY) rc = 0; RETURN(rc); } if (newnid) { struct nid_stat *tmp = exp->exp_nid_stats; int num_stats; num_stats = (sizeof(*obd->obd_type->typ_md_ops) / sizeof(void *)) + LPROC_MDT_LAST; tmp->nid_stats = lprocfs_alloc_stats(num_stats, LPROCFS_STATS_FLAG_NOPERCPU); if (tmp->nid_stats == NULL) return -ENOMEM; lprocfs_init_mps_stats(LPROC_MDT_LAST, tmp->nid_stats); mdt_stats_counter_init(tmp->nid_stats); rc = lprocfs_register_stats(tmp->nid_proc, "stats", tmp->nid_stats); if (rc) GOTO(clean, rc); rc = lprocfs_nid_ldlm_stats_init(tmp); if (rc) GOTO(clean, rc); } RETURN(0); clean: return rc; }