Fix/improve fhe_stats sysctl output.
MFC after: 2 weeks
This commit is contained in:
parent
9c994dd922
commit
475c3a653d
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user