• Home
  • Raw
  • Download

Lines Matching +full:root +full:- +full:node

1 // SPDX-License-Identifier: GPL-2.0
11 #include "delayed-inode.h"
12 #include "disk-io.h"
32 return -ENOMEM; in btrfs_delayed_inode_init()
43 struct btrfs_root *root, u64 inode_id) in btrfs_init_delayed_node() argument
45 delayed_node->root = root; in btrfs_init_delayed_node()
46 delayed_node->inode_id = inode_id; in btrfs_init_delayed_node()
47 refcount_set(&delayed_node->refs, 0); in btrfs_init_delayed_node()
48 delayed_node->ins_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
49 delayed_node->del_root = RB_ROOT_CACHED; in btrfs_init_delayed_node()
50 mutex_init(&delayed_node->mutex); in btrfs_init_delayed_node()
51 INIT_LIST_HEAD(&delayed_node->n_list); in btrfs_init_delayed_node()
52 INIT_LIST_HEAD(&delayed_node->p_list); in btrfs_init_delayed_node()
59 if (item1->key.type == BTRFS_DIR_INDEX_KEY && in btrfs_is_continuous_delayed_item()
60 item1->key.objectid == item2->key.objectid && in btrfs_is_continuous_delayed_item()
61 item1->key.type == item2->key.type && in btrfs_is_continuous_delayed_item()
62 item1->key.offset + 1 == item2->key.offset) in btrfs_is_continuous_delayed_item()
70 struct btrfs_root *root = btrfs_inode->root; in btrfs_get_delayed_node() local
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()
80 spin_lock(&root->inode_lock); in btrfs_get_delayed_node()
81 node = radix_tree_lookup(&root->delayed_nodes_tree, ino); in btrfs_get_delayed_node()
83 if (node) { in btrfs_get_delayed_node()
84 if (btrfs_inode->delayed_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()
87 spin_unlock(&root->inode_lock); in btrfs_get_delayed_node()
88 return node; in btrfs_get_delayed_node()
93 * this node from the radix tree. In this case, the refcount in btrfs_get_delayed_node()
103 * If this node is properly in the radix, we want to bump the 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()
114 spin_unlock(&root->inode_lock); in btrfs_get_delayed_node()
115 return node; in btrfs_get_delayed_node()
117 spin_unlock(&root->inode_lock); in btrfs_get_delayed_node()
122 /* Will return either the node or PTR_ERR(-ENOMEM) */
126 struct btrfs_delayed_node *node; in btrfs_get_or_create_delayed_node() local
127 struct btrfs_root *root = btrfs_inode->root; in btrfs_get_or_create_delayed_node() local
132 node = btrfs_get_delayed_node(btrfs_inode); in btrfs_get_or_create_delayed_node()
133 if (node) in btrfs_get_or_create_delayed_node()
134 return node; in btrfs_get_or_create_delayed_node()
136 node = kmem_cache_zalloc(delayed_node_cache, GFP_NOFS); in btrfs_get_or_create_delayed_node()
137 if (!node) in btrfs_get_or_create_delayed_node()
138 return ERR_PTR(-ENOMEM); in btrfs_get_or_create_delayed_node()
139 btrfs_init_delayed_node(node, root, ino); in btrfs_get_or_create_delayed_node()
142 refcount_set(&node->refs, 2); in btrfs_get_or_create_delayed_node()
146 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
150 spin_lock(&root->inode_lock); in btrfs_get_or_create_delayed_node()
151 ret = radix_tree_insert(&root->delayed_nodes_tree, ino, node); in btrfs_get_or_create_delayed_node()
152 if (ret == -EEXIST) { in btrfs_get_or_create_delayed_node()
153 spin_unlock(&root->inode_lock); in btrfs_get_or_create_delayed_node()
154 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
158 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
159 spin_unlock(&root->inode_lock); in btrfs_get_or_create_delayed_node()
162 return node; in btrfs_get_or_create_delayed_node()
166 * Call it when holding delayed_node->mutex
168 * If mod = 1, add this node into the prepared list.
170 static void btrfs_queue_delayed_node(struct btrfs_delayed_root *root, in btrfs_queue_delayed_node() argument
171 struct btrfs_delayed_node *node, in btrfs_queue_delayed_node() argument
174 spin_lock(&root->lock); in btrfs_queue_delayed_node()
175 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_queue_delayed_node()
176 if (!list_empty(&node->p_list)) in btrfs_queue_delayed_node()
177 list_move_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
179 list_add_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
181 list_add_tail(&node->n_list, &root->node_list); in btrfs_queue_delayed_node()
182 list_add_tail(&node->p_list, &root->prepare_list); in btrfs_queue_delayed_node()
183 refcount_inc(&node->refs); /* inserted into list */ in btrfs_queue_delayed_node()
184 root->nodes++; in btrfs_queue_delayed_node()
185 set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_queue_delayed_node()
187 spin_unlock(&root->lock); in btrfs_queue_delayed_node()
190 /* Call it when holding delayed_node->mutex */
191 static void btrfs_dequeue_delayed_node(struct btrfs_delayed_root *root, in btrfs_dequeue_delayed_node() argument
192 struct btrfs_delayed_node *node) in btrfs_dequeue_delayed_node() argument
194 spin_lock(&root->lock); in btrfs_dequeue_delayed_node()
195 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_dequeue_delayed_node()
196 root->nodes--; in btrfs_dequeue_delayed_node()
197 refcount_dec(&node->refs); /* not in the list */ in btrfs_dequeue_delayed_node()
198 list_del_init(&node->n_list); in btrfs_dequeue_delayed_node()
199 if (!list_empty(&node->p_list)) in btrfs_dequeue_delayed_node()
200 list_del_init(&node->p_list); in btrfs_dequeue_delayed_node()
201 clear_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_dequeue_delayed_node()
203 spin_unlock(&root->lock); in btrfs_dequeue_delayed_node()
210 struct btrfs_delayed_node *node = NULL; in btrfs_first_delayed_node() local
212 spin_lock(&delayed_root->lock); in btrfs_first_delayed_node()
213 if (list_empty(&delayed_root->node_list)) in btrfs_first_delayed_node()
216 p = delayed_root->node_list.next; in btrfs_first_delayed_node()
217 node = list_entry(p, struct btrfs_delayed_node, n_list); in btrfs_first_delayed_node()
218 refcount_inc(&node->refs); in btrfs_first_delayed_node()
220 spin_unlock(&delayed_root->lock); in btrfs_first_delayed_node()
222 return node; in btrfs_first_delayed_node()
226 struct btrfs_delayed_node *node) in btrfs_next_delayed_node() argument
232 delayed_root = node->root->fs_info->delayed_root; in btrfs_next_delayed_node()
233 spin_lock(&delayed_root->lock); in btrfs_next_delayed_node()
234 if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_next_delayed_node()
236 if (list_empty(&delayed_root->node_list)) in btrfs_next_delayed_node()
238 p = delayed_root->node_list.next; in btrfs_next_delayed_node()
239 } else if (list_is_last(&node->n_list, &delayed_root->node_list)) in btrfs_next_delayed_node()
242 p = node->n_list.next; in btrfs_next_delayed_node()
245 refcount_inc(&next->refs); in btrfs_next_delayed_node()
247 spin_unlock(&delayed_root->lock); in btrfs_next_delayed_node()
261 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_release_delayed_node()
263 mutex_lock(&delayed_node->mutex); in __btrfs_release_delayed_node()
264 if (delayed_node->count) in __btrfs_release_delayed_node()
268 mutex_unlock(&delayed_node->mutex); in __btrfs_release_delayed_node()
270 if (refcount_dec_and_test(&delayed_node->refs)) { in __btrfs_release_delayed_node()
271 struct btrfs_root *root = delayed_node->root; in __btrfs_release_delayed_node() local
273 spin_lock(&root->inode_lock); in __btrfs_release_delayed_node()
278 ASSERT(refcount_read(&delayed_node->refs) == 0); in __btrfs_release_delayed_node()
279 radix_tree_delete(&root->delayed_nodes_tree, in __btrfs_release_delayed_node()
280 delayed_node->inode_id); in __btrfs_release_delayed_node()
281 spin_unlock(&root->inode_lock); in __btrfs_release_delayed_node()
286 static inline void btrfs_release_delayed_node(struct btrfs_delayed_node *node) in btrfs_release_delayed_node() argument
288 __btrfs_release_delayed_node(node, 0); in btrfs_release_delayed_node()
295 struct btrfs_delayed_node *node = NULL; in btrfs_first_prepared_delayed_node() local
297 spin_lock(&delayed_root->lock); in btrfs_first_prepared_delayed_node()
298 if (list_empty(&delayed_root->prepare_list)) in btrfs_first_prepared_delayed_node()
301 p = delayed_root->prepare_list.next; in btrfs_first_prepared_delayed_node()
303 node = list_entry(p, struct btrfs_delayed_node, p_list); in btrfs_first_prepared_delayed_node()
304 refcount_inc(&node->refs); in btrfs_first_prepared_delayed_node()
306 spin_unlock(&delayed_root->lock); 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()
322 item->data_len = data_len; in btrfs_alloc_delayed_item()
323 item->ins_or_del = 0; in btrfs_alloc_delayed_item()
324 item->bytes_reserved = 0; in btrfs_alloc_delayed_item()
325 item->delayed_node = NULL; in btrfs_alloc_delayed_item()
326 refcount_set(&item->refs, 1); in btrfs_alloc_delayed_item()
332 * __btrfs_lookup_delayed_item - look up the delayed item by key
333 * @delayed_node: pointer to the delayed node
342 struct rb_root *root, in __btrfs_lookup_delayed_item() argument
347 struct rb_node *node, *prev_node = NULL; in __btrfs_lookup_delayed_item() local
351 node = root->rb_node; in __btrfs_lookup_delayed_item()
353 while (node) { in __btrfs_lookup_delayed_item()
354 delayed_item = rb_entry(node, struct btrfs_delayed_item, in __btrfs_lookup_delayed_item()
356 prev_node = node; in __btrfs_lookup_delayed_item()
357 ret = btrfs_comp_cpu_keys(&delayed_item->key, key); 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()
371 else if ((node = rb_prev(prev_node)) != NULL) { in __btrfs_lookup_delayed_item()
372 *prev = rb_entry(node, struct btrfs_delayed_item, in __btrfs_lookup_delayed_item()
383 else if ((node = rb_next(prev_node)) != NULL) { in __btrfs_lookup_delayed_item()
384 *next = rb_entry(node, struct btrfs_delayed_item, in __btrfs_lookup_delayed_item()
396 return __btrfs_lookup_delayed_item(&delayed_node->ins_root.rb_root, key, in __btrfs_lookup_delayed_insertion_item()
404 struct rb_node **p, *node; in __btrfs_add_delayed_item() local
406 struct rb_root_cached *root; in __btrfs_add_delayed_item() local
412 root = &delayed_node->ins_root; in __btrfs_add_delayed_item()
414 root = &delayed_node->del_root; in __btrfs_add_delayed_item()
417 p = &root->rb_root.rb_node; in __btrfs_add_delayed_item()
418 node = &ins->rb_node; in __btrfs_add_delayed_item()
425 cmp = btrfs_comp_cpu_keys(&item->key, &ins->key); in __btrfs_add_delayed_item()
427 p = &(*p)->rb_right; in __btrfs_add_delayed_item()
430 p = &(*p)->rb_left; in __btrfs_add_delayed_item()
432 return -EEXIST; in __btrfs_add_delayed_item()
436 rb_link_node(node, parent_node, p); in __btrfs_add_delayed_item()
437 rb_insert_color_cached(node, root, leftmost); in __btrfs_add_delayed_item()
438 ins->delayed_node = delayed_node; in __btrfs_add_delayed_item()
439 ins->ins_or_del = action; in __btrfs_add_delayed_item()
441 if (ins->key.type == BTRFS_DIR_INDEX_KEY && in __btrfs_add_delayed_item()
443 ins->key.offset >= delayed_node->index_cnt) in __btrfs_add_delayed_item()
444 delayed_node->index_cnt = ins->key.offset + 1; in __btrfs_add_delayed_item()
446 delayed_node->count++; in __btrfs_add_delayed_item()
447 atomic_inc(&delayed_node->root->fs_info->delayed_root->items); in __btrfs_add_delayed_item()
451 static int __btrfs_add_delayed_insertion_item(struct btrfs_delayed_node *node, in __btrfs_add_delayed_insertion_item() argument
454 return __btrfs_add_delayed_item(node, item, in __btrfs_add_delayed_insertion_item()
458 static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node, in __btrfs_add_delayed_deletion_item() argument
461 return __btrfs_add_delayed_item(node, item, in __btrfs_add_delayed_deletion_item()
467 int seq = atomic_inc_return(&delayed_root->items_seq); in finish_one_item()
470 if ((atomic_dec_return(&delayed_root->items) < in finish_one_item()
472 cond_wake_up_nomb(&delayed_root->wait); in finish_one_item()
477 struct rb_root_cached *root; in __btrfs_remove_delayed_item() local
481 if (!delayed_item->delayed_node) in __btrfs_remove_delayed_item()
483 delayed_root = delayed_item->delayed_node->root->fs_info->delayed_root; in __btrfs_remove_delayed_item()
486 BUG_ON(delayed_item->ins_or_del != BTRFS_DELAYED_DELETION_ITEM && in __btrfs_remove_delayed_item()
487 delayed_item->ins_or_del != BTRFS_DELAYED_INSERTION_ITEM); in __btrfs_remove_delayed_item()
489 if (delayed_item->ins_or_del == BTRFS_DELAYED_INSERTION_ITEM) in __btrfs_remove_delayed_item()
490 root = &delayed_item->delayed_node->ins_root; in __btrfs_remove_delayed_item()
492 root = &delayed_item->delayed_node->del_root; in __btrfs_remove_delayed_item()
494 rb_erase_cached(&delayed_item->rb_node, root); in __btrfs_remove_delayed_item()
495 delayed_item->delayed_node->count--; in __btrfs_remove_delayed_item()
504 if (refcount_dec_and_test(&item->refs)) in btrfs_release_delayed_item()
515 p = rb_first_cached(&delayed_node->ins_root); in __btrfs_first_delayed_insertion_item()
528 p = rb_first_cached(&delayed_node->del_root); in __btrfs_first_delayed_deletion_item()
541 p = rb_next(&item->rb_node); in __btrfs_next_delayed_item()
549 struct btrfs_root *root, in btrfs_delayed_item_reserve_metadata() argument
554 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_delayed_item_reserve_metadata()
558 if (!trans->bytes_reserved) in btrfs_delayed_item_reserve_metadata()
561 src_rsv = trans->block_rsv; in btrfs_delayed_item_reserve_metadata()
562 dst_rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_item_reserve_metadata()
574 item->key.objectid, in btrfs_delayed_item_reserve_metadata()
576 item->bytes_reserved = num_bytes; in btrfs_delayed_item_reserve_metadata()
582 static void btrfs_delayed_item_release_metadata(struct btrfs_root *root, in btrfs_delayed_item_release_metadata() argument
586 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_delayed_item_release_metadata()
588 if (!item->bytes_reserved) in btrfs_delayed_item_release_metadata()
591 rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_item_release_metadata()
597 item->key.objectid, item->bytes_reserved, in btrfs_delayed_item_release_metadata()
599 btrfs_block_rsv_release(fs_info, rsv, item->bytes_reserved, NULL); in btrfs_delayed_item_release_metadata()
604 struct btrfs_root *root, in btrfs_delayed_inode_reserve_metadata() argument
606 struct btrfs_delayed_node *node) in btrfs_delayed_inode_reserve_metadata() argument
608 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_delayed_inode_reserve_metadata()
614 src_rsv = trans->block_rsv; in btrfs_delayed_inode_reserve_metadata()
615 dst_rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_inode_reserve_metadata()
628 if (!src_rsv || (!trans->bytes_reserved && in btrfs_delayed_inode_reserve_metadata()
629 src_rsv->type != BTRFS_BLOCK_RSV_DELALLOC)) { in btrfs_delayed_inode_reserve_metadata()
630 ret = btrfs_qgroup_reserve_meta(root, num_bytes, in btrfs_delayed_inode_reserve_metadata()
634 ret = btrfs_block_rsv_add(root, dst_rsv, num_bytes, in btrfs_delayed_inode_reserve_metadata()
642 if (ret == -EAGAIN) { in btrfs_delayed_inode_reserve_metadata()
643 ret = -ENOSPC; in btrfs_delayed_inode_reserve_metadata()
644 btrfs_qgroup_free_meta_prealloc(root, num_bytes); in btrfs_delayed_inode_reserve_metadata()
647 node->bytes_reserved = num_bytes; in btrfs_delayed_inode_reserve_metadata()
653 btrfs_qgroup_free_meta_prealloc(root, num_bytes); in btrfs_delayed_inode_reserve_metadata()
662 node->bytes_reserved = num_bytes; in btrfs_delayed_inode_reserve_metadata()
669 struct btrfs_delayed_node *node, in btrfs_delayed_inode_release_metadata() argument
674 if (!node->bytes_reserved) in btrfs_delayed_inode_release_metadata()
677 rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_inode_release_metadata()
679 node->inode_id, node->bytes_reserved, 0); in btrfs_delayed_inode_release_metadata()
680 btrfs_block_rsv_release(fs_info, rsv, node->bytes_reserved, NULL); in btrfs_delayed_inode_release_metadata()
682 btrfs_qgroup_free_meta_prealloc(node->root, in btrfs_delayed_inode_release_metadata()
683 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
685 btrfs_qgroup_convert_reserved_meta(node->root, in btrfs_delayed_inode_release_metadata()
686 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
687 node->bytes_reserved = 0; in btrfs_delayed_inode_release_metadata()
694 static int btrfs_batch_insert_items(struct btrfs_root *root, in btrfs_batch_insert_items() argument
711 BUG_ON(!path->nodes[0]); in btrfs_batch_insert_items()
713 leaf = path->nodes[0]; in btrfs_batch_insert_items()
723 while (total_size + next->data_len + sizeof(struct btrfs_item) <= in btrfs_batch_insert_items()
725 total_data_size += next->data_len; in btrfs_batch_insert_items()
726 total_size += next->data_len + sizeof(struct btrfs_item); in btrfs_batch_insert_items()
727 list_add_tail(&next->tree_list, &head); in btrfs_batch_insert_items()
753 ret = -ENOMEM; in btrfs_batch_insert_items()
759 ret = -ENOMEM; in btrfs_batch_insert_items()
766 keys[i] = next->key; in btrfs_batch_insert_items()
767 data_size[i] = next->data_len; in btrfs_batch_insert_items()
772 setup_items_for_insert(root, path, keys, data_size, nitems); in btrfs_batch_insert_items()
775 slot = path->slots[0]; in btrfs_batch_insert_items()
778 write_extent_buffer(leaf, &curr->data, in btrfs_batch_insert_items()
780 curr->data_len); in btrfs_batch_insert_items()
783 btrfs_delayed_item_release_metadata(root, curr); in btrfs_batch_insert_items()
785 list_del(&curr->tree_list); in btrfs_batch_insert_items()
801 struct btrfs_root *root, in btrfs_insert_delayed_item() argument
811 ret = btrfs_insert_empty_item(trans, root, path, &delayed_item->key, in btrfs_insert_delayed_item()
812 delayed_item->data_len); in btrfs_insert_delayed_item()
814 if (ret < 0 && ret != -EEXIST) in btrfs_insert_delayed_item()
817 leaf = path->nodes[0]; in btrfs_insert_delayed_item()
819 ptr = btrfs_item_ptr(leaf, path->slots[0], char); in btrfs_insert_delayed_item()
821 write_extent_buffer(leaf, delayed_item->data, (unsigned long)ptr, in btrfs_insert_delayed_item()
822 delayed_item->data_len); in btrfs_insert_delayed_item()
825 btrfs_delayed_item_release_metadata(root, delayed_item); in btrfs_insert_delayed_item()
835 struct btrfs_root *root, in btrfs_insert_delayed_items() argument
836 struct btrfs_delayed_node *node) in btrfs_insert_delayed_items() argument
842 mutex_lock(&node->mutex); in btrfs_insert_delayed_items()
843 curr = __btrfs_first_delayed_insertion_item(node); in btrfs_insert_delayed_items()
847 ret = btrfs_insert_delayed_item(trans, root, path, curr); in btrfs_insert_delayed_items()
857 path->slots[0]++; in btrfs_insert_delayed_items()
858 btrfs_batch_insert_items(root, path, curr); in btrfs_insert_delayed_items()
861 btrfs_mark_buffer_dirty(path->nodes[0]); in btrfs_insert_delayed_items()
864 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
868 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
873 struct btrfs_root *root, in btrfs_batch_delete_items() argument
884 BUG_ON(!path->nodes[0]); in btrfs_batch_delete_items()
886 leaf = path->nodes[0]; in btrfs_batch_delete_items()
888 i = path->slots[0]; in btrfs_batch_delete_items()
889 last_item = btrfs_header_nritems(leaf) - 1; in btrfs_batch_delete_items()
891 return -ENOENT; /* FIXME: Is errno suitable? */ in btrfs_batch_delete_items()
900 while (btrfs_comp_cpu_keys(&next->key, &key) == 0) { in btrfs_batch_delete_items()
901 list_add_tail(&next->tree_list, &head); in btrfs_batch_delete_items()
921 ret = btrfs_del_items(trans, root, path, path->slots[0], nitems); in btrfs_batch_delete_items()
926 btrfs_delayed_item_release_metadata(root, curr); in btrfs_batch_delete_items()
927 list_del(&curr->tree_list); in btrfs_batch_delete_items()
937 struct btrfs_root *root, in btrfs_delete_delayed_items() argument
938 struct btrfs_delayed_node *node) in btrfs_delete_delayed_items() argument
945 mutex_lock(&node->mutex); in btrfs_delete_delayed_items()
946 curr = __btrfs_first_delayed_deletion_item(node); in btrfs_delete_delayed_items()
951 ret = btrfs_search_slot(trans, root, &curr->key, path, -1, 1); in btrfs_delete_delayed_items()
957 * can't find the item which the node points to, so this node in btrfs_delete_delayed_items()
966 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
972 btrfs_batch_delete_items(trans, root, path, curr); in btrfs_delete_delayed_items()
974 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
979 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
988 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_release_delayed_inode()
989 BUG_ON(!delayed_node->root); in btrfs_release_delayed_inode()
990 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_release_delayed_inode()
991 delayed_node->count--; in btrfs_release_delayed_inode()
993 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_inode()
1002 ASSERT(delayed_node->root); in btrfs_release_delayed_iref()
1003 clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_release_delayed_iref()
1004 delayed_node->count--; in btrfs_release_delayed_iref()
1006 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_iref()
1011 struct btrfs_root *root, in __btrfs_update_delayed_inode() argument
1013 struct btrfs_delayed_node *node) in __btrfs_update_delayed_inode() argument
1015 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_update_delayed_inode()
1023 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1027 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1028 mod = -1; in __btrfs_update_delayed_inode()
1033 ret = btrfs_lookup_inode(trans, root, path, &key, mod); in __btrfs_update_delayed_inode()
1036 ret = -ENOENT; in __btrfs_update_delayed_inode()
1040 leaf = path->nodes[0]; in __btrfs_update_delayed_inode()
1041 inode_item = btrfs_item_ptr(leaf, path->slots[0], in __btrfs_update_delayed_inode()
1043 write_extent_buffer(leaf, &node->inode_item, (unsigned long)inode_item, in __btrfs_update_delayed_inode()
1047 if (!test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1050 path->slots[0]++; in __btrfs_update_delayed_inode()
1051 if (path->slots[0] >= btrfs_header_nritems(leaf)) in __btrfs_update_delayed_inode()
1054 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in __btrfs_update_delayed_inode()
1055 if (key.objectid != node->inode_id) in __btrfs_update_delayed_inode()
1067 btrfs_del_item(trans, root, path); in __btrfs_update_delayed_inode()
1069 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 if (ret && ret != -ENOENT) in __btrfs_update_delayed_inode()
1090 key.offset = -1; in __btrfs_update_delayed_inode()
1093 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in __btrfs_update_delayed_inode()
1100 leaf = path->nodes[0]; in __btrfs_update_delayed_inode()
1101 path->slots[0]--; in __btrfs_update_delayed_inode()
1106 struct btrfs_root *root, in btrfs_update_delayed_inode() argument
1108 struct btrfs_delayed_node *node) in btrfs_update_delayed_inode() argument
1112 mutex_lock(&node->mutex); in btrfs_update_delayed_inode()
1113 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &node->flags)) { in btrfs_update_delayed_inode()
1114 mutex_unlock(&node->mutex); in btrfs_update_delayed_inode()
1118 ret = __btrfs_update_delayed_inode(trans, root, path, node); in btrfs_update_delayed_inode()
1119 mutex_unlock(&node->mutex); in btrfs_update_delayed_inode()
1126 struct btrfs_delayed_node *node) in __btrfs_commit_inode_delayed_items() argument
1130 ret = btrfs_insert_delayed_items(trans, path, node->root, node); in __btrfs_commit_inode_delayed_items()
1134 ret = btrfs_delete_delayed_items(trans, path, node->root, node); in __btrfs_commit_inode_delayed_items()
1138 ret = btrfs_update_delayed_inode(trans, node->root, path, node); in __btrfs_commit_inode_delayed_items()
1150 struct btrfs_fs_info *fs_info = trans->fs_info; in __btrfs_run_delayed_items()
1159 return -EIO; in __btrfs_run_delayed_items()
1163 return -ENOMEM; in __btrfs_run_delayed_items()
1164 path->leave_spinning = 1; in __btrfs_run_delayed_items()
1166 block_rsv = trans->block_rsv; in __btrfs_run_delayed_items()
1167 trans->block_rsv = &fs_info->delayed_block_rsv; in __btrfs_run_delayed_items()
1169 delayed_root = fs_info->delayed_root; in __btrfs_run_delayed_items()
1172 while (curr_node && (!count || (count && nr--))) { in __btrfs_run_delayed_items()
1184 * node. If the commit of delayed items was successful the path in __btrfs_run_delayed_items()
1188 ASSERT(path->nodes[0] == NULL); in __btrfs_run_delayed_items()
1194 * releasing the delayed node, as that requires taking the delayed node's in __btrfs_run_delayed_items()
1203 trans->block_rsv = block_rsv; in __btrfs_run_delayed_items()
1210 return __btrfs_run_delayed_items(trans, -1); in btrfs_run_delayed_items()
1229 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1230 if (!delayed_node->count) { in btrfs_commit_inode_delayed_items()
1231 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1235 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1240 return -ENOMEM; in btrfs_commit_inode_delayed_items()
1242 path->leave_spinning = 1; in btrfs_commit_inode_delayed_items()
1244 block_rsv = trans->block_rsv; in btrfs_commit_inode_delayed_items()
1245 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_items()
1251 trans->block_rsv = block_rsv; in btrfs_commit_inode_delayed_items()
1258 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_commit_inode_delayed_inode()
1268 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1269 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_commit_inode_delayed_inode()
1270 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1274 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1276 trans = btrfs_join_transaction(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1284 ret = -ENOMEM; in btrfs_commit_inode_delayed_inode()
1287 path->leave_spinning = 1; in btrfs_commit_inode_delayed_inode()
1289 block_rsv = trans->block_rsv; in btrfs_commit_inode_delayed_inode()
1290 trans->block_rsv = &fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_inode()
1292 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1293 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) in btrfs_commit_inode_delayed_inode()
1294 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, in btrfs_commit_inode_delayed_inode()
1298 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1301 trans->block_rsv = block_rsv; in btrfs_commit_inode_delayed_inode()
1315 delayed_node = READ_ONCE(inode->delayed_node); in btrfs_remove_delayed_node()
1319 inode->delayed_node = NULL; in btrfs_remove_delayed_node()
1336 struct btrfs_root *root; in btrfs_async_run_delayed_root() local
1341 delayed_root = async_work->delayed_root; in btrfs_async_run_delayed_root()
1348 if (atomic_read(&delayed_root->items) < in btrfs_async_run_delayed_root()
1356 path->leave_spinning = 1; in btrfs_async_run_delayed_root()
1357 root = delayed_node->root; in btrfs_async_run_delayed_root()
1359 trans = btrfs_join_transaction(root); in btrfs_async_run_delayed_root()
1367 block_rsv = trans->block_rsv; in btrfs_async_run_delayed_root()
1368 trans->block_rsv = &root->fs_info->delayed_block_rsv; in btrfs_async_run_delayed_root()
1372 trans->block_rsv = block_rsv; in btrfs_async_run_delayed_root()
1374 btrfs_btree_balance_dirty_nodelay(root->fs_info); in btrfs_async_run_delayed_root()
1380 } while ((async_work->nr == 0 && total_done < BTRFS_DELAYED_WRITEBACK) in btrfs_async_run_delayed_root()
1381 || total_done < async_work->nr); in btrfs_async_run_delayed_root()
1385 wake_up(&delayed_root->wait); in btrfs_async_run_delayed_root()
1397 return -ENOMEM; in btrfs_wq_run_delayed_node()
1399 async_work->delayed_root = delayed_root; in btrfs_wq_run_delayed_node()
1400 btrfs_init_work(&async_work->work, btrfs_async_run_delayed_root, NULL, in btrfs_wq_run_delayed_node()
1402 async_work->nr = nr; in btrfs_wq_run_delayed_node()
1404 btrfs_queue_work(fs_info->delayed_workers, &async_work->work); in btrfs_wq_run_delayed_node()
1410 WARN_ON(btrfs_first_delayed_node(fs_info->delayed_root)); in btrfs_assert_delayed_root_empty()
1415 int val = atomic_read(&delayed_root->items_seq); in could_end_wait()
1420 if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) in could_end_wait()
1428 struct btrfs_delayed_root *delayed_root = fs_info->delayed_root; in btrfs_balance_delayed_items()
1430 if ((atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) || in btrfs_balance_delayed_items()
1431 btrfs_workqueue_normal_congested(fs_info->delayed_workers)) in btrfs_balance_delayed_items()
1434 if (atomic_read(&delayed_root->items) >= BTRFS_DELAYED_WRITEBACK) { in btrfs_balance_delayed_items()
1438 seq = atomic_read(&delayed_root->items_seq); in btrfs_balance_delayed_items()
1444 wait_event_interruptible(delayed_root->wait, in btrfs_balance_delayed_items()
1452 /* Will return 0 or -ENOMEM */
1470 ret = -ENOMEM; in btrfs_insert_delayed_dir_index()
1474 delayed_item->key.objectid = btrfs_ino(dir); in btrfs_insert_delayed_dir_index()
1475 delayed_item->key.type = BTRFS_DIR_INDEX_KEY; in btrfs_insert_delayed_dir_index()
1476 delayed_item->key.offset = index; in btrfs_insert_delayed_dir_index()
1478 dir_item = (struct btrfs_dir_item *)delayed_item->data; in btrfs_insert_delayed_dir_index()
1479 dir_item->location = *disk_key; in btrfs_insert_delayed_dir_index()
1480 btrfs_set_stack_dir_transid(dir_item, trans->transid); in btrfs_insert_delayed_dir_index()
1486 ret = btrfs_delayed_item_reserve_metadata(trans, dir->root, delayed_item); in btrfs_insert_delayed_dir_index()
1493 mutex_lock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1496 btrfs_err(trans->fs_info, in btrfs_insert_delayed_dir_index()
1497 …"err add delayed dir index item(name: %.*s) into the insertion tree of the delayed node(root id: %… in btrfs_insert_delayed_dir_index()
1498 name_len, name, delayed_node->root->root_key.objectid, in btrfs_insert_delayed_dir_index()
1499 delayed_node->inode_id, ret); in btrfs_insert_delayed_dir_index()
1502 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1510 struct btrfs_delayed_node *node, in btrfs_delete_delayed_insertion_item() argument
1515 mutex_lock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1516 item = __btrfs_lookup_delayed_insertion_item(node, key); in btrfs_delete_delayed_insertion_item()
1518 mutex_unlock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1522 btrfs_delayed_item_release_metadata(node->root, item); in btrfs_delete_delayed_insertion_item()
1524 mutex_unlock(&node->mutex); in btrfs_delete_delayed_insertion_item()
1531 struct btrfs_delayed_node *node; in btrfs_delete_delayed_dir_index() local
1536 node = btrfs_get_or_create_delayed_node(dir); in btrfs_delete_delayed_dir_index()
1537 if (IS_ERR(node)) in btrfs_delete_delayed_dir_index()
1538 return PTR_ERR(node); in btrfs_delete_delayed_dir_index()
1544 ret = btrfs_delete_delayed_insertion_item(trans->fs_info, node, in btrfs_delete_delayed_dir_index()
1551 ret = -ENOMEM; in btrfs_delete_delayed_dir_index()
1555 item->key = item_key; in btrfs_delete_delayed_dir_index()
1557 ret = btrfs_delayed_item_reserve_metadata(trans, dir->root, item); in btrfs_delete_delayed_dir_index()
1563 btrfs_err(trans->fs_info, in btrfs_delete_delayed_dir_index()
1569 mutex_lock(&node->mutex); in btrfs_delete_delayed_dir_index()
1570 ret = __btrfs_add_delayed_deletion_item(node, item); in btrfs_delete_delayed_dir_index()
1572 btrfs_err(trans->fs_info, in btrfs_delete_delayed_dir_index()
1573 …"err add delayed dir index item(index: %llu) into the deletion tree of the delayed node(root id: %… in btrfs_delete_delayed_dir_index()
1574 index, node->root->root_key.objectid, in btrfs_delete_delayed_dir_index()
1575 node->inode_id, ret); in btrfs_delete_delayed_dir_index()
1576 btrfs_delayed_item_release_metadata(dir->root, item); in btrfs_delete_delayed_dir_index()
1579 mutex_unlock(&node->mutex); in btrfs_delete_delayed_dir_index()
1581 btrfs_release_delayed_node(node); in btrfs_delete_delayed_dir_index()
1590 return -ENOENT; in btrfs_inode_delayed_dir_index_count()
1594 * a new directory index is added into the delayed node and index_cnt in btrfs_inode_delayed_dir_index_count()
1595 * is updated now. So we needn't lock the delayed node. in btrfs_inode_delayed_dir_index_count()
1597 if (!delayed_node->index_cnt) { in btrfs_inode_delayed_dir_index_count()
1599 return -EINVAL; in btrfs_inode_delayed_dir_index_count()
1602 inode->index_cnt = delayed_node->index_cnt; in btrfs_inode_delayed_dir_index_count()
1620 * item->readdir_list. in btrfs_readdir_get_delayed_items()
1625 mutex_lock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1628 refcount_inc(&item->refs); in btrfs_readdir_get_delayed_items()
1629 list_add_tail(&item->readdir_list, ins_list); in btrfs_readdir_get_delayed_items()
1635 refcount_inc(&item->refs); in btrfs_readdir_get_delayed_items()
1636 list_add_tail(&item->readdir_list, del_list); in btrfs_readdir_get_delayed_items()
1639 mutex_unlock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1641 * This delayed node is still cached in the btrfs inode, so refs in btrfs_readdir_get_delayed_items()
1647 * requeue or dequeue this delayed node. in btrfs_readdir_get_delayed_items()
1649 refcount_dec(&delayed_node->refs); in btrfs_readdir_get_delayed_items()
1661 list_del(&curr->readdir_list); in btrfs_readdir_put_delayed_items()
1662 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_put_delayed_items()
1667 list_del(&curr->readdir_list); in btrfs_readdir_put_delayed_items()
1668 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_put_delayed_items()
1676 downgrade_write(&inode->i_rwsem); in btrfs_readdir_put_delayed_items()
1686 if (curr->key.offset > index) in btrfs_should_delete_dir_index()
1688 if (curr->key.offset == index) { in btrfs_should_delete_dir_index()
1697 * btrfs_readdir_delayed_dir_index - read dir info stored in the delayed tree
1720 list_del(&curr->readdir_list); in btrfs_readdir_delayed_dir_index()
1722 if (curr->key.offset < ctx->pos) { in btrfs_readdir_delayed_dir_index()
1723 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_delayed_dir_index()
1728 ctx->pos = curr->key.offset; in btrfs_readdir_delayed_dir_index()
1730 di = (struct btrfs_dir_item *)curr->data; in btrfs_readdir_delayed_dir_index()
1734 d_type = fs_ftype_to_dtype(di->type); in btrfs_readdir_delayed_dir_index()
1735 btrfs_disk_key_to_cpu(&location, &di->location); in btrfs_readdir_delayed_dir_index()
1740 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_delayed_dir_index()
1745 ctx->pos++; in btrfs_readdir_delayed_dir_index()
1756 btrfs_set_stack_inode_size(inode_item, BTRFS_I(inode)->disk_i_size); in fill_stack_inode_item()
1757 btrfs_set_stack_inode_mode(inode_item, inode->i_mode); in fill_stack_inode_item()
1758 btrfs_set_stack_inode_nlink(inode_item, inode->i_nlink); in fill_stack_inode_item()
1761 BTRFS_I(inode)->generation); in fill_stack_inode_item()
1764 btrfs_set_stack_inode_transid(inode_item, trans->transid); in fill_stack_inode_item()
1765 btrfs_set_stack_inode_rdev(inode_item, inode->i_rdev); in fill_stack_inode_item()
1766 btrfs_set_stack_inode_flags(inode_item, BTRFS_I(inode)->flags); in fill_stack_inode_item()
1769 btrfs_set_stack_timespec_sec(&inode_item->atime, in fill_stack_inode_item()
1770 inode->i_atime.tv_sec); in fill_stack_inode_item()
1771 btrfs_set_stack_timespec_nsec(&inode_item->atime, in fill_stack_inode_item()
1772 inode->i_atime.tv_nsec); in fill_stack_inode_item()
1774 btrfs_set_stack_timespec_sec(&inode_item->mtime, in fill_stack_inode_item()
1775 inode->i_mtime.tv_sec); in fill_stack_inode_item()
1776 btrfs_set_stack_timespec_nsec(&inode_item->mtime, in fill_stack_inode_item()
1777 inode->i_mtime.tv_nsec); in fill_stack_inode_item()
1779 btrfs_set_stack_timespec_sec(&inode_item->ctime, in fill_stack_inode_item()
1780 inode->i_ctime.tv_sec); in fill_stack_inode_item()
1781 btrfs_set_stack_timespec_nsec(&inode_item->ctime, in fill_stack_inode_item()
1782 inode->i_ctime.tv_nsec); in fill_stack_inode_item()
1784 btrfs_set_stack_timespec_sec(&inode_item->otime, in fill_stack_inode_item()
1785 BTRFS_I(inode)->i_otime.tv_sec); in fill_stack_inode_item()
1786 btrfs_set_stack_timespec_nsec(&inode_item->otime, in fill_stack_inode_item()
1787 BTRFS_I(inode)->i_otime.tv_nsec); in fill_stack_inode_item()
1792 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info; in btrfs_fill_inode()
1798 return -ENOENT; in btrfs_fill_inode()
1800 mutex_lock(&delayed_node->mutex); in btrfs_fill_inode()
1801 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_fill_inode()
1802 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1804 return -ENOENT; in btrfs_fill_inode()
1807 inode_item = &delayed_node->inode_item; in btrfs_fill_inode()
1813 round_up(i_size_read(inode), fs_info->sectorsize)); in btrfs_fill_inode()
1814 inode->i_mode = btrfs_stack_inode_mode(inode_item); in btrfs_fill_inode()
1817 BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item); in btrfs_fill_inode()
1818 BTRFS_I(inode)->last_trans = btrfs_stack_inode_transid(inode_item); in btrfs_fill_inode()
1822 inode->i_rdev = 0; in btrfs_fill_inode()
1824 BTRFS_I(inode)->flags = btrfs_stack_inode_flags(inode_item); in btrfs_fill_inode()
1826 inode->i_atime.tv_sec = btrfs_stack_timespec_sec(&inode_item->atime); in btrfs_fill_inode()
1827 inode->i_atime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->atime); in btrfs_fill_inode()
1829 inode->i_mtime.tv_sec = btrfs_stack_timespec_sec(&inode_item->mtime); in btrfs_fill_inode()
1830 inode->i_mtime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->mtime); in btrfs_fill_inode()
1832 inode->i_ctime.tv_sec = btrfs_stack_timespec_sec(&inode_item->ctime); in btrfs_fill_inode()
1833 inode->i_ctime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->ctime); in btrfs_fill_inode()
1835 BTRFS_I(inode)->i_otime.tv_sec = in btrfs_fill_inode()
1836 btrfs_stack_timespec_sec(&inode_item->otime); in btrfs_fill_inode()
1837 BTRFS_I(inode)->i_otime.tv_nsec = in btrfs_fill_inode()
1838 btrfs_stack_timespec_nsec(&inode_item->otime); in btrfs_fill_inode()
1840 inode->i_generation = BTRFS_I(inode)->generation; in btrfs_fill_inode()
1841 BTRFS_I(inode)->index_cnt = (u64)-1; in btrfs_fill_inode()
1843 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1849 struct btrfs_root *root, struct inode *inode) in btrfs_delayed_update_inode() argument
1858 mutex_lock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1859 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_delayed_update_inode()
1860 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1864 ret = btrfs_delayed_inode_reserve_metadata(trans, root, BTRFS_I(inode), in btrfs_delayed_update_inode()
1869 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1870 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_delayed_update_inode()
1871 delayed_node->count++; in btrfs_delayed_update_inode()
1872 atomic_inc(&root->fs_info->delayed_root->items); in btrfs_delayed_update_inode()
1874 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1881 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_delayed_delete_inode_ref()
1889 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in btrfs_delayed_delete_inode_ref()
1890 return -EAGAIN; in btrfs_delayed_delete_inode_ref()
1898 * - We ONLY do async inode ref deletion for the inode who has only in btrfs_delayed_delete_inode_ref()
1904 * - If the inode ref and the inode item are not in the same leaf, in btrfs_delayed_delete_inode_ref()
1907 * - At the worst, we can steal some space from the global reservation. in btrfs_delayed_delete_inode_ref()
1910 mutex_lock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1911 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in btrfs_delayed_delete_inode_ref()
1914 set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_delayed_delete_inode_ref()
1915 delayed_node->count++; in btrfs_delayed_delete_inode_ref()
1916 atomic_inc(&fs_info->delayed_root->items); in btrfs_delayed_delete_inode_ref()
1918 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1925 struct btrfs_root *root = delayed_node->root; in __btrfs_kill_delayed_node() local
1926 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_kill_delayed_node()
1929 mutex_lock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1932 btrfs_delayed_item_release_metadata(root, curr_item); in __btrfs_kill_delayed_node()
1940 btrfs_delayed_item_release_metadata(root, curr_item); in __btrfs_kill_delayed_node()
1946 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in __btrfs_kill_delayed_node()
1949 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in __btrfs_kill_delayed_node()
1953 mutex_unlock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1968 void btrfs_kill_all_delayed_nodes(struct btrfs_root *root) in btrfs_kill_all_delayed_nodes() argument
1975 spin_lock(&root->inode_lock); in btrfs_kill_all_delayed_nodes()
1976 n = radix_tree_gang_lookup(&root->delayed_nodes_tree, in btrfs_kill_all_delayed_nodes()
1980 spin_unlock(&root->inode_lock); in btrfs_kill_all_delayed_nodes()
1984 inode_id = delayed_nodes[n - 1]->inode_id + 1; in btrfs_kill_all_delayed_nodes()
1987 * Don't increase refs in case the node is dead and in btrfs_kill_all_delayed_nodes()
1990 if (!refcount_inc_not_zero(&delayed_nodes[i]->refs)) in btrfs_kill_all_delayed_nodes()
1993 spin_unlock(&root->inode_lock); in btrfs_kill_all_delayed_nodes()
2008 curr_node = btrfs_first_delayed_node(fs_info->delayed_root); in btrfs_destroy_delayed_inodes()