Lines Matching refs:fs_info
133 btrfs_err(transaction->fs_info, in btrfs_put_transaction()
161 struct btrfs_fs_info *fs_info = trans->fs_info; in switch_commit_roots() local
165 down_write(&fs_info->commit_root_sem); in switch_commit_roots()
183 btrfs_drop_and_free_fs_root(fs_info, root); in switch_commit_roots()
214 spin_lock(&fs_info->block_group_cache_lock); in switch_commit_roots()
216 &fs_info->caching_block_groups, list) { in switch_commit_roots()
227 spin_unlock(&fs_info->block_group_cache_lock); in switch_commit_roots()
228 up_write(&fs_info->commit_root_sem); in switch_commit_roots()
265 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_trans_release_chunk_metadata() local
270 btrfs_block_rsv_release(fs_info, &fs_info->chunk_block_rsv, in btrfs_trans_release_chunk_metadata()
278 static noinline int join_transaction(struct btrfs_fs_info *fs_info, in join_transaction() argument
283 spin_lock(&fs_info->trans_lock); in join_transaction()
286 if (BTRFS_FS_ERROR(fs_info)) { in join_transaction()
287 spin_unlock(&fs_info->trans_lock); in join_transaction()
291 cur_trans = fs_info->running_transaction; in join_transaction()
294 spin_unlock(&fs_info->trans_lock); in join_transaction()
298 spin_unlock(&fs_info->trans_lock); in join_transaction()
304 spin_unlock(&fs_info->trans_lock); in join_transaction()
307 spin_unlock(&fs_info->trans_lock); in join_transaction()
326 spin_lock(&fs_info->trans_lock); in join_transaction()
327 if (fs_info->running_transaction) { in join_transaction()
334 } else if (BTRFS_FS_ERROR(fs_info)) { in join_transaction()
335 spin_unlock(&fs_info->trans_lock); in join_transaction()
340 cur_trans->fs_info = fs_info; in join_transaction()
367 if (!list_empty(&fs_info->tree_mod_seq_list)) in join_transaction()
369 if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log)) in join_transaction()
371 atomic64_set(&fs_info->tree_mod_seq, 0); in join_transaction()
387 list_add_tail(&cur_trans->list, &fs_info->trans_list); in join_transaction()
388 extent_io_tree_init(fs_info, &cur_trans->dirty_pages, in join_transaction()
389 IO_TREE_TRANS_DIRTY_PAGES, fs_info->btree_inode); in join_transaction()
390 extent_io_tree_init(fs_info, &cur_trans->pinned_extents, in join_transaction()
392 fs_info->generation++; in join_transaction()
393 cur_trans->transid = fs_info->generation; in join_transaction()
394 fs_info->running_transaction = cur_trans; in join_transaction()
396 spin_unlock(&fs_info->trans_lock); in join_transaction()
411 struct btrfs_fs_info *fs_info = root->fs_info; in record_root_in_trans() local
416 WARN_ON(root == fs_info->extent_root); in record_root_in_trans()
431 spin_lock(&fs_info->fs_roots_radix_lock); in record_root_in_trans()
433 spin_unlock(&fs_info->fs_roots_radix_lock); in record_root_in_trans()
436 radix_tree_tag_set(&fs_info->fs_roots_radix, in record_root_in_trans()
439 spin_unlock(&fs_info->fs_roots_radix_lock); in record_root_in_trans()
472 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_add_dropped_root() local
481 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_add_dropped_root()
482 radix_tree_tag_clear(&fs_info->fs_roots_radix, in btrfs_add_dropped_root()
485 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_add_dropped_root()
491 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_record_root_in_trans() local
506 mutex_lock(&fs_info->reloc_mutex); in btrfs_record_root_in_trans()
508 mutex_unlock(&fs_info->reloc_mutex); in btrfs_record_root_in_trans()
524 static void wait_current_trans(struct btrfs_fs_info *fs_info) in wait_current_trans() argument
528 spin_lock(&fs_info->trans_lock); in wait_current_trans()
529 cur_trans = fs_info->running_transaction; in wait_current_trans()
532 spin_unlock(&fs_info->trans_lock); in wait_current_trans()
534 wait_event(fs_info->transaction_wait, in wait_current_trans()
539 spin_unlock(&fs_info->trans_lock); in wait_current_trans()
543 static int may_wait_transaction(struct btrfs_fs_info *fs_info, int type) in may_wait_transaction() argument
545 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in may_wait_transaction()
556 struct btrfs_fs_info *fs_info = root->fs_info; in need_reserve_reloc_root() local
558 if (!fs_info->reloc_ctl || in need_reserve_reloc_root()
572 struct btrfs_fs_info *fs_info = root->fs_info; in start_transaction() local
573 struct btrfs_block_rsv *delayed_refs_rsv = &fs_info->delayed_refs_rsv; in start_transaction()
582 if (BTRFS_FS_ERROR(fs_info)) in start_transaction()
599 if (num_items && root != fs_info->chunk_root) { in start_transaction()
600 struct btrfs_block_rsv *rsv = &fs_info->trans_block_rsv; in start_transaction()
603 qgroup_reserved = num_items * fs_info->nodesize; in start_transaction()
616 num_bytes = btrfs_calc_insert_metadata_size(fs_info, num_items); in start_transaction()
627 num_bytes += fs_info->nodesize; in start_transaction()
635 btrfs_migrate_to_delayed_refs_rsv(fs_info, rsv, in start_transaction()
651 ret = btrfs_delayed_refs_rsv_refill(fs_info, flush); in start_transaction()
673 sb_start_intwrite(fs_info->sb); in start_transaction()
675 if (may_wait_transaction(fs_info, type)) in start_transaction()
676 wait_current_trans(fs_info); in start_transaction()
679 ret = join_transaction(fs_info, type); in start_transaction()
681 wait_current_trans(fs_info); in start_transaction()
691 cur_trans = fs_info->running_transaction; in start_transaction()
697 h->fs_info = root->fs_info; in start_transaction()
704 may_wait_transaction(fs_info, type)) { in start_transaction()
711 trace_btrfs_space_reservation(fs_info, "transaction", in start_transaction()
713 h->block_rsv = &fs_info->trans_block_rsv; in start_transaction()
731 btrfs_chunk_alloc(h, btrfs_get_alloc_profile(fs_info, flags), in start_transaction()
758 sb_end_intwrite(fs_info->sb); in start_transaction()
762 btrfs_block_rsv_release(fs_info, &fs_info->trans_block_rsv, in start_transaction()
840 btrfs_wait_for_commit(root->fs_info, 0); in btrfs_attach_transaction_barrier()
852 int btrfs_wait_for_commit(struct btrfs_fs_info *fs_info, u64 transid) in btrfs_wait_for_commit() argument
858 if (transid <= fs_info->last_trans_committed) in btrfs_wait_for_commit()
862 spin_lock(&fs_info->trans_lock); in btrfs_wait_for_commit()
863 list_for_each_entry(t, &fs_info->trans_list, list) { in btrfs_wait_for_commit()
875 spin_unlock(&fs_info->trans_lock); in btrfs_wait_for_commit()
882 if (transid > fs_info->last_trans_committed) in btrfs_wait_for_commit()
888 spin_lock(&fs_info->trans_lock); in btrfs_wait_for_commit()
889 list_for_each_entry_reverse(t, &fs_info->trans_list, in btrfs_wait_for_commit()
899 spin_unlock(&fs_info->trans_lock); in btrfs_wait_for_commit()
910 void btrfs_throttle(struct btrfs_fs_info *fs_info) in btrfs_throttle() argument
912 wait_current_trans(fs_info); in btrfs_throttle()
917 struct btrfs_fs_info *fs_info = trans->fs_info; in should_end_transaction() local
919 if (btrfs_check_space_for_delayed_refs(fs_info)) in should_end_transaction()
922 return !!btrfs_block_rsv_check(&fs_info->global_block_rsv, 5); in should_end_transaction()
939 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_trans_release_metadata() local
949 ASSERT(trans->block_rsv == &fs_info->trans_block_rsv); in btrfs_trans_release_metadata()
950 trace_btrfs_space_reservation(fs_info, "transaction", in btrfs_trans_release_metadata()
952 btrfs_block_rsv_release(fs_info, trans->block_rsv, in btrfs_trans_release_metadata()
960 struct btrfs_fs_info *info = trans->fs_info; in __btrfs_end_transaction()
1021 int btrfs_write_marked_extents(struct btrfs_fs_info *fs_info, in btrfs_write_marked_extents() argument
1026 struct address_space *mapping = fs_info->btree_inode->i_mapping; in btrfs_write_marked_extents()
1031 atomic_inc(&BTRFS_I(fs_info->btree_inode)->sync_writers); in btrfs_write_marked_extents()
1067 atomic_dec(&BTRFS_I(fs_info->btree_inode)->sync_writers); in btrfs_write_marked_extents()
1077 static int __btrfs_wait_marked_extents(struct btrfs_fs_info *fs_info, in __btrfs_wait_marked_extents() argument
1082 struct address_space *mapping = fs_info->btree_inode->i_mapping; in __btrfs_wait_marked_extents()
1115 static int btrfs_wait_extents(struct btrfs_fs_info *fs_info, in btrfs_wait_extents() argument
1121 err = __btrfs_wait_marked_extents(fs_info, dirty_pages); in btrfs_wait_extents()
1122 if (test_and_clear_bit(BTRFS_FS_BTREE_ERR, &fs_info->flags)) in btrfs_wait_extents()
1132 struct btrfs_fs_info *fs_info = log_root->fs_info; in btrfs_wait_tree_log_extents() local
1139 err = __btrfs_wait_marked_extents(fs_info, dirty_pages); in btrfs_wait_tree_log_extents()
1141 test_and_clear_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags)) in btrfs_wait_tree_log_extents()
1145 test_and_clear_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags)) in btrfs_wait_tree_log_extents()
1165 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_write_and_wait_transaction() local
1169 ret = btrfs_write_marked_extents(fs_info, dirty_pages, EXTENT_DIRTY); in btrfs_write_and_wait_transaction()
1171 ret2 = btrfs_wait_extents(fs_info, dirty_pages); in btrfs_write_and_wait_transaction()
1199 struct btrfs_fs_info *fs_info = root->fs_info; in update_cowonly_root() local
1200 struct btrfs_root *tree_root = fs_info->tree_root; in update_cowonly_root()
1232 struct btrfs_fs_info *fs_info = trans->fs_info; in commit_cowonly_roots() local
1239 eb = btrfs_lock_root_node(fs_info->tree_root); in commit_cowonly_roots()
1240 ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, in commit_cowonly_roots()
1263 while (!list_empty(&fs_info->dirty_cowonly_roots)) { in commit_cowonly_roots()
1265 next = fs_info->dirty_cowonly_roots.next; in commit_cowonly_roots()
1270 if (root != fs_info->extent_root) in commit_cowonly_roots()
1299 if (!list_empty(&fs_info->dirty_cowonly_roots)) in commit_cowonly_roots()
1302 list_add_tail(&fs_info->extent_root->dirty_list, in commit_cowonly_roots()
1306 fs_info->dev_replace.committed_cursor_left = in commit_cowonly_roots()
1307 fs_info->dev_replace.cursor_left_last_write_of_item; in commit_cowonly_roots()
1319 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_add_dead_root() local
1321 spin_lock(&fs_info->trans_lock); in btrfs_add_dead_root()
1324 list_add_tail(&root->root_list, &fs_info->dead_roots); in btrfs_add_dead_root()
1326 spin_unlock(&fs_info->trans_lock); in btrfs_add_dead_root()
1334 struct btrfs_fs_info *fs_info = trans->fs_info; in commit_fs_roots() local
1339 spin_lock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1341 ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix, in commit_fs_roots()
1351 radix_tree_tag_clear(&fs_info->fs_roots_radix, in commit_fs_roots()
1354 spin_unlock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1372 ret2 = btrfs_update_root(trans, fs_info->tree_root, in commit_fs_roots()
1377 spin_lock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1381 spin_unlock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1391 struct btrfs_fs_info *info = root->fs_info; in btrfs_defrag_root()
1437 struct btrfs_fs_info *fs_info = src->fs_info; in qgroup_account_snapshot() local
1445 if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags)) in qgroup_account_snapshot()
1479 mutex_lock(&fs_info->tree_log_mutex); in qgroup_account_snapshot()
1512 btrfs_handle_fs_error(fs_info, ret, in qgroup_account_snapshot()
1516 mutex_unlock(&fs_info->tree_log_mutex); in qgroup_account_snapshot()
1542 struct btrfs_fs_info *fs_info = trans->fs_info; in create_pending_snapshot() local
1545 struct btrfs_root *tree_root = fs_info->tree_root; in create_pending_snapshot()
1596 trace_btrfs_space_reservation(fs_info, "transaction", in create_pending_snapshot()
1719 pending->snap = btrfs_get_new_fs_root(fs_info, objectid, pending->anon_dev); in create_pending_snapshot()
1814 static void update_super_roots(struct btrfs_fs_info *fs_info) in update_super_roots() argument
1819 super = fs_info->super_copy; in update_super_roots()
1821 root_item = &fs_info->chunk_root->root_item; in update_super_roots()
1826 root_item = &fs_info->tree_root->root_item; in update_super_roots()
1830 if (btrfs_test_opt(fs_info, SPACE_CACHE)) in update_super_roots()
1832 else if (test_bit(BTRFS_FS_CLEANUP_SPACE_CACHE_V1, &fs_info->flags)) in update_super_roots()
1834 if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags)) in update_super_roots()
1883 __sb_writers_acquired(ac->newtrans->fs_info->sb, SB_FREEZE_FS); in do_async_commit()
1893 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_commit_transaction_async() local
1920 __sb_writers_release(fs_info->sb, SB_FREEZE_FS); in btrfs_commit_transaction_async()
1927 wait_event(fs_info->transaction_blocked_wait, in btrfs_commit_transaction_async()
1940 struct btrfs_fs_info *fs_info = trans->fs_info; in cleanup_transaction() local
1947 spin_lock(&fs_info->trans_lock); in cleanup_transaction()
1956 if (cur_trans == fs_info->running_transaction) { in cleanup_transaction()
1958 spin_unlock(&fs_info->trans_lock); in cleanup_transaction()
1962 spin_lock(&fs_info->trans_lock); in cleanup_transaction()
1975 spin_unlock(&fs_info->trans_lock); in cleanup_transaction()
1977 btrfs_cleanup_one_transaction(trans->transaction, fs_info); in cleanup_transaction()
1979 spin_lock(&fs_info->trans_lock); in cleanup_transaction()
1980 if (cur_trans == fs_info->running_transaction) in cleanup_transaction()
1981 fs_info->running_transaction = NULL; in cleanup_transaction()
1982 spin_unlock(&fs_info->trans_lock); in cleanup_transaction()
1985 sb_end_intwrite(fs_info->sb); in cleanup_transaction()
1993 btrfs_scrub_cancel(fs_info); in cleanup_transaction()
2004 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_cleanup_pending_block_groups() local
2008 btrfs_delayed_refs_rsv_release(fs_info, 1); in btrfs_cleanup_pending_block_groups()
2013 static inline int btrfs_start_delalloc_flush(struct btrfs_fs_info *fs_info) in btrfs_start_delalloc_flush() argument
2024 if (btrfs_test_opt(fs_info, FLUSHONCOMMIT)) in btrfs_start_delalloc_flush()
2025 writeback_inodes_sb(fs_info->sb, WB_REASON_SYNC); in btrfs_start_delalloc_flush()
2029 static inline void btrfs_wait_delalloc_flush(struct btrfs_fs_info *fs_info) in btrfs_wait_delalloc_flush() argument
2031 if (btrfs_test_opt(fs_info, FLUSHONCOMMIT)) in btrfs_wait_delalloc_flush()
2032 btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1); in btrfs_wait_delalloc_flush()
2037 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_commit_transaction() local
2089 mutex_lock(&fs_info->ro_block_group_mutex); in btrfs_commit_transaction()
2093 mutex_unlock(&fs_info->ro_block_group_mutex); in btrfs_commit_transaction()
2104 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2108 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2125 wake_up(&fs_info->transaction_blocked_wait); in btrfs_commit_transaction()
2127 if (cur_trans->list.prev != &fs_info->trans_list) { in btrfs_commit_transaction()
2137 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2147 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2150 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2157 if (BTRFS_FS_ERROR(fs_info)) { in btrfs_commit_transaction()
2165 ret = btrfs_start_delalloc_flush(fs_info); in btrfs_commit_transaction()
2181 btrfs_wait_delalloc_flush(fs_info); in btrfs_commit_transaction()
2191 btrfs_scrub_pause(fs_info); in btrfs_commit_transaction()
2197 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2199 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2212 mutex_lock(&fs_info->reloc_mutex); in btrfs_commit_transaction()
2245 btrfs_assert_delayed_root_empty(fs_info); in btrfs_commit_transaction()
2262 mutex_lock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2272 btrfs_apply_pending_changes(fs_info); in btrfs_commit_transaction()
2277 btrfs_free_log_root_tree(trans, fs_info); in btrfs_commit_transaction()
2300 cur_trans = fs_info->running_transaction; in btrfs_commit_transaction()
2302 btrfs_set_root_node(&fs_info->tree_root->root_item, in btrfs_commit_transaction()
2303 fs_info->tree_root->node); in btrfs_commit_transaction()
2304 list_add_tail(&fs_info->tree_root->dirty_list, in btrfs_commit_transaction()
2307 btrfs_set_root_node(&fs_info->chunk_root->root_item, in btrfs_commit_transaction()
2308 fs_info->chunk_root->node); in btrfs_commit_transaction()
2309 list_add_tail(&fs_info->chunk_root->dirty_list, in btrfs_commit_transaction()
2316 update_super_roots(fs_info); in btrfs_commit_transaction()
2318 btrfs_set_super_log_root(fs_info->super_copy, 0); in btrfs_commit_transaction()
2319 btrfs_set_super_log_root_level(fs_info->super_copy, 0); in btrfs_commit_transaction()
2320 memcpy(fs_info->super_for_commit, fs_info->super_copy, in btrfs_commit_transaction()
2321 sizeof(*fs_info->super_copy)); in btrfs_commit_transaction()
2325 clear_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags); in btrfs_commit_transaction()
2326 clear_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags); in btrfs_commit_transaction()
2330 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2332 fs_info->running_transaction = NULL; in btrfs_commit_transaction()
2333 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2334 mutex_unlock(&fs_info->reloc_mutex); in btrfs_commit_transaction()
2336 wake_up(&fs_info->transaction_wait); in btrfs_commit_transaction()
2340 btrfs_handle_fs_error(fs_info, ret, in btrfs_commit_transaction()
2346 mutex_unlock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2357 ret = write_all_supers(fs_info, 0); in btrfs_commit_transaction()
2362 mutex_unlock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2376 btrfs_clear_space_info_full(fs_info); in btrfs_commit_transaction()
2378 fs_info->last_trans_committed = cur_trans->transid; in btrfs_commit_transaction()
2386 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2388 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2394 sb_end_intwrite(fs_info->sb); in btrfs_commit_transaction()
2398 btrfs_scrub_continue(fs_info); in btrfs_commit_transaction()
2408 mutex_unlock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2410 mutex_unlock(&fs_info->reloc_mutex); in btrfs_commit_transaction()
2412 btrfs_scrub_continue(fs_info); in btrfs_commit_transaction()
2418 btrfs_warn(fs_info, "Skipping commit of aborted transaction."); in btrfs_commit_transaction()
2439 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_clean_one_deleted_snapshot() local
2441 spin_lock(&fs_info->trans_lock); in btrfs_clean_one_deleted_snapshot()
2442 if (list_empty(&fs_info->dead_roots)) { in btrfs_clean_one_deleted_snapshot()
2443 spin_unlock(&fs_info->trans_lock); in btrfs_clean_one_deleted_snapshot()
2446 root = list_first_entry(&fs_info->dead_roots, in btrfs_clean_one_deleted_snapshot()
2449 spin_unlock(&fs_info->trans_lock); in btrfs_clean_one_deleted_snapshot()
2451 btrfs_debug(fs_info, "cleaner removing %llu", root->root_key.objectid); in btrfs_clean_one_deleted_snapshot()
2465 void btrfs_apply_pending_changes(struct btrfs_fs_info *fs_info) in btrfs_apply_pending_changes() argument
2470 prev = xchg(&fs_info->pending_changes, 0); in btrfs_apply_pending_changes()
2476 btrfs_debug(fs_info, "pending commit done"); in btrfs_apply_pending_changes()
2480 btrfs_warn(fs_info, in btrfs_apply_pending_changes()