|
@@ -47,11 +47,10 @@ const char *bch_ptr_status(struct cache_set *c, const struct bkey *k)
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
-struct keyprint_hack bch_pkey(const struct bkey *k)
|
|
|
+int bch_bkey_to_text(char *buf, size_t size, const struct bkey *k)
|
|
|
{
|
|
|
unsigned i = 0;
|
|
|
- struct keyprint_hack r;
|
|
|
- char *out = r.s, *end = r.s + KEYHACK_SIZE;
|
|
|
+ char *out = buf, *end = buf + size;
|
|
|
|
|
|
#define p(...) (out += scnprintf(out, end - out, __VA_ARGS__))
|
|
|
|
|
@@ -75,16 +74,14 @@ struct keyprint_hack bch_pkey(const struct bkey *k)
|
|
|
if (KEY_CSUM(k))
|
|
|
p(" cs%llu %llx", KEY_CSUM(k), k->ptr[1]);
|
|
|
#undef p
|
|
|
- return r;
|
|
|
+ return out - buf;
|
|
|
}
|
|
|
|
|
|
-struct keyprint_hack bch_pbtree(const struct btree *b)
|
|
|
+int bch_btree_to_text(char *buf, size_t size, const struct btree *b)
|
|
|
{
|
|
|
- struct keyprint_hack r;
|
|
|
-
|
|
|
- snprintf(r.s, 40, "%zu level %i/%i", PTR_BUCKET_NR(b->c, &b->key, 0),
|
|
|
- b->level, b->c->root ? b->c->root->level : -1);
|
|
|
- return r;
|
|
|
+ return scnprintf(buf, size, "%zu level %i/%i",
|
|
|
+ PTR_BUCKET_NR(b->c, &b->key, 0),
|
|
|
+ b->level, b->c->root ? b->c->root->level : -1);
|
|
|
}
|
|
|
|
|
|
#if defined(CONFIG_BCACHE_DEBUG) || defined(CONFIG_BCACHE_EDEBUG)
|
|
@@ -100,10 +97,12 @@ static void dump_bset(struct btree *b, struct bset *i)
|
|
|
{
|
|
|
struct bkey *k;
|
|
|
unsigned j;
|
|
|
+ char buf[80];
|
|
|
|
|
|
for (k = i->start; k < end(i); k = bkey_next(k)) {
|
|
|
+ bch_bkey_to_text(buf, sizeof(buf), k);
|
|
|
printk(KERN_ERR "block %zu key %zi/%u: %s", index(i, b),
|
|
|
- (uint64_t *) k - i->d, i->keys, pkey(k));
|
|
|
+ (uint64_t *) k - i->d, i->keys, buf);
|
|
|
|
|
|
for (j = 0; j < KEY_PTRS(k); j++) {
|
|
|
size_t n = PTR_BUCKET_NR(b->c, k, j);
|
|
@@ -252,6 +251,7 @@ static void vdump_bucket_and_panic(struct btree *b, const char *fmt,
|
|
|
va_list args)
|
|
|
{
|
|
|
unsigned i;
|
|
|
+ char buf[80];
|
|
|
|
|
|
console_lock();
|
|
|
|
|
@@ -262,7 +262,8 @@ static void vdump_bucket_and_panic(struct btree *b, const char *fmt,
|
|
|
|
|
|
console_unlock();
|
|
|
|
|
|
- panic("at %s\n", pbtree(b));
|
|
|
+ bch_btree_to_text(buf, sizeof(buf), b);
|
|
|
+ panic("at %s\n", buf);
|
|
|
}
|
|
|
|
|
|
void bch_check_key_order_msg(struct btree *b, struct bset *i,
|
|
@@ -337,6 +338,7 @@ static ssize_t bch_dump_read(struct file *file, char __user *buf,
|
|
|
{
|
|
|
struct dump_iterator *i = file->private_data;
|
|
|
ssize_t ret = 0;
|
|
|
+ char kbuf[80];
|
|
|
|
|
|
while (size) {
|
|
|
struct keybuf_key *w;
|
|
@@ -359,7 +361,8 @@ static ssize_t bch_dump_read(struct file *file, char __user *buf,
|
|
|
if (!w)
|
|
|
break;
|
|
|
|
|
|
- i->bytes = snprintf(i->buf, PAGE_SIZE, "%s\n", pkey(&w->key));
|
|
|
+ bch_bkey_to_text(kbuf, sizeof(kbuf), &w->key);
|
|
|
+ i->bytes = snprintf(i->buf, PAGE_SIZE, "%s\n", kbuf);
|
|
|
bch_keybuf_del(&i->keys, w);
|
|
|
}
|
|
|
|
|
@@ -526,10 +529,17 @@ static ssize_t btree_fuzz(struct kobject *k, struct kobj_attribute *a,
|
|
|
k < end(i);
|
|
|
k = bkey_next(k), l = bkey_next(l))
|
|
|
if (bkey_cmp(k, l) ||
|
|
|
- KEY_SIZE(k) != KEY_SIZE(l))
|
|
|
+ KEY_SIZE(k) != KEY_SIZE(l)) {
|
|
|
+ char buf1[80];
|
|
|
+ char buf2[80];
|
|
|
+
|
|
|
+ bch_bkey_to_text(buf1, sizeof(buf1), k);
|
|
|
+ bch_bkey_to_text(buf2, sizeof(buf2), l);
|
|
|
+
|
|
|
pr_err("key %zi differs: %s != %s",
|
|
|
(uint64_t *) k - i->d,
|
|
|
- pkey(k), pkey(l));
|
|
|
+ buf1, buf2);
|
|
|
+ }
|
|
|
|
|
|
for (j = 0; j < 3; j++) {
|
|
|
pr_err("**** Set %i ****", j);
|