/* * Initialize a module for the file system processing stack. */ void pflfs_module_init(struct pscfs *m) { m->pf_opst_read_err = pfl_opstat_initf(OPSTF_BASE10, "fs.%s.read.err", m->pf_name); m->pf_opst_write_err = pfl_opstat_initf(OPSTF_BASE10, "fs.%s.write.err", m->pf_name); m->pf_opst_read_reply = pfl_opstat_init("fs.%s.read.reply", m->pf_name); m->pf_opst_write_reply = pfl_opstat_init("fs.%s.write.reply", m->pf_name); }
/* * Register a list cache for external access. * @plc: the list cache to register. * @name: printf(3) format of name for list. * @ap: variable argument list for printf(3) name argument. */ void lc_vregister(struct psc_listcache *plc, const char *name, va_list ap) { int rc; PLL_LOCK(&psc_listcaches); LIST_CACHE_LOCK(plc); rc = vsnprintf(plc->plc_name, sizeof(plc->plc_name), name, ap); if (rc == -1) psc_fatal("vsnprintf"); if (rc > (int)sizeof(plc->plc_name)) psc_fatalx("plc_name is too large (%s)", name); plc->plc_nseen = pfl_opstat_initf(OPSTF_BASE10, "listcache.%s.adds", plc->plc_name); plc->plc_st_removes = pfl_opstat_initf(OPSTF_BASE10, "listcache.%s.removes", plc->plc_name); pll_add_sorted(&psc_listcaches, plc, lc_cmp); LIST_CACHE_ULOCK(plc); PLL_ULOCK(&psc_listcaches); }
void pfl_opstats_grad_init(struct pfl_opstats_grad *og, int flags, int64_t *buckets, int nbuckets, const char *fmt, ...) { const char *lower_suffix = "", *upper_suffix = ""; int64_t lower_bound, upper_bound; struct pfl_opstat_bucket *ob; char label[16]; int rc, i; og->og_buckets = PSCALLOC(nbuckets * sizeof(og->og_buckets[0])); og->og_nbuckets = nbuckets; for (i = 0, ob = og->og_buckets; i < nbuckets; i++, ob++) { if (i) pfl_assert(buckets[i - 1] < buckets[i]); else pfl_assert(buckets[i] == 0); lower_bound = buckets[i]; if (!(flags & OPSTF_BASE10)) lower_suffix = _pfl_opstats_base2_suffix( &lower_bound); if (i == nbuckets - 1) { rc = snprintf(label, sizeof(label), "%d:>=%"PRId64"%.1s", i, lower_bound, lower_suffix); } else { upper_bound = buckets[i + 1]; if (!(flags & OPSTF_BASE10)) upper_suffix = _pfl_opstats_base2_suffix( &upper_bound); rc = snprintf(label, sizeof(label), "%d:%"PRId64"%.1s-<%"PRId64"%.1s", i, lower_bound, lower_suffix, upper_bound, upper_suffix); } if (rc == -1) psc_fatal("snprintf"); ob->ob_lower_bound = buckets[i]; ob->ob_opst = pfl_opstat_initf(flags | OPSTF_BASE10, fmt, label); } }