Lines Matching refs:delayed_node

54 				struct btrfs_delayed_node *delayed_node,  in btrfs_init_delayed_node()  argument
57 delayed_node->root = root; in btrfs_init_delayed_node()
58 delayed_node->inode_id = inode_id; in btrfs_init_delayed_node()
59 refcount_set(&delayed_node->refs, 0); in btrfs_init_delayed_node()
60 delayed_node->ins_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
61 delayed_node->del_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
62 mutex_init(&delayed_node->mutex); 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()
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()
164 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
258 struct btrfs_delayed_node *delayed_node, in __btrfs_release_delayed_node() argument
263 if (!delayed_node) in __btrfs_release_delayed_node()
266 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_release_delayed_node()
268 mutex_lock(&delayed_node->mutex); in __btrfs_release_delayed_node()
269 if (delayed_node->count) in __btrfs_release_delayed_node()
270 btrfs_queue_delayed_node(delayed_root, delayed_node, mod); in __btrfs_release_delayed_node()
272 btrfs_dequeue_delayed_node(delayed_root, delayed_node); in __btrfs_release_delayed_node()
273 mutex_unlock(&delayed_node->mutex); in __btrfs_release_delayed_node()
275 if (refcount_dec_and_test(&delayed_node->refs)) { in __btrfs_release_delayed_node()
276 struct btrfs_root *root = delayed_node->root; in __btrfs_release_delayed_node()
278 xa_erase(&root->delayed_nodes, delayed_node->inode_id); in __btrfs_release_delayed_node()
283 ASSERT(refcount_read(&delayed_node->refs) == 0); in __btrfs_release_delayed_node()
284 kmem_cache_free(delayed_node_cache, delayed_node); in __btrfs_release_delayed_node()
330 item->delayed_node = node; in btrfs_alloc_delayed_item()
369 static int __btrfs_add_delayed_item(struct btrfs_delayed_node *delayed_node, in __btrfs_add_delayed_item() argument
379 root = &delayed_node->ins_root; in __btrfs_add_delayed_item()
381 root = &delayed_node->del_root; in __btrfs_add_delayed_item()
405 ins->index >= delayed_node->index_cnt) in __btrfs_add_delayed_item()
406 delayed_node->index_cnt = ins->index + 1; in __btrfs_add_delayed_item()
408 delayed_node->count++; in __btrfs_add_delayed_item()
409 atomic_inc(&delayed_node->root->fs_info->delayed_root->items); in __btrfs_add_delayed_item()
425 struct btrfs_delayed_node *delayed_node = delayed_item->delayed_node; in __btrfs_remove_delayed_item() local
434 lockdep_assert_held(&delayed_node->mutex); in __btrfs_remove_delayed_item()
436 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_remove_delayed_item()
439 root = &delayed_node->ins_root; in __btrfs_remove_delayed_item()
441 root = &delayed_node->del_root; in __btrfs_remove_delayed_item()
445 delayed_node->count--; in __btrfs_remove_delayed_item()
460 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_insertion_item() argument
465 p = rb_first_cached(&delayed_node->ins_root); in __btrfs_first_delayed_insertion_item()
473 struct btrfs_delayed_node *delayed_node) in __btrfs_first_delayed_deletion_item() argument
478 p = rb_first_cached(&delayed_node->del_root); in __btrfs_first_delayed_deletion_item()
523 item->delayed_node->inode_id, in btrfs_delayed_item_reserve_metadata()
552 item->delayed_node->inode_id, in btrfs_delayed_item_release_metadata()
660 struct btrfs_delayed_node *node = first_item->delayed_node; in btrfs_insert_delayed_item()
848 const u64 ino = item->delayed_node->inode_id; in btrfs_batch_delete_items()
980 static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_inode() argument
984 if (delayed_node && in btrfs_release_delayed_inode()
985 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_release_delayed_inode()
986 ASSERT(delayed_node->root); in btrfs_release_delayed_inode()
987 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_release_delayed_inode()
988 delayed_node->count--; in btrfs_release_delayed_inode()
990 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_inode()
995 static void btrfs_release_delayed_iref(struct btrfs_delayed_node *delayed_node) in btrfs_release_delayed_iref() argument
998 if (test_and_clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) { in btrfs_release_delayed_iref()
1001 ASSERT(delayed_node->root); in btrfs_release_delayed_iref()
1002 delayed_node->count--; in btrfs_release_delayed_iref()
1004 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_iref()
1219 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_items() local
1224 if (!delayed_node) in btrfs_commit_inode_delayed_items()
1227 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1228 if (!delayed_node->count) { in btrfs_commit_inode_delayed_items()
1229 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1230 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1233 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1237 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1242 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_items()
1244 ret = __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_commit_inode_delayed_items()
1246 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_items()
1257 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_commit_inode_delayed_inode() local
1262 if (!delayed_node) in btrfs_commit_inode_delayed_inode()
1265 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1266 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_commit_inode_delayed_inode()
1267 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1268 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1271 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1273 trans = btrfs_join_transaction(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1288 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1289 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) in btrfs_commit_inode_delayed_inode()
1290 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, in btrfs_commit_inode_delayed_inode()
1291 path, delayed_node); in btrfs_commit_inode_delayed_inode()
1294 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1302 btrfs_release_delayed_node(delayed_node); in btrfs_commit_inode_delayed_inode()
1309 struct btrfs_delayed_node *delayed_node; in btrfs_remove_delayed_node() local
1311 delayed_node = READ_ONCE(inode->delayed_node); in btrfs_remove_delayed_node()
1312 if (!delayed_node) in btrfs_remove_delayed_node()
1315 inode->delayed_node = NULL; in btrfs_remove_delayed_node()
1316 btrfs_release_delayed_node(delayed_node); in btrfs_remove_delayed_node()
1331 struct btrfs_delayed_node *delayed_node = NULL; in btrfs_async_run_delayed_root() local
1348 delayed_node = btrfs_first_prepared_delayed_node(delayed_root); in btrfs_async_run_delayed_root()
1349 if (!delayed_node) in btrfs_async_run_delayed_root()
1352 root = delayed_node->root; in btrfs_async_run_delayed_root()
1357 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1365 __btrfs_commit_inode_delayed_items(trans, path, delayed_node); in btrfs_async_run_delayed_root()
1372 btrfs_release_prepared_delayed_node(delayed_node); in btrfs_async_run_delayed_root()
1477 struct btrfs_delayed_node *delayed_node; in btrfs_insert_delayed_dir_index() local
1484 delayed_node = btrfs_get_or_create_delayed_node(dir); in btrfs_insert_delayed_dir_index()
1485 if (IS_ERR(delayed_node)) in btrfs_insert_delayed_dir_index()
1486 return PTR_ERR(delayed_node); in btrfs_insert_delayed_dir_index()
1489 delayed_node, in btrfs_insert_delayed_dir_index()
1508 mutex_lock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1518 ret = __btrfs_add_delayed_item(delayed_node, delayed_item); in btrfs_insert_delayed_dir_index()
1522 name_len, name, index, btrfs_root_id(delayed_node->root), in btrfs_insert_delayed_dir_index()
1523 delayed_node->inode_id, dir->index_cnt, in btrfs_insert_delayed_dir_index()
1524 delayed_node->index_cnt, ret); in btrfs_insert_delayed_dir_index()
1527 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1531 if (delayed_node->index_item_leaves == 0 || in btrfs_insert_delayed_dir_index()
1532 delayed_node->curr_index_batch_size + data_len > leaf_data_size) { in btrfs_insert_delayed_dir_index()
1533 delayed_node->curr_index_batch_size = data_len; in btrfs_insert_delayed_dir_index()
1536 delayed_node->curr_index_batch_size += data_len; in btrfs_insert_delayed_dir_index()
1549 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1553 delayed_node->index_item_leaves++; in btrfs_insert_delayed_dir_index()
1557 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1560 btrfs_release_delayed_node(delayed_node); in btrfs_insert_delayed_dir_index()
1665 struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode); in btrfs_inode_delayed_dir_index_count() local
1667 if (!delayed_node) in btrfs_inode_delayed_dir_index_count()
1675 if (!delayed_node->index_cnt) { in btrfs_inode_delayed_dir_index_count()
1676 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1680 inode->index_cnt = delayed_node->index_cnt; in btrfs_inode_delayed_dir_index_count()
1681 btrfs_release_delayed_node(delayed_node); in btrfs_inode_delayed_dir_index_count()
1690 struct btrfs_delayed_node *delayed_node; in btrfs_readdir_get_delayed_items() local
1693 delayed_node = btrfs_get_delayed_node(inode); in btrfs_readdir_get_delayed_items()
1694 if (!delayed_node) in btrfs_readdir_get_delayed_items()
1704 mutex_lock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1705 item = __btrfs_first_delayed_insertion_item(delayed_node); in btrfs_readdir_get_delayed_items()
1712 item = __btrfs_first_delayed_deletion_item(delayed_node); in btrfs_readdir_get_delayed_items()
1718 mutex_unlock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1728 refcount_dec(&delayed_node->refs); in btrfs_readdir_get_delayed_items()
1870 struct btrfs_delayed_node *delayed_node; in btrfs_fill_inode() local
1873 delayed_node = btrfs_get_delayed_node(BTRFS_I(inode)); in btrfs_fill_inode()
1874 if (!delayed_node) in btrfs_fill_inode()
1877 mutex_lock(&delayed_node->mutex); in btrfs_fill_inode()
1878 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_fill_inode()
1879 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1880 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1884 inode_item = &delayed_node->inode_item; in btrfs_fill_inode()
1920 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1921 btrfs_release_delayed_node(delayed_node); in btrfs_fill_inode()
1929 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_update_inode() local
1932 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_update_inode()
1933 if (IS_ERR(delayed_node)) in btrfs_delayed_update_inode()
1934 return PTR_ERR(delayed_node); in btrfs_delayed_update_inode()
1936 mutex_lock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1937 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_delayed_update_inode()
1938 fill_stack_inode_item(trans, &delayed_node->inode_item, in btrfs_delayed_update_inode()
1943 ret = btrfs_delayed_inode_reserve_metadata(trans, root, delayed_node); in btrfs_delayed_update_inode()
1947 fill_stack_inode_item(trans, &delayed_node->inode_item, &inode->vfs_inode); in btrfs_delayed_update_inode()
1948 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_delayed_update_inode()
1949 delayed_node->count++; in btrfs_delayed_update_inode()
1952 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1953 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_update_inode()
1960 struct btrfs_delayed_node *delayed_node; in btrfs_delayed_delete_inode_ref() local
1970 delayed_node = btrfs_get_or_create_delayed_node(inode); in btrfs_delayed_delete_inode_ref()
1971 if (IS_ERR(delayed_node)) in btrfs_delayed_delete_inode_ref()
1972 return PTR_ERR(delayed_node); in btrfs_delayed_delete_inode_ref()
1988 mutex_lock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1989 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in btrfs_delayed_delete_inode_ref()
1992 set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_delayed_delete_inode_ref()
1993 delayed_node->count++; in btrfs_delayed_delete_inode_ref()
1996 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1997 btrfs_release_delayed_node(delayed_node); in btrfs_delayed_delete_inode_ref()
2001 static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node) in __btrfs_kill_delayed_node() argument
2003 struct btrfs_root *root = delayed_node->root; in __btrfs_kill_delayed_node()
2007 mutex_lock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
2008 curr_item = __btrfs_first_delayed_insertion_item(delayed_node); in __btrfs_kill_delayed_node()
2015 if (delayed_node->index_item_leaves > 0) { in __btrfs_kill_delayed_node()
2016 btrfs_delayed_item_release_leaves(delayed_node, in __btrfs_kill_delayed_node()
2017 delayed_node->index_item_leaves); in __btrfs_kill_delayed_node()
2018 delayed_node->index_item_leaves = 0; in __btrfs_kill_delayed_node()
2021 curr_item = __btrfs_first_delayed_deletion_item(delayed_node); in __btrfs_kill_delayed_node()
2029 btrfs_release_delayed_iref(delayed_node); in __btrfs_kill_delayed_node()
2031 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in __btrfs_kill_delayed_node()
2032 btrfs_delayed_inode_release_metadata(fs_info, delayed_node, false); in __btrfs_kill_delayed_node()
2033 btrfs_release_delayed_inode(delayed_node); in __btrfs_kill_delayed_node()
2035 mutex_unlock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
2040 struct btrfs_delayed_node *delayed_node; in btrfs_kill_delayed_inode_items() local
2042 delayed_node = btrfs_get_delayed_node(inode); in btrfs_kill_delayed_inode_items()
2043 if (!delayed_node) in btrfs_kill_delayed_inode_items()
2046 __btrfs_kill_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()
2047 btrfs_release_delayed_node(delayed_node); in btrfs_kill_delayed_inode_items()