Lines Matching refs:delayed_node

51 				struct btrfs_delayed_node *delayed_node,  in btrfs_init_delayed_node()  argument
54 delayed_node->root = root; in btrfs_init_delayed_node()
55 delayed_node->inode_id = inode_id; in btrfs_init_delayed_node()
56 atomic_set(&delayed_node->refs, 0); in btrfs_init_delayed_node()
57 delayed_node->count = 0; in btrfs_init_delayed_node()
58 delayed_node->flags = 0; in btrfs_init_delayed_node()
59 delayed_node->ins_root = RB_ROOT; in btrfs_init_delayed_node()
60 delayed_node->del_root = RB_ROOT; in btrfs_init_delayed_node()
61 mutex_init(&delayed_node->mutex); in btrfs_init_delayed_node()
62 delayed_node->index_cnt = 0; in btrfs_init_delayed_node()
63 INIT_LIST_HEAD(&delayed_node->n_list); in btrfs_init_delayed_node()
64 INIT_LIST_HEAD(&delayed_node->p_list); in btrfs_init_delayed_node()
65 delayed_node->bytes_reserved = 0; in btrfs_init_delayed_node()
66 memset(&delayed_node->inode_item, 0, sizeof(delayed_node->inode_item)); in btrfs_init_delayed_node()
94 node = ACCESS_ONCE(btrfs_inode->delayed_node); in btrfs_get_delayed_node()
103 if (btrfs_inode->delayed_node) { in btrfs_get_delayed_node()
105 BUG_ON(btrfs_inode->delayed_node != node); in btrfs_get_delayed_node()
109 btrfs_inode->delayed_node = node; in btrfs_get_delayed_node()
157 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
252 struct btrfs_delayed_node *delayed_node, in __btrfs_release_delayed_node() argument
257 if (!delayed_node) in __btrfs_release_delayed_node()
260 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_release_delayed_node()
262 mutex_lock(&delayed_node->mutex); in __btrfs_release_delayed_node()
263 if (delayed_node->count) in __btrfs_release_delayed_node()
264 btrfs_queue_delayed_node(delayed_root, delayed_node, mod); in __btrfs_release_delayed_node()
266 btrfs_dequeue_delayed_node(delayed_root, delayed_node); in __btrfs_release_delayed_node()
267 mutex_unlock(&delayed_node->mutex); in __btrfs_release_delayed_node()
269 if (atomic_dec_and_test(&delayed_node->refs)) { in __btrfs_release_delayed_node()
271 struct btrfs_root *root = delayed_node->root; in __btrfs_release_delayed_node()
273 if (atomic_read(&delayed_node->refs) == 0) { in __btrfs_release_delayed_node()
275 delayed_node->inode_id); in __btrfs_release_delayed_node()
280 kmem_cache_free(delayed_node_cache, delayed_node); in __btrfs_release_delayed_node()
323 item->delayed_node = NULL; in btrfs_alloc_delayed_item()
391 struct btrfs_delayed_node *delayed_node, in __btrfs_lookup_delayed_insertion_item() argument
396 item = __btrfs_lookup_delayed_item(&delayed_node->ins_root, key, in __btrfs_lookup_delayed_insertion_item()
401 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()
436 ins->delayed_node = delayed_node; in __btrfs_add_delayed_item()
441 ins->key.offset >= delayed_node->index_cnt) in __btrfs_add_delayed_item()
442 delayed_node->index_cnt = ins->key.offset + 1; in __btrfs_add_delayed_item()
444 delayed_node->count++; in __btrfs_add_delayed_item()
445 atomic_inc(&delayed_node->root->fs_info->delayed_root->items); in __btrfs_add_delayed_item()
481 delayed_root = delayed_item->delayed_node->root->fs_info->delayed_root; in __btrfs_remove_delayed_item()
488 root = &delayed_item->delayed_node->ins_root; in __btrfs_remove_delayed_item()
490 root = &delayed_item->delayed_node->del_root; in __btrfs_remove_delayed_item()
493 delayed_item->delayed_node->count--; in __btrfs_remove_delayed_item()
508 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_insertion_item() argument
513 p = rb_first(&delayed_node->ins_root); in __btrfs_first_delayed_insertion_item()
521 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_deletion_item() argument
526 p = rb_first(&delayed_node->del_root); in __btrfs_first_delayed_deletion_item()
1010 static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_inode() argument
1014 if (delayed_node && in btrfs_release_delayed_inode()
1015 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_release_delayed_inode()
1016 BUG_ON(!delayed_node->root); in btrfs_release_delayed_inode()
1017 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_release_delayed_inode()
1018 delayed_node->count--; in btrfs_release_delayed_inode()
1020 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_inode()
1025 static void btrfs_release_delayed_iref(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_iref() argument
1029 ASSERT(delayed_node->root); in btrfs_release_delayed_iref()
1030 clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_release_delayed_iref()
1031 delayed_node->count--; in btrfs_release_delayed_iref()
1033 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_iref()
1224 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_items() local
1229 if (!delayed_node) in btrfs_commit_inode_delayed_items()
1232 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1233 if (!delayed_node->count) { in btrfs_commit_inode_delayed_items()
1234 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1235 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1238 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1242 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1248 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_items()
1250 ret = __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_commit_inode_delayed_items()
1252 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1262 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_inode() local
1267 if (!delayed_node) in btrfs_commit_inode_delayed_inode()
1270 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1271 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_commit_inode_delayed_inode()
1272 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1273 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1276 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1278 trans = btrfs_join_transaction(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1292 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_inode()
1294 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1295 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) in btrfs_commit_inode_delayed_inode()
1296 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, in btrfs_commit_inode_delayed_inode()
1297 path, delayed_node); in btrfs_commit_inode_delayed_inode()
1300 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1305 btrfs_end_transaction(trans, delayed_node->root); in btrfs_commit_inode_delayed_inode()
1306 btrfs_btree_balance_dirty(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1308 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1315 struct btrfs_delayed_node *delayed_node; in btrfs_remove_delayed_node() local
1317 delayed_node = ACCESS_ONCE(BTRFS_I(inode)->delayed_node); in btrfs_remove_delayed_node()
1318 if (!delayed_node) in btrfs_remove_delayed_node()
1321 BTRFS_I(inode)->delayed_node = NULL; in btrfs_remove_delayed_node()
1322 btrfs_release_delayed_node(delayed_node); in btrfs_remove_delayed_node()
1337 struct btrfs_delayed_node *delayed_node = NULL; in btrfs_async_run_delayed_root() local
1353 delayed_node = btrfs_first_prepared_delayed_node(delayed_root); in btrfs_async_run_delayed_root()
1354 if (!delayed_node) in btrfs_async_run_delayed_root()
1358 root = delayed_node->root; in btrfs_async_run_delayed_root()
1367 __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_async_run_delayed_root()
1377 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1465 struct btrfs_delayed_node *delayed_node; in btrfs_insert_delayed_dir_index() local
1470 delayed_node = btrfs_get_or_create_delayed_node(dir); in btrfs_insert_delayed_dir_index()
1471 if (IS_ERR(delayed_node)) in btrfs_insert_delayed_dir_index()
1472 return PTR_ERR(delayed_node); in btrfs_insert_delayed_dir_index()
1500 mutex_lock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1501 ret = __btrfs_add_delayed_insertion_item(delayed_node, delayed_item); in btrfs_insert_delayed_dir_index()
1506 name_len, name, delayed_node->root->objectid, in btrfs_insert_delayed_dir_index()
1507 delayed_node->inode_id, ret); in btrfs_insert_delayed_dir_index()
1510 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1513 btrfs_release_delayed_node(delayed_node); in btrfs_insert_delayed_dir_index()
1590 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_inode_delayed_dir_index_count() local
1592 if (!delayed_node) in btrfs_inode_delayed_dir_index_count()
1600 if (!delayed_node->index_cnt) { in btrfs_inode_delayed_dir_index_count()
1601 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1605 BTRFS_I(inode)->index_cnt = delayed_node->index_cnt; in btrfs_inode_delayed_dir_index_count()
1606 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1613 struct btrfs_delayed_node *delayed_node; in btrfs_get_delayed_items() local
1616 delayed_node = btrfs_get_delayed_node(inode); in btrfs_get_delayed_items()
1617 if (!delayed_node) in btrfs_get_delayed_items()
1620 mutex_lock(&delayed_node->mutex); in btrfs_get_delayed_items()
1621 item = __btrfs_first_delayed_insertion_item(delayed_node); in btrfs_get_delayed_items()
1628 item = __btrfs_first_delayed_deletion_item(delayed_node); in btrfs_get_delayed_items()
1634 mutex_unlock(&delayed_node->mutex); in btrfs_get_delayed_items()
1644 atomic_dec(&delayed_node->refs); in btrfs_get_delayed_items()
1787 struct btrfs_delayed_node *delayed_node; in btrfs_fill_inode() local
1790 delayed_node = btrfs_get_delayed_node(inode); in btrfs_fill_inode()
1791 if (!delayed_node) in btrfs_fill_inode()
1794 mutex_lock(&delayed_node->mutex); in btrfs_fill_inode()
1795 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_fill_inode()
1796 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1797 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1801 inode_item = &delayed_node->inode_item; in btrfs_fill_inode()
1834 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1835 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1842 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_update_inode() local
1845 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_update_inode()
1846 if (IS_ERR(delayed_node)) in btrfs_delayed_update_inode()
1847 return PTR_ERR(delayed_node); in btrfs_delayed_update_inode()
1849 mutex_lock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1850 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_delayed_update_inode()
1851 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1856 delayed_node); in btrfs_delayed_update_inode()
1860 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1861 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_delayed_update_inode()
1862 delayed_node->count++; in btrfs_delayed_update_inode()
1865 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1866 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_update_inode()
1872 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_delete_inode_ref() local
1882 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_delete_inode_ref()
1883 if (IS_ERR(delayed_node)) in btrfs_delayed_delete_inode_ref()
1884 return PTR_ERR(delayed_node); in btrfs_delayed_delete_inode_ref()
1900 mutex_lock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1901 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in btrfs_delayed_delete_inode_ref()
1904 set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_delayed_delete_inode_ref()
1905 delayed_node->count++; in btrfs_delayed_delete_inode_ref()
1908 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1909 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_delete_inode_ref()
1913 static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node) in __btrfs_kill_delayed_node() argument
1915 struct btrfs_root *root = delayed_node->root; in __btrfs_kill_delayed_node()
1918 mutex_lock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1919 curr_item = __btrfs_first_delayed_insertion_item(delayed_node); in __btrfs_kill_delayed_node()
1927 curr_item = __btrfs_first_delayed_deletion_item(delayed_node); in __btrfs_kill_delayed_node()
1935 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in __btrfs_kill_delayed_node()
1936 btrfs_release_delayed_iref(delayed_node); in __btrfs_kill_delayed_node()
1938 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in __btrfs_kill_delayed_node()
1939 btrfs_delayed_inode_release_metadata(root, delayed_node); in __btrfs_kill_delayed_node()
1940 btrfs_release_delayed_inode(delayed_node); in __btrfs_kill_delayed_node()
1942 mutex_unlock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1947 struct btrfs_delayed_node *delayed_node; in btrfs_kill_delayed_inode_items() local
1949 delayed_node = btrfs_get_delayed_node(inode); in btrfs_kill_delayed_inode_items()
1950 if (!delayed_node) in btrfs_kill_delayed_inode_items()
1953 __btrfs_kill_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()
1954 btrfs_release_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()