Lines Matching full:trans
20 static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
69 static int add_new_free_space_info(struct btrfs_trans_handle *trans, in add_new_free_space_info() argument
83 ret = btrfs_insert_empty_item(trans, root, path, &key, sizeof(*info)); in add_new_free_space_info()
98 struct btrfs_trans_handle *trans, in btrfs_search_free_space_info() argument
111 ret = btrfs_search_slot(trans, root, &key, path, 0, cow); in btrfs_search_free_space_info()
129 static int btrfs_search_prev_slot(struct btrfs_trans_handle *trans, in btrfs_search_prev_slot() argument
136 ret = btrfs_search_slot(trans, root, key, p, ins_len, cow); in btrfs_search_prev_slot()
201 int btrfs_convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans, in btrfs_convert_free_space_to_bitmaps() argument
205 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_convert_free_space_to_bitmaps()
223 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_bitmaps()
235 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1); in btrfs_convert_free_space_to_bitmaps()
237 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_bitmaps()
273 ret = btrfs_del_items(trans, root, path, path->slots[0], nr); in btrfs_convert_free_space_to_bitmaps()
275 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_bitmaps()
281 info = btrfs_search_free_space_info(trans, block_group, path, 1); in btrfs_convert_free_space_to_bitmaps()
284 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_bitmaps()
302 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_bitmaps()
321 ret = btrfs_insert_empty_item(trans, root, path, &key, in btrfs_convert_free_space_to_bitmaps()
324 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_bitmaps()
345 int btrfs_convert_free_space_to_extents(struct btrfs_trans_handle *trans, in btrfs_convert_free_space_to_extents() argument
349 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_convert_free_space_to_extents()
366 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_extents()
378 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1); in btrfs_convert_free_space_to_extents()
380 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_extents()
422 ret = btrfs_del_items(trans, root, path, path->slots[0], nr); in btrfs_convert_free_space_to_extents()
424 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_extents()
430 info = btrfs_search_free_space_info(trans, block_group, path, 1); in btrfs_convert_free_space_to_extents()
433 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_extents()
456 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in btrfs_convert_free_space_to_extents()
458 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_extents()
474 btrfs_abort_transaction(trans, ret); in btrfs_convert_free_space_to_extents()
484 static int update_free_space_extent_count(struct btrfs_trans_handle *trans, in update_free_space_extent_count() argument
497 info = btrfs_search_free_space_info(trans, block_group, path, 1); in update_free_space_extent_count()
510 ret = btrfs_convert_free_space_to_bitmaps(trans, block_group, path); in update_free_space_extent_count()
513 ret = btrfs_convert_free_space_to_extents(trans, block_group, path); in update_free_space_extent_count()
542 static void free_space_modify_bits(struct btrfs_trans_handle *trans, in free_space_modify_bits() argument
573 btrfs_mark_buffer_dirty(trans, leaf); in free_space_modify_bits()
585 static int free_space_next_bitmap(struct btrfs_trans_handle *trans, in free_space_next_bitmap() argument
602 return btrfs_search_prev_slot(trans, root, &key, p, 0, 1); in free_space_next_bitmap()
610 static int modify_free_space_bitmap(struct btrfs_trans_handle *trans, in modify_free_space_bitmap() argument
635 ret = btrfs_search_prev_slot(trans, root, &key, path, 0, 1); in modify_free_space_bitmap()
644 ret = free_space_next_bitmap(trans, root, path); in modify_free_space_bitmap()
653 ret = btrfs_search_prev_slot(trans, root, &key, path, 0, 1); in modify_free_space_bitmap()
665 free_space_modify_bits(trans, block_group, path, &cur_start, in modify_free_space_bitmap()
669 ret = free_space_next_bitmap(trans, root, path); in modify_free_space_bitmap()
682 ret = free_space_next_bitmap(trans, root, path); in modify_free_space_bitmap()
713 return update_free_space_extent_count(trans, block_group, path, new_extents); in modify_free_space_bitmap()
716 static int remove_free_space_extent(struct btrfs_trans_handle *trans, in remove_free_space_extent() argument
732 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1); in remove_free_space_extent()
764 ret = btrfs_del_item(trans, root, path); in remove_free_space_extent()
775 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in remove_free_space_extent()
788 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in remove_free_space_extent()
795 return update_free_space_extent_count(trans, block_group, path, new_extents); in remove_free_space_extent()
819 int __btrfs_remove_from_free_space_tree(struct btrfs_trans_handle *trans, in __btrfs_remove_from_free_space_tree() argument
825 ret = __add_block_group_free_space(trans, block_group, path); in __btrfs_remove_from_free_space_tree()
834 return modify_free_space_bitmap(trans, block_group, path, in __btrfs_remove_from_free_space_tree()
837 return remove_free_space_extent(trans, block_group, path, start, size); in __btrfs_remove_from_free_space_tree()
840 int btrfs_remove_from_free_space_tree(struct btrfs_trans_handle *trans, in btrfs_remove_from_free_space_tree() argument
847 if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE)) in btrfs_remove_from_free_space_tree()
853 btrfs_abort_transaction(trans, ret); in btrfs_remove_from_free_space_tree()
857 block_group = btrfs_lookup_block_group(trans->fs_info, start); in btrfs_remove_from_free_space_tree()
861 btrfs_abort_transaction(trans, ret); in btrfs_remove_from_free_space_tree()
866 ret = __btrfs_remove_from_free_space_tree(trans, block_group, path, start, size); in btrfs_remove_from_free_space_tree()
869 btrfs_abort_transaction(trans, ret); in btrfs_remove_from_free_space_tree()
877 static int add_free_space_extent(struct btrfs_trans_handle *trans, in add_free_space_extent() argument
918 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1); in add_free_space_extent()
941 ret = btrfs_del_item(trans, root, path); in add_free_space_extent()
958 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1); in add_free_space_extent()
982 ret = btrfs_del_item(trans, root, path); in add_free_space_extent()
992 ret = btrfs_insert_empty_item(trans, root, path, &new_key, 0); in add_free_space_extent()
997 return update_free_space_extent_count(trans, block_group, path, new_extents); in add_free_space_extent()
1001 int __btrfs_add_to_free_space_tree(struct btrfs_trans_handle *trans, in __btrfs_add_to_free_space_tree() argument
1007 ret = __add_block_group_free_space(trans, block_group, path); in __btrfs_add_to_free_space_tree()
1016 return modify_free_space_bitmap(trans, block_group, path, in __btrfs_add_to_free_space_tree()
1019 return add_free_space_extent(trans, block_group, path, start, size); in __btrfs_add_to_free_space_tree()
1022 int btrfs_add_to_free_space_tree(struct btrfs_trans_handle *trans, in btrfs_add_to_free_space_tree() argument
1029 if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE)) in btrfs_add_to_free_space_tree()
1035 btrfs_abort_transaction(trans, ret); in btrfs_add_to_free_space_tree()
1039 block_group = btrfs_lookup_block_group(trans->fs_info, start); in btrfs_add_to_free_space_tree()
1043 btrfs_abort_transaction(trans, ret); in btrfs_add_to_free_space_tree()
1048 ret = __btrfs_add_to_free_space_tree(trans, block_group, path, start, size); in btrfs_add_to_free_space_tree()
1051 btrfs_abort_transaction(trans, ret); in btrfs_add_to_free_space_tree()
1064 static int populate_free_space_tree(struct btrfs_trans_handle *trans, in populate_free_space_tree() argument
1084 ret = add_new_free_space_info(trans, block_group, path2); in populate_free_space_tree()
1101 extent_root = btrfs_extent_root(trans->fs_info, key.objectid); in populate_free_space_tree()
1129 ret = __btrfs_add_to_free_space_tree(trans, in populate_free_space_tree()
1139 start += trans->fs_info->nodesize; in populate_free_space_tree()
1152 ret = __btrfs_add_to_free_space_tree(trans, block_group, path2, in populate_free_space_tree()
1167 struct btrfs_trans_handle *trans; in btrfs_create_free_space_tree() local
1174 trans = btrfs_start_transaction(tree_root, 0); in btrfs_create_free_space_tree()
1175 if (IS_ERR(trans)) in btrfs_create_free_space_tree()
1176 return PTR_ERR(trans); in btrfs_create_free_space_tree()
1180 free_space_root = btrfs_create_tree(trans, in btrfs_create_free_space_tree()
1184 btrfs_abort_transaction(trans, ret); in btrfs_create_free_space_tree()
1185 btrfs_end_transaction(trans); in btrfs_create_free_space_tree()
1191 btrfs_abort_transaction(trans, ret); in btrfs_create_free_space_tree()
1192 btrfs_end_transaction(trans); in btrfs_create_free_space_tree()
1200 ret = populate_free_space_tree(trans, block_group); in btrfs_create_free_space_tree()
1202 btrfs_abort_transaction(trans, ret); in btrfs_create_free_space_tree()
1203 btrfs_end_transaction(trans); in btrfs_create_free_space_tree()
1212 ret = btrfs_commit_transaction(trans); in btrfs_create_free_space_tree()
1227 static int clear_free_space_tree(struct btrfs_trans_handle *trans, in clear_free_space_tree() argument
1245 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in clear_free_space_tree()
1254 ret = btrfs_del_items(trans, root, path, 0, nr); in clear_free_space_tree()
1261 node = rb_first_cached(&trans->fs_info->block_group_cache_tree); in clear_free_space_tree()
1276 struct btrfs_trans_handle *trans; in btrfs_delete_free_space_tree() local
1286 trans = btrfs_start_transaction(tree_root, 0); in btrfs_delete_free_space_tree()
1287 if (IS_ERR(trans)) in btrfs_delete_free_space_tree()
1288 return PTR_ERR(trans); in btrfs_delete_free_space_tree()
1293 ret = clear_free_space_tree(trans, free_space_root); in btrfs_delete_free_space_tree()
1295 btrfs_abort_transaction(trans, ret); in btrfs_delete_free_space_tree()
1296 btrfs_end_transaction(trans); in btrfs_delete_free_space_tree()
1300 ret = btrfs_del_root(trans, &free_space_root->root_key); in btrfs_delete_free_space_tree()
1302 btrfs_abort_transaction(trans, ret); in btrfs_delete_free_space_tree()
1303 btrfs_end_transaction(trans); in btrfs_delete_free_space_tree()
1314 btrfs_clear_buffer_dirty(trans, free_space_root->node); in btrfs_delete_free_space_tree()
1316 ret = btrfs_free_tree_block(trans, btrfs_root_id(free_space_root), in btrfs_delete_free_space_tree()
1320 btrfs_abort_transaction(trans, ret); in btrfs_delete_free_space_tree()
1321 btrfs_end_transaction(trans); in btrfs_delete_free_space_tree()
1325 return btrfs_commit_transaction(trans); in btrfs_delete_free_space_tree()
1330 struct btrfs_trans_handle *trans; in btrfs_rebuild_free_space_tree() local
1340 trans = btrfs_start_transaction(free_space_root, 1); in btrfs_rebuild_free_space_tree()
1341 if (IS_ERR(trans)) in btrfs_rebuild_free_space_tree()
1342 return PTR_ERR(trans); in btrfs_rebuild_free_space_tree()
1347 ret = clear_free_space_tree(trans, free_space_root); in btrfs_rebuild_free_space_tree()
1349 btrfs_abort_transaction(trans, ret); in btrfs_rebuild_free_space_tree()
1350 btrfs_end_transaction(trans); in btrfs_rebuild_free_space_tree()
1365 ret = populate_free_space_tree(trans, block_group); in btrfs_rebuild_free_space_tree()
1367 btrfs_abort_transaction(trans, ret); in btrfs_rebuild_free_space_tree()
1368 btrfs_end_transaction(trans); in btrfs_rebuild_free_space_tree()
1372 if (btrfs_should_end_transaction(trans)) { in btrfs_rebuild_free_space_tree()
1373 btrfs_end_transaction(trans); in btrfs_rebuild_free_space_tree()
1374 trans = btrfs_start_transaction(free_space_root, 1); in btrfs_rebuild_free_space_tree()
1375 if (IS_ERR(trans)) in btrfs_rebuild_free_space_tree()
1376 return PTR_ERR(trans); in btrfs_rebuild_free_space_tree()
1385 ret = btrfs_commit_transaction(trans); in btrfs_rebuild_free_space_tree()
1390 static int __add_block_group_free_space(struct btrfs_trans_handle *trans, in __add_block_group_free_space() argument
1427 btrfs_abort_transaction(trans, -ENOMEM); in __add_block_group_free_space()
1433 ret = add_new_free_space_info(trans, block_group, path); in __add_block_group_free_space()
1435 btrfs_abort_transaction(trans, ret); in __add_block_group_free_space()
1439 ret = __btrfs_add_to_free_space_tree(trans, block_group, path, in __add_block_group_free_space()
1442 btrfs_abort_transaction(trans, ret); in __add_block_group_free_space()
1451 int btrfs_add_block_group_free_space(struct btrfs_trans_handle *trans, in btrfs_add_block_group_free_space() argument
1456 if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE)) in btrfs_add_block_group_free_space()
1460 ret = __add_block_group_free_space(trans, block_group, NULL); in btrfs_add_block_group_free_space()
1465 int btrfs_remove_block_group_free_space(struct btrfs_trans_handle *trans, in btrfs_remove_block_group_free_space() argument
1476 if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE)) in btrfs_remove_block_group_free_space()
1487 btrfs_abort_transaction(trans, ret); in btrfs_remove_block_group_free_space()
1499 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1); in btrfs_remove_block_group_free_space()
1501 btrfs_abort_transaction(trans, ret); in btrfs_remove_block_group_free_space()
1530 ret = btrfs_del_items(trans, root, path, path->slots[0], nr); in btrfs_remove_block_group_free_space()
1532 btrfs_abort_transaction(trans, ret); in btrfs_remove_block_group_free_space()