Lines Matching refs:trans
337 int __bch2_inode_peek(struct btree_trans *trans, in __bch2_inode_peek() argument
344 int ret = __bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot, warn); in __bch2_inode_peek()
348 struct bkey_s_c k = bch2_bkey_get_iter(trans, iter, BTREE_ID_inodes, in __bch2_inode_peek()
366 bch_err_msg(trans->c, ret, "looking up inum %llu:%llu:", inum.subvol, inum.inum); in __bch2_inode_peek()
367 bch2_trans_iter_exit(trans, iter); in __bch2_inode_peek()
371 int bch2_inode_find_by_inum_snapshot(struct btree_trans *trans, in bch2_inode_find_by_inum_snapshot() argument
377 struct bkey_s_c k = bch2_bkey_get_iter(trans, &iter, BTREE_ID_inodes, in bch2_inode_find_by_inum_snapshot()
387 bch2_trans_iter_exit(trans, &iter); in bch2_inode_find_by_inum_snapshot()
391 int bch2_inode_find_by_inum_nowarn_trans(struct btree_trans *trans, in bch2_inode_find_by_inum_nowarn_trans() argument
398 ret = bch2_inode_peek_nowarn(trans, &iter, inode, inum, 0); in bch2_inode_find_by_inum_nowarn_trans()
400 bch2_trans_iter_exit(trans, &iter); in bch2_inode_find_by_inum_nowarn_trans()
404 int bch2_inode_find_by_inum_trans(struct btree_trans *trans, in bch2_inode_find_by_inum_trans() argument
411 ret = bch2_inode_peek(trans, &iter, inode, inum, 0); in bch2_inode_find_by_inum_trans()
413 bch2_trans_iter_exit(trans, &iter); in bch2_inode_find_by_inum_trans()
420 return bch2_trans_do(c, bch2_inode_find_by_inum_trans(trans, inum, inode)); in bch2_inode_find_by_inum()
423 int bch2_inode_find_snapshot_root(struct btree_trans *trans, u64 inum, in bch2_inode_find_snapshot_root() argument
430 for_each_btree_key_reverse_norestart(trans, iter, BTREE_ID_inodes, in bch2_inode_find_snapshot_root()
443 bch2_trans_iter_exit(trans, &iter); in bch2_inode_find_snapshot_root()
447 int bch2_inode_write_flags(struct btree_trans *trans, in bch2_inode_write_flags() argument
454 inode_p = bch2_trans_kmalloc(trans, sizeof(*inode_p)); in bch2_inode_write_flags()
460 return bch2_trans_update(trans, iter, &inode_p->inode.k_i, flags); in bch2_inode_write_flags()
463 int __bch2_fsck_write_inode(struct btree_trans *trans, struct bch_inode_unpacked *inode) in __bch2_fsck_write_inode() argument
466 bch2_trans_kmalloc(trans, sizeof(*inode_p)); in __bch2_fsck_write_inode()
474 return bch2_btree_insert_nonextent(trans, BTREE_ID_inodes, in __bch2_fsck_write_inode()
479 int bch2_fsck_write_inode(struct btree_trans *trans, struct bch_inode_unpacked *inode) in bch2_fsck_write_inode() argument
481 int ret = commit_do(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc, in bch2_fsck_write_inode()
482 __bch2_fsck_write_inode(trans, inode)); in bch2_fsck_write_inode()
483 bch_err_fn(trans->c, ret); in bch2_fsck_write_inode()
487 struct bkey_i *bch2_inode_to_v3(struct btree_trans *trans, struct bkey_i *k) in bch2_inode_to_v3() argument
496 inode_p = bch2_trans_kmalloc(trans, sizeof(*inode_p)); in bch2_inode_to_v3()
690 bch2_bkey_get_iter_snapshot_parent(struct btree_trans *trans, struct btree_iter *iter, in bch2_bkey_get_iter_snapshot_parent() argument
694 struct bch_fs *c = trans->c; in bch2_bkey_get_iter_snapshot_parent()
698 for_each_btree_key_max_norestart(trans, *iter, btree, in bch2_bkey_get_iter_snapshot_parent()
705 bch2_trans_iter_exit(trans, iter); in bch2_bkey_get_iter_snapshot_parent()
710 bch2_inode_get_iter_snapshot_parent(struct btree_trans *trans, struct btree_iter *iter, in bch2_inode_get_iter_snapshot_parent() argument
715 k = bch2_bkey_get_iter_snapshot_parent(trans, iter, BTREE_ID_inodes, pos, flags); in bch2_inode_get_iter_snapshot_parent()
721 bch2_trans_iter_exit(trans, iter); in bch2_inode_get_iter_snapshot_parent()
726 int __bch2_inode_has_child_snapshots(struct btree_trans *trans, struct bpos pos) in __bch2_inode_has_child_snapshots() argument
728 struct bch_fs *c = trans->c; in __bch2_inode_has_child_snapshots()
733 for_each_btree_key_max_norestart(trans, iter, in __bch2_inode_has_child_snapshots()
742 bch2_trans_iter_exit(trans, &iter); in __bch2_inode_has_child_snapshots()
746 static int update_inode_has_children(struct btree_trans *trans, in update_inode_has_children() argument
751 int ret = bch2_inode_has_child_snapshots(trans, k.k->p); in update_inode_has_children()
763 static int update_parent_inode_has_children(struct btree_trans *trans, struct bpos pos, in update_parent_inode_has_children() argument
767 struct bkey_s_c k = bch2_inode_get_iter_snapshot_parent(trans, in update_parent_inode_has_children()
776 ret = bch2_inode_has_child_snapshots(trans, k.k->p); in update_parent_inode_has_children()
785 struct bkey_i *update = bch2_bkey_make_mut(trans, &iter, &k, in update_parent_inode_has_children()
794 bch2_trans_iter_exit(trans, &iter); in update_parent_inode_has_children()
798 int bch2_trigger_inode(struct btree_trans *trans, in bch2_trigger_inode() argument
804 struct bch_fs *c = trans->c; in bch2_trigger_inode()
807 BUG_ON(!trans->journal_res.seq); in bch2_trigger_inode()
808 bkey_s_to_inode_v3(new).v->bi_journal_seq = cpu_to_le64(trans->journal_res.seq); in bch2_trigger_inode()
813 int ret = bch2_disk_accounting_mod2(trans, flags & BTREE_TRIGGER_gc, nr, nr_inodes); in bch2_trigger_inode()
822 int ret = bch2_btree_bit_mod_buffered(trans, BTREE_ID_deleted_inodes, in bch2_trigger_inode()
838 int ret = update_parent_inode_has_children(trans, new.k->p, in bch2_trigger_inode()
849 int ret = update_inode_has_children(trans, new, false); in bch2_trigger_inode()
955 bch2_inode_alloc_cursor_get(struct btree_trans *trans, u64 cpu, u64 *min, u64 *max) in bch2_inode_alloc_cursor_get() argument
957 struct bch_fs *c = trans->c; in bch2_inode_alloc_cursor_get()
964 struct bkey_s_c k = bch2_bkey_get_iter(trans, &iter, in bch2_inode_alloc_cursor_get()
974 ? bch2_bkey_make_mut_typed(trans, &iter, &k, 0, inode_alloc_cursor) in bch2_inode_alloc_cursor_get()
975 : bch2_bkey_alloc(trans, &iter, 0, inode_alloc_cursor); in bch2_inode_alloc_cursor_get()
1000 bch2_trans_iter_exit(trans, &iter); in bch2_inode_alloc_cursor_get()
1007 int bch2_inode_create(struct btree_trans *trans, in bch2_inode_create() argument
1014 bch2_inode_alloc_cursor_get(trans, cpu, &min, &max); in bch2_inode_create()
1022 bch2_trans_iter_init(trans, iter, BTREE_ID_inodes, POS(0, pos), in bch2_inode_create()
1027 while ((k = bch2_btree_iter_peek(trans, iter)).k && in bch2_inode_create()
1038 bch2_btree_iter_set_pos(trans, iter, POS(0, pos)); in bch2_inode_create()
1045 ret = bch_err_throw(trans->c, ENOSPC_inode_create); in bch2_inode_create()
1048 bch2_trans_iter_exit(trans, iter); in bch2_inode_create()
1054 bch2_btree_iter_set_pos(trans, iter, POS(0, pos)); in bch2_inode_create()
1058 bch2_btree_iter_set_pos(trans, iter, SPOS(0, pos, snapshot)); in bch2_inode_create()
1059 k = bch2_btree_iter_peek_slot(trans, iter); in bch2_inode_create()
1062 bch2_trans_iter_exit(trans, iter); in bch2_inode_create()
1072 static int bch2_inode_delete_keys(struct btree_trans *trans, in bch2_inode_delete_keys() argument
1086 bch2_trans_iter_init(trans, &iter, id, POS(inum.inum, 0), in bch2_inode_delete_keys()
1090 bch2_trans_begin(trans); in bch2_inode_delete_keys()
1092 ret = bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot); in bch2_inode_delete_keys()
1096 bch2_btree_iter_set_snapshot(trans, &iter, snapshot); in bch2_inode_delete_keys()
1098 k = bch2_btree_iter_peek_max(trans, &iter, end); in bch2_inode_delete_keys()
1114 ret = bch2_trans_update(trans, &iter, &delete, 0) ?: in bch2_inode_delete_keys()
1115 bch2_trans_commit(trans, NULL, NULL, in bch2_inode_delete_keys()
1122 bch2_trans_iter_exit(trans, &iter); in bch2_inode_delete_keys()
1128 struct btree_trans *trans = bch2_trans_get(c); in bch2_inode_rm() local
1134 ret = lockrestart_do(trans, may_delete_deleted_inum(trans, inum)); in bch2_inode_rm()
1146 ret = bch2_inode_delete_keys(trans, inum, BTREE_ID_extents) ?: in bch2_inode_rm()
1147 bch2_inode_delete_keys(trans, inum, BTREE_ID_xattrs) ?: in bch2_inode_rm()
1148 bch2_inode_delete_keys(trans, inum, BTREE_ID_dirents); in bch2_inode_rm()
1152 bch2_trans_begin(trans); in bch2_inode_rm()
1154 ret = bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot); in bch2_inode_rm()
1158 k = bch2_bkey_get_iter(trans, &iter, BTREE_ID_inodes, in bch2_inode_rm()
1173 ret = bch2_btree_delete_at(trans, &iter, 0) ?: in bch2_inode_rm()
1174 bch2_trans_commit(trans, NULL, NULL, in bch2_inode_rm()
1177 bch2_trans_iter_exit(trans, &iter); in bch2_inode_rm()
1184 ret = delete_ancestor_snapshot_inodes(trans, SPOS(0, inum.inum, snapshot)); in bch2_inode_rm()
1186 bch2_trans_put(trans); in bch2_inode_rm()
1204 void bch2_inode_nlink_dec(struct btree_trans *trans, struct bch_inode_unpacked *bi) in bch2_inode_nlink_dec() argument
1207 bch2_trans_inconsistent(trans, "inode %llu unlinked but link count nonzero", in bch2_inode_nlink_dec()
1213 bch2_trans_inconsistent(trans, "inode %llu link count underflow", bi->bi_inum); in bch2_inode_nlink_dec()
1251 int bch2_inum_opts_get(struct btree_trans *trans, subvol_inum inum, struct bch_io_opts *opts) in bch2_inum_opts_get() argument
1254 int ret = lockrestart_do(trans, bch2_inode_find_by_inum_trans(trans, inum, &inode)); in bch2_inum_opts_get()
1259 bch2_inode_opts_get(opts, trans->c, &inode); in bch2_inum_opts_get()
1263 int bch2_inode_set_casefold(struct btree_trans *trans, subvol_inum inum, in bch2_inode_set_casefold() argument
1266 struct bch_fs *c = trans->c; in bch2_inode_set_casefold()
1285 ret = bch2_empty_dir_trans(trans, inum); in bch2_inode_set_casefold()
1298 return bch2_maybe_propagate_has_case_insensitive(trans, inum, bi); in bch2_inode_set_casefold()
1301 static noinline int __bch2_inode_rm_snapshot(struct btree_trans *trans, u64 inum, u32 snapshot) in __bch2_inode_rm_snapshot() argument
1303 struct bch_fs *c = trans->c; in __bch2_inode_rm_snapshot()
1311 ret = bch2_btree_delete_range_trans(trans, BTREE_ID_extents, in __bch2_inode_rm_snapshot()
1315 bch2_btree_delete_range_trans(trans, BTREE_ID_dirents, in __bch2_inode_rm_snapshot()
1319 bch2_btree_delete_range_trans(trans, BTREE_ID_xattrs, in __bch2_inode_rm_snapshot()
1327 bch2_trans_begin(trans); in __bch2_inode_rm_snapshot()
1329 k = bch2_bkey_get_iter(trans, &iter, BTREE_ID_inodes, in __bch2_inode_rm_snapshot()
1353 ret = bch2_trans_update(trans, &iter, &delete.k_i, 0) ?: in __bch2_inode_rm_snapshot()
1354 bch2_trans_commit(trans, NULL, NULL, in __bch2_inode_rm_snapshot()
1357 bch2_trans_iter_exit(trans, &iter); in __bch2_inode_rm_snapshot()
1369 static int delete_ancestor_snapshot_inodes(struct btree_trans *trans, struct bpos pos) in delete_ancestor_snapshot_inodes() argument
1375 ret = lockrestart_do(trans, in delete_ancestor_snapshot_inodes()
1376 bkey_err(k = bch2_inode_get_iter_snapshot_parent(trans, &iter, pos, 0))); in delete_ancestor_snapshot_inodes()
1382 bch2_trans_iter_exit(trans, &iter); in delete_ancestor_snapshot_inodes()
1387 ret = lockrestart_do(trans, bch2_inode_or_descendents_is_open(trans, pos)); in delete_ancestor_snapshot_inodes()
1391 ret = __bch2_inode_rm_snapshot(trans, pos.offset, pos.snapshot); in delete_ancestor_snapshot_inodes()
1397 int bch2_inode_rm_snapshot(struct btree_trans *trans, u64 inum, u32 snapshot) in bch2_inode_rm_snapshot() argument
1399 return __bch2_inode_rm_snapshot(trans, inum, snapshot) ?: in bch2_inode_rm_snapshot()
1400 delete_ancestor_snapshot_inodes(trans, SPOS(0, inum, snapshot)); in bch2_inode_rm_snapshot()
1403 static int may_delete_deleted_inode(struct btree_trans *trans, struct bpos pos, in may_delete_deleted_inode() argument
1406 struct bch_fs *c = trans->c; in may_delete_deleted_inode()
1413 k = bch2_bkey_get_iter(trans, &inode_iter, BTREE_ID_inodes, pos, BTREE_ITER_cached); in may_delete_deleted_inode()
1420 trans, deleted_inode_missing, in may_delete_deleted_inode()
1432 ret = bch2_empty_dir_snapshot(trans, pos.offset, 0, pos.snapshot); in may_delete_deleted_inode()
1435 trans, deleted_inode_is_dir, in may_delete_deleted_inode()
1445 trans, deleted_inode_not_unlinked, in may_delete_deleted_inode()
1456 trans, deleted_inode_has_child_snapshots, in may_delete_deleted_inode()
1463 ret = bch2_inode_has_child_snapshots(trans, k.k->p); in may_delete_deleted_inode()
1468 if (fsck_err(trans, inode_has_child_snapshots_wrong, in may_delete_deleted_inode()
1474 ret = __bch2_fsck_write_inode(trans, &inode); in may_delete_deleted_inode()
1480 ret = bch2_trans_commit(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc) ?: in may_delete_deleted_inode()
1491 !fsck_err(trans, deleted_inode_but_clean, in may_delete_deleted_inode()
1502 bch2_trans_iter_exit(trans, &inode_iter); in may_delete_deleted_inode()
1506 ret = bch2_btree_bit_mod_buffered(trans, BTREE_ID_deleted_inodes, pos, false); in may_delete_deleted_inode()
1510 static int may_delete_deleted_inum(struct btree_trans *trans, subvol_inum inum) in may_delete_deleted_inum() argument
1514 return bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot) ?: in may_delete_deleted_inum()
1515 may_delete_deleted_inode(trans, SPOS(0, inum.inum, snapshot), false); in may_delete_deleted_inum()
1520 struct btree_trans *trans = bch2_trans_get(c); in bch2_delete_dead_inodes() local
1528 ret = bch2_btree_write_buffer_flush_sync(trans); in bch2_delete_dead_inodes()
1538 ret = for_each_btree_key_commit(trans, iter, BTREE_ID_deleted_inodes, POS_MIN, in bch2_delete_dead_inodes()
1541 ret = may_delete_deleted_inode(trans, k.k->p, true); in bch2_delete_dead_inodes()
1546 ret = bch2_inode_rm_snapshot(trans, k.k->p.offset, k.k->p.snapshot); in bch2_delete_dead_inodes()
1563 bch2_trans_put(trans); in bch2_delete_dead_inodes()