Lines Matching refs:node
72 struct btrfs_delayed_node *node; in btrfs_get_delayed_node() local
74 node = READ_ONCE(btrfs_inode->delayed_node); in btrfs_get_delayed_node()
75 if (node) { in btrfs_get_delayed_node()
76 refcount_inc(&node->refs); in btrfs_get_delayed_node()
77 return node; in btrfs_get_delayed_node()
81 node = xa_load(&root->delayed_nodes, ino); in btrfs_get_delayed_node()
83 if (node) { in btrfs_get_delayed_node()
85 refcount_inc(&node->refs); /* can be accessed */ in btrfs_get_delayed_node()
86 BUG_ON(btrfs_inode->delayed_node != node); in btrfs_get_delayed_node()
88 return node; in btrfs_get_delayed_node()
107 if (refcount_inc_not_zero(&node->refs)) { in btrfs_get_delayed_node()
108 refcount_inc(&node->refs); in btrfs_get_delayed_node()
109 btrfs_inode->delayed_node = node; in btrfs_get_delayed_node()
111 node = NULL; in btrfs_get_delayed_node()
115 return node; in btrfs_get_delayed_node()
131 struct btrfs_delayed_node *node; in btrfs_get_or_create_delayed_node() local
138 node = btrfs_get_delayed_node(btrfs_inode); in btrfs_get_or_create_delayed_node()
139 if (node) in btrfs_get_or_create_delayed_node()
140 return node; in btrfs_get_or_create_delayed_node()
142 node = kmem_cache_zalloc(delayed_node_cache, GFP_NOFS); in btrfs_get_or_create_delayed_node()
143 if (!node) in btrfs_get_or_create_delayed_node()
145 btrfs_init_delayed_node(node, root, ino); in btrfs_get_or_create_delayed_node()
148 refcount_set(&node->refs, 2); in btrfs_get_or_create_delayed_node()
153 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
161 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
162 node = NULL; in btrfs_get_or_create_delayed_node()
165 ptr = __xa_store(&root->delayed_nodes, ino, node, GFP_ATOMIC); in btrfs_get_or_create_delayed_node()
169 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
172 return node; in btrfs_get_or_create_delayed_node()
181 struct btrfs_delayed_node *node, in btrfs_queue_delayed_node() argument
185 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_queue_delayed_node()
186 if (!list_empty(&node->p_list)) in btrfs_queue_delayed_node()
187 list_move_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
189 list_add_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
191 list_add_tail(&node->n_list, &root->node_list); in btrfs_queue_delayed_node()
192 list_add_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
193 refcount_inc(&node->refs); /* inserted into list */ in btrfs_queue_delayed_node()
195 set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_queue_delayed_node()
202 struct btrfs_delayed_node *node) in btrfs_dequeue_delayed_node() argument
205 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_dequeue_delayed_node()
207 refcount_dec(&node->refs); /* not in the list */ in btrfs_dequeue_delayed_node()
208 list_del_init(&node->n_list); in btrfs_dequeue_delayed_node()
209 if (!list_empty(&node->p_list)) in btrfs_dequeue_delayed_node()
210 list_del_init(&node->p_list); in btrfs_dequeue_delayed_node()
211 clear_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_dequeue_delayed_node()
219 struct btrfs_delayed_node *node; in btrfs_first_delayed_node() local
222 node = list_first_entry_or_null(&delayed_root->node_list, in btrfs_first_delayed_node()
224 if (node) in btrfs_first_delayed_node()
225 refcount_inc(&node->refs); in btrfs_first_delayed_node()
228 return node; in btrfs_first_delayed_node()
232 struct btrfs_delayed_node *node) in btrfs_next_delayed_node() argument
238 delayed_root = node->root->fs_info->delayed_root; in btrfs_next_delayed_node()
240 if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_next_delayed_node()
245 } else if (list_is_last(&node->n_list, &delayed_root->node_list)) in btrfs_next_delayed_node()
248 p = node->n_list.next; in btrfs_next_delayed_node()
289 static inline void btrfs_release_delayed_node(struct btrfs_delayed_node *node) in btrfs_release_delayed_node() argument
291 __btrfs_release_delayed_node(node, 0); in btrfs_release_delayed_node()
297 struct btrfs_delayed_node *node; in btrfs_first_prepared_delayed_node() local
300 node = list_first_entry_or_null(&delayed_root->prepare_list, in btrfs_first_prepared_delayed_node()
302 if (node) { in btrfs_first_prepared_delayed_node()
303 list_del_init(&node->p_list); in btrfs_first_prepared_delayed_node()
304 refcount_inc(&node->refs); in btrfs_first_prepared_delayed_node()
308 return node; in btrfs_first_prepared_delayed_node()
312 struct btrfs_delayed_node *node) in btrfs_release_prepared_delayed_node() argument
314 __btrfs_release_delayed_node(node, 1); in btrfs_release_prepared_delayed_node()
318 struct btrfs_delayed_node *node, in btrfs_alloc_delayed_item() argument
328 item->delayed_node = node; in btrfs_alloc_delayed_item()
337 static int delayed_item_index_cmp(const void *key, const struct rb_node *node) in delayed_item_index_cmp() argument
340 const struct btrfs_delayed_item *delayed_item = rb_entry(node, in delayed_item_index_cmp()
364 struct rb_node *node; in __btrfs_lookup_delayed_item() local
366 node = rb_find(&index, root, delayed_item_index_cmp); in __btrfs_lookup_delayed_item()
367 return rb_entry_safe(node, struct btrfs_delayed_item, rb_node); in __btrfs_lookup_delayed_item()
532 static void btrfs_delayed_item_release_leaves(struct btrfs_delayed_node *node, in btrfs_delayed_item_release_leaves() argument
535 struct btrfs_fs_info *fs_info = node->root->fs_info; in btrfs_delayed_item_release_leaves()
542 trace_btrfs_space_reservation(fs_info, "delayed_item", node->inode_id, in btrfs_delayed_item_release_leaves()
550 struct btrfs_delayed_node *node) in btrfs_delayed_inode_reserve_metadata() argument
590 node->inode_id, num_bytes, 1); in btrfs_delayed_inode_reserve_metadata()
591 node->bytes_reserved = num_bytes; in btrfs_delayed_inode_reserve_metadata()
598 struct btrfs_delayed_node *node, in btrfs_delayed_inode_release_metadata() argument
603 if (!node->bytes_reserved) in btrfs_delayed_inode_release_metadata()
608 node->inode_id, node->bytes_reserved, 0); in btrfs_delayed_inode_release_metadata()
609 btrfs_block_rsv_release(fs_info, rsv, node->bytes_reserved, NULL); in btrfs_delayed_inode_release_metadata()
611 btrfs_qgroup_free_meta_prealloc(node->root, in btrfs_delayed_inode_release_metadata()
612 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
614 btrfs_qgroup_convert_reserved_meta(node->root, in btrfs_delayed_inode_release_metadata()
615 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
616 node->bytes_reserved = 0; in btrfs_delayed_inode_release_metadata()
635 struct btrfs_delayed_node *node = first_item->delayed_node; in btrfs_insert_delayed_item() local
648 lockdep_assert_held(&node->mutex); in btrfs_insert_delayed_item()
704 first_key.objectid = node->inode_id; in btrfs_insert_delayed_item()
725 ins_keys[i].objectid = node->inode_id; in btrfs_insert_delayed_item()
753 ASSERT(node->index_item_leaves > 0); in btrfs_insert_delayed_item()
772 btrfs_delayed_item_release_leaves(node, 1); in btrfs_insert_delayed_item()
773 node->index_item_leaves--; in btrfs_insert_delayed_item()
782 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); in btrfs_insert_delayed_item()
783 node->index_item_leaves = 0; in btrfs_insert_delayed_item()
798 struct btrfs_delayed_node *node) in btrfs_insert_delayed_items() argument
805 mutex_lock(&node->mutex); in btrfs_insert_delayed_items()
806 curr = __btrfs_first_delayed_insertion_item(node); in btrfs_insert_delayed_items()
808 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
812 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
899 struct btrfs_delayed_node *node) in btrfs_delete_delayed_items() argument
904 key.objectid = node->inode_id; in btrfs_delete_delayed_items()
910 mutex_lock(&node->mutex); in btrfs_delete_delayed_items()
911 item = __btrfs_first_delayed_deletion_item(node); in btrfs_delete_delayed_items()
913 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
949 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
987 struct btrfs_delayed_node *node) in __btrfs_update_delayed_inode() argument
996 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1000 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1022 write_extent_buffer(leaf, &node->inode_item, (unsigned long)inode_item, in __btrfs_update_delayed_inode()
1025 if (!test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1036 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1055 if (key.objectid != node->inode_id) in __btrfs_update_delayed_inode()
1070 btrfs_release_delayed_iref(node); in __btrfs_update_delayed_inode()
1073 btrfs_delayed_inode_release_metadata(fs_info, node, (ret < 0)); in __btrfs_update_delayed_inode()
1074 btrfs_release_delayed_inode(node); in __btrfs_update_delayed_inode()
1081 struct btrfs_delayed_node *node) in btrfs_update_delayed_inode() argument
1085 mutex_lock(&node->mutex); in btrfs_update_delayed_inode()
1086 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &node->flags)) { in btrfs_update_delayed_inode()
1087 mutex_unlock(&node->mutex); in btrfs_update_delayed_inode()
1091 ret = __btrfs_update_delayed_inode(trans, root, path, node); in btrfs_update_delayed_inode()
1092 mutex_unlock(&node->mutex); in btrfs_update_delayed_inode()
1099 struct btrfs_delayed_node *node) in __btrfs_commit_inode_delayed_items() argument
1103 ret = btrfs_insert_delayed_items(trans, path, node->root, node); in __btrfs_commit_inode_delayed_items()
1107 ret = btrfs_delete_delayed_items(trans, path, node->root, node); in __btrfs_commit_inode_delayed_items()
1111 ret = btrfs_record_root_in_trans(trans, node->root); in __btrfs_commit_inode_delayed_items()
1114 ret = btrfs_update_delayed_inode(trans, node->root, path, node); in __btrfs_commit_inode_delayed_items()
1380 struct btrfs_delayed_node *node = btrfs_first_delayed_node(fs_info->delayed_root); in btrfs_assert_delayed_root_empty() local
1382 if (WARN_ON(node)) in btrfs_assert_delayed_root_empty()
1383 refcount_dec(&node->refs); in btrfs_assert_delayed_root_empty()
1543 static bool btrfs_delete_delayed_insertion_item(struct btrfs_delayed_node *node, in btrfs_delete_delayed_insertion_item() argument
1548 mutex_lock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1549 item = __btrfs_lookup_delayed_item(&node->ins_root.rb_root, index); in btrfs_delete_delayed_insertion_item()
1551 mutex_unlock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1562 ASSERT(node->index_item_leaves > 0); in btrfs_delete_delayed_insertion_item()
1571 if (node->index_item_leaves == 1) { in btrfs_delete_delayed_insertion_item()
1574 ASSERT(node->curr_index_batch_size >= data_len); in btrfs_delete_delayed_insertion_item()
1575 node->curr_index_batch_size -= data_len; in btrfs_delete_delayed_insertion_item()
1581 if (RB_EMPTY_ROOT(&node->ins_root.rb_root)) { in btrfs_delete_delayed_insertion_item()
1582 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); in btrfs_delete_delayed_insertion_item()
1583 node->index_item_leaves = 0; in btrfs_delete_delayed_insertion_item()
1586 mutex_unlock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1593 struct btrfs_delayed_node *node; in btrfs_delete_delayed_dir_index() local
1597 node = btrfs_get_or_create_delayed_node(dir); in btrfs_delete_delayed_dir_index()
1598 if (IS_ERR(node)) in btrfs_delete_delayed_dir_index()
1599 return PTR_ERR(node); in btrfs_delete_delayed_dir_index()
1601 if (btrfs_delete_delayed_insertion_item(node, index)) { in btrfs_delete_delayed_dir_index()
1606 item = btrfs_alloc_delayed_item(0, node, BTRFS_DELAYED_DELETION_ITEM); in btrfs_delete_delayed_dir_index()
1622 index, btrfs_root_id(node->root), node->inode_id, ret); in btrfs_delete_delayed_dir_index()
1627 mutex_lock(&node->mutex); in btrfs_delete_delayed_dir_index()
1628 ret = __btrfs_add_delayed_item(node, item); in btrfs_delete_delayed_dir_index()
1632 index, btrfs_root_id(node->root), node->inode_id, ret); in btrfs_delete_delayed_dir_index()
1636 mutex_unlock(&node->mutex); in btrfs_delete_delayed_dir_index()
1638 btrfs_release_delayed_node(node); in btrfs_delete_delayed_dir_index()
2032 struct btrfs_delayed_node *node; in btrfs_kill_all_delayed_nodes() local
2042 xa_for_each_start(&root->delayed_nodes, index, node, index) { in btrfs_kill_all_delayed_nodes()
2047 if (refcount_inc_not_zero(&node->refs)) { in btrfs_kill_all_delayed_nodes()
2048 delayed_nodes[count] = node; in btrfs_kill_all_delayed_nodes()
2082 struct btrfs_delayed_node *node; in btrfs_log_get_delayed_items() local
2085 node = btrfs_get_delayed_node(inode); in btrfs_log_get_delayed_items()
2086 if (!node) in btrfs_log_get_delayed_items()
2089 mutex_lock(&node->mutex); in btrfs_log_get_delayed_items()
2090 item = __btrfs_first_delayed_insertion_item(node); in btrfs_log_get_delayed_items()
2122 item = __btrfs_first_delayed_deletion_item(node); in btrfs_log_get_delayed_items()
2131 mutex_unlock(&node->mutex); in btrfs_log_get_delayed_items()
2142 ASSERT(refcount_read(&node->refs) > 1); in btrfs_log_get_delayed_items()
2143 refcount_dec(&node->refs); in btrfs_log_get_delayed_items()
2150 struct btrfs_delayed_node *node; in btrfs_log_put_delayed_items() local
2154 node = btrfs_get_delayed_node(inode); in btrfs_log_put_delayed_items()
2155 if (!node) in btrfs_log_put_delayed_items()
2158 mutex_lock(&node->mutex); in btrfs_log_put_delayed_items()
2174 mutex_unlock(&node->mutex); in btrfs_log_put_delayed_items()
2185 ASSERT(refcount_read(&node->refs) > 1); in btrfs_log_put_delayed_items()
2186 refcount_dec(&node->refs); in btrfs_log_put_delayed_items()