static void dump_bset(struct btree *b, struct bset *i) { struct bkey *k; unsigned j; for (k = i->start; k < end(i); k = bkey_next(k)) { printk(KERN_ERR "block %zu key %zi/%u: %s", index(i, b), (uint64_t *) k - i->d, i->keys, pkey(k)); for (j = 0; j < KEY_PTRS(k); j++) { size_t n = PTR_BUCKET_NR(b->c, k, j); printk(" bucket %zu", n); if (n >= b->c->sb.first_bucket && n < b->c->sb.nbuckets) printk(" prio %i", PTR_BUCKET(b->c, k, j)->prio); } printk(" %s\n", bch_ptr_status(b->c, k)); if (bkey_next(k) < end(i) && skipped_backwards(b, k)) printk(KERN_ERR "Key skipped backwards\n"); } }
bool __bch_btree_ptr_invalid(struct cache_set *c, const struct bkey *k) { char buf[80]; if (!KEY_PTRS(k) || !KEY_SIZE(k) || KEY_DIRTY(k)) goto bad; if (__ptr_invalid(c, k)) goto bad; return false; bad: bch_extent_to_text(buf, sizeof(buf), k); cache_bug(c, "spotted btree ptr %s: %s", buf, bch_ptr_status(c, k)); return true; }
bool __bch_extent_invalid(struct cache_set *c, const struct bkey *k) { char buf[80]; if (!KEY_SIZE(k)) return true; if (KEY_SIZE(k) > KEY_OFFSET(k)) goto bad; if (__ptr_invalid(c, k)) goto bad; return false; bad: bch_extent_to_text(buf, sizeof(buf), k); cache_bug(c, "spotted extent %s: %s", buf, bch_ptr_status(c, k)); return true; }
static void bch_bkey_dump(struct btree_keys *keys, const struct bkey *k) { struct btree *b = container_of(keys, struct btree, keys); unsigned j; char buf[80]; bch_extent_to_text(buf, sizeof(buf), k); printk(" %s", buf); for (j = 0; j < KEY_PTRS(k); j++) { size_t n = PTR_BUCKET_NR(b->c, k, j); printk(" bucket %zu", n); if (n >= b->c->sb.first_bucket && n < b->c->sb.nbuckets) printk(" prio %i", PTR_BUCKET(b->c, k, j)->prio); } printk(" %s\n", bch_ptr_status(b->c, k)); }
static bool bch_extent_invalid(struct btree_keys *bk, const struct bkey *k) { struct btree *b = container_of(bk, struct btree, keys); char buf[80]; if (!KEY_SIZE(k)) return true; if (KEY_SIZE(k) > KEY_OFFSET(k)) goto bad; if (__ptr_invalid(b->c, k)) goto bad; return false; bad: bch_extent_to_text(buf, sizeof(buf), k); cache_bug(b->c, "spotted extent %s: %s", buf, bch_ptr_status(b->c, k)); return true; }