Lines Matching full:k
71 static inline void accounting_key_init(struct bkey_i *k, struct disk_accounting_pos *pos, in accounting_key_init() argument
74 struct bkey_i_accounting *acc = bkey_accounting_init(k); in accounting_key_init()
76 acc->k.p = disk_accounting_pos_to_bpos(pos); in accounting_key_init()
77 set_bkey_val_u64s(&acc->k, sizeof(struct bch_accounting) / sizeof(u64) + nr); in accounting_key_init()
85 struct disk_accounting_pos *k, in bch2_disk_accounting_mod() argument
89 switch (k->type) { in bch2_disk_accounting_mod()
91 bubble_sort(k->replicas.devs, k->replicas.nr_devs, u8_cmp); in bch2_disk_accounting_mod()
97 struct { __BKEY_PADDED(k, BCH_ACCOUNTING_MAX_COUNTERS); } k_i; in bch2_disk_accounting_mod()
99 accounting_key_init(&k_i.k, k, d, nr); in bch2_disk_accounting_mod()
102 int ret = bch2_accounting_mem_add(trans, bkey_i_to_s_c_accounting(&k_i.k), true); in bch2_disk_accounting_mod()
105 bch2_accounting_update_sb_one(trans->c, disk_accounting_pos_to_bpos(k))) ?: in bch2_disk_accounting_mod()
106 bch2_accounting_mem_add(trans, bkey_i_to_s_c_accounting(&k_i.k), true); in bch2_disk_accounting_mod()
109 return bch2_trans_update_buffered(trans, BTREE_ID_accounting, &k_i.k); in bch2_disk_accounting_mod()
138 int bch2_accounting_validate(struct bch_fs *c, struct bkey_s_c k, in bch2_accounting_validate() argument
142 bpos_to_disk_accounting_pos(&acc_k, k.k->p); in bch2_accounting_validate()
147 bversion_zero(k.k->bversion), in bch2_accounting_validate()
200 void bch2_accounting_key_to_text(struct printbuf *out, struct disk_accounting_pos *k) in bch2_accounting_key_to_text() argument
202 if (k->type >= BCH_DISK_ACCOUNTING_TYPE_NR) { in bch2_accounting_key_to_text()
203 prt_printf(out, "unknown type %u", k->type); in bch2_accounting_key_to_text()
207 prt_str(out, disk_accounting_type_strs[k->type]); in bch2_accounting_key_to_text()
210 switch (k->type) { in bch2_accounting_key_to_text()
214 prt_printf(out, "replicas=%u", k->persistent_reserved.nr_replicas); in bch2_accounting_key_to_text()
217 bch2_replicas_entry_to_text(out, &k->replicas); in bch2_accounting_key_to_text()
220 prt_printf(out, "dev=%u data_type=", k->dev_data_type.dev); in bch2_accounting_key_to_text()
221 bch2_prt_data_type(out, k->dev_data_type.data_type); in bch2_accounting_key_to_text()
224 bch2_prt_compression_type(out, k->compression.type); in bch2_accounting_key_to_text()
227 prt_printf(out, "id=%u", k->snapshot.id); in bch2_accounting_key_to_text()
231 bch2_btree_id_to_text(out, k->btree.id); in bch2_accounting_key_to_text()
236 void bch2_accounting_to_text(struct printbuf *out, struct bch_fs *c, struct bkey_s_c k) in bch2_accounting_to_text() argument
238 struct bkey_s_c_accounting acc = bkey_s_c_to_accounting(k); in bch2_accounting_to_text()
240 bpos_to_disk_accounting_pos(&acc_k, k.k->p); in bch2_accounting_to_text()
244 for (unsigned i = 0; i < bch2_accounting_counters(k.k); i++) in bch2_accounting_to_text()
248 void bch2_accounting_swab(struct bkey_s k) in bch2_accounting_swab() argument
250 for (u64 *p = (u64 *) k.v; in bch2_accounting_swab()
251 p < (u64 *) bkey_val_end(k); in bch2_accounting_swab()
295 if (jset_entry_is_key(i) && i->start->k.type == KEY_TYPE_accounting) { in bch2_accounting_update_sb()
296 int ret = bch2_accounting_update_sb_one(trans->c, i->start->k.p); in bch2_accounting_update_sb()
309 if (eytzinger0_find(acc->k.data, acc->k.nr, sizeof(acc->k.data[0]), in __bch2_accounting_mem_insert()
310 accounting_pos_cmp, &a.k->p) < acc->k.nr) in __bch2_accounting_mem_insert()
314 .pos = a.k->p, in __bch2_accounting_mem_insert()
315 .bversion = a.k->bversion, in __bch2_accounting_mem_insert()
316 .nr_counters = bch2_accounting_counters(a.k), in __bch2_accounting_mem_insert()
331 if (darray_push(&acc->k, n)) in __bch2_accounting_mem_insert()
334 eytzinger0_sort(acc->k.data, acc->k.nr, sizeof(acc->k.data[0]), in __bch2_accounting_mem_insert()
357 accounting_to_replicas(&r.e, a.k->p) && in bch2_accounting_mem_insert()
384 struct accounting_mem_entry *dst = acc->k.data; in bch2_accounting_mem_gc()
386 darray_for_each(acc->k, src) { in bch2_accounting_mem_gc()
395 acc->k.nr = dst - acc->k.data; in bch2_accounting_mem_gc()
396 eytzinger0_sort(acc->k.data, acc->k.nr, sizeof(acc->k.data[0]), in bch2_accounting_mem_gc()
417 darray_for_each(acc->k, i) { in bch2_fs_replicas_usage_read()
427 bch2_accounting_mem_read_counters(acc, i - acc->k.data, §ors, 1, false); in bch2_fs_replicas_usage_read()
453 darray_for_each(acc->k, i) { in bch2_fs_accounting_read()
467 set_bkey_val_u64s(&a_out->k, i->nr_counters); in bch2_fs_accounting_read()
468 a_out->k.p = i->pos; in bch2_fs_accounting_read()
469 bch2_accounting_mem_read_counters(acc, i - acc->k.data, in bch2_fs_accounting_read()
473 out_buf->nr += bkey_bytes(&a_out->k); in bch2_fs_accounting_read()
485 darray_for_each(acc->k, e) { in bch2_accounting_free_counters()
497 darray_for_each(acc->k, e) { in bch2_gc_accounting_start()
523 unsigned idx = eytzinger0_find_ge(acc->k.data, acc->k.nr, sizeof(acc->k.data[0]), in bch2_gc_accounting_done()
526 if (idx >= acc->k.nr) in bch2_gc_accounting_done()
529 struct accounting_mem_entry *e = acc->k.data + idx; in bch2_gc_accounting_done()
571 struct { __BKEY_PADDED(k, BCH_ACCOUNTING_MAX_COUNTERS); } k_i; in bch2_gc_accounting_done()
573 accounting_key_init(&k_i.k, &acc_k, src_v, nr); in bch2_gc_accounting_done()
575 bkey_i_to_s_c_accounting(&k_i.k), in bch2_gc_accounting_done()
596 static int accounting_read_key(struct btree_trans *trans, struct bkey_s_c k) in accounting_read_key() argument
600 if (k.k->type != KEY_TYPE_accounting) in accounting_read_key()
604 int ret = bch2_accounting_mem_mod_locked(trans, bkey_s_c_to_accounting(k), in accounting_read_key()
703 darray_for_each(acc->k, e) in bch2_accounting_read()
715 BTREE_ITER_prefetch|BTREE_ITER_all_snapshots, k, ({ in bch2_accounting_read()
717 struct bkey_s_c k = bch2_btree_path_peek_slot_exact(btree_iter_path(trans, &iter), &u); in bch2_accounting_read()
719 if (k.k->type != KEY_TYPE_accounting) in bch2_accounting_read()
723 bpos_to_disk_accounting_pos(&acc_k, k.k->p); in bch2_accounting_read()
734 accounting_read_key(trans, k); in bch2_accounting_read()
744 if (i->k->k.type == KEY_TYPE_accounting) { in bch2_accounting_read()
746 bpos_to_disk_accounting_pos(&acc_k, i->k->k.p); in bch2_accounting_read()
751 struct bkey_s_c k = bkey_i_to_s_c(i->k); in bch2_accounting_read() local
752 unsigned idx = eytzinger0_find(acc->k.data, acc->k.nr, in bch2_accounting_read()
753 sizeof(acc->k.data[0]), in bch2_accounting_read()
754 accounting_pos_cmp, &k.k->p); in bch2_accounting_read()
756 bool applied = idx < acc->k.nr && in bch2_accounting_read()
757 bversion_cmp(acc->k.data[idx].bversion, k.k->bversion) >= 0; in bch2_accounting_read()
763 i[1].k->k.type == KEY_TYPE_accounting && in bch2_accounting_read()
765 WARN_ON(bversion_cmp(i[0].k->k.bversion, i[1].k->k.bversion) >= 0); in bch2_accounting_read()
769 bch2_accounting_accumulate(bkey_i_to_accounting(i[1].k), in bch2_accounting_read()
770 bkey_s_c_to_accounting(k)); in bch2_accounting_read()
774 ret = accounting_read_key(trans, k); in bch2_accounting_read()
785 darray_for_each_reverse(acc->k, i) { in bch2_accounting_read()
809 darray_remove_item(&acc->k, i); in bch2_accounting_read()
818 eytzinger0_sort(acc->k.data, acc->k.nr, sizeof(acc->k.data[0]), in bch2_accounting_read()
824 for (unsigned i = 0; i < acc->k.nr; i++) { in bch2_accounting_read()
825 struct disk_accounting_pos k; in bch2_accounting_read() local
826 bpos_to_disk_accounting_pos(&k, acc->k.data[i].pos); in bch2_accounting_read()
831 switch (k.type) { in bch2_accounting_read()
833 usage->reserved += v[0] * k.persistent_reserved.nr_replicas; in bch2_accounting_read()
836 fs_usage_data_type_to_base(usage, k.replicas.data_type, v[0]); in bch2_accounting_read()
840 struct bch_dev *ca = bch2_dev_rcu_noerror(c, k.dev_data_type.dev); in bch2_accounting_read()
842 struct bch_dev_usage_type __percpu *d = &ca->usage->d[k.dev_data_type.data_type]; in bch2_accounting_read()
847 if (k.dev_data_type.data_type == BCH_DATA_sb || in bch2_accounting_read()
848 k.dev_data_type.data_type == BCH_DATA_journal) in bch2_accounting_read()
870 BTREE_ITER_all_snapshots, k, NULL, NULL, 0, ({ in bch2_dev_usage_remove()
872 bpos_to_disk_accounting_pos(&acc, k.k->p); in bch2_dev_usage_remove()
876 ? bch2_btree_bit_mod_buffered(trans, BTREE_ID_accounting, k.k->p, 0) in bch2_dev_usage_remove()
908 BTREE_ITER_all_snapshots, k, ({ in bch2_verify_accounting_clean()
910 struct bkey_s_c_accounting a = bkey_s_c_to_accounting(k); in bch2_verify_accounting_clean()
911 unsigned nr = bch2_accounting_counters(k.k); in bch2_verify_accounting_clean()
914 bpos_to_disk_accounting_pos(&acc_k, k.k->p); in bch2_verify_accounting_clean()
925 bch2_accounting_mem_read(c, k.k->p, v, nr); in bch2_verify_accounting_clean()
930 bch2_bkey_val_to_text(&buf, c, k); in bch2_verify_accounting_clean()
963 bch2_bkey_val_to_text(&buf, c, k); in bch2_verify_accounting_clean()
1011 darray_exit(&acc->k); in bch2_fs_accounting_exit()