Commit 2e655e6d authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Add open_buckets to sysfs

This is to help debug a rare shutdown deadlock in the allocator code -
the btree code is leaking open_buckets.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent 003e738d
...@@ -1232,3 +1232,22 @@ void bch2_fs_allocator_background_init(struct bch_fs *c) ...@@ -1232,3 +1232,22 @@ void bch2_fs_allocator_background_init(struct bch_fs *c)
{ {
spin_lock_init(&c->freelist_lock); spin_lock_init(&c->freelist_lock);
} }
void bch2_open_buckets_to_text(struct printbuf *out, struct bch_fs *c)
{
struct open_bucket *ob;
for (ob = c->open_buckets;
ob < c->open_buckets + ARRAY_SIZE(c->open_buckets);
ob++) {
spin_lock(&ob->lock);
if (ob->valid && !ob->on_partial_list) {
pr_buf(out, "%zu ref %u type %s\n",
ob - c->open_buckets,
atomic_read(&ob->pin),
bch2_data_types[ob->type]);
}
spin_unlock(&ob->lock);
}
}
...@@ -132,4 +132,6 @@ int bch2_dev_allocator_start(struct bch_dev *); ...@@ -132,4 +132,6 @@ int bch2_dev_allocator_start(struct bch_dev *);
int bch2_alloc_write(struct bch_fs *, unsigned); int bch2_alloc_write(struct bch_fs *, unsigned);
void bch2_fs_allocator_background_init(struct bch_fs *); void bch2_fs_allocator_background_init(struct bch_fs *);
void bch2_open_buckets_to_text(struct printbuf *, struct bch_fs *);
#endif /* _BCACHEFS_ALLOC_BACKGROUND_H */ #endif /* _BCACHEFS_ALLOC_BACKGROUND_H */
...@@ -171,6 +171,7 @@ read_attribute(btree_cache); ...@@ -171,6 +171,7 @@ read_attribute(btree_cache);
read_attribute(btree_key_cache); read_attribute(btree_key_cache);
read_attribute(btree_transactions); read_attribute(btree_transactions);
read_attribute(stripes_heap); read_attribute(stripes_heap);
read_attribute(open_buckets);
read_attribute(internal_uuid); read_attribute(internal_uuid);
...@@ -409,6 +410,11 @@ SHOW(bch2_fs) ...@@ -409,6 +410,11 @@ SHOW(bch2_fs)
return out.pos - buf; return out.pos - buf;
} }
if (attr == &sysfs_open_buckets) {
bch2_open_buckets_to_text(&out, c);
return out.pos - buf;
}
if (attr == &sysfs_compression_stats) { if (attr == &sysfs_compression_stats) {
bch2_compression_stats_to_text(&out, c); bch2_compression_stats_to_text(&out, c);
return out.pos - buf; return out.pos - buf;
...@@ -567,6 +573,7 @@ struct attribute *bch2_fs_internal_files[] = { ...@@ -567,6 +573,7 @@ struct attribute *bch2_fs_internal_files[] = {
&sysfs_btree_key_cache, &sysfs_btree_key_cache,
&sysfs_btree_transactions, &sysfs_btree_transactions,
&sysfs_stripes_heap, &sysfs_stripes_heap,
&sysfs_open_buckets,
&sysfs_read_realloc_races, &sysfs_read_realloc_races,
&sysfs_extent_migrate_done, &sysfs_extent_migrate_done,
......
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