Fix/improve fhe_stats sysctl output.

MFC after:	2 weeks
This commit is contained in:
Alexander Motin 2014-06-14 12:26:12 +00:00
parent 9c994dd922
commit 475c3a653d

View File

@ -468,14 +468,14 @@ fha_nd_complete(SVCTHREAD *thread, struct svc_req *req)
int int
fhe_stats_sysctl(SYSCTL_HANDLER_ARGS, struct fha_params *softc) fhe_stats_sysctl(SYSCTL_HANDLER_ARGS, struct fha_params *softc)
{ {
int error, count, i; int error, i;
struct sbuf sb; struct sbuf sb;
struct fha_hash_entry *fhe; struct fha_hash_entry *fhe;
bool_t first = TRUE; bool_t first, hfirst;
SVCTHREAD *thread; SVCTHREAD *thread;
SVCPOOL *pool; SVCPOOL *pool;
sbuf_new(&sb, NULL, 4096, SBUF_FIXEDLEN); sbuf_new(&sb, NULL, 65536, SBUF_FIXEDLEN);
pool = NULL; pool = NULL;
@ -485,42 +485,44 @@ fhe_stats_sysctl(SYSCTL_HANDLER_ARGS, struct fha_params *softc)
} }
pool = *softc->pool; pool = *softc->pool;
count = 0;
for (i = 0; i < FHA_HASH_SIZE; i++) for (i = 0; i < FHA_HASH_SIZE; i++)
if (!LIST_EMPTY(&softc->fha_hash[i].list)) if (!LIST_EMPTY(&softc->fha_hash[i].list))
count++; break;
if (count == 0) { if (i == FHA_HASH_SIZE) {
sbuf_printf(&sb, "No file handle entries.\n"); sbuf_printf(&sb, "No file handle entries.\n");
goto out; goto out;
} }
for (i = 0; i < FHA_HASH_SIZE; i++) { hfirst = TRUE;
for (; i < FHA_HASH_SIZE; i++) {
mtx_lock(&softc->fha_hash[i].mtx); mtx_lock(&softc->fha_hash[i].mtx);
if (LIST_EMPTY(&softc->fha_hash[i].list)) {
mtx_unlock(&softc->fha_hash[i].mtx);
continue;
}
sbuf_printf(&sb, "%shash %d: {\n", hfirst ? "" : ", ", i);
first = TRUE;
LIST_FOREACH(fhe, &softc->fha_hash[i].list, link) { LIST_FOREACH(fhe, &softc->fha_hash[i].list, link) {
sbuf_printf(&sb, "%sfhe %p: {\n", first ? " " : ", ", fhe); sbuf_printf(&sb, "%sfhe %p: {\n", first ? " " : ", ", fhe);
sbuf_printf(&sb, " fh: %ju\n", (uintmax_t) fhe->fh); sbuf_printf(&sb, " fh: %ju\n", (uintmax_t) fhe->fh);
sbuf_printf(&sb, " num_rw: %d\n", fhe->num_rw); sbuf_printf(&sb, " num_rw/exclusive: %d/%d\n",
sbuf_printf(&sb, " num_exclusive: %d\n", fhe->num_exclusive); fhe->num_rw, fhe->num_exclusive);
sbuf_printf(&sb, " num_threads: %d\n", fhe->num_threads); sbuf_printf(&sb, " num_threads: %d\n", fhe->num_threads);
LIST_FOREACH(thread, &fhe->threads, st_alink) { LIST_FOREACH(thread, &fhe->threads, st_alink) {
sbuf_printf(&sb, " thread %p offset %ju " sbuf_printf(&sb, " thread %p offset %ju "
"(count %d)\n", thread, "reqs %d\n", thread,
thread->st_p3, thread->st_p2); thread->st_p3, thread->st_p2);
} }
sbuf_printf(&sb, " }"); sbuf_printf(&sb, " }");
first = FALSE; first = FALSE;
/* Limit the output. */
if (++count > 128) {
sbuf_printf(&sb, "...");
break;
}
} }
sbuf_printf(&sb, "\n}");
mtx_unlock(&softc->fha_hash[i].mtx); mtx_unlock(&softc->fha_hash[i].mtx);
hfirst = FALSE;
} }
out: out: