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()
325 fs_info->sb->s_id, buf->start, in csum_tree_block()
373 eb->fs_info->sb->s_id, eb->start, 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," \
634 eb->fs_info->sb->s_id, found_start, eb->start); in btree_readpage_end_io_hook()
638 if (check_tree_block_fsid(root->fs_info, eb)) { in btree_readpage_end_io_hook()
640 eb->fs_info->sb->s_id, eb->start); in btree_readpage_end_io_hook()
646 btrfs_err(root->fs_info, "bad tree block level %d", in btree_readpage_end_io_hook()
655 ret = csum_tree_block(root->fs_info, eb, 1); in btree_readpage_end_io_hook()
709 struct btrfs_fs_info *fs_info; in end_workqueue_bio() local
713 fs_info = end_io_wq->info; in end_workqueue_bio()
718 wq = fs_info->endio_meta_write_workers; in end_workqueue_bio()
721 wq = fs_info->endio_freespace_worker; in end_workqueue_bio()
724 wq = fs_info->endio_raid56_workers; in end_workqueue_bio()
727 wq = fs_info->endio_write_workers; in end_workqueue_bio()
733 wq = fs_info->endio_repair_workers; in end_workqueue_bio()
736 wq = fs_info->endio_raid56_workers; in end_workqueue_bio()
739 wq = fs_info->endio_meta_workers; in end_workqueue_bio()
742 wq = fs_info->endio_workers; in end_workqueue_bio()
795 struct btrfs_fs_info *fs_info; in run_one_async_done() local
800 fs_info = BTRFS_I(async->inode)->root->fs_info; in run_one_async_done()
802 limit = btrfs_async_submit_limit(fs_info); in run_one_async_done()
805 if (atomic_dec_return(&fs_info->nr_async_submits) < limit && in run_one_async_done()
806 waitqueue_active(&fs_info->async_submit_wait)) in run_one_async_done()
807 wake_up(&fs_info->async_submit_wait); in run_one_async_done()
828 int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, in btrfs_wq_submit_bio() argument
856 atomic_inc(&fs_info->nr_async_submits); in btrfs_wq_submit_bio()
861 btrfs_queue_work(fs_info->workers, &async->work); in btrfs_wq_submit_bio()
863 while (atomic_read(&fs_info->async_submit_draining) && in btrfs_wq_submit_bio()
864 atomic_read(&fs_info->nr_async_submits)) { in btrfs_wq_submit_bio()
865 wait_event(fs_info->async_submit_wait, in btrfs_wq_submit_bio()
866 (atomic_read(&fs_info->nr_async_submits) == 0)); in btrfs_wq_submit_bio()
880 ret = csum_dirty_buffer(root->fs_info, bvec->bv_page); in btree_csum_one_bio()
939 ret = btrfs_bio_wq_end_io(BTRFS_I(inode)->root->fs_info, in btree_submit_bio_hook()
956 ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, in btree_submit_bio_hook()
996 struct btrfs_fs_info *fs_info; in btree_writepages() local
1004 fs_info = BTRFS_I(mapping->host)->root->fs_info; in btree_writepages()
1006 ret = percpu_counter_compare(&fs_info->dirty_metadata_bytes, in btree_writepages()
1037 btrfs_warn(BTRFS_I(page->mapping->host)->root->fs_info, in btree_invalidatepage()
1075 struct inode *btree_inode = root->fs_info->btree_inode; in readahead_tree_block()
1089 struct inode *btree_inode = root->fs_info->btree_inode; in reada_tree_block_flagged()
1117 struct extent_buffer *btrfs_find_tree_block(struct btrfs_fs_info *fs_info, in btrfs_find_tree_block() argument
1120 return find_extent_buffer(fs_info, bytenr); in btrfs_find_tree_block()
1127 return alloc_test_extent_buffer(root->fs_info, bytenr); in btrfs_find_create_tree_block()
1128 return alloc_extent_buffer(root->fs_info, bytenr); in btrfs_find_create_tree_block()
1164 struct btrfs_fs_info *fs_info, in clean_tree_block() argument
1168 fs_info->running_transaction->transid) { in clean_tree_block()
1172 __percpu_counter_add(&fs_info->dirty_metadata_bytes, in clean_tree_block()
1174 fs_info->dirty_metadata_batch); in clean_tree_block()
1209 struct btrfs_root *root, struct btrfs_fs_info *fs_info, in __setup_root() argument
1265 if (fs_info) in __setup_root()
1267 fs_info->btree_inode->i_mapping); in __setup_root()
1272 if (fs_info) in __setup_root()
1273 root->defrag_trans_start = fs_info->generation; in __setup_root()
1282 static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info) in btrfs_alloc_root() argument
1286 root->fs_info = fs_info; in btrfs_alloc_root()
1308 struct btrfs_fs_info *fs_info, in btrfs_create_tree() argument
1312 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_tree()
1318 root = btrfs_alloc_root(fs_info); in btrfs_create_tree()
1323 tree_root->stripesize, root, fs_info, objectid); in btrfs_create_tree()
1342 write_extent_buffer(leaf, fs_info->fsid, btrfs_header_fsid(), in btrfs_create_tree()
1344 write_extent_buffer(leaf, fs_info->chunk_tree_uuid, in btrfs_create_tree()
1388 struct btrfs_fs_info *fs_info) in alloc_log_tree() argument
1391 struct btrfs_root *tree_root = fs_info->tree_root; in alloc_log_tree()
1394 root = btrfs_alloc_root(fs_info); in alloc_log_tree()
1399 tree_root->stripesize, root, fs_info, in alloc_log_tree()
1429 write_extent_buffer(root->node, root->fs_info->fsid, in alloc_log_tree()
1437 struct btrfs_fs_info *fs_info) in btrfs_init_log_root_tree() argument
1441 log_root = alloc_log_tree(trans, fs_info); in btrfs_init_log_root_tree()
1444 WARN_ON(fs_info->log_root_tree); in btrfs_init_log_root_tree()
1445 fs_info->log_root_tree = log_root; in btrfs_init_log_root_tree()
1455 log_root = alloc_log_tree(trans, root->fs_info); in btrfs_add_log_tree()
1483 struct btrfs_fs_info *fs_info = tree_root->fs_info; in btrfs_read_tree_root() local
1492 root = btrfs_alloc_root(fs_info); in btrfs_read_tree_root()
1499 tree_root->stripesize, root, fs_info, key->objectid); in btrfs_read_tree_root()
1602 static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info, in btrfs_lookup_fs_root() argument
1607 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_lookup_fs_root()
1608 root = radix_tree_lookup(&fs_info->fs_roots_radix, in btrfs_lookup_fs_root()
1610 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_lookup_fs_root()
1614 int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info, in btrfs_insert_fs_root() argument
1623 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_insert_fs_root()
1624 ret = radix_tree_insert(&fs_info->fs_roots_radix, in btrfs_insert_fs_root()
1629 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_insert_fs_root()
1635 struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info, in btrfs_get_fs_root() argument
1645 return fs_info->tree_root; in btrfs_get_fs_root()
1647 return fs_info->extent_root; in btrfs_get_fs_root()
1649 return fs_info->chunk_root; in btrfs_get_fs_root()
1651 return fs_info->dev_root; in btrfs_get_fs_root()
1653 return fs_info->csum_root; in btrfs_get_fs_root()
1655 return fs_info->quota_root ? fs_info->quota_root : in btrfs_get_fs_root()
1658 return fs_info->uuid_root ? fs_info->uuid_root : in btrfs_get_fs_root()
1661 root = btrfs_lookup_fs_root(fs_info, location->objectid); in btrfs_get_fs_root()
1668 root = btrfs_read_fs_root(fs_info->tree_root, location); in btrfs_get_fs_root()
1690 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_get_fs_root()
1697 ret = btrfs_insert_fs_root(fs_info, root); in btrfs_get_fs_root()
1778 if (!mutex_trylock(&root->fs_info->cleaner_mutex)) in cleaner_kthread()
1786 mutex_unlock(&root->fs_info->cleaner_mutex); in cleaner_kthread()
1790 mutex_lock(&root->fs_info->cleaner_delayed_iput_mutex); in cleaner_kthread()
1792 btrfs_delete_unused_bgs(root->fs_info); in cleaner_kthread()
1793 mutex_unlock(&root->fs_info->cleaner_delayed_iput_mutex); in cleaner_kthread()
1796 mutex_unlock(&root->fs_info->cleaner_mutex); in cleaner_kthread()
1802 btrfs_run_defrag_inodes(root->fs_info); in cleaner_kthread()
1826 delay = HZ * root->fs_info->commit_interval; in transaction_kthread()
1827 mutex_lock(&root->fs_info->transaction_kthread_mutex); in transaction_kthread()
1829 spin_lock(&root->fs_info->trans_lock); in transaction_kthread()
1830 cur = root->fs_info->running_transaction; in transaction_kthread()
1832 spin_unlock(&root->fs_info->trans_lock); in transaction_kthread()
1839 now - cur->start_time < root->fs_info->commit_interval)) { in transaction_kthread()
1840 spin_unlock(&root->fs_info->trans_lock); in transaction_kthread()
1845 spin_unlock(&root->fs_info->trans_lock); in transaction_kthread()
1860 wake_up_process(root->fs_info->cleaner_kthread); in transaction_kthread()
1861 mutex_unlock(&root->fs_info->transaction_kthread_mutex); in transaction_kthread()
1864 &root->fs_info->fs_state))) in transaction_kthread()
1869 (!btrfs_transaction_blocked(root->fs_info) || in transaction_kthread()
2078 static void btrfs_stop_all_workers(struct btrfs_fs_info *fs_info) in btrfs_stop_all_workers() argument
2080 btrfs_destroy_workqueue(fs_info->fixup_workers); in btrfs_stop_all_workers()
2081 btrfs_destroy_workqueue(fs_info->delalloc_workers); in btrfs_stop_all_workers()
2082 btrfs_destroy_workqueue(fs_info->workers); in btrfs_stop_all_workers()
2083 btrfs_destroy_workqueue(fs_info->endio_workers); in btrfs_stop_all_workers()
2084 btrfs_destroy_workqueue(fs_info->endio_meta_workers); in btrfs_stop_all_workers()
2085 btrfs_destroy_workqueue(fs_info->endio_raid56_workers); in btrfs_stop_all_workers()
2086 btrfs_destroy_workqueue(fs_info->endio_repair_workers); in btrfs_stop_all_workers()
2087 btrfs_destroy_workqueue(fs_info->rmw_workers); in btrfs_stop_all_workers()
2088 btrfs_destroy_workqueue(fs_info->endio_meta_write_workers); in btrfs_stop_all_workers()
2089 btrfs_destroy_workqueue(fs_info->endio_write_workers); in btrfs_stop_all_workers()
2090 btrfs_destroy_workqueue(fs_info->endio_freespace_worker); in btrfs_stop_all_workers()
2091 btrfs_destroy_workqueue(fs_info->submit_workers); in btrfs_stop_all_workers()
2092 btrfs_destroy_workqueue(fs_info->delayed_workers); in btrfs_stop_all_workers()
2093 btrfs_destroy_workqueue(fs_info->caching_workers); in btrfs_stop_all_workers()
2094 btrfs_destroy_workqueue(fs_info->readahead_workers); in btrfs_stop_all_workers()
2095 btrfs_destroy_workqueue(fs_info->flush_workers); in btrfs_stop_all_workers()
2096 btrfs_destroy_workqueue(fs_info->qgroup_rescan_workers); in btrfs_stop_all_workers()
2097 btrfs_destroy_workqueue(fs_info->extent_workers); in btrfs_stop_all_workers()
2124 void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info) in btrfs_free_fs_roots() argument
2130 while (!list_empty(&fs_info->dead_roots)) { in btrfs_free_fs_roots()
2131 gang[0] = list_entry(fs_info->dead_roots.next, in btrfs_free_fs_roots()
2136 btrfs_drop_and_free_fs_root(fs_info, gang[0]); in btrfs_free_fs_roots()
2145 ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix, in btrfs_free_fs_roots()
2151 btrfs_drop_and_free_fs_root(fs_info, gang[i]); in btrfs_free_fs_roots()
2154 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) { in btrfs_free_fs_roots()
2155 btrfs_free_log_root_tree(NULL, fs_info); in btrfs_free_fs_roots()
2156 btrfs_destroy_pinned_extent(fs_info->tree_root, in btrfs_free_fs_roots()
2157 fs_info->pinned_extents); in btrfs_free_fs_roots()
2161 static void btrfs_init_scrub(struct btrfs_fs_info *fs_info) in btrfs_init_scrub() argument
2163 mutex_init(&fs_info->scrub_lock); in btrfs_init_scrub()
2164 atomic_set(&fs_info->scrubs_running, 0); in btrfs_init_scrub()
2165 atomic_set(&fs_info->scrub_pause_req, 0); in btrfs_init_scrub()
2166 atomic_set(&fs_info->scrubs_paused, 0); in btrfs_init_scrub()
2167 atomic_set(&fs_info->scrub_cancel_req, 0); in btrfs_init_scrub()
2168 init_waitqueue_head(&fs_info->scrub_pause_wait); in btrfs_init_scrub()
2169 fs_info->scrub_workers_refcnt = 0; in btrfs_init_scrub()
2172 static void btrfs_init_balance(struct btrfs_fs_info *fs_info) in btrfs_init_balance() argument
2174 spin_lock_init(&fs_info->balance_lock); in btrfs_init_balance()
2175 mutex_init(&fs_info->balance_mutex); in btrfs_init_balance()
2176 atomic_set(&fs_info->balance_running, 0); in btrfs_init_balance()
2177 atomic_set(&fs_info->balance_pause_req, 0); in btrfs_init_balance()
2178 atomic_set(&fs_info->balance_cancel_req, 0); in btrfs_init_balance()
2179 fs_info->balance_ctl = NULL; in btrfs_init_balance()
2180 init_waitqueue_head(&fs_info->balance_wait_q); in btrfs_init_balance()
2183 static void btrfs_init_btree_inode(struct btrfs_fs_info *fs_info, in btrfs_init_btree_inode() argument
2186 fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID; in btrfs_init_btree_inode()
2187 set_nlink(fs_info->btree_inode, 1); in btrfs_init_btree_inode()
2193 fs_info->btree_inode->i_size = OFFSET_MAX; in btrfs_init_btree_inode()
2194 fs_info->btree_inode->i_mapping->a_ops = &btree_aops; in btrfs_init_btree_inode()
2196 RB_CLEAR_NODE(&BTRFS_I(fs_info->btree_inode)->rb_node); in btrfs_init_btree_inode()
2197 extent_io_tree_init(&BTRFS_I(fs_info->btree_inode)->io_tree, in btrfs_init_btree_inode()
2198 fs_info->btree_inode->i_mapping); in btrfs_init_btree_inode()
2199 BTRFS_I(fs_info->btree_inode)->io_tree.track_uptodate = 0; in btrfs_init_btree_inode()
2200 extent_map_tree_init(&BTRFS_I(fs_info->btree_inode)->extent_tree); in btrfs_init_btree_inode()
2202 BTRFS_I(fs_info->btree_inode)->io_tree.ops = &btree_extent_io_ops; in btrfs_init_btree_inode()
2204 BTRFS_I(fs_info->btree_inode)->root = tree_root; in btrfs_init_btree_inode()
2205 memset(&BTRFS_I(fs_info->btree_inode)->location, 0, in btrfs_init_btree_inode()
2208 &BTRFS_I(fs_info->btree_inode)->runtime_flags); in btrfs_init_btree_inode()
2209 btrfs_insert_inode_hash(fs_info->btree_inode); in btrfs_init_btree_inode()
2212 static void btrfs_init_dev_replace_locks(struct btrfs_fs_info *fs_info) in btrfs_init_dev_replace_locks() argument
2214 fs_info->dev_replace.lock_owner = 0; in btrfs_init_dev_replace_locks()
2215 atomic_set(&fs_info->dev_replace.nesting_level, 0); in btrfs_init_dev_replace_locks()
2216 mutex_init(&fs_info->dev_replace.lock_finishing_cancel_unmount); in btrfs_init_dev_replace_locks()
2217 mutex_init(&fs_info->dev_replace.lock_management_lock); in btrfs_init_dev_replace_locks()
2218 mutex_init(&fs_info->dev_replace.lock); in btrfs_init_dev_replace_locks()
2219 init_waitqueue_head(&fs_info->replace_wait); in btrfs_init_dev_replace_locks()
2222 static void btrfs_init_qgroup(struct btrfs_fs_info *fs_info) in btrfs_init_qgroup() argument
2224 spin_lock_init(&fs_info->qgroup_lock); in btrfs_init_qgroup()
2225 mutex_init(&fs_info->qgroup_ioctl_lock); in btrfs_init_qgroup()
2226 fs_info->qgroup_tree = RB_ROOT; in btrfs_init_qgroup()
2227 fs_info->qgroup_op_tree = RB_ROOT; in btrfs_init_qgroup()
2228 INIT_LIST_HEAD(&fs_info->dirty_qgroups); in btrfs_init_qgroup()
2229 fs_info->qgroup_seq = 1; in btrfs_init_qgroup()
2230 fs_info->quota_enabled = 0; in btrfs_init_qgroup()
2231 fs_info->pending_quota_state = 0; in btrfs_init_qgroup()
2232 fs_info->qgroup_ulist = NULL; in btrfs_init_qgroup()
2233 mutex_init(&fs_info->qgroup_rescan_lock); in btrfs_init_qgroup()
2236 static int btrfs_init_workqueues(struct btrfs_fs_info *fs_info, in btrfs_init_workqueues() argument
2239 int max_active = fs_info->thread_pool_size; in btrfs_init_workqueues()
2242 fs_info->workers = in btrfs_init_workqueues()
2246 fs_info->delalloc_workers = in btrfs_init_workqueues()
2249 fs_info->flush_workers = in btrfs_init_workqueues()
2252 fs_info->caching_workers = in btrfs_init_workqueues()
2260 fs_info->submit_workers = in btrfs_init_workqueues()
2265 fs_info->fixup_workers = in btrfs_init_workqueues()
2272 fs_info->endio_workers = in btrfs_init_workqueues()
2274 fs_info->endio_meta_workers = in btrfs_init_workqueues()
2276 fs_info->endio_meta_write_workers = in btrfs_init_workqueues()
2278 fs_info->endio_raid56_workers = in btrfs_init_workqueues()
2280 fs_info->endio_repair_workers = in btrfs_init_workqueues()
2282 fs_info->rmw_workers = in btrfs_init_workqueues()
2284 fs_info->endio_write_workers = in btrfs_init_workqueues()
2286 fs_info->endio_freespace_worker = in btrfs_init_workqueues()
2288 fs_info->delayed_workers = in btrfs_init_workqueues()
2290 fs_info->readahead_workers = in btrfs_init_workqueues()
2292 fs_info->qgroup_rescan_workers = in btrfs_init_workqueues()
2294 fs_info->extent_workers = in btrfs_init_workqueues()
2299 if (!(fs_info->workers && fs_info->delalloc_workers && in btrfs_init_workqueues()
2300 fs_info->submit_workers && fs_info->flush_workers && in btrfs_init_workqueues()
2301 fs_info->endio_workers && fs_info->endio_meta_workers && in btrfs_init_workqueues()
2302 fs_info->endio_meta_write_workers && in btrfs_init_workqueues()
2303 fs_info->endio_repair_workers && in btrfs_init_workqueues()
2304 fs_info->endio_write_workers && fs_info->endio_raid56_workers && in btrfs_init_workqueues()
2305 fs_info->endio_freespace_worker && fs_info->rmw_workers && in btrfs_init_workqueues()
2306 fs_info->caching_workers && fs_info->readahead_workers && in btrfs_init_workqueues()
2307 fs_info->fixup_workers && fs_info->delayed_workers && in btrfs_init_workqueues()
2308 fs_info->extent_workers && in btrfs_init_workqueues()
2309 fs_info->qgroup_rescan_workers)) { in btrfs_init_workqueues()
2316 static int btrfs_replay_log(struct btrfs_fs_info *fs_info, in btrfs_replay_log() argument
2320 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_replay_log()
2322 struct btrfs_super_block *disk_super = fs_info->super_copy; in btrfs_replay_log()
2331 log_tree_root = btrfs_alloc_root(fs_info); in btrfs_replay_log()
2336 tree_root->stripesize, log_tree_root, fs_info, in btrfs_replay_log()
2340 fs_info->generation + 1); in btrfs_replay_log()
2351 btrfs_error(tree_root->fs_info, ret, in btrfs_replay_log()
2358 if (fs_info->sb->s_flags & MS_RDONLY) { in btrfs_replay_log()
2367 static int btrfs_read_roots(struct btrfs_fs_info *fs_info, in btrfs_read_roots() argument
2382 fs_info->extent_root = root; in btrfs_read_roots()
2389 fs_info->dev_root = root; in btrfs_read_roots()
2390 btrfs_init_devices_late(fs_info); in btrfs_read_roots()
2397 fs_info->csum_root = root; in btrfs_read_roots()
2403 fs_info->quota_enabled = 1; in btrfs_read_roots()
2404 fs_info->pending_quota_state = 1; in btrfs_read_roots()
2405 fs_info->quota_root = root; in btrfs_read_roots()
2416 fs_info->uuid_root = root; in btrfs_read_roots()
2434 struct btrfs_fs_info *fs_info = btrfs_sb(sb); in open_ctree() local
2443 tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info); in open_ctree()
2444 chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info); in open_ctree()
2450 ret = init_srcu_struct(&fs_info->subvol_srcu); in open_ctree()
2456 ret = setup_bdi(fs_info, &fs_info->bdi); in open_ctree()
2462 ret = percpu_counter_init(&fs_info->dirty_metadata_bytes, 0, GFP_KERNEL); in open_ctree()
2467 fs_info->dirty_metadata_batch = PAGE_CACHE_SIZE * in open_ctree()
2470 ret = percpu_counter_init(&fs_info->delalloc_bytes, 0, GFP_KERNEL); in open_ctree()
2476 ret = percpu_counter_init(&fs_info->bio_counter, 0, GFP_KERNEL); in open_ctree()
2482 fs_info->btree_inode = new_inode(sb); in open_ctree()
2483 if (!fs_info->btree_inode) { in open_ctree()
2488 mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); in open_ctree()
2490 INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_ATOMIC); in open_ctree()
2491 INIT_RADIX_TREE(&fs_info->buffer_radix, GFP_ATOMIC); in open_ctree()
2492 INIT_LIST_HEAD(&fs_info->trans_list); in open_ctree()
2493 INIT_LIST_HEAD(&fs_info->dead_roots); in open_ctree()
2494 INIT_LIST_HEAD(&fs_info->delayed_iputs); in open_ctree()
2495 INIT_LIST_HEAD(&fs_info->delalloc_roots); in open_ctree()
2496 INIT_LIST_HEAD(&fs_info->caching_block_groups); in open_ctree()
2497 spin_lock_init(&fs_info->delalloc_root_lock); in open_ctree()
2498 spin_lock_init(&fs_info->trans_lock); in open_ctree()
2499 spin_lock_init(&fs_info->fs_roots_radix_lock); in open_ctree()
2500 spin_lock_init(&fs_info->delayed_iput_lock); in open_ctree()
2501 spin_lock_init(&fs_info->defrag_inodes_lock); in open_ctree()
2502 spin_lock_init(&fs_info->free_chunk_lock); in open_ctree()
2503 spin_lock_init(&fs_info->tree_mod_seq_lock); in open_ctree()
2504 spin_lock_init(&fs_info->super_lock); in open_ctree()
2505 spin_lock_init(&fs_info->qgroup_op_lock); in open_ctree()
2506 spin_lock_init(&fs_info->buffer_lock); in open_ctree()
2507 spin_lock_init(&fs_info->unused_bgs_lock); in open_ctree()
2508 rwlock_init(&fs_info->tree_mod_log_lock); in open_ctree()
2509 mutex_init(&fs_info->unused_bg_unpin_mutex); in open_ctree()
2510 mutex_init(&fs_info->reloc_mutex); in open_ctree()
2511 mutex_init(&fs_info->delalloc_root_mutex); in open_ctree()
2512 mutex_init(&fs_info->cleaner_delayed_iput_mutex); in open_ctree()
2513 seqlock_init(&fs_info->profiles_lock); in open_ctree()
2515 init_completion(&fs_info->kobj_unregister); in open_ctree()
2516 INIT_LIST_HEAD(&fs_info->dirty_cowonly_roots); in open_ctree()
2517 INIT_LIST_HEAD(&fs_info->space_info); in open_ctree()
2518 INIT_LIST_HEAD(&fs_info->tree_mod_seq_list); in open_ctree()
2519 INIT_LIST_HEAD(&fs_info->unused_bgs); in open_ctree()
2520 btrfs_mapping_init(&fs_info->mapping_tree); in open_ctree()
2521 btrfs_init_block_rsv(&fs_info->global_block_rsv, in open_ctree()
2523 btrfs_init_block_rsv(&fs_info->delalloc_block_rsv, in open_ctree()
2525 btrfs_init_block_rsv(&fs_info->trans_block_rsv, BTRFS_BLOCK_RSV_TRANS); in open_ctree()
2526 btrfs_init_block_rsv(&fs_info->chunk_block_rsv, BTRFS_BLOCK_RSV_CHUNK); in open_ctree()
2527 btrfs_init_block_rsv(&fs_info->empty_block_rsv, BTRFS_BLOCK_RSV_EMPTY); in open_ctree()
2528 btrfs_init_block_rsv(&fs_info->delayed_block_rsv, in open_ctree()
2530 atomic_set(&fs_info->nr_async_submits, 0); in open_ctree()
2531 atomic_set(&fs_info->async_delalloc_pages, 0); in open_ctree()
2532 atomic_set(&fs_info->async_submit_draining, 0); in open_ctree()
2533 atomic_set(&fs_info->nr_async_bios, 0); in open_ctree()
2534 atomic_set(&fs_info->defrag_running, 0); in open_ctree()
2535 atomic_set(&fs_info->qgroup_op_seq, 0); in open_ctree()
2536 atomic64_set(&fs_info->tree_mod_seq, 0); in open_ctree()
2537 fs_info->sb = sb; in open_ctree()
2538 fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE; in open_ctree()
2539 fs_info->metadata_ratio = 0; in open_ctree()
2540 fs_info->defrag_inodes = RB_ROOT; in open_ctree()
2541 fs_info->free_chunk_space = 0; in open_ctree()
2542 fs_info->tree_mod_log = RB_ROOT; in open_ctree()
2543 fs_info->commit_interval = BTRFS_DEFAULT_COMMIT_INTERVAL; in open_ctree()
2544 fs_info->avg_delayed_ref_runtime = NSEC_PER_SEC >> 6; /* div by 64 */ in open_ctree()
2546 INIT_RADIX_TREE(&fs_info->reada_tree, GFP_NOFS & ~__GFP_WAIT); in open_ctree()
2547 spin_lock_init(&fs_info->reada_lock); in open_ctree()
2549 fs_info->thread_pool_size = min_t(unsigned long, in open_ctree()
2552 INIT_LIST_HEAD(&fs_info->ordered_roots); in open_ctree()
2553 spin_lock_init(&fs_info->ordered_root_lock); in open_ctree()
2554 fs_info->delayed_root = kmalloc(sizeof(struct btrfs_delayed_root), in open_ctree()
2556 if (!fs_info->delayed_root) { in open_ctree()
2560 btrfs_init_delayed_root(fs_info->delayed_root); in open_ctree()
2562 btrfs_init_scrub(fs_info); in open_ctree()
2564 fs_info->check_integrity_print_mask = 0; in open_ctree()
2566 btrfs_init_balance(fs_info); in open_ctree()
2567 btrfs_init_async_reclaim_work(&fs_info->async_reclaim_work); in open_ctree()
2571 sb->s_bdi = &fs_info->bdi; in open_ctree()
2573 btrfs_init_btree_inode(fs_info, tree_root); in open_ctree()
2575 spin_lock_init(&fs_info->block_group_cache_lock); in open_ctree()
2576 fs_info->block_group_cache_tree = RB_ROOT; in open_ctree()
2577 fs_info->first_logical_byte = (u64)-1; in open_ctree()
2579 extent_io_tree_init(&fs_info->freed_extents[0], in open_ctree()
2580 fs_info->btree_inode->i_mapping); in open_ctree()
2581 extent_io_tree_init(&fs_info->freed_extents[1], in open_ctree()
2582 fs_info->btree_inode->i_mapping); in open_ctree()
2583 fs_info->pinned_extents = &fs_info->freed_extents[0]; in open_ctree()
2584 fs_info->do_barriers = 1; in open_ctree()
2587 mutex_init(&fs_info->ordered_operations_mutex); in open_ctree()
2588 mutex_init(&fs_info->ordered_extent_flush_mutex); in open_ctree()
2589 mutex_init(&fs_info->tree_log_mutex); in open_ctree()
2590 mutex_init(&fs_info->chunk_mutex); in open_ctree()
2591 mutex_init(&fs_info->transaction_kthread_mutex); in open_ctree()
2592 mutex_init(&fs_info->cleaner_mutex); in open_ctree()
2593 mutex_init(&fs_info->volume_mutex); in open_ctree()
2594 mutex_init(&fs_info->ro_block_group_mutex); in open_ctree()
2595 init_rwsem(&fs_info->commit_root_sem); in open_ctree()
2596 init_rwsem(&fs_info->cleanup_work_sem); in open_ctree()
2597 init_rwsem(&fs_info->subvol_sem); in open_ctree()
2598 sema_init(&fs_info->uuid_tree_rescan_sem, 1); in open_ctree()
2600 btrfs_init_dev_replace_locks(fs_info); in open_ctree()
2601 btrfs_init_qgroup(fs_info); in open_ctree()
2603 btrfs_init_free_cluster(&fs_info->meta_alloc_cluster); in open_ctree()
2604 btrfs_init_free_cluster(&fs_info->data_alloc_cluster); in open_ctree()
2606 init_waitqueue_head(&fs_info->transaction_throttle); in open_ctree()
2607 init_waitqueue_head(&fs_info->transaction_wait); in open_ctree()
2608 init_waitqueue_head(&fs_info->transaction_blocked_wait); in open_ctree()
2609 init_waitqueue_head(&fs_info->async_submit_wait); in open_ctree()
2611 INIT_LIST_HEAD(&fs_info->pinned_chunks); in open_ctree()
2613 ret = btrfs_alloc_stripe_hash_table(fs_info); in open_ctree()
2620 fs_info, BTRFS_ROOT_TREE_OBJECTID); in open_ctree()
2649 memcpy(fs_info->super_copy, bh->b_data, sizeof(*fs_info->super_copy)); in open_ctree()
2650 memcpy(fs_info->super_for_commit, fs_info->super_copy, in open_ctree()
2651 sizeof(*fs_info->super_for_commit)); in open_ctree()
2654 memcpy(fs_info->fsid, fs_info->super_copy->fsid, BTRFS_FSID_SIZE); in open_ctree()
2656 ret = btrfs_check_super_valid(fs_info, sb->s_flags & MS_RDONLY); in open_ctree()
2663 disk_super = fs_info->super_copy; in open_ctree()
2669 set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state); in open_ctree()
2676 find_oldest_super_backup(fs_info, generation); in open_ctree()
2682 fs_info->compress_type = BTRFS_COMPRESS_ZLIB; in open_ctree()
2722 if (tree_root->fs_info->compress_type == BTRFS_COMPRESS_LZO) in open_ctree()
2741 fs_info->dirty_metadata_batch = nodesize * (1 + ilog2(nr_cpu_ids)); in open_ctree()
2742 fs_info->delalloc_batch = sectorsize * 512 * (1 + ilog2(nr_cpu_ids)); in open_ctree()
2772 max_active = fs_info->thread_pool_size; in open_ctree()
2774 ret = btrfs_init_workqueues(fs_info, fs_devices); in open_ctree()
2780 fs_info->bdi.ra_pages *= btrfs_super_num_devices(disk_super); in open_ctree()
2781 fs_info->bdi.ra_pages = max(fs_info->bdi.ra_pages, in open_ctree()
2802 mutex_lock(&fs_info->chunk_mutex); in open_ctree()
2804 mutex_unlock(&fs_info->chunk_mutex); in open_ctree()
2814 fs_info, BTRFS_CHUNK_TREE_OBJECTID); in open_ctree()
2828 read_extent_buffer(chunk_root->node, fs_info->chunk_tree_uuid, in open_ctree()
2880 ret = btrfs_read_roots(fs_info, tree_root); in open_ctree()
2884 fs_info->generation = generation; in open_ctree()
2885 fs_info->last_trans_committed = generation; in open_ctree()
2887 ret = btrfs_recover_balance(fs_info); in open_ctree()
2893 ret = btrfs_init_dev_stats(fs_info); in open_ctree()
2900 ret = btrfs_init_dev_replace(fs_info); in open_ctree()
2908 ret = btrfs_sysfs_add_one(fs_info); in open_ctree()
2914 ret = btrfs_init_space_info(fs_info); in open_ctree()
2920 ret = btrfs_read_block_groups(fs_info->extent_root); in open_ctree()
2925 fs_info->num_tolerated_disk_barrier_failures = in open_ctree()
2926 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info); in open_ctree()
2927 if (fs_info->fs_devices->missing_devices > in open_ctree()
2928 fs_info->num_tolerated_disk_barrier_failures && in open_ctree()
2935 fs_info->cleaner_kthread = kthread_run(cleaner_kthread, tree_root, in open_ctree()
2937 if (IS_ERR(fs_info->cleaner_kthread)) in open_ctree()
2940 fs_info->transaction_kthread = kthread_run(transaction_kthread, in open_ctree()
2943 if (IS_ERR(fs_info->transaction_kthread)) in open_ctree()
2948 !fs_info->fs_devices->rotating) { in open_ctree()
2951 btrfs_set_opt(fs_info->mount_opt, SSD); in open_ctree()
2958 btrfs_apply_pending_changes(fs_info); in open_ctree()
2966 fs_info->check_integrity_print_mask); in open_ctree()
2972 ret = btrfs_read_qgroup_config(fs_info); in open_ctree()
2978 ret = btrfs_replay_log(fs_info, fs_devices); in open_ctree()
2990 ret = btrfs_cleanup_fs_roots(fs_info); in open_ctree()
2994 mutex_lock(&fs_info->cleaner_mutex); in open_ctree()
2996 mutex_unlock(&fs_info->cleaner_mutex); in open_ctree()
3009 fs_info->fs_root = btrfs_read_fs_root_no_name(fs_info, &location); in open_ctree()
3010 if (IS_ERR(fs_info->fs_root)) { in open_ctree()
3011 err = PTR_ERR(fs_info->fs_root); in open_ctree()
3018 down_read(&fs_info->cleanup_work_sem); in open_ctree()
3019 if ((ret = btrfs_orphan_cleanup(fs_info->fs_root)) || in open_ctree()
3020 (ret = btrfs_orphan_cleanup(fs_info->tree_root))) { in open_ctree()
3021 up_read(&fs_info->cleanup_work_sem); in open_ctree()
3025 up_read(&fs_info->cleanup_work_sem); in open_ctree()
3027 ret = btrfs_resume_balance_async(fs_info); in open_ctree()
3034 ret = btrfs_resume_dev_replace_async(fs_info); in open_ctree()
3041 btrfs_qgroup_rescan_resume(fs_info); in open_ctree()
3043 if (!fs_info->uuid_root) { in open_ctree()
3045 ret = btrfs_create_uuid_tree(fs_info); in open_ctree()
3053 fs_info->generation != in open_ctree()
3056 ret = btrfs_check_uuid_tree(fs_info); in open_ctree()
3064 fs_info->update_uuid_tree_gen = 1; in open_ctree()
3067 fs_info->open = 1; in open_ctree()
3072 btrfs_free_qgroup_config(fs_info); in open_ctree()
3074 kthread_stop(fs_info->transaction_kthread); in open_ctree()
3075 btrfs_cleanup_transaction(fs_info->tree_root); in open_ctree()
3076 btrfs_free_fs_roots(fs_info); in open_ctree()
3078 kthread_stop(fs_info->cleaner_kthread); in open_ctree()
3084 filemap_write_and_wait(fs_info->btree_inode->i_mapping); in open_ctree()
3087 btrfs_sysfs_remove_one(fs_info); in open_ctree()
3090 btrfs_put_block_group_cache(fs_info); in open_ctree()
3091 btrfs_free_block_groups(fs_info); in open_ctree()
3094 free_root_pointers(fs_info, 1); in open_ctree()
3095 invalidate_inode_pages2(fs_info->btree_inode->i_mapping); in open_ctree()
3098 btrfs_stop_all_workers(fs_info); in open_ctree()
3101 btrfs_mapping_tree_free(&fs_info->mapping_tree); in open_ctree()
3103 iput(fs_info->btree_inode); in open_ctree()
3105 percpu_counter_destroy(&fs_info->bio_counter); in open_ctree()
3107 percpu_counter_destroy(&fs_info->delalloc_bytes); in open_ctree()
3109 percpu_counter_destroy(&fs_info->dirty_metadata_bytes); in open_ctree()
3111 bdi_destroy(&fs_info->bdi); in open_ctree()
3113 cleanup_srcu_struct(&fs_info->subvol_srcu); in open_ctree()
3115 btrfs_free_stripe_hash_table(fs_info); in open_ctree()
3116 btrfs_close_devices(fs_info->fs_devices); in open_ctree()
3123 free_root_pointers(fs_info, 0); in open_ctree()
3129 btrfs_set_opt(fs_info->mount_opt, CLEAR_CACHE); in open_ctree()
3131 ret = next_root_backup(fs_info, fs_info->super_copy, in open_ctree()
3424 struct btrfs_fs_info *fs_info) in btrfs_calc_num_tolerated_disk_barrier_failures() argument
3436 (int)fs_info->fs_devices->num_devices; in btrfs_calc_num_tolerated_disk_barrier_failures()
3443 list_for_each_entry_rcu(tmp, &fs_info->space_info, list) { in btrfs_calc_num_tolerated_disk_barrier_failures()
3514 backup_super_roots(root->fs_info); in write_all_supers()
3516 sb = root->fs_info->super_for_commit; in write_all_supers()
3519 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3520 head = &root->fs_info->fs_devices->devices; in write_all_supers()
3521 max_errors = btrfs_super_num_devices(root->fs_info->super_copy) - 1; in write_all_supers()
3524 ret = barrier_all_devices(root->fs_info); in write_all_supers()
3527 &root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3528 btrfs_error(root->fs_info, ret, in write_all_supers()
3563 btrfs_err(root->fs_info, "%d errors while writing supers", in write_all_supers()
3565 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3568 btrfs_error(root->fs_info, -EIO, in write_all_supers()
3584 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in write_all_supers()
3586 btrfs_error(root->fs_info, -EIO, in write_all_supers()
3600 void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info, in btrfs_drop_and_free_fs_root() argument
3603 spin_lock(&fs_info->fs_roots_radix_lock); in btrfs_drop_and_free_fs_root()
3604 radix_tree_delete(&fs_info->fs_roots_radix, in btrfs_drop_and_free_fs_root()
3606 spin_unlock(&fs_info->fs_roots_radix_lock); in btrfs_drop_and_free_fs_root()
3609 synchronize_srcu(&fs_info->subvol_srcu); in btrfs_drop_and_free_fs_root()
3611 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) in btrfs_drop_and_free_fs_root()
3644 int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) in btrfs_cleanup_fs_roots() argument
3654 index = srcu_read_lock(&fs_info->subvol_srcu); in btrfs_cleanup_fs_roots()
3655 ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix, in btrfs_cleanup_fs_roots()
3659 srcu_read_unlock(&fs_info->subvol_srcu, index); in btrfs_cleanup_fs_roots()
3673 srcu_read_unlock(&fs_info->subvol_srcu, index); in btrfs_cleanup_fs_roots()
3699 mutex_lock(&root->fs_info->cleaner_mutex); in btrfs_commit_super()
3701 mutex_unlock(&root->fs_info->cleaner_mutex); in btrfs_commit_super()
3702 wake_up_process(root->fs_info->cleaner_kthread); in btrfs_commit_super()
3705 down_write(&root->fs_info->cleanup_work_sem); in btrfs_commit_super()
3706 up_write(&root->fs_info->cleanup_work_sem); in btrfs_commit_super()
3716 struct btrfs_fs_info *fs_info = root->fs_info; in close_ctree() local
3719 fs_info->closing = 1; in close_ctree()
3723 down(&fs_info->uuid_tree_rescan_sem); in close_ctree()
3725 up(&fs_info->uuid_tree_rescan_sem); in close_ctree()
3728 btrfs_pause_balance(fs_info); in close_ctree()
3730 btrfs_dev_replace_suspend_for_unmount(fs_info); in close_ctree()
3732 btrfs_scrub_cancel(fs_info); in close_ctree()
3735 wait_event(fs_info->transaction_wait, in close_ctree()
3736 (atomic_read(&fs_info->defrag_running) == 0)); in close_ctree()
3739 btrfs_cleanup_defrag_inodes(fs_info); in close_ctree()
3741 cancel_work_sync(&fs_info->async_reclaim_work); in close_ctree()
3743 if (!(fs_info->sb->s_flags & MS_RDONLY)) { in close_ctree()
3746 btrfs_err(fs_info, "commit super ret %d", ret); in close_ctree()
3749 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) in close_ctree()
3752 kthread_stop(fs_info->transaction_kthread); in close_ctree()
3753 kthread_stop(fs_info->cleaner_kthread); in close_ctree()
3755 fs_info->closing = 2; in close_ctree()
3758 btrfs_free_qgroup_config(fs_info); in close_ctree()
3760 if (percpu_counter_sum(&fs_info->delalloc_bytes)) { in close_ctree()
3761 btrfs_info(fs_info, "at unmount delalloc count %lld", in close_ctree()
3762 percpu_counter_sum(&fs_info->delalloc_bytes)); in close_ctree()
3765 btrfs_sysfs_remove_one(fs_info); in close_ctree()
3767 btrfs_free_fs_roots(fs_info); in close_ctree()
3769 btrfs_put_block_group_cache(fs_info); in close_ctree()
3771 btrfs_free_block_groups(fs_info); in close_ctree()
3777 invalidate_inode_pages2(fs_info->btree_inode->i_mapping); in close_ctree()
3778 btrfs_stop_all_workers(fs_info); in close_ctree()
3780 fs_info->open = 0; in close_ctree()
3781 free_root_pointers(fs_info, 1); in close_ctree()
3783 iput(fs_info->btree_inode); in close_ctree()
3787 btrfsic_unmount(root, fs_info->fs_devices); in close_ctree()
3790 btrfs_close_devices(fs_info->fs_devices); in close_ctree()
3791 btrfs_mapping_tree_free(&fs_info->mapping_tree); in close_ctree()
3793 percpu_counter_destroy(&fs_info->dirty_metadata_bytes); in close_ctree()
3794 percpu_counter_destroy(&fs_info->delalloc_bytes); in close_ctree()
3795 percpu_counter_destroy(&fs_info->bio_counter); in close_ctree()
3796 bdi_destroy(&fs_info->bdi); in close_ctree()
3797 cleanup_srcu_struct(&fs_info->subvol_srcu); in close_ctree()
3799 btrfs_free_stripe_hash_table(fs_info); in close_ctree()
3805 while (!list_empty(&fs_info->pinned_chunks)) { in close_ctree()
3808 em = list_first_entry(&fs_info->pinned_chunks, in close_ctree()
3855 if (transid != root->fs_info->generation) in btrfs_mark_buffer_dirty()
3858 buf->start, transid, root->fs_info->generation); in btrfs_mark_buffer_dirty()
3861 __percpu_counter_add(&root->fs_info->dirty_metadata_bytes, in btrfs_mark_buffer_dirty()
3863 root->fs_info->dirty_metadata_batch); in btrfs_mark_buffer_dirty()
3887 ret = percpu_counter_compare(&root->fs_info->dirty_metadata_bytes, in __btrfs_btree_balance_dirty()
3891 root->fs_info->btree_inode->i_mapping); in __btrfs_btree_balance_dirty()
3912 static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info, in btrfs_check_super_valid() argument
3915 struct btrfs_super_block *sb = fs_info->super_copy; in btrfs_check_super_valid()
3963 if (memcmp(fs_info->fsid, sb->dev_item.fsid, BTRFS_UUID_SIZE) != 0) { in btrfs_check_super_valid()
3965 fs_info->fsid, sb->dev_item.fsid); in btrfs_check_super_valid()
4025 mutex_lock(&root->fs_info->cleaner_mutex); in btrfs_error_commit_super()
4027 mutex_unlock(&root->fs_info->cleaner_mutex); in btrfs_error_commit_super()
4029 down_write(&root->fs_info->cleanup_work_sem); in btrfs_error_commit_super()
4030 up_write(&root->fs_info->cleanup_work_sem); in btrfs_error_commit_super()
4051 static void btrfs_destroy_all_ordered_extents(struct btrfs_fs_info *fs_info) in btrfs_destroy_all_ordered_extents() argument
4058 spin_lock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4059 list_splice_init(&fs_info->ordered_roots, &splice); in btrfs_destroy_all_ordered_extents()
4064 &fs_info->ordered_roots); in btrfs_destroy_all_ordered_extents()
4066 spin_unlock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4070 spin_lock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4072 spin_unlock(&fs_info->ordered_root_lock); in btrfs_destroy_all_ordered_extents()
4088 btrfs_info(root->fs_info, "delayed_refs has NO entry"); in btrfs_destroy_delayed_refs()
4170 static void btrfs_destroy_all_delalloc_inodes(struct btrfs_fs_info *fs_info) in btrfs_destroy_all_delalloc_inodes() argument
4177 spin_lock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4178 list_splice_init(&fs_info->delalloc_roots, &splice); in btrfs_destroy_all_delalloc_inodes()
4185 spin_unlock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4190 spin_lock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4192 spin_unlock(&fs_info->delalloc_root_lock); in btrfs_destroy_all_delalloc_inodes()
4212 eb = btrfs_find_tree_block(root->fs_info, start); in btrfs_destroy_marked_extents()
4251 if (unpin == &root->fs_info->freed_extents[0]) in btrfs_destroy_pinned_extent()
4252 unpin = &root->fs_info->freed_extents[1]; in btrfs_destroy_pinned_extent()
4254 unpin = &root->fs_info->freed_extents[0]; in btrfs_destroy_pinned_extent()
4263 struct btrfs_fs_info *fs_info) in btrfs_free_pending_ordered() argument
4267 spin_lock(&fs_info->trans_lock); in btrfs_free_pending_ordered()
4273 spin_unlock(&fs_info->trans_lock); in btrfs_free_pending_ordered()
4276 spin_lock(&fs_info->trans_lock); in btrfs_free_pending_ordered()
4278 spin_unlock(&fs_info->trans_lock); in btrfs_free_pending_ordered()
4287 wake_up(&root->fs_info->transaction_blocked_wait); in btrfs_cleanup_one_transaction()
4290 wake_up(&root->fs_info->transaction_wait); in btrfs_cleanup_one_transaction()
4292 btrfs_free_pending_ordered(cur_trans, root->fs_info); in btrfs_cleanup_one_transaction()
4299 root->fs_info->pinned_extents); in btrfs_cleanup_one_transaction()
4314 mutex_lock(&root->fs_info->transaction_kthread_mutex); in btrfs_cleanup_transaction()
4316 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4317 while (!list_empty(&root->fs_info->trans_list)) { in btrfs_cleanup_transaction()
4318 t = list_first_entry(&root->fs_info->trans_list, in btrfs_cleanup_transaction()
4322 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4325 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4328 if (t == root->fs_info->running_transaction) { in btrfs_cleanup_transaction()
4330 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4338 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4342 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4343 if (t == root->fs_info->running_transaction) in btrfs_cleanup_transaction()
4344 root->fs_info->running_transaction = NULL; in btrfs_cleanup_transaction()
4346 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4350 spin_lock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4352 spin_unlock(&root->fs_info->trans_lock); in btrfs_cleanup_transaction()
4353 btrfs_destroy_all_ordered_extents(root->fs_info); in btrfs_cleanup_transaction()
4356 btrfs_destroy_pinned_extent(root, root->fs_info->pinned_extents); in btrfs_cleanup_transaction()
4357 btrfs_destroy_all_delalloc_inodes(root->fs_info); in btrfs_cleanup_transaction()
4358 mutex_unlock(&root->fs_info->transaction_kthread_mutex); in btrfs_cleanup_transaction()