Lines Matching refs:delayed_node
41 struct btrfs_delayed_node *delayed_node, in btrfs_init_delayed_node() argument
44 delayed_node->root = root; in btrfs_init_delayed_node()
45 delayed_node->inode_id = inode_id; in btrfs_init_delayed_node()
46 refcount_set(&delayed_node->refs, 0); in btrfs_init_delayed_node()
47 delayed_node->ins_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
48 delayed_node->del_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
49 mutex_init(&delayed_node->mutex); in btrfs_init_delayed_node()
50 INIT_LIST_HEAD(&delayed_node->n_list); in btrfs_init_delayed_node()
51 INIT_LIST_HEAD(&delayed_node->p_list); in btrfs_init_delayed_node()
73 node = READ_ONCE(btrfs_inode->delayed_node); in btrfs_get_delayed_node()
83 if (btrfs_inode->delayed_node) { in btrfs_get_delayed_node()
85 BUG_ON(btrfs_inode->delayed_node != node); in btrfs_get_delayed_node()
108 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 (refcount_dec_and_test(&delayed_node->refs)) { in __btrfs_release_delayed_node()
270 struct btrfs_root *root = delayed_node->root; in __btrfs_release_delayed_node()
277 ASSERT(refcount_read(&delayed_node->refs) == 0); in __btrfs_release_delayed_node()
279 delayed_node->inode_id); in __btrfs_release_delayed_node()
281 kmem_cache_free(delayed_node_cache, delayed_node); in __btrfs_release_delayed_node()
324 item->delayed_node = NULL; in btrfs_alloc_delayed_item()
392 struct btrfs_delayed_node *delayed_node, in __btrfs_lookup_delayed_insertion_item() argument
395 return __btrfs_lookup_delayed_item(&delayed_node->ins_root.rb_root, key, in __btrfs_lookup_delayed_insertion_item()
399 static int __btrfs_add_delayed_item(struct btrfs_delayed_node *delayed_node, in __btrfs_add_delayed_item() argument
411 root = &delayed_node->ins_root; in __btrfs_add_delayed_item()
413 root = &delayed_node->del_root; in __btrfs_add_delayed_item()
437 ins->delayed_node = delayed_node; in __btrfs_add_delayed_item()
442 ins->key.offset >= delayed_node->index_cnt) in __btrfs_add_delayed_item()
443 delayed_node->index_cnt = ins->key.offset + 1; in __btrfs_add_delayed_item()
445 delayed_node->count++; in __btrfs_add_delayed_item()
446 atomic_inc(&delayed_node->root->fs_info->delayed_root->items); in __btrfs_add_delayed_item()
480 if (!delayed_item->delayed_node) in __btrfs_remove_delayed_item()
482 delayed_root = delayed_item->delayed_node->root->fs_info->delayed_root; in __btrfs_remove_delayed_item()
489 root = &delayed_item->delayed_node->ins_root; in __btrfs_remove_delayed_item()
491 root = &delayed_item->delayed_node->del_root; in __btrfs_remove_delayed_item()
494 delayed_item->delayed_node->count--; in __btrfs_remove_delayed_item()
509 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_insertion_item() argument
514 p = rb_first_cached(&delayed_node->ins_root); in __btrfs_first_delayed_insertion_item()
522 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_deletion_item() argument
527 p = rb_first_cached(&delayed_node->del_root); in __btrfs_first_delayed_deletion_item()
898 static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_inode() argument
902 if (delayed_node && in btrfs_release_delayed_inode()
903 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_release_delayed_inode()
904 BUG_ON(!delayed_node->root); in btrfs_release_delayed_inode()
905 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_release_delayed_inode()
906 delayed_node->count--; in btrfs_release_delayed_inode()
908 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_inode()
913 static void btrfs_release_delayed_iref(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_iref() argument
916 if (test_and_clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) { in btrfs_release_delayed_iref()
919 ASSERT(delayed_node->root); in btrfs_release_delayed_iref()
920 delayed_node->count--; in btrfs_release_delayed_iref()
922 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_iref()
1118 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_items() local
1123 if (!delayed_node) in btrfs_commit_inode_delayed_items()
1126 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1127 if (!delayed_node->count) { in btrfs_commit_inode_delayed_items()
1128 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1129 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1132 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1136 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1141 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_items()
1143 ret = __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_commit_inode_delayed_items()
1145 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1156 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_inode() local
1161 if (!delayed_node) in btrfs_commit_inode_delayed_inode()
1164 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1165 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_commit_inode_delayed_inode()
1166 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1167 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1170 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1172 trans = btrfs_join_transaction(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1187 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1188 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) in btrfs_commit_inode_delayed_inode()
1189 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, in btrfs_commit_inode_delayed_inode()
1190 path, delayed_node); in btrfs_commit_inode_delayed_inode()
1193 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1201 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1208 struct btrfs_delayed_node *delayed_node; in btrfs_remove_delayed_node() local
1210 delayed_node = READ_ONCE(inode->delayed_node); in btrfs_remove_delayed_node()
1211 if (!delayed_node) in btrfs_remove_delayed_node()
1214 inode->delayed_node = NULL; in btrfs_remove_delayed_node()
1215 btrfs_release_delayed_node(delayed_node); in btrfs_remove_delayed_node()
1230 struct btrfs_delayed_node *delayed_node = NULL; in btrfs_async_run_delayed_root() local
1247 delayed_node = btrfs_first_prepared_delayed_node(delayed_root); in btrfs_async_run_delayed_root()
1248 if (!delayed_node) in btrfs_async_run_delayed_root()
1251 root = delayed_node->root; in btrfs_async_run_delayed_root()
1256 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1264 __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_async_run_delayed_root()
1271 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1353 struct btrfs_delayed_node *delayed_node; in btrfs_insert_delayed_dir_index() local
1358 delayed_node = btrfs_get_or_create_delayed_node(dir); in btrfs_insert_delayed_dir_index()
1359 if (IS_ERR(delayed_node)) in btrfs_insert_delayed_dir_index()
1360 return PTR_ERR(delayed_node); in btrfs_insert_delayed_dir_index()
1387 mutex_lock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1388 ret = __btrfs_add_delayed_insertion_item(delayed_node, delayed_item); in btrfs_insert_delayed_dir_index()
1392 name_len, name, delayed_node->root->root_key.objectid, in btrfs_insert_delayed_dir_index()
1393 delayed_node->inode_id, ret); in btrfs_insert_delayed_dir_index()
1396 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1399 btrfs_release_delayed_node(delayed_node); in btrfs_insert_delayed_dir_index()
1481 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_inode_delayed_dir_index_count() local
1483 if (!delayed_node) in btrfs_inode_delayed_dir_index_count()
1491 if (!delayed_node->index_cnt) { in btrfs_inode_delayed_dir_index_count()
1492 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1496 inode->index_cnt = delayed_node->index_cnt; in btrfs_inode_delayed_dir_index_count()
1497 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1505 struct btrfs_delayed_node *delayed_node; in btrfs_readdir_get_delayed_items() local
1508 delayed_node = btrfs_get_delayed_node(BTRFS_I(inode)); in btrfs_readdir_get_delayed_items()
1509 if (!delayed_node) in btrfs_readdir_get_delayed_items()
1519 mutex_lock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1520 item = __btrfs_first_delayed_insertion_item(delayed_node); in btrfs_readdir_get_delayed_items()
1527 item = __btrfs_first_delayed_deletion_item(delayed_node); in btrfs_readdir_get_delayed_items()
1533 mutex_unlock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1543 refcount_dec(&delayed_node->refs); in btrfs_readdir_get_delayed_items()
1691 struct btrfs_delayed_node *delayed_node; in btrfs_fill_inode() local
1694 delayed_node = btrfs_get_delayed_node(BTRFS_I(inode)); in btrfs_fill_inode()
1695 if (!delayed_node) in btrfs_fill_inode()
1698 mutex_lock(&delayed_node->mutex); in btrfs_fill_inode()
1699 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_fill_inode()
1700 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1701 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1705 inode_item = &delayed_node->inode_item; in btrfs_fill_inode()
1742 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1743 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1751 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_update_inode() local
1754 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_update_inode()
1755 if (IS_ERR(delayed_node)) in btrfs_delayed_update_inode()
1756 return PTR_ERR(delayed_node); in btrfs_delayed_update_inode()
1758 mutex_lock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1759 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_delayed_update_inode()
1760 fill_stack_inode_item(trans, &delayed_node->inode_item, in btrfs_delayed_update_inode()
1765 ret = btrfs_delayed_inode_reserve_metadata(trans, root, delayed_node); in btrfs_delayed_update_inode()
1769 fill_stack_inode_item(trans, &delayed_node->inode_item, &inode->vfs_inode); in btrfs_delayed_update_inode()
1770 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_delayed_update_inode()
1771 delayed_node->count++; in btrfs_delayed_update_inode()
1774 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1775 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_update_inode()
1782 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_delete_inode_ref() local
1792 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_delete_inode_ref()
1793 if (IS_ERR(delayed_node)) in btrfs_delayed_delete_inode_ref()
1794 return PTR_ERR(delayed_node); in btrfs_delayed_delete_inode_ref()
1810 mutex_lock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1811 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in btrfs_delayed_delete_inode_ref()
1814 set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_delayed_delete_inode_ref()
1815 delayed_node->count++; in btrfs_delayed_delete_inode_ref()
1818 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1819 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_delete_inode_ref()
1823 static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node) in __btrfs_kill_delayed_node() argument
1825 struct btrfs_root *root = delayed_node->root; in __btrfs_kill_delayed_node()
1829 mutex_lock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1830 curr_item = __btrfs_first_delayed_insertion_item(delayed_node); in __btrfs_kill_delayed_node()
1838 curr_item = __btrfs_first_delayed_deletion_item(delayed_node); in __btrfs_kill_delayed_node()
1846 btrfs_release_delayed_iref(delayed_node); in __btrfs_kill_delayed_node()
1848 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in __btrfs_kill_delayed_node()
1849 btrfs_delayed_inode_release_metadata(fs_info, delayed_node, false); in __btrfs_kill_delayed_node()
1850 btrfs_release_delayed_inode(delayed_node); in __btrfs_kill_delayed_node()
1852 mutex_unlock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1857 struct btrfs_delayed_node *delayed_node; in btrfs_kill_delayed_inode_items() local
1859 delayed_node = btrfs_get_delayed_node(inode); in btrfs_kill_delayed_inode_items()
1860 if (!delayed_node) in btrfs_kill_delayed_inode_items()
1863 __btrfs_kill_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()
1864 btrfs_release_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()