Lines Matching refs:bc

104 static inline void bkey_cached_free_noassert(struct btree_key_cache *bc,  in bkey_cached_free_noassert()  argument
115 rcu_pending_enqueue(&bc->pending[pcpu_readers], &ck->rcu); in bkey_cached_free_noassert()
116 this_cpu_inc(*bc->nr_pending); in bkey_cached_free_noassert()
120 struct btree_key_cache *bc, in bkey_cached_free() argument
129 bkey_cached_free_noassert(bc, ck); in bkey_cached_free()
152 struct btree_key_cache *bc = &c->btree_key_cache; in bkey_cached_alloc() local
157 rcu_pending_dequeue(&bc->pending[pcpu_readers]), in bkey_cached_alloc()
177 ck = container_of_or_null(rcu_pending_dequeue_from_all(&bc->pending[pcpu_readers]), in bkey_cached_alloc()
215 struct btree_key_cache *bc = &c->btree_key_cache; in btree_key_cache_create() local
237 ck = bkey_cached_reuse(bc); in btree_key_cache_create()
276 ret = rhashtable_lookup_insert_fast(&bc->table, &ck->hash, bch2_btree_key_cache_params); in btree_key_cache_create()
283 atomic_long_inc(&bc->nr_keys); in btree_key_cache_create()
293 bkey_cached_free(trans, bc, ck); in btree_key_cache_create()
623 struct btree_key_cache *bc = &c->btree_key_cache; in bch2_btree_key_cache_drop() local
636 bkey_cached_evict(bc, ck); in bch2_btree_key_cache_drop()
637 bkey_cached_free(trans, bc, ck); in bch2_btree_key_cache_drop()
665 struct btree_key_cache *bc = &c->btree_key_cache; in bch2_btree_key_cache_scan() local
675 tbl = rht_dereference_rcu(bc->table.tbl, &bc->table); in bch2_btree_key_cache_scan()
690 iter = bc->shrink_iter; in bch2_btree_key_cache_scan()
705 bc->skipped_dirty++; in bch2_btree_key_cache_scan()
708 bc->skipped_accessed++; in bch2_btree_key_cache_scan()
710 bc->skipped_lock_fail++; in bch2_btree_key_cache_scan()
711 } else if (bkey_cached_evict(bc, ck)) { in bch2_btree_key_cache_scan()
712 bkey_cached_free_noassert(bc, ck); in bch2_btree_key_cache_scan()
713 bc->freed++; in bch2_btree_key_cache_scan()
732 bc->shrink_iter = iter; in bch2_btree_key_cache_scan()
744 struct btree_key_cache *bc = &c->btree_key_cache; in bch2_btree_key_cache_count() local
745 long nr = atomic_long_read(&bc->nr_keys) - in bch2_btree_key_cache_count()
746 atomic_long_read(&bc->nr_dirty); in bch2_btree_key_cache_count()
759 void bch2_fs_btree_key_cache_exit(struct btree_key_cache *bc) in bch2_fs_btree_key_cache_exit() argument
761 struct bch_fs *c = container_of(bc, struct bch_fs, btree_key_cache); in bch2_fs_btree_key_cache_exit()
768 shrinker_free(bc->shrink); in bch2_fs_btree_key_cache_exit()
773 while (atomic_long_read(&bc->nr_keys)) { in bch2_fs_btree_key_cache_exit()
775 tbl = rht_dereference_rcu(bc->table.tbl, &bc->table); in bch2_fs_btree_key_cache_exit()
780 mutex_lock(&bc->table.mutex); in bch2_fs_btree_key_cache_exit()
781 mutex_unlock(&bc->table.mutex); in bch2_fs_btree_key_cache_exit()
787 BUG_ON(!bkey_cached_evict(bc, ck)); in bch2_fs_btree_key_cache_exit()
795 if (atomic_long_read(&bc->nr_dirty) && in bch2_fs_btree_key_cache_exit()
799 atomic_long_read(&bc->nr_dirty)); in bch2_fs_btree_key_cache_exit()
801 if (atomic_long_read(&bc->nr_keys)) in bch2_fs_btree_key_cache_exit()
803 atomic_long_read(&bc->nr_keys)); in bch2_fs_btree_key_cache_exit()
805 if (bc->table_init_done) in bch2_fs_btree_key_cache_exit()
806 rhashtable_destroy(&bc->table); in bch2_fs_btree_key_cache_exit()
808 rcu_pending_exit(&bc->pending[0]); in bch2_fs_btree_key_cache_exit()
809 rcu_pending_exit(&bc->pending[1]); in bch2_fs_btree_key_cache_exit()
811 free_percpu(bc->nr_pending); in bch2_fs_btree_key_cache_exit()
818 int bch2_fs_btree_key_cache_init(struct btree_key_cache *bc) in bch2_fs_btree_key_cache_init() argument
820 struct bch_fs *c = container_of(bc, struct bch_fs, btree_key_cache); in bch2_fs_btree_key_cache_init()
823 bc->nr_pending = alloc_percpu(size_t); in bch2_fs_btree_key_cache_init()
824 if (!bc->nr_pending) in bch2_fs_btree_key_cache_init()
827 if (rcu_pending_init(&bc->pending[0], &c->btree_trans_barrier, __bkey_cached_free) || in bch2_fs_btree_key_cache_init()
828 rcu_pending_init(&bc->pending[1], &c->btree_trans_barrier, __bkey_cached_free)) in bch2_fs_btree_key_cache_init()
831 if (rhashtable_init(&bc->table, &bch2_btree_key_cache_params)) in bch2_fs_btree_key_cache_init()
834 bc->table_init_done = true; in bch2_fs_btree_key_cache_init()
839 bc->shrink = shrink; in bch2_fs_btree_key_cache_init()
849 void bch2_btree_key_cache_to_text(struct printbuf *out, struct btree_key_cache *bc) in bch2_btree_key_cache_to_text() argument
854 prt_printf(out, "keys:\t%lu\r\n", atomic_long_read(&bc->nr_keys)); in bch2_btree_key_cache_to_text()
855 prt_printf(out, "dirty:\t%lu\r\n", atomic_long_read(&bc->nr_dirty)); in bch2_btree_key_cache_to_text()
856 prt_printf(out, "table size:\t%u\r\n", bc->table.tbl->size); in bch2_btree_key_cache_to_text()
859 prt_printf(out, "requested_to_free:\t%lu\r\n", bc->requested_to_free); in bch2_btree_key_cache_to_text()
860 prt_printf(out, "freed:\t%lu\r\n", bc->freed); in bch2_btree_key_cache_to_text()
861 prt_printf(out, "skipped_dirty:\t%lu\r\n", bc->skipped_dirty); in bch2_btree_key_cache_to_text()
862 prt_printf(out, "skipped_accessed:\t%lu\r\n", bc->skipped_accessed); in bch2_btree_key_cache_to_text()
863 prt_printf(out, "skipped_lock_fail:\t%lu\r\n", bc->skipped_lock_fail); in bch2_btree_key_cache_to_text()
865 prt_printf(out, "pending:\t%zu\r\n", per_cpu_sum(bc->nr_pending)); in bch2_btree_key_cache_to_text()