Lines Matching full:k
23 bpos_cmp(l->k->k.p, r->k->k.p); in btree_insert_entry_cmp()
33 struct bkey_s_c k, in extent_front_merge() argument
41 update = bch2_bkey_make_mut_noupdate(trans, k); in extent_front_merge()
49 ret = bch2_key_has_snapshot_overwrites(trans, iter->btree_id, k.k->p) ?: in extent_front_merge()
50 bch2_key_has_snapshot_overwrites(trans, iter->btree_id, (*insert)->k.p); in extent_front_merge()
67 struct bkey_s_c k) in extent_back_merge() argument
72 ret = bch2_key_has_snapshot_overwrites(trans, iter->btree_id, insert->k.p) ?: in extent_back_merge()
73 bch2_key_has_snapshot_overwrites(trans, iter->btree_id, k.k->p); in extent_back_merge()
79 bch2_bkey_merge(c, bkey_i_to_s(insert), k); in extent_back_merge()
91 struct bkey_s_c k; in need_whiteout_for_snapshot() local
102 BTREE_ITER_NOPRESERVE, k, ret) { in need_whiteout_for_snapshot()
103 if (!bkey_eq(k.k->p, pos)) in need_whiteout_for_snapshot()
107 k.k->p.snapshot)) { in need_whiteout_for_snapshot()
108 ret = !bkey_whiteout(k.k); in need_whiteout_for_snapshot()
137 while ((old_k = bch2_btree_iter_prev(&old_iter)).k && in __bch2_insert_snapshot_whiteouts()
139 bkey_eq(old_pos, old_k.k->p)) { in __bch2_insert_snapshot_whiteouts()
141 SPOS(new_pos.inode, new_pos.offset, old_k.k->p.snapshot);; in __bch2_insert_snapshot_whiteouts()
143 if (!bch2_snapshot_is_ancestor(c, old_k.k->p.snapshot, old_pos.snapshot) || in __bch2_insert_snapshot_whiteouts()
144 snapshot_list_has_ancestor(c, &s, old_k.k->p.snapshot)) in __bch2_insert_snapshot_whiteouts()
154 if (new_k.k->type == KEY_TYPE_deleted) { in __bch2_insert_snapshot_whiteouts()
160 bkey_init(&update->k); in __bch2_insert_snapshot_whiteouts()
161 update->k.p = whiteout_pos; in __bch2_insert_snapshot_whiteouts()
162 update->k.type = KEY_TYPE_whiteout; in __bch2_insert_snapshot_whiteouts()
169 ret = snapshot_list_add(c, &s, old_k.k->p.snapshot); in __bch2_insert_snapshot_whiteouts()
188 struct bpos new_start = bkey_start_pos(new.k); in bch2_trans_update_extent_overwrite()
189 unsigned front_split = bkey_lt(bkey_start_pos(old.k), new_start); in bch2_trans_update_extent_overwrite()
190 unsigned back_split = bkey_gt(old.k->p, new.k->p); in bch2_trans_update_extent_overwrite()
192 old.k->p.snapshot != new.k->p.snapshot; in bch2_trans_update_extent_overwrite()
213 old.k->p, update->k.p) ?: in bch2_trans_update_extent_overwrite()
227 bch2_cut_back(new.k->p, update); in bch2_trans_update_extent_overwrite()
230 old.k->p, update->k.p) ?: in bch2_trans_update_extent_overwrite()
237 if (bkey_le(old.k->p, new.k->p)) { in bch2_trans_update_extent_overwrite()
242 bkey_init(&update->k); in bch2_trans_update_extent_overwrite()
243 update->k.p = old.k->p; in bch2_trans_update_extent_overwrite()
244 update->k.p.snapshot = new.k->p.snapshot; in bch2_trans_update_extent_overwrite()
246 if (new.k->p.snapshot != old.k->p.snapshot) { in bch2_trans_update_extent_overwrite()
247 update->k.type = KEY_TYPE_whiteout; in bch2_trans_update_extent_overwrite()
249 ret = need_whiteout_for_snapshot(trans, btree_id, update->k.p); in bch2_trans_update_extent_overwrite()
253 update->k.type = KEY_TYPE_whiteout; in bch2_trans_update_extent_overwrite()
267 bch2_cut_front(new.k->p, update); in bch2_trans_update_extent_overwrite()
285 struct bkey_s_c k; in bch2_trans_update_extent() local
289 bch2_trans_iter_init(trans, &iter, btree_id, bkey_start_pos(&insert->k), in bch2_trans_update_extent()
293 k = bch2_btree_iter_peek_upto(&iter, POS(insert->k.p.inode, U64_MAX)); in bch2_trans_update_extent()
294 if ((ret = bkey_err(k))) in bch2_trans_update_extent()
296 if (!k.k) in bch2_trans_update_extent()
299 if (bkey_eq(k.k->p, bkey_start_pos(&insert->k))) { in bch2_trans_update_extent()
300 if (bch2_bkey_maybe_mergable(k.k, &insert->k)) { in bch2_trans_update_extent()
301 ret = extent_front_merge(trans, &iter, k, &insert, flags); in bch2_trans_update_extent()
309 while (bkey_gt(insert->k.p, bkey_start_pos(k.k))) { in bch2_trans_update_extent()
310 bool done = bkey_lt(insert->k.p, k.k->p); in bch2_trans_update_extent()
312 ret = bch2_trans_update_extent_overwrite(trans, &iter, flags, k, bkey_i_to_s_c(insert)); in bch2_trans_update_extent()
320 k = bch2_btree_iter_peek_upto(&iter, POS(insert->k.p.inode, U64_MAX)); in bch2_trans_update_extent()
321 if ((ret = bkey_err(k))) in bch2_trans_update_extent()
323 if (!k.k) in bch2_trans_update_extent()
327 if (bch2_bkey_maybe_mergable(&insert->k, k.k)) { in bch2_trans_update_extent()
328 ret = extent_back_merge(trans, &iter, insert, k); in bch2_trans_update_extent()
333 if (!bkey_deleted(&insert->k)) in bch2_trans_update_extent()
346 struct bkey k; in flush_new_cached_update() local
364 bch2_btree_path_peek_slot_exact(btree_path, &k); in flush_new_cached_update()
365 if (!bkey_deleted(&k)) in flush_new_cached_update()
372 ret = bch2_trans_update_by_path(trans, path_idx, i->k, flags, ip); in flush_new_cached_update()
380 struct bkey_i *k, enum btree_update_flags flags, in bch2_trans_update_by_path() argument
390 EBUG_ON(!bpos_eq(k->k.p, path->pos)); in bch2_trans_update_by_path()
399 .k = k, in bch2_trans_update_by_path()
425 i->k = n.k; in bch2_trans_update_by_path()
437 bch2_journal_keys_peek_slot(c, n.btree_id, n.level, k->k.p); in bch2_trans_update_by_path()
440 i->old_k = j_k->k; in bch2_trans_update_by_path()
502 struct bkey_i *k, enum btree_update_flags flags) in bch2_trans_update() argument
508 return bch2_trans_update_extent(trans, iter, k, flags); in bch2_trans_update()
510 if (bkey_deleted(&k->k) && in bch2_trans_update()
513 ret = need_whiteout_for_snapshot(trans, iter->btree_id, k->k.p); in bch2_trans_update()
518 k->k.type = KEY_TYPE_whiteout; in bch2_trans_update()
536 return bch2_trans_update_by_path(trans, path_idx, k, flags, _RET_IP_); in bch2_trans_update()
541 struct bkey_i *k) in bch2_btree_insert_clone_trans() argument
543 struct bkey_i *n = bch2_trans_kmalloc(trans, bkey_bytes(&k->k)); in bch2_btree_insert_clone_trans()
548 bkey_copy(n, k); in bch2_btree_insert_clone_trans()
581 struct bkey_s_c k; in bch2_bkey_get_empty_slot() local
585 k = bch2_btree_iter_prev(iter); in bch2_bkey_get_empty_slot()
586 ret = bkey_err(k); in bch2_bkey_get_empty_slot()
591 k = bch2_btree_iter_peek_slot(iter); in bch2_bkey_get_empty_slot()
592 ret = bkey_err(k); in bch2_bkey_get_empty_slot()
596 BUG_ON(k.k->type != KEY_TYPE_deleted); in bch2_bkey_get_empty_slot()
598 if (bkey_gt(k.k->p, end)) { in bch2_bkey_get_empty_slot()
617 enum btree_id btree, struct bkey_i *k, in bch2_btree_insert_nonextent() argument
623 bch2_trans_iter_init(trans, &iter, btree, k->k.p, in bch2_btree_insert_nonextent()
628 bch2_trans_update(trans, &iter, k, flags); in bch2_btree_insert_nonextent()
634 struct bkey_i *k, enum btree_update_flags flags) in bch2_btree_insert_trans() argument
639 bch2_trans_iter_init(trans, &iter, id, bkey_start_pos(&k->k), in bch2_btree_insert_trans()
643 bch2_trans_update(trans, &iter, k, flags); in bch2_btree_insert_trans()
652 * @k: key to insert
659 int bch2_btree_insert(struct bch_fs *c, enum btree_id id, struct bkey_i *k, in bch2_btree_insert() argument
663 bch2_btree_insert_trans(trans, id, k, 0)); in bch2_btree_insert()
669 struct bkey_i *k; in bch2_btree_delete_extent_at() local
671 k = bch2_trans_kmalloc(trans, sizeof(*k)); in bch2_btree_delete_extent_at()
672 if (IS_ERR(k)) in bch2_btree_delete_extent_at()
673 return PTR_ERR(k); in bch2_btree_delete_extent_at()
675 bkey_init(&k->k); in bch2_btree_delete_extent_at()
676 k->k.p = iter->pos; in bch2_btree_delete_extent_at()
677 bch2_key_resize(&k->k, len); in bch2_btree_delete_extent_at()
678 return bch2_trans_update(trans, iter, k, update_flags); in bch2_btree_delete_extent_at()
711 struct bkey_s_c k; in bch2_btree_delete_range_trans() local
715 while ((k = bch2_btree_iter_peek_upto(&iter, end)).k) { in bch2_btree_delete_range_trans()
720 ret = bkey_err(k); in bch2_btree_delete_range_trans()
724 bkey_init(&delete.k); in bch2_btree_delete_range_trans()
732 * bkey_start_pos(k.k) (for non extents they always will be the in bch2_btree_delete_range_trans()
735 * of k. in bch2_btree_delete_range_trans()
738 * bkey_start_pos(k.k)). in bch2_btree_delete_range_trans()
740 delete.k.p = iter.pos; in bch2_btree_delete_range_trans()
743 bch2_key_resize(&delete.k, in bch2_btree_delete_range_trans()
744 bpos_min(end, k.k->p).offset - in bch2_btree_delete_range_trans()
791 struct bkey_i k; in bch2_btree_bit_mod() local
793 bkey_init(&k.k); in bch2_btree_bit_mod()
794 k.k.type = set ? KEY_TYPE_set : KEY_TYPE_deleted; in bch2_btree_bit_mod()
795 k.k.p = pos; in bch2_btree_bit_mod()
797 return bch2_trans_update_buffered(trans, btree, &k); in bch2_btree_bit_mod()