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 OFD per-export statistics. * * This function sets up procfs entries for various OFD export counters. These * counters are for per-client statistics tracked on the server. * * \param[in] ofd OFD device * \param[in] exp OBD export * \param[in] client_nid NID of client * * \retval 0 if successful * \retval negative value on error */ static int ofd_export_stats_init(struct ofd_device *ofd, struct obd_export *exp, lnet_nid_t *client_nid) { struct obd_device *obd = ofd_obd(ofd); struct nid_stat *stats; int rc; ENTRY; LASSERT(obd->obd_uses_nid_stats); if (obd_uuid_equals(&exp->exp_client_uuid, &obd->obd_uuid)) /* Self-export gets no proc entry */ RETURN(0); 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(NUM_OBD_STATS + LPROC_OFD_STATS_LAST, LPROCFS_STATS_FLAG_NOPERCPU); if (stats->nid_stats == NULL) RETURN(-ENOMEM); lprocfs_init_ops_stats(LPROC_OFD_STATS_LAST, stats->nid_stats); ofd_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); out: 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 mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, void *localdata) { lnet_nid_t *client_nid = localdata; int rc, newnid; ENTRY; 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; int num_stats = 0; num_stats = (sizeof(*obd->obd_type->typ_dt_ops) / sizeof(void *)) + LPROC_MGS_LAST - 1; tmp->nid_stats = lprocfs_alloc_stats(num_stats, LPROCFS_STATS_FLAG_NOPERCPU); if (tmp->nid_stats == NULL) return -ENOMEM; lprocfs_init_ops_stats(LPROC_MGS_LAST, tmp->nid_stats); mgs_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; }