bch2_mark_alloc_bucket(c, ca, PTR_BUCKET_NR(ca, &ob->ptr),
                               false, gc_pos_alloc(c, ob), 0);
        ob->valid = false;
+       ob->type = 0;
 
        spin_unlock(&ob->lock);
        percpu_up_read(&c->mark_lock);
        ob = c->open_buckets + c->open_buckets_freelist;
        c->open_buckets_freelist = ob->freelist;
        atomic_set(&ob->pin, 1);
+       ob->type = 0;
 
        c->open_buckets_nr_free--;
        return ob;
        case RESERVE_ALLOC:
                return 0;
        case RESERVE_BTREE:
-               return BTREE_NODE_RESERVE / 2;
+               return BTREE_NODE_OPEN_BUCKET_RESERVE;
        default:
-               return BTREE_NODE_RESERVE;
+               return BTREE_NODE_OPEN_BUCKET_RESERVE * 2;
        }
 }
 
 
 {
        struct bch_fs *c = ca->fs;
        struct bch_dev_usage stats = bch2_dev_usage_read(c, ca);
+       unsigned i, nr[BCH_DATA_NR];
+
+       memset(nr, 0, sizeof(nr));
+
+       for (i = 0; i < ARRAY_SIZE(c->open_buckets); i++)
+               nr[c->open_buckets[i].type]++;
 
        return scnprintf(buf, PAGE_SIZE,
                "free_inc:               %zu/%zu\n"
                "    copygc threshold:   %llu\n"
                "freelist_wait:          %s\n"
                "open buckets:           %u/%u (reserved %u)\n"
-               "open_buckets_wait:      %s\n",
+               "open_buckets_wait:      %s\n"
+               "open_buckets_btree:     %u\n"
+               "open_buckets_user:      %u\n"
+               "btree reserve cache:    %u\n",
                fifo_used(&ca->free_inc),               ca->free_inc.size,
                fifo_used(&ca->free[RESERVE_BTREE]),    ca->free[RESERVE_BTREE].size,
                fifo_used(&ca->free[RESERVE_MOVINGGC]), ca->free[RESERVE_MOVINGGC].size,
                stats.sectors_fragmented,
                ca->copygc_threshold,
                c->freelist_wait.list.first             ? "waiting" : "empty",
-               c->open_buckets_nr_free, OPEN_BUCKETS_COUNT, BTREE_NODE_RESERVE,
-               c->open_buckets_wait.list.first         ? "waiting" : "empty");
+               c->open_buckets_nr_free, OPEN_BUCKETS_COUNT,
+               BTREE_NODE_OPEN_BUCKET_RESERVE,
+               c->open_buckets_wait.list.first         ? "waiting" : "empty",
+               nr[BCH_DATA_BTREE],
+               nr[BCH_DATA_USER],
+               c->btree_reserve_cache_nr);
 }
 
 static const char * const bch2_rw[] = {