Lines Matching refs:fs_info
60 static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info,
229 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev; in btree_get_extent()
244 em->bdev = BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev; in btree_get_extent()
277 static int csum_tree_block(struct btrfs_fs_info *fs_info, in csum_tree_block() argument
281 u16 csum_size = btrfs_super_csum_size(fs_info->super_copy); in csum_tree_block()
322 btrfs_warn_rl(fs_info, in csum_tree_block()
325 fs_info->sb->s_id, buf->start, in csum_tree_block()
371 btrfs_err_rl(eb->fs_info, in verify_parent_transid()
449 io_tree = &BTRFS_I(root->fs_info->btree_inode)->io_tree; in btree_read_extent_buffer_pages()
470 num_copies = btrfs_num_copies(root->fs_info, in btree_read_extent_buffer_pages()
499 static int csum_dirty_buffer(struct btrfs_fs_info *fs_info, struct page *page) in csum_dirty_buffer() argument
511 csum_tree_block(fs_info, eb, 0); in csum_dirty_buffer()
515 static int check_tree_block_fsid(struct btrfs_fs_info *fs_info, in check_tree_block_fsid() argument
518 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in check_tree_block_fsid()
534 btrfs_crit(root->fs_info, "corrupt leaf, %s: block=%llu," \
632 btrfs_err_rl(eb->fs_info, "bad tree block start %llu %llu", in btree_readpage_end_io_hook()
637 if (check_tree_block_fsid(root->fs_info, eb)) { in btree_readpage_end_io_hook()
638 btrfs_err_rl(eb->fs_info, "bad fsid on block %llu", in btree_readpage_end_io_hook()
645 btrfs_err(root->fs_info, "bad tree block level %d", in btree_readpage_end_io_hook()
654 ret = csum_tree_block(root->fs_info, eb, 1); in btree_readpage_end_io_hook()
708 struct btrfs_fs_info *fs_info; in end_workqueue_bio() local
712 fs_info = end_io_wq->info; in end_workqueue_bio()
717 wq = fs_info->endio_meta_write_workers; in end_workqueue_bio()
720 wq = fs_info->endio_freespace_worker; in end_workqueue_bio()
723 wq = fs_info->endio_raid56_workers; in end_workqueue_bio()
726 wq = fs_info->endio_write_workers; in end_workqueue_bio()
732 wq = fs_info->endio_repair_workers; in end_workqueue_bio()
735 wq = fs_info->endio_raid56_workers; in end_workqueue_bio()
738 wq = fs_info->endio_meta_workers; in end_workqueue_bio()
741 wq = fs_info->endio_workers; in end_workqueue_bio()
794 struct btrfs_fs_info *fs_info; in run_one_async_done() local
799 fs_info = BTRFS_I(async->inode)->root->fs_info; in run_one_async_done()
801 limit = btrfs_async_submit_limit(fs_info); in run_one_async_done()
807 if (atomic_dec_return(&fs_info->nr_async_submits) < limit && in run_one_async_done()
808 waitqueue_active(&fs_info->async_submit_wait)) in run_one_async_done()
809 wake_up(&fs_info->async_submit_wait); in run_one_async_done()
831 int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, in btrfs_wq_submit_bio() argument
859 atomic_inc(&fs_info->nr_async_submits); in btrfs_wq_submit_bio()
864 btrfs_queue_work(fs_info->workers, &async->work); in btrfs_wq_submit_bio()
866 while (atomic_read(&fs_info->async_submit_draining) && in btrfs_wq_submit_bio()
867 atomic_read(&fs_info->nr_async_submits)) { in btrfs_wq_submit_bio()
868 wait_event(fs_info->async_submit_wait, in btrfs_wq_submit_bio()
869 (atomic_read(&fs_info->nr_async_submits) == 0)); in btrfs_wq_submit_bio()
883 ret = csum_dirty_buffer(root->fs_info, bvec->bv_page); in btree_csum_one_bio()
944 ret = btrfs_bio_wq_end_io(BTRFS_I(inode)->root->fs_info, in btree_submit_bio_hook()
961 ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, in btree_submit_bio_hook()
1004 struct btrfs_fs_info *fs_info; in btree_writepages() local
1012 fs_info = BTRFS_I(mapping->host)->root->fs_info; in btree_writepages()
1014 ret = percpu_counter_compare(&fs_info->dirty_metadata_bytes, in btree_writepages()
1045 btrfs_warn(BTRFS_I(page->mapping->host)->root->fs_info, in btree_invalidatepage()
1083 struct inode *btree_inode = root->fs_info->btree_inode; in readahead_tree_block()
1097 struct inode *btree_inode = root->fs_info->btree_inode; in reada_tree_block_flagged()
1125 struct extent_buffer *btrfs_find_tree_block(struct btrfs_fs_info *fs_info, in btrfs_find_tree_block() argument
1128 return find_extent_buffer(fs_info, bytenr); in btrfs_find_tree_block()
1135 return alloc_test_extent_buffer(root->fs_info, bytenr); in btrfs_find_create_tree_block()
1136 return alloc_extent_buffer(root->fs_info, bytenr); in btrfs_find_create_tree_block()
1172 struct btrfs_fs_info *fs_info, in clean_tree_block() argument
1176 fs_info->running_transaction->transid) { in clean_tree_block()
1180 __percpu_counter_add(&fs_info->dirty_metadata_bytes, in clean_tree_block()
1182 fs_info->dirty_metadata_batch); in clean_tree_block()
1217 struct btrfs_root *root, struct btrfs_fs_info *fs_info, in __setup_root() argument
1274 if (fs_info) in __setup_root()
1276 fs_info->btree_inode->i_mapping); in __setup_root()
1281 if (fs_info) in __setup_root()
1282 root->defrag_trans_start = fs_info->generation; in __setup_root()
1291 static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info) in btrfs_alloc_root() argument
1295 root->fs_info = fs_info; in btrfs_alloc_root()
1317 struct btrfs_fs_info *fs_info, in btrfs_create_tree() argument
1321 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_tree()
1327 root = btrfs_alloc_root(fs_info); in btrfs_create_tree()
1332 tree_root->stripesize, root, fs_info, objectid); in btrfs_create_tree()
1351 write_extent_buffer(leaf, fs_info->fsid, btrfs_header_fsid(), in btrfs_create_tree()
1353 write_extent_buffer(leaf, fs_info->chunk_tree_uuid, in btrfs_create_tree()
1397 struct btrfs_fs_info *fs_info) in alloc_log_tree() argument
1400 struct btrfs_root *tree_root = fs_info->tree_root; in alloc_log_tree()
1403 root = btrfs_alloc_root(fs_info); in alloc_log_tree()
1408 tree_root->stripesize, root, fs_info, in alloc_log_tree()
1438 write_extent_buffer(root->node, root->fs_info->fsid, in alloc_log_tree()
1446 struct btrfs_fs_info *fs_info) in btrfs_init_log_root_tree() argument
1450 log_root = alloc_log_tree(trans, fs_info); in btrfs_init_log_root_tree()
1453 WARN_ON(fs_info->log_root_tree); in btrfs_init_log_root_tree()
1454 fs_info->log_root_tree = log_root; in btrfs_init_log_root_tree()
1464 log_root = alloc_log_tree(trans, root->fs_info); in btrfs_add_log_tree()
1492 struct btrfs_fs_info *fs_info = tree_root->fs_info; in btrfs_read_tree_root() local
1501 root = btrfs_alloc_root(fs_info); in btrfs_read_tree_root()
1508 tree_root->stripesize, root, fs_info, key->objectid); in btrfs_read_tree_root()
1610 static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, in btrfs_lookup_fs_root() argument
1615 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_lookup_fs_root()
1616 root = radix_tree_lookup(&fs_info->fs_roots_radix, in btrfs_lookup_fs_root()
1618 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_lookup_fs_root()
1622 int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, in btrfs_insert_fs_root() argument
1631 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_insert_fs_root()
1632 ret = radix_tree_insert(&fs_info->fs_roots_radix, in btrfs_insert_fs_root()
1637 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_insert_fs_root()
1643 struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, in btrfs_get_fs_root() argument
1653 return fs_info->tree_root; in btrfs_get_fs_root()
1655 return fs_info->extent_root; in btrfs_get_fs_root()
1657 return fs_info->chunk_root; in btrfs_get_fs_root()
1659 return fs_info->dev_root; in btrfs_get_fs_root()
1661 return fs_info->csum_root; in btrfs_get_fs_root()
1663 return fs_info->quota_root ? fs_info->quota_root : in btrfs_get_fs_root()
1666 return fs_info->uuid_root ? fs_info->uuid_root : in btrfs_get_fs_root()
1669 root = btrfs_lookup_fs_root(fs_info, location->objectid); in btrfs_get_fs_root()
1676 root = btrfs_read_fs_root(fs_info->tree_root, location); in btrfs_get_fs_root()
1698 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_get_fs_root()
1705 ret = btrfs_insert_fs_root(fs_info, root); in btrfs_get_fs_root()
1787 if (!mutex_trylock(&root->fs_info->cleaner_mutex)) in cleaner_kthread()
1795 mutex_unlock(&root->fs_info->cleaner_mutex); in cleaner_kthread()
1799 mutex_lock(&root->fs_info->cleaner_delayed_iput_mutex); in cleaner_kthread()
1801 mutex_unlock(&root->fs_info->cleaner_delayed_iput_mutex); in cleaner_kthread()
1804 mutex_unlock(&root->fs_info->cleaner_mutex); in cleaner_kthread()
1810 btrfs_run_defrag_inodes(root->fs_info); in cleaner_kthread()
1820 btrfs_delete_unused_bgs(root->fs_info); in cleaner_kthread()
1844 btrfs_err(root->fs_info, in cleaner_kthread()
1852 btrfs_err(root->fs_info, in cleaner_kthread()
1872 delay = HZ * root->fs_info->commit_interval; in transaction_kthread()
1873 mutex_lock(&root->fs_info->transaction_kthread_mutex); in transaction_kthread()
1875 spin_lock(&root->fs_info->trans_lock); in transaction_kthread()
1876 cur = root->fs_info->running_transaction; in transaction_kthread()
1878 spin_unlock(&root->fs_info->trans_lock); in transaction_kthread()
1885 now - cur->start_time < root->fs_info->commit_interval)) { in transaction_kthread()
1886 spin_unlock(&root->fs_info->trans_lock); in transaction_kthread()
1891 spin_unlock(&root->fs_info->trans_lock); in transaction_kthread()
1906 wake_up_process(root->fs_info->cleaner_kthread); in transaction_kthread()
1907 mutex_unlock(&root->fs_info->transaction_kthread_mutex); in transaction_kthread()
1910 &root->fs_info->fs_state))) in transaction_kthread()
1915 (!btrfs_transaction_blocked(root->fs_info) || in transaction_kthread()
2124 static void btrfs_stop_all_workers(struct btrfs_fs_info *fs_info) in btrfs_stop_all_workers() argument
2126 btrfs_destroy_workqueue(fs_info->fixup_workers); in btrfs_stop_all_workers()
2127 btrfs_destroy_workqueue(fs_info->delalloc_workers); in btrfs_stop_all_workers()
2128 btrfs_destroy_workqueue(fs_info->workers); in btrfs_stop_all_workers()
2129 btrfs_destroy_workqueue(fs_info->endio_workers); in btrfs_stop_all_workers()
2130 btrfs_destroy_workqueue(fs_info->endio_meta_workers); in btrfs_stop_all_workers()
2131 btrfs_destroy_workqueue(fs_info->endio_raid56_workers); in btrfs_stop_all_workers()
2132 btrfs_destroy_workqueue(fs_info->endio_repair_workers); in btrfs_stop_all_workers()
2133 btrfs_destroy_workqueue(fs_info->rmw_workers); in btrfs_stop_all_workers()
2134 btrfs_destroy_workqueue(fs_info->endio_meta_write_workers); in btrfs_stop_all_workers()
2135 btrfs_destroy_workqueue(fs_info->endio_write_workers); in btrfs_stop_all_workers()
2136 btrfs_destroy_workqueue(fs_info->endio_freespace_worker); in btrfs_stop_all_workers()
2137 btrfs_destroy_workqueue(fs_info->submit_workers); in btrfs_stop_all_workers()
2138 btrfs_destroy_workqueue(fs_info->delayed_workers); in btrfs_stop_all_workers()
2139 btrfs_destroy_workqueue(fs_info->caching_workers); in btrfs_stop_all_workers()
2140 btrfs_destroy_workqueue(fs_info->readahead_workers); in btrfs_stop_all_workers()
2141 btrfs_destroy_workqueue(fs_info->flush_workers); in btrfs_stop_all_workers()
2142 btrfs_destroy_workqueue(fs_info->qgroup_rescan_workers); in btrfs_stop_all_workers()
2143 btrfs_destroy_workqueue(fs_info->extent_workers); in btrfs_stop_all_workers()
2170 void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info) in btrfs_free_fs_roots() argument
2176 while (!list_empty(&fs_info->dead_roots)) { in btrfs_free_fs_roots()
2177 gang[0] = list_entry(fs_info->dead_roots.next, in btrfs_free_fs_roots()
2182 btrfs_drop_and_free_fs_root(fs_info, gang[0]); in btrfs_free_fs_roots()
2191 ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix, in btrfs_free_fs_roots()
2197 btrfs_drop_and_free_fs_root(fs_info, gang[i]); in btrfs_free_fs_roots()
2200 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) { in btrfs_free_fs_roots()
2201 btrfs_free_log_root_tree(NULL, fs_info); in btrfs_free_fs_roots()
2202 btrfs_destroy_pinned_extent(fs_info->tree_root, in btrfs_free_fs_roots()
2203 fs_info->pinned_extents); in btrfs_free_fs_roots()
2207 static void btrfs_init_scrub(struct btrfs_fs_info *fs_info) in btrfs_init_scrub() argument
2209 mutex_init(&fs_info->scrub_lock); in btrfs_init_scrub()
2210 atomic_set(&fs_info->scrubs_running, 0); in btrfs_init_scrub()
2211 atomic_set(&fs_info->scrub_pause_req, 0); in btrfs_init_scrub()
2212 atomic_set(&fs_info->scrubs_paused, 0); in btrfs_init_scrub()
2213 atomic_set(&fs_info->scrub_cancel_req, 0); in btrfs_init_scrub()
2214 init_waitqueue_head(&fs_info->scrub_pause_wait); in btrfs_init_scrub()
2215 fs_info->scrub_workers_refcnt = 0; in btrfs_init_scrub()
2218 static void btrfs_init_balance(struct btrfs_fs_info *fs_info) in btrfs_init_balance() argument
2220 spin_lock_init(&fs_info->balance_lock); in btrfs_init_balance()
2221 mutex_init(&fs_info->balance_mutex); in btrfs_init_balance()
2222 atomic_set(&fs_info->balance_running, 0); in btrfs_init_balance()
2223 atomic_set(&fs_info->balance_pause_req, 0); in btrfs_init_balance()
2224 atomic_set(&fs_info->balance_cancel_req, 0); in btrfs_init_balance()
2225 fs_info->balance_ctl = NULL; in btrfs_init_balance()
2226 init_waitqueue_head(&fs_info->balance_wait_q); in btrfs_init_balance()
2229 static void btrfs_init_btree_inode(struct btrfs_fs_info *fs_info, in btrfs_init_btree_inode() argument
2232 fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID; in btrfs_init_btree_inode()
2233 set_nlink(fs_info->btree_inode, 1); in btrfs_init_btree_inode()
2239 fs_info->btree_inode->i_size = OFFSET_MAX; in btrfs_init_btree_inode()
2240 fs_info->btree_inode->i_mapping->a_ops = &btree_aops; in btrfs_init_btree_inode()
2242 RB_CLEAR_NODE(&BTRFS_I(fs_info->btree_inode)->rb_node); in btrfs_init_btree_inode()
2243 extent_io_tree_init(&BTRFS_I(fs_info->btree_inode)->io_tree, in btrfs_init_btree_inode()
2244 fs_info->btree_inode->i_mapping); in btrfs_init_btree_inode()
2245 BTRFS_I(fs_info->btree_inode)->io_tree.track_uptodate = 0; in btrfs_init_btree_inode()
2246 extent_map_tree_init(&BTRFS_I(fs_info->btree_inode)->extent_tree); in btrfs_init_btree_inode()
2248 BTRFS_I(fs_info->btree_inode)->io_tree.ops = &btree_extent_io_ops; in btrfs_init_btree_inode()
2250 BTRFS_I(fs_info->btree_inode)->root = tree_root; in btrfs_init_btree_inode()
2251 memset(&BTRFS_I(fs_info->btree_inode)->location, 0, in btrfs_init_btree_inode()
2254 &BTRFS_I(fs_info->btree_inode)->runtime_flags); in btrfs_init_btree_inode()
2255 btrfs_insert_inode_hash(fs_info->btree_inode); in btrfs_init_btree_inode()
2258 static void btrfs_init_dev_replace_locks(struct btrfs_fs_info *fs_info) in btrfs_init_dev_replace_locks() argument
2260 fs_info->dev_replace.lock_owner = 0; in btrfs_init_dev_replace_locks()
2261 atomic_set(&fs_info->dev_replace.nesting_level, 0); in btrfs_init_dev_replace_locks()
2262 mutex_init(&fs_info->dev_replace.lock_finishing_cancel_unmount); in btrfs_init_dev_replace_locks()
2263 mutex_init(&fs_info->dev_replace.lock_management_lock); in btrfs_init_dev_replace_locks()
2264 mutex_init(&fs_info->dev_replace.lock); in btrfs_init_dev_replace_locks()
2265 init_waitqueue_head(&fs_info->replace_wait); in btrfs_init_dev_replace_locks()
2268 static void btrfs_init_qgroup(struct btrfs_fs_info *fs_info) in btrfs_init_qgroup() argument
2270 spin_lock_init(&fs_info->qgroup_lock); in btrfs_init_qgroup()
2271 mutex_init(&fs_info->qgroup_ioctl_lock); in btrfs_init_qgroup()
2272 fs_info->qgroup_tree = RB_ROOT; in btrfs_init_qgroup()
2273 fs_info->qgroup_op_tree = RB_ROOT; in btrfs_init_qgroup()
2274 INIT_LIST_HEAD(&fs_info->dirty_qgroups); in btrfs_init_qgroup()
2275 fs_info->qgroup_seq = 1; in btrfs_init_qgroup()
2276 fs_info->quota_enabled = 0; in btrfs_init_qgroup()
2277 fs_info->pending_quota_state = 0; in btrfs_init_qgroup()
2278 fs_info->qgroup_ulist = NULL; in btrfs_init_qgroup()
2279 mutex_init(&fs_info->qgroup_rescan_lock); in btrfs_init_qgroup()
2282 static int btrfs_init_workqueues(struct btrfs_fs_info *fs_info, in btrfs_init_workqueues() argument
2285 int max_active = fs_info->thread_pool_size; in btrfs_init_workqueues()
2288 fs_info->workers = in btrfs_init_workqueues()
2292 fs_info->delalloc_workers = in btrfs_init_workqueues()
2295 fs_info->flush_workers = in btrfs_init_workqueues()
2298 fs_info->caching_workers = in btrfs_init_workqueues()
2306 fs_info->submit_workers = in btrfs_init_workqueues()
2311 fs_info->fixup_workers = in btrfs_init_workqueues()
2318 fs_info->endio_workers = in btrfs_init_workqueues()
2320 fs_info->endio_meta_workers = in btrfs_init_workqueues()
2322 fs_info->endio_meta_write_workers = in btrfs_init_workqueues()
2324 fs_info->endio_raid56_workers = in btrfs_init_workqueues()
2326 fs_info->endio_repair_workers = in btrfs_init_workqueues()
2328 fs_info->rmw_workers = in btrfs_init_workqueues()
2330 fs_info->endio_write_workers = in btrfs_init_workqueues()
2332 fs_info->endio_freespace_worker = in btrfs_init_workqueues()
2334 fs_info->delayed_workers = in btrfs_init_workqueues()
2336 fs_info->readahead_workers = in btrfs_init_workqueues()
2338 fs_info->qgroup_rescan_workers = in btrfs_init_workqueues()
2340 fs_info->extent_workers = in btrfs_init_workqueues()
2345 if (!(fs_info->workers && fs_info->delalloc_workers && in btrfs_init_workqueues()
2346 fs_info->submit_workers && fs_info->flush_workers && in btrfs_init_workqueues()
2347 fs_info->endio_workers && fs_info->endio_meta_workers && in btrfs_init_workqueues()
2348 fs_info->endio_meta_write_workers && in btrfs_init_workqueues()
2349 fs_info->endio_repair_workers && in btrfs_init_workqueues()
2350 fs_info->endio_write_workers && fs_info->endio_raid56_workers && in btrfs_init_workqueues()
2351 fs_info->endio_freespace_worker && fs_info->rmw_workers && in btrfs_init_workqueues()
2352 fs_info->caching_workers && fs_info->readahead_workers && in btrfs_init_workqueues()
2353 fs_info->fixup_workers && fs_info->delayed_workers && in btrfs_init_workqueues()
2354 fs_info->extent_workers && in btrfs_init_workqueues()
2355 fs_info->qgroup_rescan_workers)) { in btrfs_init_workqueues()
2362 static int btrfs_replay_log(struct btrfs_fs_info *fs_info, in btrfs_replay_log() argument
2366 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_replay_log()
2368 struct btrfs_super_block *disk_super = fs_info->super_copy; in btrfs_replay_log()
2372 btrfs_warn(fs_info, "log replay required on RO media"); in btrfs_replay_log()
2376 log_tree_root = btrfs_alloc_root(fs_info); in btrfs_replay_log()
2381 tree_root->stripesize, log_tree_root, fs_info, in btrfs_replay_log()
2385 fs_info->generation + 1); in btrfs_replay_log()
2387 btrfs_warn(fs_info, "failed to read log tree"); in btrfs_replay_log()
2392 btrfs_err(fs_info, "failed to read log tree"); in btrfs_replay_log()
2400 btrfs_std_error(tree_root->fs_info, ret, in btrfs_replay_log()
2407 if (fs_info->sb->s_flags & MS_RDONLY) { in btrfs_replay_log()
2416 static int btrfs_read_roots(struct btrfs_fs_info *fs_info, in btrfs_read_roots() argument
2431 fs_info->extent_root = root; in btrfs_read_roots()
2438 fs_info->dev_root = root; in btrfs_read_roots()
2439 btrfs_init_devices_late(fs_info); in btrfs_read_roots()
2446 fs_info->csum_root = root; in btrfs_read_roots()
2452 fs_info->quota_enabled = 1; in btrfs_read_roots()
2453 fs_info->pending_quota_state = 1; in btrfs_read_roots()
2454 fs_info->quota_root = root; in btrfs_read_roots()
2465 fs_info->uuid_root = root; in btrfs_read_roots()
2483 struct btrfs_fs_info *fs_info = btrfs_sb(sb); in open_ctree() local
2492 tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info); in open_ctree()
2493 chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info); in open_ctree()
2499 ret = init_srcu_struct(&fs_info->subvol_srcu); in open_ctree()
2505 ret = setup_bdi(fs_info, &fs_info->bdi); in open_ctree()
2511 ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0, GFP_KERNEL); in open_ctree()
2516 fs_info->dirty_metadata_batch = PAGE_CACHE_SIZE * in open_ctree()
2519 ret = percpu_counter_init(&fs_info->delalloc_bytes, 0, GFP_KERNEL); in open_ctree()
2525 ret = percpu_counter_init(&fs_info->bio_counter, 0, GFP_KERNEL); in open_ctree()
2531 fs_info->btree_inode = new_inode(sb); in open_ctree()
2532 if (!fs_info->btree_inode) { in open_ctree()
2537 mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); in open_ctree()
2539 INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); in open_ctree()
2540 INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC); in open_ctree()
2541 INIT_LIST_HEAD(&fs_info->trans_list); in open_ctree()
2542 INIT_LIST_HEAD(&fs_info->dead_roots); in open_ctree()
2543 INIT_LIST_HEAD(&fs_info->delayed_iputs); in open_ctree()
2544 INIT_LIST_HEAD(&fs_info->delalloc_roots); in open_ctree()
2545 INIT_LIST_HEAD(&fs_info->caching_block_groups); in open_ctree()
2546 spin_lock_init(&fs_info->delalloc_root_lock); in open_ctree()
2547 spin_lock_init(&fs_info->trans_lock); in open_ctree()
2548 spin_lock_init(&fs_info->fs_roots_radix_lock); in open_ctree()
2549 spin_lock_init(&fs_info->delayed_iput_lock); in open_ctree()
2550 spin_lock_init(&fs_info->defrag_inodes_lock); in open_ctree()
2551 spin_lock_init(&fs_info->free_chunk_lock); in open_ctree()
2552 spin_lock_init(&fs_info->tree_mod_seq_lock); in open_ctree()
2553 spin_lock_init(&fs_info->super_lock); in open_ctree()
2554 spin_lock_init(&fs_info->qgroup_op_lock); in open_ctree()
2555 spin_lock_init(&fs_info->buffer_lock); in open_ctree()
2556 spin_lock_init(&fs_info->unused_bgs_lock); in open_ctree()
2557 rwlock_init(&fs_info->tree_mod_log_lock); in open_ctree()
2558 mutex_init(&fs_info->unused_bg_unpin_mutex); in open_ctree()
2559 mutex_init(&fs_info->delete_unused_bgs_mutex); in open_ctree()
2560 mutex_init(&fs_info->reloc_mutex); in open_ctree()
2561 mutex_init(&fs_info->delalloc_root_mutex); in open_ctree()
2562 mutex_init(&fs_info->cleaner_delayed_iput_mutex); in open_ctree()
2563 seqlock_init(&fs_info->profiles_lock); in open_ctree()
2565 INIT_LIST_HEAD(&fs_info->dirty_cowonly_roots); in open_ctree()
2566 INIT_LIST_HEAD(&fs_info->space_info); in open_ctree()
2567 INIT_LIST_HEAD(&fs_info->tree_mod_seq_list); in open_ctree()
2568 INIT_LIST_HEAD(&fs_info->unused_bgs); in open_ctree()
2569 btrfs_mapping_init(&fs_info->mapping_tree); in open_ctree()
2570 btrfs_init_block_rsv(&fs_info->global_block_rsv, in open_ctree()
2572 btrfs_init_block_rsv(&fs_info->delalloc_block_rsv, in open_ctree()
2574 btrfs_init_block_rsv(&fs_info->trans_block_rsv, BTRFS_BLOCK_RSV_TRANS); in open_ctree()
2575 btrfs_init_block_rsv(&fs_info->chunk_block_rsv, BTRFS_BLOCK_RSV_CHUNK); in open_ctree()
2576 btrfs_init_block_rsv(&fs_info->empty_block_rsv, BTRFS_BLOCK_RSV_EMPTY); in open_ctree()
2577 btrfs_init_block_rsv(&fs_info->delayed_block_rsv, in open_ctree()
2579 atomic_set(&fs_info->nr_async_submits, 0); in open_ctree()
2580 atomic_set(&fs_info->async_delalloc_pages, 0); in open_ctree()
2581 atomic_set(&fs_info->async_submit_draining, 0); in open_ctree()
2582 atomic_set(&fs_info->nr_async_bios, 0); in open_ctree()
2583 atomic_set(&fs_info->defrag_running, 0); in open_ctree()
2584 atomic_set(&fs_info->qgroup_op_seq, 0); in open_ctree()
2585 atomic64_set(&fs_info->tree_mod_seq, 0); in open_ctree()
2586 fs_info->sb = sb; in open_ctree()
2587 fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE; in open_ctree()
2588 fs_info->metadata_ratio = 0; in open_ctree()
2589 fs_info->defrag_inodes = RB_ROOT; in open_ctree()
2590 fs_info->free_chunk_space = 0; in open_ctree()
2591 fs_info->tree_mod_log = RB_ROOT; in open_ctree()
2592 fs_info->commit_interval = BTRFS_DEFAULT_COMMIT_INTERVAL; in open_ctree()
2593 fs_info->avg_delayed_ref_runtime = NSEC_PER_SEC >> 6; /* div by 64 */ in open_ctree()
2595 INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS & ~__GFP_DIRECT_RECLAIM); in open_ctree()
2596 spin_lock_init(&fs_info->reada_lock); in open_ctree()
2598 fs_info->thread_pool_size = min_t(unsigned long, in open_ctree()
2601 INIT_LIST_HEAD(&fs_info->ordered_roots); in open_ctree()
2602 spin_lock_init(&fs_info->ordered_root_lock); in open_ctree()
2603 fs_info->delayed_root = kmalloc(sizeof(struct btrfs_delayed_root), in open_ctree()
2605 if (!fs_info->delayed_root) { in open_ctree()
2609 btrfs_init_delayed_root(fs_info->delayed_root); in open_ctree()
2611 btrfs_init_scrub(fs_info); in open_ctree()
2613 fs_info->check_integrity_print_mask = 0; in open_ctree()
2615 btrfs_init_balance(fs_info); in open_ctree()
2616 btrfs_init_async_reclaim_work(&fs_info->async_reclaim_work); in open_ctree()
2620 sb->s_bdi = &fs_info->bdi; in open_ctree()
2622 btrfs_init_btree_inode(fs_info, tree_root); in open_ctree()
2624 spin_lock_init(&fs_info->block_group_cache_lock); in open_ctree()
2625 fs_info->block_group_cache_tree = RB_ROOT; in open_ctree()
2626 fs_info->first_logical_byte = (u64)-1; in open_ctree()
2628 extent_io_tree_init(&fs_info->freed_extents[0], in open_ctree()
2629 fs_info->btree_inode->i_mapping); in open_ctree()
2630 extent_io_tree_init(&fs_info->freed_extents[1], in open_ctree()
2631 fs_info->btree_inode->i_mapping); in open_ctree()
2632 fs_info->pinned_extents = &fs_info->freed_extents[0]; in open_ctree()
2633 fs_info->do_barriers = 1; in open_ctree()
2636 mutex_init(&fs_info->ordered_operations_mutex); in open_ctree()
2637 mutex_init(&fs_info->tree_log_mutex); in open_ctree()
2638 mutex_init(&fs_info->chunk_mutex); in open_ctree()
2639 mutex_init(&fs_info->transaction_kthread_mutex); in open_ctree()
2640 mutex_init(&fs_info->cleaner_mutex); in open_ctree()
2641 mutex_init(&fs_info->volume_mutex); in open_ctree()
2642 mutex_init(&fs_info->ro_block_group_mutex); in open_ctree()
2643 init_rwsem(&fs_info->commit_root_sem); in open_ctree()
2644 init_rwsem(&fs_info->cleanup_work_sem); in open_ctree()
2645 init_rwsem(&fs_info->subvol_sem); in open_ctree()
2646 sema_init(&fs_info->uuid_tree_rescan_sem, 1); in open_ctree()
2648 btrfs_init_dev_replace_locks(fs_info); in open_ctree()
2649 btrfs_init_qgroup(fs_info); in open_ctree()
2651 btrfs_init_free_cluster(&fs_info->meta_alloc_cluster); in open_ctree()
2652 btrfs_init_free_cluster(&fs_info->data_alloc_cluster); in open_ctree()
2654 init_waitqueue_head(&fs_info->transaction_throttle); in open_ctree()
2655 init_waitqueue_head(&fs_info->transaction_wait); in open_ctree()
2656 init_waitqueue_head(&fs_info->transaction_blocked_wait); in open_ctree()
2657 init_waitqueue_head(&fs_info->async_submit_wait); in open_ctree()
2659 INIT_LIST_HEAD(&fs_info->pinned_chunks); in open_ctree()
2661 ret = btrfs_alloc_stripe_hash_table(fs_info); in open_ctree()
2668 fs_info, BTRFS_ROOT_TREE_OBJECTID); in open_ctree()
2697 memcpy(fs_info->super_copy, bh->b_data, sizeof(*fs_info->super_copy)); in open_ctree()
2698 memcpy(fs_info->super_for_commit, fs_info->super_copy, in open_ctree()
2699 sizeof(*fs_info->super_for_commit)); in open_ctree()
2702 memcpy(fs_info->fsid, fs_info->super_copy->fsid, BTRFS_FSID_SIZE); in open_ctree()
2704 ret = btrfs_check_super_valid(fs_info, sb->s_flags & MS_RDONLY); in open_ctree()
2711 disk_super = fs_info->super_copy; in open_ctree()
2717 set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state); in open_ctree()
2724 find_oldest_super_backup(fs_info, generation); in open_ctree()
2730 fs_info->compress_type = BTRFS_COMPRESS_ZLIB; in open_ctree()
2770 if (tree_root->fs_info->compress_type == BTRFS_COMPRESS_LZO) in open_ctree()
2789 fs_info->dirty_metadata_batch = nodesize * (1 + ilog2(nr_cpu_ids)); in open_ctree()
2790 fs_info->delalloc_batch = sectorsize * 512 * (1 + ilog2(nr_cpu_ids)); in open_ctree()
2820 max_active = fs_info->thread_pool_size; in open_ctree()
2822 ret = btrfs_init_workqueues(fs_info, fs_devices); in open_ctree()
2828 fs_info->bdi.ra_pages *= btrfs_super_num_devices(disk_super); in open_ctree()
2829 fs_info->bdi.ra_pages = max(fs_info->bdi.ra_pages, in open_ctree()
2850 mutex_lock(&fs_info->chunk_mutex); in open_ctree()
2852 mutex_unlock(&fs_info->chunk_mutex); in open_ctree()
2862 fs_info, BTRFS_CHUNK_TREE_OBJECTID); in open_ctree()
2879 read_extent_buffer(chunk_root->node, fs_info->chunk_tree_uuid, in open_ctree()
2933 ret = btrfs_read_roots(fs_info, tree_root); in open_ctree()
2937 fs_info->generation = generation; in open_ctree()
2938 fs_info->last_trans_committed = generation; in open_ctree()
2940 ret = btrfs_recover_balance(fs_info); in open_ctree()
2946 ret = btrfs_init_dev_stats(fs_info); in open_ctree()
2953 ret = btrfs_init_dev_replace(fs_info); in open_ctree()
2973 ret = btrfs_sysfs_add_mounted(fs_info); in open_ctree()
2979 ret = btrfs_init_space_info(fs_info); in open_ctree()
2985 ret = btrfs_read_block_groups(fs_info->extent_root); in open_ctree()
2990 fs_info->num_tolerated_disk_barrier_failures = in open_ctree()
2991 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info); in open_ctree()
2992 if (fs_info->fs_devices->missing_devices > in open_ctree()
2993 fs_info->num_tolerated_disk_barrier_failures && in open_ctree()
2996 fs_info->fs_devices->missing_devices, in open_ctree()
2997 fs_info->num_tolerated_disk_barrier_failures); in open_ctree()
3001 fs_info->cleaner_kthread = kthread_run(cleaner_kthread, tree_root, in open_ctree()
3003 if (IS_ERR(fs_info->cleaner_kthread)) in open_ctree()
3006 fs_info->transaction_kthread = kthread_run(transaction_kthread, in open_ctree()
3009 if (IS_ERR(fs_info->transaction_kthread)) in open_ctree()
3014 !fs_info->fs_devices->rotating) { in open_ctree()
3017 btrfs_set_opt(fs_info->mount_opt, SSD); in open_ctree()
3024 btrfs_apply_pending_changes(fs_info); in open_ctree()
3032 fs_info->check_integrity_print_mask); in open_ctree()
3038 ret = btrfs_read_qgroup_config(fs_info); in open_ctree()
3044 ret = btrfs_replay_log(fs_info, fs_devices); in open_ctree()
3056 ret = btrfs_cleanup_fs_roots(fs_info); in open_ctree()
3060 mutex_lock(&fs_info->cleaner_mutex); in open_ctree()
3062 mutex_unlock(&fs_info->cleaner_mutex); in open_ctree()
3075 fs_info->fs_root = btrfs_read_fs_root_no_name(fs_info, &location); in open_ctree()
3076 if (IS_ERR(fs_info->fs_root)) { in open_ctree()
3077 err = PTR_ERR(fs_info->fs_root); in open_ctree()
3084 down_read(&fs_info->cleanup_work_sem); in open_ctree()
3085 if ((ret = btrfs_orphan_cleanup(fs_info->fs_root)) || in open_ctree()
3086 (ret = btrfs_orphan_cleanup(fs_info->tree_root))) { in open_ctree()
3087 up_read(&fs_info->cleanup_work_sem); in open_ctree()
3091 up_read(&fs_info->cleanup_work_sem); in open_ctree()
3093 ret = btrfs_resume_balance_async(fs_info); in open_ctree()
3100 ret = btrfs_resume_dev_replace_async(fs_info); in open_ctree()
3107 btrfs_qgroup_rescan_resume(fs_info); in open_ctree()
3109 if (!fs_info->uuid_root) { in open_ctree()
3111 ret = btrfs_create_uuid_tree(fs_info); in open_ctree()
3119 fs_info->generation != in open_ctree()
3122 ret = btrfs_check_uuid_tree(fs_info); in open_ctree()
3130 fs_info->update_uuid_tree_gen = 1; in open_ctree()
3133 fs_info->open = 1; in open_ctree()
3138 btrfs_free_qgroup_config(fs_info); in open_ctree()
3140 kthread_stop(fs_info->transaction_kthread); in open_ctree()
3141 btrfs_cleanup_transaction(fs_info->tree_root); in open_ctree()
3142 btrfs_free_fs_roots(fs_info); in open_ctree()
3144 kthread_stop(fs_info->cleaner_kthread); in open_ctree()
3150 filemap_write_and_wait(fs_info->btree_inode->i_mapping); in open_ctree()
3153 btrfs_sysfs_remove_mounted(fs_info); in open_ctree()
3156 btrfs_sysfs_remove_fsid(fs_info->fs_devices); in open_ctree()
3159 btrfs_put_block_group_cache(fs_info); in open_ctree()
3160 btrfs_free_block_groups(fs_info); in open_ctree()
3163 free_root_pointers(fs_info, 1); in open_ctree()
3164 invalidate_inode_pages2(fs_info->btree_inode->i_mapping); in open_ctree()
3167 btrfs_stop_all_workers(fs_info); in open_ctree()
3170 btrfs_mapping_tree_free(&fs_info->mapping_tree); in open_ctree()
3172 iput(fs_info->btree_inode); in open_ctree()
3174 percpu_counter_destroy(&fs_info->bio_counter); in open_ctree()
3176 percpu_counter_destroy(&fs_info->delalloc_bytes); in open_ctree()
3178 percpu_counter_destroy(&fs_info->dirty_metadata_bytes); in open_ctree()
3180 bdi_destroy(&fs_info->bdi); in open_ctree()
3182 cleanup_srcu_struct(&fs_info->subvol_srcu); in open_ctree()
3184 btrfs_free_stripe_hash_table(fs_info); in open_ctree()
3185 btrfs_close_devices(fs_info->fs_devices); in open_ctree()
3192 free_root_pointers(fs_info, 0); in open_ctree()
3198 btrfs_set_opt(fs_info->mount_opt, CLEAR_CACHE); in open_ctree()
3200 ret = next_root_backup(fs_info, fs_info->super_copy, in open_ctree()
3215 btrfs_warn_rl_in_rcu(device->dev_root->fs_info, in btrfs_end_buffer_write_sync()
3360 btrfs_err(device->dev_root->fs_info, in write_dev_supers()
3539 struct btrfs_fs_info *fs_info) in btrfs_calc_num_tolerated_disk_barrier_failures() argument
3550 (int)fs_info->fs_devices->num_devices; in btrfs_calc_num_tolerated_disk_barrier_failures()
3557 list_for_each_entry_rcu(tmp, &fs_info->space_info, list) { in btrfs_calc_num_tolerated_disk_barrier_failures()
3605 backup_super_roots(root->fs_info); in write_all_supers()
3607 sb = root->fs_info->super_for_commit; in write_all_supers()
3610 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3611 head = &root->fs_info->fs_devices->devices; in write_all_supers()
3612 max_errors = btrfs_super_num_devices(root->fs_info->super_copy) - 1; in write_all_supers()
3615 ret = barrier_all_devices(root->fs_info); in write_all_supers()
3618 &root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3619 btrfs_std_error(root->fs_info, ret, in write_all_supers()
3654 btrfs_err(root->fs_info, "%d errors while writing supers", in write_all_supers()
3656 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3659 btrfs_std_error(root->fs_info, -EIO, in write_all_supers()
3675 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3677 btrfs_std_error(root->fs_info, -EIO, in write_all_supers()
3691 void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info, in btrfs_drop_and_free_fs_root() argument
3694 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_drop_and_free_fs_root()
3695 radix_tree_delete(&fs_info->fs_roots_radix, in btrfs_drop_and_free_fs_root()
3697 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_drop_and_free_fs_root()
3700 synchronize_srcu(&fs_info->subvol_srcu); in btrfs_drop_and_free_fs_root()
3702 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) in btrfs_drop_and_free_fs_root()
3735 int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) in btrfs_cleanup_fs_roots() argument
3745 index = srcu_read_lock(&fs_info->subvol_srcu); in btrfs_cleanup_fs_roots()
3746 ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix, in btrfs_cleanup_fs_roots()
3750 srcu_read_unlock(&fs_info->subvol_srcu, index); in btrfs_cleanup_fs_roots()
3764 srcu_read_unlock(&fs_info->subvol_srcu, index); in btrfs_cleanup_fs_roots()
3790 mutex_lock(&root->fs_info->cleaner_mutex); in btrfs_commit_super()
3792 mutex_unlock(&root->fs_info->cleaner_mutex); in btrfs_commit_super()
3793 wake_up_process(root->fs_info->cleaner_kthread); in btrfs_commit_super()
3796 down_write(&root->fs_info->cleanup_work_sem); in btrfs_commit_super()
3797 up_write(&root->fs_info->cleanup_work_sem); in btrfs_commit_super()
3807 struct btrfs_fs_info *fs_info = root->fs_info; in close_ctree() local
3810 fs_info->closing = 1; in close_ctree()
3814 btrfs_qgroup_wait_for_completion(fs_info); in close_ctree()
3817 down(&fs_info->uuid_tree_rescan_sem); in close_ctree()
3819 up(&fs_info->uuid_tree_rescan_sem); in close_ctree()
3822 btrfs_pause_balance(fs_info); in close_ctree()
3824 btrfs_dev_replace_suspend_for_unmount(fs_info); in close_ctree()
3826 btrfs_scrub_cancel(fs_info); in close_ctree()
3829 wait_event(fs_info->transaction_wait, in close_ctree()
3830 (atomic_read(&fs_info->defrag_running) == 0)); in close_ctree()
3833 btrfs_cleanup_defrag_inodes(fs_info); in close_ctree()
3835 cancel_work_sync(&fs_info->async_reclaim_work); in close_ctree()
3837 if (!(fs_info->sb->s_flags & MS_RDONLY)) { in close_ctree()
3843 btrfs_delete_unused_bgs(root->fs_info); in close_ctree()
3847 btrfs_err(fs_info, "commit super ret %d", ret); in close_ctree()
3850 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) in close_ctree()
3853 kthread_stop(fs_info->transaction_kthread); in close_ctree()
3854 kthread_stop(fs_info->cleaner_kthread); in close_ctree()
3856 fs_info->closing = 2; in close_ctree()
3859 btrfs_free_qgroup_config(fs_info); in close_ctree()
3861 if (percpu_counter_sum(&fs_info->delalloc_bytes)) { in close_ctree()
3862 btrfs_info(fs_info, "at unmount delalloc count %lld", in close_ctree()
3863 percpu_counter_sum(&fs_info->delalloc_bytes)); in close_ctree()
3866 btrfs_sysfs_remove_mounted(fs_info); in close_ctree()
3867 btrfs_sysfs_remove_fsid(fs_info->fs_devices); in close_ctree()
3869 btrfs_free_fs_roots(fs_info); in close_ctree()
3871 btrfs_put_block_group_cache(fs_info); in close_ctree()
3873 btrfs_free_block_groups(fs_info); in close_ctree()
3879 invalidate_inode_pages2(fs_info->btree_inode->i_mapping); in close_ctree()
3880 btrfs_stop_all_workers(fs_info); in close_ctree()
3882 fs_info->open = 0; in close_ctree()
3883 free_root_pointers(fs_info, 1); in close_ctree()
3885 iput(fs_info->btree_inode); in close_ctree()
3889 btrfsic_unmount(root, fs_info->fs_devices); in close_ctree()
3892 btrfs_close_devices(fs_info->fs_devices); in close_ctree()
3893 btrfs_mapping_tree_free(&fs_info->mapping_tree); in close_ctree()
3895 percpu_counter_destroy(&fs_info->dirty_metadata_bytes); in close_ctree()
3896 percpu_counter_destroy(&fs_info->delalloc_bytes); in close_ctree()
3897 percpu_counter_destroy(&fs_info->bio_counter); in close_ctree()
3898 bdi_destroy(&fs_info->bdi); in close_ctree()
3899 cleanup_srcu_struct(&fs_info->subvol_srcu); in close_ctree()
3901 btrfs_free_stripe_hash_table(fs_info); in close_ctree()
3907 while (!list_empty(&fs_info->pinned_chunks)) { in close_ctree()
3910 em = list_first_entry(&fs_info->pinned_chunks, in close_ctree()
3957 if (transid != root->fs_info->generation) in btrfs_mark_buffer_dirty()
3960 buf->start, transid, root->fs_info->generation); in btrfs_mark_buffer_dirty()
3963 __percpu_counter_add(&root->fs_info->dirty_metadata_bytes, in btrfs_mark_buffer_dirty()
3965 root->fs_info->dirty_metadata_batch); in btrfs_mark_buffer_dirty()
3989 ret = percpu_counter_compare(&root->fs_info->dirty_metadata_bytes, in __btrfs_btree_balance_dirty()
3993 root->fs_info->btree_inode->i_mapping); in __btrfs_btree_balance_dirty()
4014 static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info, in btrfs_check_super_valid() argument
4017 struct btrfs_super_block *sb = fs_info->super_copy; in btrfs_check_super_valid()
4065 if (memcmp(fs_info->fsid, sb->dev_item.fsid, BTRFS_UUID_SIZE) != 0) { in btrfs_check_super_valid()
4067 fs_info->fsid, sb->dev_item.fsid); in btrfs_check_super_valid()
4127 mutex_lock(&root->fs_info->cleaner_mutex); in btrfs_error_commit_super()
4129 mutex_unlock(&root->fs_info->cleaner_mutex); in btrfs_error_commit_super()
4131 down_write(&root->fs_info->cleanup_work_sem); in btrfs_error_commit_super()
4132 up_write(&root->fs_info->cleanup_work_sem); in btrfs_error_commit_super()
4153 static void btrfs_destroy_all_ordered_extents(struct btrfs_fs_info *fs_info) in btrfs_destroy_all_ordered_extents() argument
4160 spin_lock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4161 list_splice_init(&fs_info->ordered_roots, &splice); in btrfs_destroy_all_ordered_extents()
4166 &fs_info->ordered_roots); in btrfs_destroy_all_ordered_extents()
4168 spin_unlock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4172 spin_lock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4174 spin_unlock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4190 btrfs_info(root->fs_info, "delayed_refs has NO entry"); in btrfs_destroy_delayed_refs()
4272 static void btrfs_destroy_all_delalloc_inodes(struct btrfs_fs_info *fs_info) in btrfs_destroy_all_delalloc_inodes() argument
4279 spin_lock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4280 list_splice_init(&fs_info->delalloc_roots, &splice); in btrfs_destroy_all_delalloc_inodes()
4287 spin_unlock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4292 spin_lock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4294 spin_unlock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4314 eb = btrfs_find_tree_block(root->fs_info, start); in btrfs_destroy_marked_extents()
4353 if (unpin == &root->fs_info->freed_extents[0]) in btrfs_destroy_pinned_extent()
4354 unpin = &root->fs_info->freed_extents[1]; in btrfs_destroy_pinned_extent()
4356 unpin = &root->fs_info->freed_extents[0]; in btrfs_destroy_pinned_extent()
4370 wake_up(&root->fs_info->transaction_blocked_wait); in btrfs_cleanup_one_transaction()
4373 wake_up(&root->fs_info->transaction_wait); in btrfs_cleanup_one_transaction()
4381 root->fs_info->pinned_extents); in btrfs_cleanup_one_transaction()
4396 mutex_lock(&root->fs_info->transaction_kthread_mutex); in btrfs_cleanup_transaction()
4398 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4399 while (!list_empty(&root->fs_info->trans_list)) { in btrfs_cleanup_transaction()
4400 t = list_first_entry(&root->fs_info->trans_list, in btrfs_cleanup_transaction()
4404 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4407 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4410 if (t == root->fs_info->running_transaction) { in btrfs_cleanup_transaction()
4412 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4420 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4424 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4425 if (t == root->fs_info->running_transaction) in btrfs_cleanup_transaction()
4426 root->fs_info->running_transaction = NULL; in btrfs_cleanup_transaction()
4428 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4432 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4434 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4435 btrfs_destroy_all_ordered_extents(root->fs_info); in btrfs_cleanup_transaction()
4438 btrfs_destroy_pinned_extent(root, root->fs_info->pinned_extents); in btrfs_cleanup_transaction()
4439 btrfs_destroy_all_delalloc_inodes(root->fs_info); in btrfs_cleanup_transaction()
4440 mutex_unlock(&root->fs_info->transaction_kthread_mutex); in btrfs_cleanup_transaction()