Commit bbc77aa7 authored by Kent Overstreet's avatar Kent Overstreet

bcache: fix a spurious gcc complaint, use scnprintf

An old version of gcc was complaining about using a const int as the
size of a stack allocated array. Which should be fine - but using
ARRAY_SIZE() is better, anyways.

Also, refactor the code to use scnprintf().
Signed-off-by: default avatarKent Overstreet <koverstreet@google.com>
parent 5c694129
...@@ -665,12 +665,10 @@ SHOW(__bch_cache) ...@@ -665,12 +665,10 @@ SHOW(__bch_cache)
int cmp(const void *l, const void *r) int cmp(const void *l, const void *r)
{ return *((uint16_t *) r) - *((uint16_t *) l); } { return *((uint16_t *) r) - *((uint16_t *) l); }
/* Number of quantiles we compute */
const unsigned nq = 31;
size_t n = ca->sb.nbuckets, i, unused, btree; size_t n = ca->sb.nbuckets, i, unused, btree;
uint64_t sum = 0; uint64_t sum = 0;
uint16_t q[nq], *p, *cached; /* Compute 31 quantiles */
uint16_t q[31], *p, *cached;
ssize_t ret; ssize_t ret;
cached = p = vmalloc(ca->sb.nbuckets * sizeof(uint16_t)); cached = p = vmalloc(ca->sb.nbuckets * sizeof(uint16_t));
...@@ -703,12 +701,13 @@ SHOW(__bch_cache) ...@@ -703,12 +701,13 @@ SHOW(__bch_cache)
if (n) if (n)
do_div(sum, n); do_div(sum, n);
for (i = 0; i < nq; i++) for (i = 0; i < ARRAY_SIZE(q); i++)
q[i] = INITIAL_PRIO - cached[n * (i + 1) / (nq + 1)]; q[i] = INITIAL_PRIO - cached[n * (i + 1) /
(ARRAY_SIZE(q) + 1)];
vfree(p); vfree(p);
ret = snprintf(buf, PAGE_SIZE, ret = scnprintf(buf, PAGE_SIZE,
"Unused: %zu%%\n" "Unused: %zu%%\n"
"Metadata: %zu%%\n" "Metadata: %zu%%\n"
"Average: %llu\n" "Average: %llu\n"
...@@ -716,13 +715,15 @@ SHOW(__bch_cache) ...@@ -716,13 +715,15 @@ SHOW(__bch_cache)
"Quantiles: [", "Quantiles: [",
unused * 100 / (size_t) ca->sb.nbuckets, unused * 100 / (size_t) ca->sb.nbuckets,
btree * 100 / (size_t) ca->sb.nbuckets, sum, btree * 100 / (size_t) ca->sb.nbuckets, sum,
n * ca->sb.bucket_size / (nq + 1)); n * ca->sb.bucket_size / (ARRAY_SIZE(q) + 1));
for (i = 0; i < ARRAY_SIZE(q); i++)
ret += scnprintf(buf + ret, PAGE_SIZE - ret,
"%u ", q[i]);
ret--;
for (i = 0; i < nq && ret < (ssize_t) PAGE_SIZE; i++) ret += scnprintf(buf + ret, PAGE_SIZE - ret, "]\n");
ret += snprintf(buf + ret, PAGE_SIZE - ret,
i < nq - 1 ? "%u " : "%u]\n", q[i]);
buf[PAGE_SIZE - 1] = '\0';
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment