Lines Matching refs:fs_info
128 btrfs_err(transaction->fs_info, in btrfs_put_transaction()
156 struct btrfs_fs_info *fs_info = trans->fs_info; in switch_commit_roots() local
160 down_write(&fs_info->commit_root_sem); in switch_commit_roots()
180 btrfs_drop_and_free_fs_root(fs_info, root); in switch_commit_roots()
212 &fs_info->caching_block_groups, list) { in switch_commit_roots()
223 up_write(&fs_info->commit_root_sem); in switch_commit_roots()
257 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_trans_release_chunk_metadata() local
264 btrfs_block_rsv_release(fs_info, &fs_info->chunk_block_rsv, in btrfs_trans_release_chunk_metadata()
272 static noinline int join_transaction(struct btrfs_fs_info *fs_info, in join_transaction() argument
277 spin_lock(&fs_info->trans_lock); in join_transaction()
280 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) { in join_transaction()
281 spin_unlock(&fs_info->trans_lock); in join_transaction()
285 cur_trans = fs_info->running_transaction; in join_transaction()
288 spin_unlock(&fs_info->trans_lock); in join_transaction()
292 spin_unlock(&fs_info->trans_lock); in join_transaction()
298 spin_unlock(&fs_info->trans_lock); in join_transaction()
301 spin_unlock(&fs_info->trans_lock); in join_transaction()
320 spin_lock(&fs_info->trans_lock); in join_transaction()
321 if (fs_info->running_transaction) { in join_transaction()
328 } else if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) { in join_transaction()
329 spin_unlock(&fs_info->trans_lock); in join_transaction()
334 cur_trans->fs_info = fs_info; in join_transaction()
361 if (!list_empty(&fs_info->tree_mod_seq_list)) in join_transaction()
363 if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log)) in join_transaction()
365 atomic64_set(&fs_info->tree_mod_seq, 0); in join_transaction()
379 list_add_tail(&cur_trans->list, &fs_info->trans_list); in join_transaction()
380 extent_io_tree_init(fs_info, &cur_trans->dirty_pages, in join_transaction()
381 IO_TREE_TRANS_DIRTY_PAGES, fs_info->btree_inode); in join_transaction()
382 extent_io_tree_init(fs_info, &cur_trans->pinned_extents, in join_transaction()
384 fs_info->generation++; in join_transaction()
385 cur_trans->transid = fs_info->generation; in join_transaction()
386 fs_info->running_transaction = cur_trans; in join_transaction()
388 spin_unlock(&fs_info->trans_lock); in join_transaction()
403 struct btrfs_fs_info *fs_info = root->fs_info; in record_root_in_trans() local
407 WARN_ON(root == fs_info->extent_root); in record_root_in_trans()
422 spin_lock(&fs_info->fs_roots_radix_lock); in record_root_in_trans()
424 spin_unlock(&fs_info->fs_roots_radix_lock); in record_root_in_trans()
427 radix_tree_tag_set(&fs_info->fs_roots_radix, in record_root_in_trans()
430 spin_unlock(&fs_info->fs_roots_radix_lock); in record_root_in_trans()
463 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_add_dropped_root() local
472 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_add_dropped_root()
473 radix_tree_tag_clear(&fs_info->fs_roots_radix, in btrfs_add_dropped_root()
476 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_add_dropped_root()
482 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_record_root_in_trans() local
496 mutex_lock(&fs_info->reloc_mutex); in btrfs_record_root_in_trans()
498 mutex_unlock(&fs_info->reloc_mutex); in btrfs_record_root_in_trans()
514 static void wait_current_trans(struct btrfs_fs_info *fs_info) in wait_current_trans() argument
518 spin_lock(&fs_info->trans_lock); in wait_current_trans()
519 cur_trans = fs_info->running_transaction; in wait_current_trans()
522 spin_unlock(&fs_info->trans_lock); in wait_current_trans()
524 wait_event(fs_info->transaction_wait, in wait_current_trans()
529 spin_unlock(&fs_info->trans_lock); in wait_current_trans()
533 static int may_wait_transaction(struct btrfs_fs_info *fs_info, int type) in may_wait_transaction() argument
535 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in may_wait_transaction()
546 struct btrfs_fs_info *fs_info = root->fs_info; in need_reserve_reloc_root() local
548 if (!fs_info->reloc_ctl || in need_reserve_reloc_root()
562 struct btrfs_fs_info *fs_info = root->fs_info; in start_transaction() local
563 struct btrfs_block_rsv *delayed_refs_rsv = &fs_info->delayed_refs_rsv; in start_transaction()
575 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) in start_transaction()
592 if (num_items && root != fs_info->chunk_root) { in start_transaction()
593 struct btrfs_block_rsv *rsv = &fs_info->trans_block_rsv; in start_transaction()
596 qgroup_reserved = num_items * fs_info->nodesize; in start_transaction()
609 num_bytes = btrfs_calc_insert_metadata_size(fs_info, num_items); in start_transaction()
620 num_bytes += fs_info->nodesize; in start_transaction()
628 btrfs_migrate_to_delayed_refs_rsv(fs_info, rsv, in start_transaction()
644 ret = btrfs_delayed_refs_rsv_refill(fs_info, flush); in start_transaction()
666 sb_start_intwrite(fs_info->sb); in start_transaction()
668 if (may_wait_transaction(fs_info, type)) in start_transaction()
669 wait_current_trans(fs_info); in start_transaction()
672 ret = join_transaction(fs_info, type); in start_transaction()
674 wait_current_trans(fs_info); in start_transaction()
684 cur_trans = fs_info->running_transaction; in start_transaction()
690 h->fs_info = root->fs_info; in start_transaction()
698 may_wait_transaction(fs_info, type)) { in start_transaction()
705 trace_btrfs_space_reservation(fs_info, "transaction", in start_transaction()
707 h->block_rsv = &fs_info->trans_block_rsv; in start_transaction()
725 btrfs_chunk_alloc(h, btrfs_get_alloc_profile(fs_info, flags), in start_transaction()
743 sb_end_intwrite(fs_info->sb); in start_transaction()
747 btrfs_block_rsv_release(fs_info, &fs_info->trans_block_rsv, in start_transaction()
825 btrfs_wait_for_commit(root->fs_info, 0); in btrfs_attach_transaction_barrier()
836 int btrfs_wait_for_commit(struct btrfs_fs_info *fs_info, u64 transid) in btrfs_wait_for_commit() argument
842 if (transid <= fs_info->last_trans_committed) in btrfs_wait_for_commit()
846 spin_lock(&fs_info->trans_lock); in btrfs_wait_for_commit()
847 list_for_each_entry(t, &fs_info->trans_list, list) { in btrfs_wait_for_commit()
859 spin_unlock(&fs_info->trans_lock); in btrfs_wait_for_commit()
866 if (transid > fs_info->last_trans_committed) in btrfs_wait_for_commit()
872 spin_lock(&fs_info->trans_lock); in btrfs_wait_for_commit()
873 list_for_each_entry_reverse(t, &fs_info->trans_list, in btrfs_wait_for_commit()
883 spin_unlock(&fs_info->trans_lock); in btrfs_wait_for_commit()
894 void btrfs_throttle(struct btrfs_fs_info *fs_info) in btrfs_throttle() argument
896 wait_current_trans(fs_info); in btrfs_throttle()
901 struct btrfs_fs_info *fs_info = trans->fs_info; in should_end_transaction() local
903 if (btrfs_check_space_for_delayed_refs(fs_info)) in should_end_transaction()
906 return !!btrfs_block_rsv_check(&fs_info->global_block_rsv, 5); in should_end_transaction()
924 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_trans_release_metadata() local
934 ASSERT(trans->block_rsv == &fs_info->trans_block_rsv); in btrfs_trans_release_metadata()
935 trace_btrfs_space_reservation(fs_info, "transaction", in btrfs_trans_release_metadata()
937 btrfs_block_rsv_release(fs_info, trans->block_rsv, in btrfs_trans_release_metadata()
945 struct btrfs_fs_info *info = trans->fs_info; in __btrfs_end_transaction()
1007 int btrfs_write_marked_extents(struct btrfs_fs_info *fs_info, in btrfs_write_marked_extents() argument
1012 struct address_space *mapping = fs_info->btree_inode->i_mapping; in btrfs_write_marked_extents()
1017 atomic_inc(&BTRFS_I(fs_info->btree_inode)->sync_writers); in btrfs_write_marked_extents()
1053 atomic_dec(&BTRFS_I(fs_info->btree_inode)->sync_writers); in btrfs_write_marked_extents()
1063 static int __btrfs_wait_marked_extents(struct btrfs_fs_info *fs_info, in __btrfs_wait_marked_extents() argument
1068 struct address_space *mapping = fs_info->btree_inode->i_mapping; in __btrfs_wait_marked_extents()
1101 static int btrfs_wait_extents(struct btrfs_fs_info *fs_info, in btrfs_wait_extents() argument
1107 err = __btrfs_wait_marked_extents(fs_info, dirty_pages); in btrfs_wait_extents()
1108 if (test_and_clear_bit(BTRFS_FS_BTREE_ERR, &fs_info->flags)) in btrfs_wait_extents()
1118 struct btrfs_fs_info *fs_info = log_root->fs_info; in btrfs_wait_tree_log_extents() local
1125 err = __btrfs_wait_marked_extents(fs_info, dirty_pages); in btrfs_wait_tree_log_extents()
1127 test_and_clear_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags)) in btrfs_wait_tree_log_extents()
1131 test_and_clear_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags)) in btrfs_wait_tree_log_extents()
1151 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_write_and_wait_transaction() local
1155 ret = btrfs_write_marked_extents(fs_info, dirty_pages, EXTENT_DIRTY); in btrfs_write_and_wait_transaction()
1157 ret2 = btrfs_wait_extents(fs_info, dirty_pages); in btrfs_write_and_wait_transaction()
1185 struct btrfs_fs_info *fs_info = root->fs_info; in update_cowonly_root() local
1186 struct btrfs_root *tree_root = fs_info->tree_root; in update_cowonly_root()
1218 struct btrfs_fs_info *fs_info = trans->fs_info; in commit_cowonly_roots() local
1225 eb = btrfs_lock_root_node(fs_info->tree_root); in commit_cowonly_roots()
1226 ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, in commit_cowonly_roots()
1257 while (!list_empty(&fs_info->dirty_cowonly_roots)) { in commit_cowonly_roots()
1259 next = fs_info->dirty_cowonly_roots.next; in commit_cowonly_roots()
1264 if (root != fs_info->extent_root) in commit_cowonly_roots()
1284 if (!list_empty(&fs_info->dirty_cowonly_roots)) in commit_cowonly_roots()
1287 list_add_tail(&fs_info->extent_root->dirty_list, in commit_cowonly_roots()
1291 fs_info->dev_replace.committed_cursor_left = in commit_cowonly_roots()
1292 fs_info->dev_replace.cursor_left_last_write_of_item; in commit_cowonly_roots()
1304 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_add_dead_root() local
1306 spin_lock(&fs_info->trans_lock); in btrfs_add_dead_root()
1309 list_add_tail(&root->root_list, &fs_info->dead_roots); in btrfs_add_dead_root()
1311 spin_unlock(&fs_info->trans_lock); in btrfs_add_dead_root()
1319 struct btrfs_fs_info *fs_info = trans->fs_info; in commit_fs_roots() local
1324 spin_lock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1326 ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix, in commit_fs_roots()
1336 radix_tree_tag_clear(&fs_info->fs_roots_radix, in commit_fs_roots()
1339 spin_unlock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1357 ret2 = btrfs_update_root(trans, fs_info->tree_root, in commit_fs_roots()
1362 spin_lock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1366 spin_unlock(&fs_info->fs_roots_radix_lock); in commit_fs_roots()
1376 struct btrfs_fs_info *info = root->fs_info; in btrfs_defrag_root()
1422 struct btrfs_fs_info *fs_info = src->fs_info; in qgroup_account_snapshot() local
1430 if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags)) in qgroup_account_snapshot()
1445 mutex_lock(&fs_info->tree_log_mutex); in qgroup_account_snapshot()
1478 btrfs_handle_fs_error(fs_info, ret, in qgroup_account_snapshot()
1482 mutex_unlock(&fs_info->tree_log_mutex); in qgroup_account_snapshot()
1508 struct btrfs_fs_info *fs_info = trans->fs_info; in create_pending_snapshot() local
1511 struct btrfs_root *tree_root = fs_info->tree_root; in create_pending_snapshot()
1562 trace_btrfs_space_reservation(fs_info, "transaction", in create_pending_snapshot()
1682 pending->snap = btrfs_get_new_fs_root(fs_info, objectid, pending->anon_dev); in create_pending_snapshot()
1789 static void update_super_roots(struct btrfs_fs_info *fs_info) in update_super_roots() argument
1794 super = fs_info->super_copy; in update_super_roots()
1796 root_item = &fs_info->chunk_root->root_item; in update_super_roots()
1801 root_item = &fs_info->tree_root->root_item; in update_super_roots()
1805 if (btrfs_test_opt(fs_info, SPACE_CACHE)) in update_super_roots()
1807 if (test_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags)) in update_super_roots()
1841 static void wait_current_trans_commit_start(struct btrfs_fs_info *fs_info, in wait_current_trans_commit_start() argument
1844 wait_event(fs_info->transaction_blocked_wait, in wait_current_trans_commit_start()
1854 struct btrfs_fs_info *fs_info, in wait_current_trans_commit_start_and_unblock() argument
1857 wait_event(fs_info->transaction_wait, in wait_current_trans_commit_start_and_unblock()
1881 __sb_writers_acquired(ac->newtrans->fs_info->sb, SB_FREEZE_FS); in do_async_commit()
1892 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_commit_transaction_async() local
1919 __sb_writers_release(fs_info->sb, SB_FREEZE_FS); in btrfs_commit_transaction_async()
1925 wait_current_trans_commit_start_and_unblock(fs_info, cur_trans); in btrfs_commit_transaction_async()
1927 wait_current_trans_commit_start(fs_info, cur_trans); in btrfs_commit_transaction_async()
1939 struct btrfs_fs_info *fs_info = trans->fs_info; in cleanup_transaction() local
1946 spin_lock(&fs_info->trans_lock); in cleanup_transaction()
1955 if (cur_trans == fs_info->running_transaction) { in cleanup_transaction()
1957 spin_unlock(&fs_info->trans_lock); in cleanup_transaction()
1961 spin_lock(&fs_info->trans_lock); in cleanup_transaction()
1974 spin_unlock(&fs_info->trans_lock); in cleanup_transaction()
1976 btrfs_cleanup_one_transaction(trans->transaction, fs_info); in cleanup_transaction()
1978 spin_lock(&fs_info->trans_lock); in cleanup_transaction()
1979 if (cur_trans == fs_info->running_transaction) in cleanup_transaction()
1980 fs_info->running_transaction = NULL; in cleanup_transaction()
1981 spin_unlock(&fs_info->trans_lock); in cleanup_transaction()
1984 sb_end_intwrite(fs_info->sb); in cleanup_transaction()
1992 btrfs_scrub_cancel(fs_info); in cleanup_transaction()
2003 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_cleanup_pending_block_groups() local
2007 btrfs_delayed_refs_rsv_release(fs_info, 1); in btrfs_cleanup_pending_block_groups()
2014 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_start_delalloc_flush() local
2025 if (btrfs_test_opt(fs_info, FLUSHONCOMMIT)) { in btrfs_start_delalloc_flush()
2026 writeback_inodes_sb(fs_info->sb, WB_REASON_SYNC); in btrfs_start_delalloc_flush()
2051 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_wait_delalloc_flush() local
2053 if (btrfs_test_opt(fs_info, FLUSHONCOMMIT)) { in btrfs_wait_delalloc_flush()
2054 btrfs_wait_ordered_roots(fs_info, U64_MAX, 0, (u64)-1); in btrfs_wait_delalloc_flush()
2073 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_commit_transaction() local
2140 mutex_lock(&fs_info->ro_block_group_mutex); in btrfs_commit_transaction()
2144 mutex_unlock(&fs_info->ro_block_group_mutex); in btrfs_commit_transaction()
2155 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2157 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2172 wake_up(&fs_info->transaction_blocked_wait); in btrfs_commit_transaction()
2174 if (cur_trans->list.prev != &fs_info->trans_list) { in btrfs_commit_transaction()
2179 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2188 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2191 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2198 if (test_bit(BTRFS_FS_STATE_TRANS_ABORTED, &fs_info->fs_state)) { in btrfs_commit_transaction()
2232 btrfs_scrub_pause(fs_info); in btrfs_commit_transaction()
2238 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2240 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2253 mutex_lock(&fs_info->reloc_mutex); in btrfs_commit_transaction()
2286 btrfs_assert_delayed_root_empty(fs_info); in btrfs_commit_transaction()
2303 mutex_lock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2313 btrfs_apply_pending_changes(fs_info); in btrfs_commit_transaction()
2318 btrfs_free_log_root_tree(trans, fs_info); in btrfs_commit_transaction()
2349 cur_trans = fs_info->running_transaction; in btrfs_commit_transaction()
2351 btrfs_set_root_node(&fs_info->tree_root->root_item, in btrfs_commit_transaction()
2352 fs_info->tree_root->node); in btrfs_commit_transaction()
2353 list_add_tail(&fs_info->tree_root->dirty_list, in btrfs_commit_transaction()
2356 btrfs_set_root_node(&fs_info->chunk_root->root_item, in btrfs_commit_transaction()
2357 fs_info->chunk_root->node); in btrfs_commit_transaction()
2358 list_add_tail(&fs_info->chunk_root->dirty_list, in btrfs_commit_transaction()
2365 update_super_roots(fs_info); in btrfs_commit_transaction()
2367 btrfs_set_super_log_root(fs_info->super_copy, 0); in btrfs_commit_transaction()
2368 btrfs_set_super_log_root_level(fs_info->super_copy, 0); in btrfs_commit_transaction()
2369 memcpy(fs_info->super_for_commit, fs_info->super_copy, in btrfs_commit_transaction()
2370 sizeof(*fs_info->super_copy)); in btrfs_commit_transaction()
2374 clear_bit(BTRFS_FS_LOG1_ERR, &fs_info->flags); in btrfs_commit_transaction()
2375 clear_bit(BTRFS_FS_LOG2_ERR, &fs_info->flags); in btrfs_commit_transaction()
2379 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2381 fs_info->running_transaction = NULL; in btrfs_commit_transaction()
2382 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2383 mutex_unlock(&fs_info->reloc_mutex); in btrfs_commit_transaction()
2385 wake_up(&fs_info->transaction_wait); in btrfs_commit_transaction()
2389 btrfs_handle_fs_error(fs_info, ret, in btrfs_commit_transaction()
2395 mutex_unlock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2399 ret = write_all_supers(fs_info, 0); in btrfs_commit_transaction()
2404 mutex_unlock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2411 btrfs_clear_space_info_full(fs_info); in btrfs_commit_transaction()
2413 fs_info->last_trans_committed = cur_trans->transid; in btrfs_commit_transaction()
2421 spin_lock(&fs_info->trans_lock); in btrfs_commit_transaction()
2423 spin_unlock(&fs_info->trans_lock); in btrfs_commit_transaction()
2429 sb_end_intwrite(fs_info->sb); in btrfs_commit_transaction()
2433 btrfs_scrub_continue(fs_info); in btrfs_commit_transaction()
2443 mutex_unlock(&fs_info->tree_log_mutex); in btrfs_commit_transaction()
2445 mutex_unlock(&fs_info->reloc_mutex); in btrfs_commit_transaction()
2447 btrfs_scrub_continue(fs_info); in btrfs_commit_transaction()
2453 btrfs_warn(fs_info, "Skipping commit of aborted transaction."); in btrfs_commit_transaction()
2474 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_clean_one_deleted_snapshot() local
2476 spin_lock(&fs_info->trans_lock); in btrfs_clean_one_deleted_snapshot()
2477 if (list_empty(&fs_info->dead_roots)) { in btrfs_clean_one_deleted_snapshot()
2478 spin_unlock(&fs_info->trans_lock); in btrfs_clean_one_deleted_snapshot()
2481 root = list_first_entry(&fs_info->dead_roots, in btrfs_clean_one_deleted_snapshot()
2484 spin_unlock(&fs_info->trans_lock); in btrfs_clean_one_deleted_snapshot()
2486 btrfs_debug(fs_info, "cleaner removing %llu", root->root_key.objectid); in btrfs_clean_one_deleted_snapshot()
2504 void btrfs_apply_pending_changes(struct btrfs_fs_info *fs_info) in btrfs_apply_pending_changes() argument
2509 prev = xchg(&fs_info->pending_changes, 0); in btrfs_apply_pending_changes()
2515 btrfs_set_opt(fs_info->mount_opt, INODE_MAP_CACHE); in btrfs_apply_pending_changes()
2520 btrfs_clear_opt(fs_info->mount_opt, INODE_MAP_CACHE); in btrfs_apply_pending_changes()
2525 btrfs_debug(fs_info, "pending commit done"); in btrfs_apply_pending_changes()
2529 btrfs_warn(fs_info, in btrfs_apply_pending_changes()