diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-02-01 18:16:42 -0900 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-02-06 20:45:37 -0900 |
commit | 5933f9478cc21e8b319309d2794948050d09b031 (patch) | |
tree | 781509d106b4aa5c99dda7e88028b58baf6de786 /libbcache/btree_cache.c | |
parent | ab88049a08bf734b9a6c9f2deae39fbd0c933192 (diff) |
update bcache code, fsck improvements
Diffstat (limited to 'libbcache/btree_cache.c')
-rw-r--r-- | libbcache/btree_cache.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/libbcache/btree_cache.c b/libbcache/btree_cache.c index 09941906..ca6064af 100644 --- a/libbcache/btree_cache.c +++ b/libbcache/btree_cache.c @@ -149,7 +149,8 @@ static int mca_reap_notrace(struct cache_set *c, struct btree *b, bool flush) if (!six_trylock_write(&b->lock)) goto out_unlock_intent; - if (btree_node_write_error(b)) + if (btree_node_write_error(b) || + btree_node_noevict(b)) goto out_unlock; if (!list_empty(&b->write_blocked)) @@ -699,3 +700,56 @@ retry: return b; } + +int bch_print_btree_node(struct cache_set *c, struct btree *b, + char *buf, size_t len) +{ + const struct bkey_format *f = &b->format; + struct bset_stats stats; + char ptrs[100]; + + memset(&stats, 0, sizeof(stats)); + + bch_val_to_text(c, BKEY_TYPE_BTREE, ptrs, sizeof(ptrs), + bkey_i_to_s_c(&b->key)); + bch_btree_keys_stats(b, &stats); + + return scnprintf(buf, len, + "l %u %llu:%llu - %llu:%llu:\n" + " ptrs: %s\n" + " format: u64s %u fields %u %u %u %u %u\n" + " unpack fn len: %u\n" + " bytes used %zu/%zu (%zu%% full)\n" + " sib u64s: %u, %u (merge threshold %zu)\n" + " nr packed keys %u\n" + " nr unpacked keys %u\n" + " floats %zu\n" + " failed unpacked %zu\n" + " failed prev %zu\n" + " failed overflow %zu\n", + b->level, + b->data->min_key.inode, + b->data->min_key.offset, + b->data->max_key.inode, + b->data->max_key.offset, + ptrs, + f->key_u64s, + f->bits_per_field[0], + f->bits_per_field[1], + f->bits_per_field[2], + f->bits_per_field[3], + f->bits_per_field[4], + b->unpack_fn_len, + b->nr.live_u64s * sizeof(u64), + btree_bytes(c) - sizeof(struct btree_node), + b->nr.live_u64s * 100 / btree_max_u64s(c), + b->sib_u64s[0], + b->sib_u64s[1], + BTREE_FOREGROUND_MERGE_THRESHOLD(c), + b->nr.packed_keys, + b->nr.unpacked_keys, + stats.floats, + stats.failed_unpacked, + stats.failed_prev, + stats.failed_overflow); +} |