Lines Matching refs:delayed_node
42 struct btrfs_delayed_node *delayed_node, in btrfs_init_delayed_node() argument
45 delayed_node->root = root; in btrfs_init_delayed_node()
46 delayed_node->inode_id = inode_id; in btrfs_init_delayed_node()
47 refcount_set(&delayed_node->refs, 0); in btrfs_init_delayed_node()
48 delayed_node->ins_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
49 delayed_node->del_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
50 mutex_init(&delayed_node->mutex); in btrfs_init_delayed_node()
51 INIT_LIST_HEAD(&delayed_node->n_list); in btrfs_init_delayed_node()
52 INIT_LIST_HEAD(&delayed_node->p_list); in btrfs_init_delayed_node()
74 node = READ_ONCE(btrfs_inode->delayed_node); in btrfs_get_delayed_node()
84 if (btrfs_inode->delayed_node) { in btrfs_get_delayed_node()
86 BUG_ON(btrfs_inode->delayed_node != node); in btrfs_get_delayed_node()
109 btrfs_inode->delayed_node = node; in btrfs_get_delayed_node()
158 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
253 struct btrfs_delayed_node *delayed_node, in __btrfs_release_delayed_node() argument
258 if (!delayed_node) in __btrfs_release_delayed_node()
261 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_release_delayed_node()
263 mutex_lock(&delayed_node->mutex); in __btrfs_release_delayed_node()
264 if (delayed_node->count) in __btrfs_release_delayed_node()
265 btrfs_queue_delayed_node(delayed_root, delayed_node, mod); in __btrfs_release_delayed_node()
267 btrfs_dequeue_delayed_node(delayed_root, delayed_node); in __btrfs_release_delayed_node()
268 mutex_unlock(&delayed_node->mutex); in __btrfs_release_delayed_node()
270 if (refcount_dec_and_test(&delayed_node->refs)) { in __btrfs_release_delayed_node()
271 struct btrfs_root *root = delayed_node->root; in __btrfs_release_delayed_node()
278 ASSERT(refcount_read(&delayed_node->refs) == 0); in __btrfs_release_delayed_node()
280 delayed_node->inode_id); in __btrfs_release_delayed_node()
282 kmem_cache_free(delayed_node_cache, delayed_node); in __btrfs_release_delayed_node()
325 item->delayed_node = NULL; in btrfs_alloc_delayed_item()
393 struct btrfs_delayed_node *delayed_node, in __btrfs_lookup_delayed_insertion_item() argument
396 return __btrfs_lookup_delayed_item(&delayed_node->ins_root.rb_root, key, in __btrfs_lookup_delayed_insertion_item()
400 static int __btrfs_add_delayed_item(struct btrfs_delayed_node *delayed_node, in __btrfs_add_delayed_item() argument
412 root = &delayed_node->ins_root; in __btrfs_add_delayed_item()
414 root = &delayed_node->del_root; in __btrfs_add_delayed_item()
438 ins->delayed_node = delayed_node; in __btrfs_add_delayed_item()
443 ins->key.offset >= delayed_node->index_cnt) in __btrfs_add_delayed_item()
444 delayed_node->index_cnt = ins->key.offset + 1; in __btrfs_add_delayed_item()
446 delayed_node->count++; in __btrfs_add_delayed_item()
447 atomic_inc(&delayed_node->root->fs_info->delayed_root->items); in __btrfs_add_delayed_item()
481 if (!delayed_item->delayed_node) in __btrfs_remove_delayed_item()
483 delayed_root = delayed_item->delayed_node->root->fs_info->delayed_root; in __btrfs_remove_delayed_item()
490 root = &delayed_item->delayed_node->ins_root; in __btrfs_remove_delayed_item()
492 root = &delayed_item->delayed_node->del_root; in __btrfs_remove_delayed_item()
495 delayed_item->delayed_node->count--; in __btrfs_remove_delayed_item()
510 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_insertion_item() argument
515 p = rb_first_cached(&delayed_node->ins_root); in __btrfs_first_delayed_insertion_item()
523 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_deletion_item() argument
528 p = rb_first_cached(&delayed_node->del_root); in __btrfs_first_delayed_deletion_item()
982 static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_inode() argument
986 if (delayed_node && in btrfs_release_delayed_inode()
987 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_release_delayed_inode()
988 BUG_ON(!delayed_node->root); in btrfs_release_delayed_inode()
989 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_release_delayed_inode()
990 delayed_node->count--; in btrfs_release_delayed_inode()
992 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_inode()
997 static void btrfs_release_delayed_iref(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_iref() argument
1001 ASSERT(delayed_node->root); in btrfs_release_delayed_iref()
1002 clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_release_delayed_iref()
1003 delayed_node->count--; in btrfs_release_delayed_iref()
1005 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_iref()
1201 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_items() local
1206 if (!delayed_node) in btrfs_commit_inode_delayed_items()
1209 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1210 if (!delayed_node->count) { in btrfs_commit_inode_delayed_items()
1211 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1212 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1215 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1219 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1225 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_items()
1227 ret = __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_commit_inode_delayed_items()
1229 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1240 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_inode() local
1245 if (!delayed_node) in btrfs_commit_inode_delayed_inode()
1248 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1249 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_commit_inode_delayed_inode()
1250 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1251 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1254 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1256 trans = btrfs_join_transaction(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1272 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1273 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) in btrfs_commit_inode_delayed_inode()
1274 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, in btrfs_commit_inode_delayed_inode()
1275 path, delayed_node); in btrfs_commit_inode_delayed_inode()
1278 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1286 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1293 struct btrfs_delayed_node *delayed_node; in btrfs_remove_delayed_node() local
1295 delayed_node = READ_ONCE(inode->delayed_node); in btrfs_remove_delayed_node()
1296 if (!delayed_node) in btrfs_remove_delayed_node()
1299 inode->delayed_node = NULL; in btrfs_remove_delayed_node()
1300 btrfs_release_delayed_node(delayed_node); in btrfs_remove_delayed_node()
1315 struct btrfs_delayed_node *delayed_node = NULL; in btrfs_async_run_delayed_root() local
1332 delayed_node = btrfs_first_prepared_delayed_node(delayed_root); in btrfs_async_run_delayed_root()
1333 if (!delayed_node) in btrfs_async_run_delayed_root()
1337 root = delayed_node->root; in btrfs_async_run_delayed_root()
1342 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1350 __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_async_run_delayed_root()
1357 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1439 struct btrfs_delayed_node *delayed_node; in btrfs_insert_delayed_dir_index() local
1444 delayed_node = btrfs_get_or_create_delayed_node(dir); in btrfs_insert_delayed_dir_index()
1445 if (IS_ERR(delayed_node)) in btrfs_insert_delayed_dir_index()
1446 return PTR_ERR(delayed_node); in btrfs_insert_delayed_dir_index()
1473 mutex_lock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1474 ret = __btrfs_add_delayed_insertion_item(delayed_node, delayed_item); in btrfs_insert_delayed_dir_index()
1478 name_len, name, delayed_node->root->root_key.objectid, in btrfs_insert_delayed_dir_index()
1479 delayed_node->inode_id, ret); in btrfs_insert_delayed_dir_index()
1482 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1485 btrfs_release_delayed_node(delayed_node); in btrfs_insert_delayed_dir_index()
1567 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_inode_delayed_dir_index_count() local
1569 if (!delayed_node) in btrfs_inode_delayed_dir_index_count()
1577 if (!delayed_node->index_cnt) { in btrfs_inode_delayed_dir_index_count()
1578 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1582 inode->index_cnt = delayed_node->index_cnt; in btrfs_inode_delayed_dir_index_count()
1583 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1591 struct btrfs_delayed_node *delayed_node; in btrfs_readdir_get_delayed_items() local
1594 delayed_node = btrfs_get_delayed_node(BTRFS_I(inode)); in btrfs_readdir_get_delayed_items()
1595 if (!delayed_node) in btrfs_readdir_get_delayed_items()
1605 mutex_lock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1606 item = __btrfs_first_delayed_insertion_item(delayed_node); in btrfs_readdir_get_delayed_items()
1613 item = __btrfs_first_delayed_deletion_item(delayed_node); in btrfs_readdir_get_delayed_items()
1619 mutex_unlock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1629 refcount_dec(&delayed_node->refs); in btrfs_readdir_get_delayed_items()
1773 struct btrfs_delayed_node *delayed_node; in btrfs_fill_inode() local
1776 delayed_node = btrfs_get_delayed_node(BTRFS_I(inode)); in btrfs_fill_inode()
1777 if (!delayed_node) in btrfs_fill_inode()
1780 mutex_lock(&delayed_node->mutex); in btrfs_fill_inode()
1781 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_fill_inode()
1782 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1783 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1787 inode_item = &delayed_node->inode_item; in btrfs_fill_inode()
1823 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1824 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1831 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_update_inode() local
1834 delayed_node = btrfs_get_or_create_delayed_node(BTRFS_I(inode)); in btrfs_delayed_update_inode()
1835 if (IS_ERR(delayed_node)) in btrfs_delayed_update_inode()
1836 return PTR_ERR(delayed_node); in btrfs_delayed_update_inode()
1838 mutex_lock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1839 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_delayed_update_inode()
1840 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1845 delayed_node); in btrfs_delayed_update_inode()
1849 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1850 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_delayed_update_inode()
1851 delayed_node->count++; in btrfs_delayed_update_inode()
1854 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1855 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_update_inode()
1862 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_delete_inode_ref() local
1872 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_delete_inode_ref()
1873 if (IS_ERR(delayed_node)) in btrfs_delayed_delete_inode_ref()
1874 return PTR_ERR(delayed_node); in btrfs_delayed_delete_inode_ref()
1890 mutex_lock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1891 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in btrfs_delayed_delete_inode_ref()
1894 set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_delayed_delete_inode_ref()
1895 delayed_node->count++; in btrfs_delayed_delete_inode_ref()
1898 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1899 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_delete_inode_ref()
1903 static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node) in __btrfs_kill_delayed_node() argument
1905 struct btrfs_root *root = delayed_node->root; in __btrfs_kill_delayed_node()
1909 mutex_lock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1910 curr_item = __btrfs_first_delayed_insertion_item(delayed_node); in __btrfs_kill_delayed_node()
1918 curr_item = __btrfs_first_delayed_deletion_item(delayed_node); in __btrfs_kill_delayed_node()
1926 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in __btrfs_kill_delayed_node()
1927 btrfs_release_delayed_iref(delayed_node); in __btrfs_kill_delayed_node()
1929 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in __btrfs_kill_delayed_node()
1930 btrfs_delayed_inode_release_metadata(fs_info, delayed_node, false); in __btrfs_kill_delayed_node()
1931 btrfs_release_delayed_inode(delayed_node); in __btrfs_kill_delayed_node()
1933 mutex_unlock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1938 struct btrfs_delayed_node *delayed_node; in btrfs_kill_delayed_inode_items() local
1940 delayed_node = btrfs_get_delayed_node(inode); in btrfs_kill_delayed_inode_items()
1941 if (!delayed_node) in btrfs_kill_delayed_inode_items()
1944 __btrfs_kill_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()
1945 btrfs_release_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()