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()
126 struct btrfs_delayed_node *node; in btrfs_get_or_create_delayed_node() local
133 node = btrfs_get_delayed_node(btrfs_inode); in btrfs_get_or_create_delayed_node()
134 if (node) in btrfs_get_or_create_delayed_node()
135 return node; in btrfs_get_or_create_delayed_node()
137 node = kmem_cache_zalloc(delayed_node_cache, GFP_NOFS); in btrfs_get_or_create_delayed_node()
138 if (!node) in btrfs_get_or_create_delayed_node()
140 btrfs_init_delayed_node(node, root, ino); in btrfs_get_or_create_delayed_node()
143 refcount_set(&node->refs, 2); in btrfs_get_or_create_delayed_node()
148 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
156 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
157 node = NULL; in btrfs_get_or_create_delayed_node()
160 ptr = __xa_store(&root->delayed_nodes, ino, node, GFP_ATOMIC); in btrfs_get_or_create_delayed_node()
164 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
167 return node; in btrfs_get_or_create_delayed_node()
176 struct btrfs_delayed_node *node, in btrfs_queue_delayed_node() argument
180 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_queue_delayed_node()
181 if (!list_empty(&node->p_list)) in btrfs_queue_delayed_node()
182 list_move_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
184 list_add_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
186 list_add_tail(&node->n_list, &root->node_list); in btrfs_queue_delayed_node()
187 list_add_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
188 refcount_inc(&node->refs); /* inserted into list */ in btrfs_queue_delayed_node()
190 set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_queue_delayed_node()
197 struct btrfs_delayed_node *node) in btrfs_dequeue_delayed_node() argument
200 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_dequeue_delayed_node()
202 refcount_dec(&node->refs); /* not in the list */ in btrfs_dequeue_delayed_node()
203 list_del_init(&node->n_list); in btrfs_dequeue_delayed_node()
204 if (!list_empty(&node->p_list)) in btrfs_dequeue_delayed_node()
205 list_del_init(&node->p_list); in btrfs_dequeue_delayed_node()
206 clear_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_dequeue_delayed_node()
215 struct btrfs_delayed_node *node = NULL; in btrfs_first_delayed_node() local
222 node = list_entry(p, struct btrfs_delayed_node, n_list); in btrfs_first_delayed_node()
223 refcount_inc(&node->refs); in btrfs_first_delayed_node()
227 return node; in btrfs_first_delayed_node()
231 struct btrfs_delayed_node *node) in btrfs_next_delayed_node() argument
237 delayed_root = node->root->fs_info->delayed_root; in btrfs_next_delayed_node()
239 if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_next_delayed_node()
244 } else if (list_is_last(&node->n_list, &delayed_root->node_list)) in btrfs_next_delayed_node()
247 p = node->n_list.next; in btrfs_next_delayed_node()
288 static inline void btrfs_release_delayed_node(struct btrfs_delayed_node *node) in btrfs_release_delayed_node() argument
290 __btrfs_release_delayed_node(node, 0); in btrfs_release_delayed_node()
297 struct btrfs_delayed_node *node = NULL; in btrfs_first_prepared_delayed_node() local
305 node = list_entry(p, struct btrfs_delayed_node, p_list); in btrfs_first_prepared_delayed_node()
306 refcount_inc(&node->refs); in btrfs_first_prepared_delayed_node()
310 return node; in btrfs_first_prepared_delayed_node()
314 struct btrfs_delayed_node *node) in btrfs_release_prepared_delayed_node() argument
316 __btrfs_release_delayed_node(node, 1); in btrfs_release_prepared_delayed_node()
320 struct btrfs_delayed_node *node, in btrfs_alloc_delayed_item() argument
330 item->delayed_node = node; in btrfs_alloc_delayed_item()
352 struct rb_node *node = root->rb_node; in __btrfs_lookup_delayed_item() local
355 while (node) { in __btrfs_lookup_delayed_item()
356 delayed_item = rb_entry(node, struct btrfs_delayed_item, in __btrfs_lookup_delayed_item()
359 node = node->rb_right; in __btrfs_lookup_delayed_item()
361 node = node->rb_left; in __btrfs_lookup_delayed_item()
552 static void btrfs_delayed_item_release_leaves(struct btrfs_delayed_node *node, in btrfs_delayed_item_release_leaves() argument
555 struct btrfs_fs_info *fs_info = node->root->fs_info; in btrfs_delayed_item_release_leaves()
562 trace_btrfs_space_reservation(fs_info, "delayed_item", node->inode_id, in btrfs_delayed_item_release_leaves()
570 struct btrfs_delayed_node *node) in btrfs_delayed_inode_reserve_metadata() argument
610 node->inode_id, num_bytes, 1); in btrfs_delayed_inode_reserve_metadata()
611 node->bytes_reserved = num_bytes; in btrfs_delayed_inode_reserve_metadata()
618 struct btrfs_delayed_node *node, in btrfs_delayed_inode_release_metadata() argument
623 if (!node->bytes_reserved) in btrfs_delayed_inode_release_metadata()
628 node->inode_id, node->bytes_reserved, 0); in btrfs_delayed_inode_release_metadata()
629 btrfs_block_rsv_release(fs_info, rsv, node->bytes_reserved, NULL); in btrfs_delayed_inode_release_metadata()
631 btrfs_qgroup_free_meta_prealloc(node->root, in btrfs_delayed_inode_release_metadata()
632 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
634 btrfs_qgroup_convert_reserved_meta(node->root, in btrfs_delayed_inode_release_metadata()
635 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
636 node->bytes_reserved = 0; in btrfs_delayed_inode_release_metadata()
655 struct btrfs_delayed_node *node = first_item->delayed_node; in btrfs_insert_delayed_item() local
668 lockdep_assert_held(&node->mutex); in btrfs_insert_delayed_item()
724 first_key.objectid = node->inode_id; in btrfs_insert_delayed_item()
745 ins_keys[i].objectid = node->inode_id; in btrfs_insert_delayed_item()
773 ASSERT(node->index_item_leaves > 0); in btrfs_insert_delayed_item()
792 btrfs_delayed_item_release_leaves(node, 1); in btrfs_insert_delayed_item()
793 node->index_item_leaves--; in btrfs_insert_delayed_item()
802 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); in btrfs_insert_delayed_item()
803 node->index_item_leaves = 0; in btrfs_insert_delayed_item()
818 struct btrfs_delayed_node *node) in btrfs_insert_delayed_items() argument
825 mutex_lock(&node->mutex); in btrfs_insert_delayed_items()
826 curr = __btrfs_first_delayed_insertion_item(node); in btrfs_insert_delayed_items()
828 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
832 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
919 struct btrfs_delayed_node *node) in btrfs_delete_delayed_items() argument
924 key.objectid = node->inode_id; in btrfs_delete_delayed_items()
930 mutex_lock(&node->mutex); in btrfs_delete_delayed_items()
931 item = __btrfs_first_delayed_deletion_item(node); in btrfs_delete_delayed_items()
933 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
969 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
1007 struct btrfs_delayed_node *node) in __btrfs_update_delayed_inode() argument
1016 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1020 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1034 write_extent_buffer(leaf, &node->inode_item, (unsigned long)inode_item, in __btrfs_update_delayed_inode()
1037 if (!test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1048 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1065 if (key.objectid != node->inode_id) in __btrfs_update_delayed_inode()
1078 btrfs_release_delayed_iref(node); in __btrfs_update_delayed_inode()
1081 btrfs_delayed_inode_release_metadata(fs_info, node, (ret < 0)); in __btrfs_update_delayed_inode()
1082 btrfs_release_delayed_inode(node); in __btrfs_update_delayed_inode()
1098 struct btrfs_delayed_node *node) in btrfs_update_delayed_inode() argument
1102 mutex_lock(&node->mutex); in btrfs_update_delayed_inode()
1103 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &node->flags)) { in btrfs_update_delayed_inode()
1104 mutex_unlock(&node->mutex); in btrfs_update_delayed_inode()
1108 ret = __btrfs_update_delayed_inode(trans, root, path, node); in btrfs_update_delayed_inode()
1109 mutex_unlock(&node->mutex); in btrfs_update_delayed_inode()
1116 struct btrfs_delayed_node *node) in __btrfs_commit_inode_delayed_items() argument
1120 ret = btrfs_insert_delayed_items(trans, path, node->root, node); in __btrfs_commit_inode_delayed_items()
1124 ret = btrfs_delete_delayed_items(trans, path, node->root, node); in __btrfs_commit_inode_delayed_items()
1128 ret = btrfs_record_root_in_trans(trans, node->root); in __btrfs_commit_inode_delayed_items()
1131 ret = btrfs_update_delayed_inode(trans, node->root, path, node); in __btrfs_commit_inode_delayed_items()
1557 static int btrfs_delete_delayed_insertion_item(struct btrfs_delayed_node *node, in btrfs_delete_delayed_insertion_item() argument
1562 mutex_lock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1563 item = __btrfs_lookup_delayed_item(&node->ins_root.rb_root, index); in btrfs_delete_delayed_insertion_item()
1565 mutex_unlock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1576 ASSERT(node->index_item_leaves > 0); in btrfs_delete_delayed_insertion_item()
1585 if (node->index_item_leaves == 1) { in btrfs_delete_delayed_insertion_item()
1588 ASSERT(node->curr_index_batch_size >= data_len); in btrfs_delete_delayed_insertion_item()
1589 node->curr_index_batch_size -= data_len; in btrfs_delete_delayed_insertion_item()
1595 if (RB_EMPTY_ROOT(&node->ins_root.rb_root)) { in btrfs_delete_delayed_insertion_item()
1596 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); in btrfs_delete_delayed_insertion_item()
1597 node->index_item_leaves = 0; in btrfs_delete_delayed_insertion_item()
1600 mutex_unlock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1607 struct btrfs_delayed_node *node; in btrfs_delete_delayed_dir_index() local
1611 node = btrfs_get_or_create_delayed_node(dir); in btrfs_delete_delayed_dir_index()
1612 if (IS_ERR(node)) in btrfs_delete_delayed_dir_index()
1613 return PTR_ERR(node); in btrfs_delete_delayed_dir_index()
1615 ret = btrfs_delete_delayed_insertion_item(node, index); in btrfs_delete_delayed_dir_index()
1619 item = btrfs_alloc_delayed_item(0, node, BTRFS_DELAYED_DELETION_ITEM); in btrfs_delete_delayed_dir_index()
1639 mutex_lock(&node->mutex); in btrfs_delete_delayed_dir_index()
1640 ret = __btrfs_add_delayed_item(node, item); in btrfs_delete_delayed_dir_index()
1644 index, btrfs_root_id(node->root), in btrfs_delete_delayed_dir_index()
1645 node->inode_id, ret); in btrfs_delete_delayed_dir_index()
1649 mutex_unlock(&node->mutex); in btrfs_delete_delayed_dir_index()
1651 btrfs_release_delayed_node(node); in btrfs_delete_delayed_dir_index()
2046 struct btrfs_delayed_node *node; in btrfs_kill_all_delayed_nodes() local
2056 xa_for_each_start(&root->delayed_nodes, index, node, index) { in btrfs_kill_all_delayed_nodes()
2061 if (refcount_inc_not_zero(&node->refs)) { in btrfs_kill_all_delayed_nodes()
2062 delayed_nodes[count] = node; in btrfs_kill_all_delayed_nodes()
2096 struct btrfs_delayed_node *node; in btrfs_log_get_delayed_items() local
2099 node = btrfs_get_delayed_node(inode); in btrfs_log_get_delayed_items()
2100 if (!node) in btrfs_log_get_delayed_items()
2103 mutex_lock(&node->mutex); in btrfs_log_get_delayed_items()
2104 item = __btrfs_first_delayed_insertion_item(node); in btrfs_log_get_delayed_items()
2136 item = __btrfs_first_delayed_deletion_item(node); in btrfs_log_get_delayed_items()
2145 mutex_unlock(&node->mutex); in btrfs_log_get_delayed_items()
2156 ASSERT(refcount_read(&node->refs) > 1); in btrfs_log_get_delayed_items()
2157 refcount_dec(&node->refs); in btrfs_log_get_delayed_items()
2164 struct btrfs_delayed_node *node; in btrfs_log_put_delayed_items() local
2168 node = btrfs_get_delayed_node(inode); in btrfs_log_put_delayed_items()
2169 if (!node) in btrfs_log_put_delayed_items()
2172 mutex_lock(&node->mutex); in btrfs_log_put_delayed_items()
2188 mutex_unlock(&node->mutex); in btrfs_log_put_delayed_items()
2199 ASSERT(refcount_read(&node->refs) > 1); in btrfs_log_put_delayed_items()
2200 refcount_dec(&node->refs); in btrfs_log_put_delayed_items()