Lines Matching full:k
18 static inline bool bkey_extent_is_reflink_data(const struct bkey *k) in bkey_extent_is_reflink_data() argument
20 switch (k->type) { in bkey_extent_is_reflink_data()
29 static inline unsigned bkey_type_to_indirect(const struct bkey *k) in bkey_type_to_indirect() argument
31 switch (k->type) { in bkey_type_to_indirect()
43 int bch2_reflink_p_validate(struct bch_fs *c, struct bkey_s_c k, in bch2_reflink_p_validate() argument
46 struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k); in bch2_reflink_p_validate()
58 struct bkey_s_c k) in bch2_reflink_p_to_text() argument
60 struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k); in bch2_reflink_p_to_text()
79 if (REFLINK_P_IDX(l.v) + l.k->size != REFLINK_P_IDX(r.v)) in bch2_reflink_p_merge()
85 bch2_key_resize(l.k, l.k->size + r.k->size); in bch2_reflink_p_merge()
91 int bch2_reflink_v_validate(struct bch_fs *c, struct bkey_s_c k, in bch2_reflink_v_validate() argument
96 bkey_fsck_err_on(bkey_gt(k.k->p, POS(0, REFLINK_P_IDX_MAX)), in bch2_reflink_v_validate()
101 ret = bch2_bkey_ptrs_validate(c, k, from); in bch2_reflink_v_validate()
107 struct bkey_s_c k) in bch2_reflink_v_to_text() argument
109 struct bkey_s_c_reflink_v r = bkey_s_c_to_reflink_v(k); in bch2_reflink_v_to_text()
113 bch2_bkey_ptrs_to_text(out, c, k); in bch2_reflink_v_to_text()
130 int bch2_indirect_inline_data_validate(struct bch_fs *c, struct bkey_s_c k, in bch2_indirect_inline_data_validate() argument
137 struct bch_fs *c, struct bkey_s_c k) in bch2_indirect_inline_data_to_text() argument
139 struct bkey_s_c_indirect_inline_data d = bkey_s_c_to_indirect_inline_data(k); in bch2_indirect_inline_data_to_text()
140 unsigned datalen = bkey_inline_data_bytes(k.k); in bch2_indirect_inline_data_to_text()
179 u64 live_end = REFLINK_P_IDX(p.v) + p.k->size; in bch2_indirect_extent_missing_error()
212 struct bpos new_start = bkey_start_pos(&new->k); in bch2_indirect_extent_missing_error()
213 struct bpos new_end = new->k.p; in bch2_indirect_extent_missing_error()
252 BUG_ON(*offset_into_extent >= p.k->size + le32_to_cpu(p.v->back_pad)); in bch2_lookup_indirect_extent()
256 struct bkey_s_c k = bch2_bkey_get_iter(trans, iter, BTREE_ID_reflink, in bch2_lookup_indirect_extent() local
258 if (bkey_err(k)) in bch2_lookup_indirect_extent()
259 return k; in bch2_lookup_indirect_extent()
261 if (unlikely(!bkey_extent_is_reflink_data(k.k))) { in bch2_lookup_indirect_extent()
262 unsigned size = min((u64) k.k->size, in bch2_lookup_indirect_extent()
263 REFLINK_P_IDX(p.v) + p.k->size + le32_to_cpu(p.v->back_pad) - in bch2_lookup_indirect_extent()
265 bch2_key_resize(&iter->k, size); in bch2_lookup_indirect_extent()
268 k.k->p.offset, should_commit); in bch2_lookup_indirect_extent()
281 *offset_into_extent = reflink_offset - bkey_start_offset(k.k); in bch2_lookup_indirect_extent()
282 return k; in bch2_lookup_indirect_extent()
296 struct bkey_s_c k = bch2_lookup_indirect_extent(trans, &iter, &offset_into_extent, p, false, in trans_trigger_reflink_p_segment() local
299 int ret = bkey_err(k); in trans_trigger_reflink_p_segment()
303 if (!bkey_refcount_c(k)) { in trans_trigger_reflink_p_segment()
309 struct bkey_i *new = bch2_bkey_make_mut_noupdate(trans, k); in trans_trigger_reflink_p_segment()
318 bch2_bkey_val_to_text(&buf, c, k); in trans_trigger_reflink_p_segment()
330 REFLINK_P_IDX(v) - bkey_start_offset(&new->k)); in trans_trigger_reflink_p_segment()
335 new->k.p.offset - p.k->size - REFLINK_P_IDX(v)); in trans_trigger_reflink_p_segment()
347 *idx = k.k->p.offset; in trans_trigger_reflink_p_segment()
363 u64 next_idx = REFLINK_P_IDX(p.v) + p.k->size + le32_to_cpu(p.v->back_pad); in gc_trigger_reflink_p_segment()
395 enum btree_id btree_id, unsigned level, struct bkey_s_c k, in __trigger_reflink_p() argument
399 struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k); in __trigger_reflink_p()
403 u64 end = REFLINK_P_IDX(p.v) + p.k->size + le32_to_cpu(p.v->back_pad); in __trigger_reflink_p()
452 new.k->type = KEY_TYPE_deleted; in check_indirect_extent_deleting()
453 new.k->size = 0; in check_indirect_extent_deleting()
454 set_bkey_val_u64s(new.k, 0); in check_indirect_extent_deleting()
490 struct bkey_s_c k; in bch2_make_extent_indirect() local
496 if (orig->k.type == KEY_TYPE_inline_data) in bch2_make_extent_indirect()
501 k = bch2_btree_iter_peek_prev(&reflink_iter); in bch2_make_extent_indirect()
502 ret = bkey_err(k); in bch2_make_extent_indirect()
511 if (bkey_ge(reflink_iter.pos, POS(0, REFLINK_P_IDX_MAX - orig->k.size))) in bch2_make_extent_indirect()
514 r_v = bch2_trans_kmalloc(trans, sizeof(__le64) + bkey_bytes(&orig->k)); in bch2_make_extent_indirect()
519 bkey_init(&r_v->k); in bch2_make_extent_indirect()
520 r_v->k.type = bkey_type_to_indirect(&orig->k); in bch2_make_extent_indirect()
521 r_v->k.p = reflink_iter.pos; in bch2_make_extent_indirect()
522 bch2_key_resize(&r_v->k, orig->k.size); in bch2_make_extent_indirect()
523 r_v->k.bversion = orig->k.bversion; in bch2_make_extent_indirect()
525 set_bkey_val_bytes(&r_v->k, sizeof(__le64) + bkey_val_bytes(&orig->k)); in bch2_make_extent_indirect()
529 memcpy(refcount + 1, &orig->v, bkey_val_bytes(&orig->k)); in bch2_make_extent_indirect()
539 orig->k.type = KEY_TYPE_reflink_p; in bch2_make_extent_indirect()
541 set_bkey_val_bytes(&r_p->k, sizeof(r_p->v)); in bch2_make_extent_indirect()
550 SET_REFLINK_P_IDX(&r_p->v, bkey_start_offset(&r_v->k)); in bch2_make_extent_indirect()
565 struct bkey_s_c k; in get_next_src() local
568 for_each_btree_key_max_continue_norestart(*iter, end, 0, k, ret) { in get_next_src()
569 if (bkey_extent_is_unwritten(k)) in get_next_src()
572 if (bkey_extent_is_data(k.k)) in get_next_src()
573 return k; in get_next_src()
675 if (src_k.k->type != KEY_TYPE_reflink_p) { in bch2_remap_range()
679 src_k = bkey_i_to_s_c(new_src.k); in bch2_remap_range()
682 new_src.k, in bch2_remap_range()
687 BUG_ON(src_k.k->type != KEY_TYPE_reflink_p); in bch2_remap_range()
690 if (src_k.k->type == KEY_TYPE_reflink_p) { in bch2_remap_range()
694 bkey_reflink_p_init(new_dst.k); in bch2_remap_range()
698 bkey_start_offset(src_k.k)); in bch2_remap_range()
709 new_dst.k->k.p = dst_iter.pos; in bch2_remap_range()
710 bch2_key_resize(&new_dst.k->k, in bch2_remap_range()
711 min(src_k.k->p.offset - src_want.offset, in bch2_remap_range()
714 ret = bch2_bkey_set_needs_rebalance(c, &opts, new_dst.k) ?: in bch2_remap_range()
716 new_dst.k, &disk_res, in bch2_remap_range()
763 struct bkey_s_c k, in bch2_gc_write_reflink_key() argument
767 const __le64 *refcount = bkey_refcount_c(k); in bch2_gc_write_reflink_key()
776 r->offset < k.k->p.offset) in bch2_gc_write_reflink_key()
780 r->offset != k.k->p.offset || in bch2_gc_write_reflink_key()
781 r->size != k.k->size) { in bch2_gc_write_reflink_key()
791 (bch2_bkey_val_to_text(&buf, c, k), buf.buf), in bch2_gc_write_reflink_key()
793 struct bkey_i *new = bch2_bkey_make_mut_noupdate(trans, k); in bch2_gc_write_reflink_key()
799 new->k.type = KEY_TYPE_deleted; in bch2_gc_write_reflink_key()
817 BTREE_ITER_prefetch, k, in bch2_gc_reflink_done()
819 bch2_gc_write_reflink_key(trans, &iter, k, &idx))); in bch2_gc_reflink_done()
830 BTREE_ITER_prefetch, k, ({ in bch2_gc_reflink_start()
831 const __le64 *refcount = bkey_refcount_c(k); in bch2_gc_reflink_start()
843 r->offset = k.k->p.offset; in bch2_gc_reflink_start()
844 r->size = k.k->size; in bch2_gc_reflink_start()