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

1 // SPDX-License-Identifier: GPL-2.0
13 #include "delayed-inode.h"
14 #include "disk-io.h"
18 #include "inode-item.h"
19 #include "space-info.h"
21 #include "file-item.h"
33 return -ENOMEM; in btrfs_delayed_inode_init()
44 atomic_set(&delayed_root->items, 0); in btrfs_init_delayed_root()
45 atomic_set(&delayed_root->items_seq, 0); in btrfs_init_delayed_root()
46 delayed_root->nodes = 0; in btrfs_init_delayed_root()
47 spin_lock_init(&delayed_root->lock); in btrfs_init_delayed_root()
48 init_waitqueue_head(&delayed_root->wait); in btrfs_init_delayed_root()
49 INIT_LIST_HEAD(&delayed_root->node_list); in btrfs_init_delayed_root()
50 INIT_LIST_HEAD(&delayed_root->prepare_list); in btrfs_init_delayed_root()
55 struct btrfs_root *root, u64 inode_id) 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()
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 xa_lock(&root->delayed_nodes); 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()
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 xa_unlock(&root->delayed_nodes); in btrfs_get_delayed_node()
88 return node; in btrfs_get_delayed_node()
93 * this node from the xarray. In this case, the refcount in btrfs_get_delayed_node()
103 * If this node is properly in the xarray, 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 xa_unlock(&root->delayed_nodes); in btrfs_get_delayed_node()
115 return node; in btrfs_get_delayed_node()
117 xa_unlock(&root->delayed_nodes); in btrfs_get_delayed_node()
123 * Look up an existing delayed node associated with @btrfs_inode or create a new
124 * one and insert it to the delayed nodes of the root.
126 * Return the delayed node, or error pointer on failure.
131 struct btrfs_delayed_node *node; in btrfs_get_or_create_delayed_node() local
132 struct btrfs_root *root = btrfs_inode->root; 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()
144 return ERR_PTR(-ENOMEM); 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()
151 ret = xa_reserve(&root->delayed_nodes, ino, GFP_NOFS); in btrfs_get_or_create_delayed_node()
152 if (ret == -ENOMEM) { in btrfs_get_or_create_delayed_node()
153 kmem_cache_free(delayed_node_cache, node); in btrfs_get_or_create_delayed_node()
154 return ERR_PTR(-ENOMEM); in btrfs_get_or_create_delayed_node()
156 xa_lock(&root->delayed_nodes); in btrfs_get_or_create_delayed_node()
157 ptr = xa_load(&root->delayed_nodes, ino); in btrfs_get_or_create_delayed_node()
160 xa_unlock(&root->delayed_nodes); 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()
166 ASSERT(xa_err(ptr) != -EINVAL); in btrfs_get_or_create_delayed_node()
167 ASSERT(xa_err(ptr) != -ENOMEM); in btrfs_get_or_create_delayed_node()
169 btrfs_inode->delayed_node = node; in btrfs_get_or_create_delayed_node()
170 xa_unlock(&root->delayed_nodes); in btrfs_get_or_create_delayed_node()
172 return node; in btrfs_get_or_create_delayed_node()
176 * Call it when holding delayed_node->mutex
178 * If mod = 1, add this node into the prepared list.
180 static void btrfs_queue_delayed_node(struct btrfs_delayed_root *root, in btrfs_queue_delayed_node() argument
181 struct btrfs_delayed_node *node, in btrfs_queue_delayed_node() argument
184 spin_lock(&root->lock); in btrfs_queue_delayed_node()
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()
194 root->nodes++; in btrfs_queue_delayed_node()
195 set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); in btrfs_queue_delayed_node()
197 spin_unlock(&root->lock); in btrfs_queue_delayed_node()
200 /* Call it when holding delayed_node->mutex */
201 static void btrfs_dequeue_delayed_node(struct btrfs_delayed_root *root, in btrfs_dequeue_delayed_node() argument
202 struct btrfs_delayed_node *node) in btrfs_dequeue_delayed_node() argument
204 spin_lock(&root->lock); in btrfs_dequeue_delayed_node()
205 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_dequeue_delayed_node()
206 root->nodes--; 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()
213 spin_unlock(&root->lock); in btrfs_dequeue_delayed_node()
219 struct btrfs_delayed_node *node; in btrfs_first_delayed_node() local
221 spin_lock(&delayed_root->lock); in btrfs_first_delayed_node()
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()
226 spin_unlock(&delayed_root->lock); 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()
239 spin_lock(&delayed_root->lock); in btrfs_next_delayed_node()
240 if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { in btrfs_next_delayed_node()
242 if (list_empty(&delayed_root->node_list)) in btrfs_next_delayed_node()
244 p = delayed_root->node_list.next; 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()
251 refcount_inc(&next->refs); in btrfs_next_delayed_node()
253 spin_unlock(&delayed_root->lock); in btrfs_next_delayed_node()
267 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_release_delayed_node()
269 mutex_lock(&delayed_node->mutex); in __btrfs_release_delayed_node()
270 if (delayed_node->count) in __btrfs_release_delayed_node()
274 mutex_unlock(&delayed_node->mutex); in __btrfs_release_delayed_node()
276 if (refcount_dec_and_test(&delayed_node->refs)) { in __btrfs_release_delayed_node()
277 struct btrfs_root *root = delayed_node->root; in __btrfs_release_delayed_node() local
279 xa_erase(&root->delayed_nodes, delayed_node->inode_id); in __btrfs_release_delayed_node()
284 ASSERT(refcount_read(&delayed_node->refs) == 0); in __btrfs_release_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
299 spin_lock(&delayed_root->lock); in btrfs_first_prepared_delayed_node()
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()
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()
318 struct btrfs_delayed_node *node, in btrfs_alloc_delayed_item() argument
325 item->data_len = data_len; in btrfs_alloc_delayed_item()
326 item->type = type; in btrfs_alloc_delayed_item()
327 item->bytes_reserved = 0; in btrfs_alloc_delayed_item()
328 item->delayed_node = node; in btrfs_alloc_delayed_item()
329 RB_CLEAR_NODE(&item->rb_node); in btrfs_alloc_delayed_item()
330 INIT_LIST_HEAD(&item->log_list); in btrfs_alloc_delayed_item()
331 item->logged = false; in btrfs_alloc_delayed_item()
332 refcount_set(&item->refs, 1); in btrfs_alloc_delayed_item()
340 * @delayed_node: pointer to the delayed node
347 struct rb_root *root, in __btrfs_lookup_delayed_item() argument
350 struct rb_node *node = root->rb_node; in __btrfs_lookup_delayed_item() local
353 while (node) { in __btrfs_lookup_delayed_item()
354 delayed_item = rb_entry(node, struct btrfs_delayed_item, in __btrfs_lookup_delayed_item()
356 if (delayed_item->index < index) in __btrfs_lookup_delayed_item()
357 node = node->rb_right; in __btrfs_lookup_delayed_item()
358 else if (delayed_item->index > index) in __btrfs_lookup_delayed_item()
359 node = node->rb_left; in __btrfs_lookup_delayed_item()
375 if (new_item->index < exist_item->index) in btrfs_delayed_item_cmp()
376 return -1; in btrfs_delayed_item_cmp()
377 if (new_item->index > exist_item->index) in btrfs_delayed_item_cmp()
385 struct rb_root_cached *root; in __btrfs_add_delayed_item() local
388 if (ins->type == BTRFS_DELAYED_INSERTION_ITEM) in __btrfs_add_delayed_item()
389 root = &delayed_node->ins_root; in __btrfs_add_delayed_item()
391 root = &delayed_node->del_root; in __btrfs_add_delayed_item()
393 exist = rb_find_add_cached(&ins->rb_node, root, btrfs_delayed_item_cmp); in __btrfs_add_delayed_item()
395 return -EEXIST; in __btrfs_add_delayed_item()
397 if (ins->type == BTRFS_DELAYED_INSERTION_ITEM && in __btrfs_add_delayed_item()
398 ins->index >= delayed_node->index_cnt) in __btrfs_add_delayed_item()
399 delayed_node->index_cnt = ins->index + 1; in __btrfs_add_delayed_item()
401 delayed_node->count++; in __btrfs_add_delayed_item()
402 atomic_inc(&delayed_node->root->fs_info->delayed_root->items); in __btrfs_add_delayed_item()
408 int seq = atomic_inc_return(&delayed_root->items_seq); in finish_one_item()
411 if ((atomic_dec_return(&delayed_root->items) < in finish_one_item()
413 cond_wake_up_nomb(&delayed_root->wait); in finish_one_item()
418 struct btrfs_delayed_node *delayed_node = delayed_item->delayed_node; in __btrfs_remove_delayed_item()
419 struct rb_root_cached *root; in __btrfs_remove_delayed_item() local
423 if (RB_EMPTY_NODE(&delayed_item->rb_node)) in __btrfs_remove_delayed_item()
426 /* If it's in a rbtree, then we need to have delayed node locked. */ in __btrfs_remove_delayed_item()
427 lockdep_assert_held(&delayed_node->mutex); in __btrfs_remove_delayed_item()
429 delayed_root = delayed_node->root->fs_info->delayed_root; in __btrfs_remove_delayed_item()
431 if (delayed_item->type == BTRFS_DELAYED_INSERTION_ITEM) in __btrfs_remove_delayed_item()
432 root = &delayed_node->ins_root; in __btrfs_remove_delayed_item()
434 root = &delayed_node->del_root; in __btrfs_remove_delayed_item()
436 rb_erase_cached(&delayed_item->rb_node, root); in __btrfs_remove_delayed_item()
437 RB_CLEAR_NODE(&delayed_item->rb_node); in __btrfs_remove_delayed_item()
438 delayed_node->count--; in __btrfs_remove_delayed_item()
447 if (refcount_dec_and_test(&item->refs)) in btrfs_release_delayed_item()
455 struct rb_node *p = rb_first_cached(&delayed_node->ins_root); in __btrfs_first_delayed_insertion_item()
463 struct rb_node *p = rb_first_cached(&delayed_node->del_root); in __btrfs_first_delayed_deletion_item()
471 struct rb_node *p = rb_next(&item->rb_node); in __btrfs_next_delayed_item()
481 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_delayed_item_reserve_metadata()
485 if (!trans->bytes_reserved) in btrfs_delayed_item_reserve_metadata()
488 src_rsv = trans->block_rsv; in btrfs_delayed_item_reserve_metadata()
489 dst_rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_item_reserve_metadata()
501 item->delayed_node->inode_id, in btrfs_delayed_item_reserve_metadata()
506 * node's curr_index_batch_size and index_item_leaves fields. in btrfs_delayed_item_reserve_metadata()
508 if (item->type == BTRFS_DELAYED_DELETION_ITEM) in btrfs_delayed_item_reserve_metadata()
509 item->bytes_reserved = num_bytes; in btrfs_delayed_item_reserve_metadata()
515 static void btrfs_delayed_item_release_metadata(struct btrfs_root *root, in btrfs_delayed_item_release_metadata() argument
519 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_delayed_item_release_metadata()
521 if (!item->bytes_reserved) in btrfs_delayed_item_release_metadata()
524 rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_item_release_metadata()
530 item->delayed_node->inode_id, in btrfs_delayed_item_release_metadata()
531 item->bytes_reserved, 0); in btrfs_delayed_item_release_metadata()
532 btrfs_block_rsv_release(fs_info, rsv, item->bytes_reserved, NULL); in btrfs_delayed_item_release_metadata()
535 static void btrfs_delayed_item_release_leaves(struct btrfs_delayed_node *node, in btrfs_delayed_item_release_leaves() argument
538 struct btrfs_fs_info *fs_info = node->root->fs_info; in btrfs_delayed_item_release_leaves()
542 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in btrfs_delayed_item_release_leaves()
545 trace_btrfs_space_reservation(fs_info, "delayed_item", node->inode_id, in btrfs_delayed_item_release_leaves()
547 btrfs_block_rsv_release(fs_info, &fs_info->delayed_block_rsv, bytes, NULL); in btrfs_delayed_item_release_leaves()
552 struct btrfs_root *root, in btrfs_delayed_inode_reserve_metadata() argument
553 struct btrfs_delayed_node *node) in btrfs_delayed_inode_reserve_metadata() argument
555 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_delayed_inode_reserve_metadata()
561 src_rsv = trans->block_rsv; in btrfs_delayed_inode_reserve_metadata()
562 dst_rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_inode_reserve_metadata()
575 if (!src_rsv || (!trans->bytes_reserved && in btrfs_delayed_inode_reserve_metadata()
576 src_rsv->type != BTRFS_BLOCK_RSV_DELALLOC)) { in btrfs_delayed_inode_reserve_metadata()
577 ret = btrfs_qgroup_reserve_meta(root, num_bytes, in btrfs_delayed_inode_reserve_metadata()
583 /* NO_FLUSH could only fail with -ENOSPC */ in btrfs_delayed_inode_reserve_metadata()
584 ASSERT(ret == 0 || ret == -ENOSPC); in btrfs_delayed_inode_reserve_metadata()
586 btrfs_qgroup_free_meta_prealloc(root, num_bytes); in btrfs_delayed_inode_reserve_metadata()
593 node->inode_id, num_bytes, 1); in btrfs_delayed_inode_reserve_metadata()
594 node->bytes_reserved = num_bytes; in btrfs_delayed_inode_reserve_metadata()
601 struct btrfs_delayed_node *node, in btrfs_delayed_inode_release_metadata() argument
606 if (!node->bytes_reserved) in btrfs_delayed_inode_release_metadata()
609 rsv = &fs_info->delayed_block_rsv; in btrfs_delayed_inode_release_metadata()
611 node->inode_id, node->bytes_reserved, 0); in btrfs_delayed_inode_release_metadata()
612 btrfs_block_rsv_release(fs_info, rsv, node->bytes_reserved, NULL); in btrfs_delayed_inode_release_metadata()
614 btrfs_qgroup_free_meta_prealloc(node->root, in btrfs_delayed_inode_release_metadata()
615 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
617 btrfs_qgroup_convert_reserved_meta(node->root, in btrfs_delayed_inode_release_metadata()
618 node->bytes_reserved); in btrfs_delayed_inode_release_metadata()
619 node->bytes_reserved = 0; in btrfs_delayed_inode_release_metadata()
633 struct btrfs_root *root, in btrfs_insert_delayed_item() argument
637 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_insert_delayed_item()
638 struct btrfs_delayed_node *node = first_item->delayed_node; in btrfs_insert_delayed_item() local
645 const u32 first_data_size = first_item->data_len; in btrfs_insert_delayed_item()
651 lockdep_assert_held(&node->mutex); in btrfs_insert_delayed_item()
662 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in btrfs_insert_delayed_item()
671 ASSERT(first_item->bytes_reserved == 0); in btrfs_insert_delayed_item()
673 list_add_tail(&first_item->tree_list, &item_list); in btrfs_insert_delayed_item()
690 if (continuous_keys_only && (next->index != curr->index + 1)) in btrfs_insert_delayed_item()
693 ASSERT(next->bytes_reserved == 0); in btrfs_insert_delayed_item()
695 next_size = next->data_len + sizeof(struct btrfs_item); in btrfs_insert_delayed_item()
699 list_add_tail(&next->tree_list, &item_list); in btrfs_insert_delayed_item()
702 batch.total_data_size += next->data_len; in btrfs_insert_delayed_item()
707 first_key.objectid = node->inode_id; in btrfs_insert_delayed_item()
709 first_key.offset = first_item->index; in btrfs_insert_delayed_item()
720 ret = -ENOMEM; in btrfs_insert_delayed_item()
728 ins_keys[i].objectid = node->inode_id; in btrfs_insert_delayed_item()
730 ins_keys[i].offset = curr->index; in btrfs_insert_delayed_item()
731 ins_sizes[i] = curr->data_len; in btrfs_insert_delayed_item()
736 ret = btrfs_insert_empty_items(trans, root, path, &batch); in btrfs_insert_delayed_item()
743 data_ptr = btrfs_item_ptr(path->nodes[0], path->slots[0], char); in btrfs_insert_delayed_item()
744 write_extent_buffer(path->nodes[0], &curr->data, in btrfs_insert_delayed_item()
745 (unsigned long)data_ptr, curr->data_len); in btrfs_insert_delayed_item()
746 path->slots[0]++; in btrfs_insert_delayed_item()
756 ASSERT(node->index_item_leaves > 0); in btrfs_insert_delayed_item()
775 btrfs_delayed_item_release_leaves(node, 1); in btrfs_insert_delayed_item()
776 node->index_item_leaves--; in btrfs_insert_delayed_item()
780 * reserved leaves > 1 here - this happens when many dir index in btrfs_insert_delayed_item()
785 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); in btrfs_insert_delayed_item()
786 node->index_item_leaves = 0; in btrfs_insert_delayed_item()
790 list_del(&curr->tree_list); in btrfs_insert_delayed_item()
800 struct btrfs_root *root, in btrfs_insert_delayed_items() argument
801 struct btrfs_delayed_node *node) in btrfs_insert_delayed_items() argument
808 mutex_lock(&node->mutex); in btrfs_insert_delayed_items()
809 curr = __btrfs_first_delayed_insertion_item(node); in btrfs_insert_delayed_items()
811 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
814 ret = btrfs_insert_delayed_item(trans, root, path, curr); in btrfs_insert_delayed_items()
815 mutex_unlock(&node->mutex); in btrfs_insert_delayed_items()
822 struct btrfs_root *root, in btrfs_batch_delete_items() argument
826 const u64 ino = item->delayed_node->inode_id; in btrfs_batch_delete_items()
827 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_batch_delete_items()
829 struct extent_buffer *leaf = path->nodes[0]; in btrfs_batch_delete_items()
833 u64 total_reserved_size = item->bytes_reserved; in btrfs_batch_delete_items()
837 slot = path->slots[0]; in btrfs_batch_delete_items()
838 last_slot = btrfs_header_nritems(leaf) - 1; in btrfs_batch_delete_items()
845 return -ENOENT; in btrfs_batch_delete_items()
849 list_add_tail(&curr->tree_list, &batch_list); in btrfs_batch_delete_items()
853 * leaf - if so, we can add it to the batch of items to delete from the in btrfs_batch_delete_items()
867 key.offset != next->index) in btrfs_batch_delete_items()
871 list_add_tail(&curr->tree_list, &batch_list); in btrfs_batch_delete_items()
872 total_reserved_size += curr->bytes_reserved; in btrfs_batch_delete_items()
875 ret = btrfs_del_items(trans, root, path, path->slots[0], nitems); in btrfs_batch_delete_items()
887 btrfs_block_rsv_release(fs_info, &fs_info->delayed_block_rsv, in btrfs_batch_delete_items()
892 list_del(&curr->tree_list); in btrfs_batch_delete_items()
901 struct btrfs_root *root, in btrfs_delete_delayed_items() argument
902 struct btrfs_delayed_node *node) in btrfs_delete_delayed_items() argument
907 key.objectid = node->inode_id; in btrfs_delete_delayed_items()
913 mutex_lock(&node->mutex); in btrfs_delete_delayed_items()
914 item = __btrfs_first_delayed_deletion_item(node); in btrfs_delete_delayed_items()
916 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
920 key.offset = item->index; in btrfs_delete_delayed_items()
921 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in btrfs_delete_delayed_items()
941 ret = btrfs_batch_delete_items(trans, root, path, item); in btrfs_delete_delayed_items()
950 * need to add delayed items to this delayed node. in btrfs_delete_delayed_items()
952 mutex_unlock(&node->mutex); in btrfs_delete_delayed_items()
963 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_release_delayed_inode()
964 ASSERT(delayed_node->root); in btrfs_release_delayed_inode()
965 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_release_delayed_inode()
966 delayed_node->count--; in btrfs_release_delayed_inode()
968 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_inode()
976 if (test_and_clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) { in btrfs_release_delayed_iref()
979 ASSERT(delayed_node->root); in btrfs_release_delayed_iref()
980 delayed_node->count--; in btrfs_release_delayed_iref()
982 delayed_root = delayed_node->root->fs_info->delayed_root; in btrfs_release_delayed_iref()
988 struct btrfs_root *root, in __btrfs_update_delayed_inode() argument
990 struct btrfs_delayed_node *node) in __btrfs_update_delayed_inode() argument
992 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_update_delayed_inode()
999 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1003 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1004 mod = -1; in __btrfs_update_delayed_inode()
1008 ret = btrfs_lookup_inode(trans, root, path, &key, mod); in __btrfs_update_delayed_inode()
1010 ret = -ENOENT; in __btrfs_update_delayed_inode()
1014 leaf = path->nodes[0]; in __btrfs_update_delayed_inode()
1015 inode_item = btrfs_item_ptr(leaf, path->slots[0], in __btrfs_update_delayed_inode()
1017 write_extent_buffer(leaf, &node->inode_item, (unsigned long)inode_item, in __btrfs_update_delayed_inode()
1020 if (!test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) in __btrfs_update_delayed_inode()
1030 if (path->slots[0] + 1 >= btrfs_header_nritems(leaf)) { in __btrfs_update_delayed_inode()
1031 key.objectid = node->inode_id; in __btrfs_update_delayed_inode()
1033 key.offset = (u64)-1; in __btrfs_update_delayed_inode()
1036 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in __btrfs_update_delayed_inode()
1040 ASSERT(path->slots[0] > 0); in __btrfs_update_delayed_inode()
1042 path->slots[0]--; in __btrfs_update_delayed_inode()
1043 leaf = path->nodes[0]; in __btrfs_update_delayed_inode()
1045 path->slots[0]++; in __btrfs_update_delayed_inode()
1047 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in __btrfs_update_delayed_inode()
1048 if (key.objectid != node->inode_id) in __btrfs_update_delayed_inode()
1059 ret = btrfs_del_item(trans, root, path); in __btrfs_update_delayed_inode()
1061 btrfs_release_delayed_iref(node); in __btrfs_update_delayed_inode()
1064 btrfs_delayed_inode_release_metadata(fs_info, node, (ret < 0)); in __btrfs_update_delayed_inode()
1065 btrfs_release_delayed_inode(node); in __btrfs_update_delayed_inode()
1072 if (ret && ret != -ENOENT) in __btrfs_update_delayed_inode()
1079 struct btrfs_root *root, in btrfs_update_delayed_inode() argument
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()
1126 struct btrfs_fs_info *fs_info = trans->fs_info; in __btrfs_run_delayed_items()
1135 return -EIO; in __btrfs_run_delayed_items()
1139 return -ENOMEM; in __btrfs_run_delayed_items()
1141 block_rsv = trans->block_rsv; in __btrfs_run_delayed_items()
1142 trans->block_rsv = &fs_info->delayed_block_rsv; in __btrfs_run_delayed_items()
1144 delayed_root = fs_info->delayed_root; in __btrfs_run_delayed_items()
1147 while (curr_node && (!count || nr--)) { in __btrfs_run_delayed_items()
1159 * node. If the commit of delayed items was successful the path in __btrfs_run_delayed_items()
1163 ASSERT(path->nodes[0] == NULL); in __btrfs_run_delayed_items()
1169 * releasing the delayed node, as that requires taking the delayed node's in __btrfs_run_delayed_items()
1178 trans->block_rsv = block_rsv; in __btrfs_run_delayed_items()
1185 return __btrfs_run_delayed_items(trans, -1); in btrfs_run_delayed_items()
1204 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1205 if (!delayed_node->count) { in btrfs_commit_inode_delayed_items()
1206 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1210 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_items()
1215 return -ENOMEM; in btrfs_commit_inode_delayed_items()
1218 block_rsv = trans->block_rsv; in btrfs_commit_inode_delayed_items()
1219 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_items()
1224 trans->block_rsv = block_rsv; in btrfs_commit_inode_delayed_items()
1231 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_commit_inode_delayed_inode()
1241 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1242 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_commit_inode_delayed_inode()
1243 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1247 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1249 trans = btrfs_join_transaction(delayed_node->root); in btrfs_commit_inode_delayed_inode()
1257 ret = -ENOMEM; in btrfs_commit_inode_delayed_inode()
1261 block_rsv = trans->block_rsv; in btrfs_commit_inode_delayed_inode()
1262 trans->block_rsv = &fs_info->delayed_block_rsv; in btrfs_commit_inode_delayed_inode()
1264 mutex_lock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1265 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) in btrfs_commit_inode_delayed_inode()
1266 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, in btrfs_commit_inode_delayed_inode()
1270 mutex_unlock(&delayed_node->mutex); in btrfs_commit_inode_delayed_inode()
1273 trans->block_rsv = block_rsv; in btrfs_commit_inode_delayed_inode()
1287 delayed_node = READ_ONCE(inode->delayed_node); in btrfs_remove_delayed_node()
1291 inode->delayed_node = NULL; in btrfs_remove_delayed_node()
1308 struct btrfs_root *root; in btrfs_async_run_delayed_root() local
1313 delayed_root = async_work->delayed_root; in btrfs_async_run_delayed_root()
1320 if (atomic_read(&delayed_root->items) < in btrfs_async_run_delayed_root()
1328 root = delayed_node->root; in btrfs_async_run_delayed_root()
1330 trans = btrfs_join_transaction(root); in btrfs_async_run_delayed_root()
1338 block_rsv = trans->block_rsv; in btrfs_async_run_delayed_root()
1339 trans->block_rsv = &root->fs_info->delayed_block_rsv; in btrfs_async_run_delayed_root()
1343 trans->block_rsv = block_rsv; in btrfs_async_run_delayed_root()
1345 btrfs_btree_balance_dirty_nodelay(root->fs_info); in btrfs_async_run_delayed_root()
1351 } while ((async_work->nr == 0 && total_done < BTRFS_DELAYED_WRITEBACK) in btrfs_async_run_delayed_root()
1352 || total_done < async_work->nr); in btrfs_async_run_delayed_root()
1356 wake_up(&delayed_root->wait); in btrfs_async_run_delayed_root()
1368 return -ENOMEM; in btrfs_wq_run_delayed_node()
1370 async_work->delayed_root = delayed_root; in btrfs_wq_run_delayed_node()
1371 btrfs_init_work(&async_work->work, btrfs_async_run_delayed_root, NULL); in btrfs_wq_run_delayed_node()
1372 async_work->nr = nr; in btrfs_wq_run_delayed_node()
1374 btrfs_queue_work(fs_info->delayed_workers, &async_work->work); in btrfs_wq_run_delayed_node()
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()
1388 int val = atomic_read(&delayed_root->items_seq); in could_end_wait()
1393 if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) in could_end_wait()
1401 struct btrfs_delayed_root *delayed_root = fs_info->delayed_root; in btrfs_balance_delayed_items()
1403 if ((atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) || in btrfs_balance_delayed_items()
1404 btrfs_workqueue_normal_congested(fs_info->delayed_workers)) in btrfs_balance_delayed_items()
1407 if (atomic_read(&delayed_root->items) >= BTRFS_DELAYED_WRITEBACK) { in btrfs_balance_delayed_items()
1411 seq = atomic_read(&delayed_root->items_seq); in btrfs_balance_delayed_items()
1417 wait_event_interruptible(delayed_root->wait, in btrfs_balance_delayed_items()
1427 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_release_dir_index_item_space()
1430 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in btrfs_release_dir_index_item_space()
1441 trans->transid, bytes, 0); in btrfs_release_dir_index_item_space()
1442 btrfs_block_rsv_release(fs_info, trans->block_rsv, bytes, NULL); in btrfs_release_dir_index_item_space()
1443 ASSERT(trans->bytes_reserved >= bytes); in btrfs_release_dir_index_item_space()
1444 trans->bytes_reserved -= bytes; in btrfs_release_dir_index_item_space()
1447 /* Will return 0, -ENOMEM or -EEXIST (index number collision, unexpected). */
1454 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_insert_delayed_dir_index()
1471 ret = -ENOMEM; in btrfs_insert_delayed_dir_index()
1475 delayed_item->index = index; in btrfs_insert_delayed_dir_index()
1477 dir_item = (struct btrfs_dir_item *)delayed_item->data; in btrfs_insert_delayed_dir_index()
1478 dir_item->location = *disk_key; in btrfs_insert_delayed_dir_index()
1479 btrfs_set_stack_dir_transid(dir_item, trans->transid); in btrfs_insert_delayed_dir_index()
1485 data_len = delayed_item->data_len + sizeof(struct btrfs_item); in btrfs_insert_delayed_dir_index()
1487 mutex_lock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1491 * handling path simpler in case we fail (-EEXIST). There's no risk of in btrfs_insert_delayed_dir_index()
1494 * delayed node's mutex and that mutex must also be locked before the in btrfs_insert_delayed_dir_index()
1495 * node's delayed items can be run. in btrfs_insert_delayed_dir_index()
1499 btrfs_err(trans->fs_info, in btrfs_insert_delayed_dir_index()
1500 …layed dir index item, name: %.*s, index: %llu, root: %llu, dir: %llu, dir->index_cnt: %llu, delaye… in btrfs_insert_delayed_dir_index()
1501 name_len, name, index, btrfs_root_id(delayed_node->root), in btrfs_insert_delayed_dir_index()
1502 delayed_node->inode_id, dir->index_cnt, in btrfs_insert_delayed_dir_index()
1503 delayed_node->index_cnt, ret); in btrfs_insert_delayed_dir_index()
1506 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1510 if (delayed_node->index_item_leaves == 0 || in btrfs_insert_delayed_dir_index()
1511 delayed_node->curr_index_batch_size + data_len > leaf_data_size) { in btrfs_insert_delayed_dir_index()
1512 delayed_node->curr_index_batch_size = data_len; in btrfs_insert_delayed_dir_index()
1515 delayed_node->curr_index_batch_size += data_len; in btrfs_insert_delayed_dir_index()
1528 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1532 delayed_node->index_item_leaves++; in btrfs_insert_delayed_dir_index()
1536 mutex_unlock(&delayed_node->mutex); in btrfs_insert_delayed_dir_index()
1543 static int 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()
1561 ASSERT(item->bytes_reserved == 0); 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()
1572 const u32 data_len = item->data_len + sizeof(struct btrfs_item); 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 ret = btrfs_delete_delayed_insertion_item(node, index); in btrfs_delete_delayed_dir_index()
1605 item = btrfs_alloc_delayed_item(0, node, BTRFS_DELAYED_DELETION_ITEM); in btrfs_delete_delayed_dir_index()
1607 ret = -ENOMEM; in btrfs_delete_delayed_dir_index()
1611 item->index = index; in btrfs_delete_delayed_dir_index()
1619 btrfs_err(trans->fs_info, in btrfs_delete_delayed_dir_index()
1625 mutex_lock(&node->mutex); in btrfs_delete_delayed_dir_index()
1626 ret = __btrfs_add_delayed_item(node, item); in btrfs_delete_delayed_dir_index()
1628 btrfs_err(trans->fs_info, in btrfs_delete_delayed_dir_index()
1629 …"err add delayed dir index item(index: %llu) into the deletion tree of the delayed node(root id: %… in btrfs_delete_delayed_dir_index()
1630 index, btrfs_root_id(node->root), in btrfs_delete_delayed_dir_index()
1631 node->inode_id, ret); in btrfs_delete_delayed_dir_index()
1632 btrfs_delayed_item_release_metadata(dir->root, item); in btrfs_delete_delayed_dir_index()
1635 mutex_unlock(&node->mutex); in btrfs_delete_delayed_dir_index()
1637 btrfs_release_delayed_node(node); in btrfs_delete_delayed_dir_index()
1646 return -ENOENT; in btrfs_inode_delayed_dir_index_count()
1650 * a new directory index is added into the delayed node and index_cnt in btrfs_inode_delayed_dir_index_count()
1651 * is updated now. So we needn't lock the delayed node. in btrfs_inode_delayed_dir_index_count()
1653 if (!delayed_node->index_cnt) { in btrfs_inode_delayed_dir_index_count()
1655 return -EINVAL; in btrfs_inode_delayed_dir_index_count()
1658 inode->index_cnt = delayed_node->index_cnt; in btrfs_inode_delayed_dir_index_count()
1677 * item->readdir_list. in btrfs_readdir_get_delayed_items()
1682 mutex_lock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1684 while (item && item->index <= last_index) { in btrfs_readdir_get_delayed_items()
1685 refcount_inc(&item->refs); in btrfs_readdir_get_delayed_items()
1686 list_add_tail(&item->readdir_list, ins_list); in btrfs_readdir_get_delayed_items()
1691 while (item && item->index <= last_index) { in btrfs_readdir_get_delayed_items()
1692 refcount_inc(&item->refs); in btrfs_readdir_get_delayed_items()
1693 list_add_tail(&item->readdir_list, del_list); in btrfs_readdir_get_delayed_items()
1696 mutex_unlock(&delayed_node->mutex); in btrfs_readdir_get_delayed_items()
1698 * This delayed node is still cached in the btrfs inode, so refs in btrfs_readdir_get_delayed_items()
1704 * requeue or dequeue this delayed node. in btrfs_readdir_get_delayed_items()
1706 refcount_dec(&delayed_node->refs); in btrfs_readdir_get_delayed_items()
1718 list_del(&curr->readdir_list); in btrfs_readdir_put_delayed_items()
1719 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_put_delayed_items()
1724 list_del(&curr->readdir_list); in btrfs_readdir_put_delayed_items()
1725 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_put_delayed_items()
1733 downgrade_write(&inode->vfs_inode.i_rwsem); in btrfs_readdir_put_delayed_items()
1743 if (curr->index > index) in btrfs_should_delete_dir_index()
1745 if (curr->index == index) { in btrfs_should_delete_dir_index()
1773 list_del(&curr->readdir_list); in btrfs_readdir_delayed_dir_index()
1775 if (curr->index < ctx->pos) { in btrfs_readdir_delayed_dir_index()
1776 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_delayed_dir_index()
1781 ctx->pos = curr->index; in btrfs_readdir_delayed_dir_index()
1783 di = (struct btrfs_dir_item *)curr->data; in btrfs_readdir_delayed_dir_index()
1787 d_type = fs_ftype_to_dtype(btrfs_dir_flags_to_ftype(di->type)); in btrfs_readdir_delayed_dir_index()
1788 btrfs_disk_key_to_cpu(&location, &di->location); in btrfs_readdir_delayed_dir_index()
1793 if (refcount_dec_and_test(&curr->refs)) in btrfs_readdir_delayed_dir_index()
1798 ctx->pos++; in btrfs_readdir_delayed_dir_index()
1807 struct inode *vfs_inode = &inode->vfs_inode; in fill_stack_inode_item()
1812 btrfs_set_stack_inode_size(inode_item, inode->disk_i_size); in fill_stack_inode_item()
1813 btrfs_set_stack_inode_mode(inode_item, vfs_inode->i_mode); in fill_stack_inode_item()
1814 btrfs_set_stack_inode_nlink(inode_item, vfs_inode->i_nlink); in fill_stack_inode_item()
1816 btrfs_set_stack_inode_generation(inode_item, inode->generation); in fill_stack_inode_item()
1819 btrfs_set_stack_inode_transid(inode_item, trans->transid); in fill_stack_inode_item()
1820 btrfs_set_stack_inode_rdev(inode_item, vfs_inode->i_rdev); in fill_stack_inode_item()
1821 flags = btrfs_inode_combine_flags(inode->flags, inode->ro_flags); in fill_stack_inode_item()
1825 btrfs_set_stack_timespec_sec(&inode_item->atime, in fill_stack_inode_item()
1827 btrfs_set_stack_timespec_nsec(&inode_item->atime, in fill_stack_inode_item()
1830 btrfs_set_stack_timespec_sec(&inode_item->mtime, in fill_stack_inode_item()
1832 btrfs_set_stack_timespec_nsec(&inode_item->mtime, in fill_stack_inode_item()
1835 btrfs_set_stack_timespec_sec(&inode_item->ctime, in fill_stack_inode_item()
1837 btrfs_set_stack_timespec_nsec(&inode_item->ctime, in fill_stack_inode_item()
1840 btrfs_set_stack_timespec_sec(&inode_item->otime, inode->i_otime_sec); in fill_stack_inode_item()
1841 btrfs_set_stack_timespec_nsec(&inode_item->otime, inode->i_otime_nsec); in fill_stack_inode_item()
1846 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_fill_inode()
1849 struct inode *vfs_inode = &inode->vfs_inode; in btrfs_fill_inode()
1853 return -ENOENT; in btrfs_fill_inode()
1855 mutex_lock(&delayed_node->mutex); in btrfs_fill_inode()
1856 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_fill_inode()
1857 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1859 return -ENOENT; in btrfs_fill_inode()
1862 inode_item = &delayed_node->inode_item; in btrfs_fill_inode()
1868 round_up(i_size_read(vfs_inode), fs_info->sectorsize)); in btrfs_fill_inode()
1869 vfs_inode->i_mode = btrfs_stack_inode_mode(inode_item); in btrfs_fill_inode()
1872 inode->generation = btrfs_stack_inode_generation(inode_item); in btrfs_fill_inode()
1873 inode->last_trans = btrfs_stack_inode_transid(inode_item); in btrfs_fill_inode()
1876 vfs_inode->i_rdev = 0; in btrfs_fill_inode()
1879 &inode->flags, &inode->ro_flags); in btrfs_fill_inode()
1881 inode_set_atime(vfs_inode, btrfs_stack_timespec_sec(&inode_item->atime), in btrfs_fill_inode()
1882 btrfs_stack_timespec_nsec(&inode_item->atime)); in btrfs_fill_inode()
1884 inode_set_mtime(vfs_inode, btrfs_stack_timespec_sec(&inode_item->mtime), in btrfs_fill_inode()
1885 btrfs_stack_timespec_nsec(&inode_item->mtime)); in btrfs_fill_inode()
1887 inode_set_ctime(vfs_inode, btrfs_stack_timespec_sec(&inode_item->ctime), in btrfs_fill_inode()
1888 btrfs_stack_timespec_nsec(&inode_item->ctime)); in btrfs_fill_inode()
1890 inode->i_otime_sec = btrfs_stack_timespec_sec(&inode_item->otime); in btrfs_fill_inode()
1891 inode->i_otime_nsec = btrfs_stack_timespec_nsec(&inode_item->otime); in btrfs_fill_inode()
1893 vfs_inode->i_generation = inode->generation; in btrfs_fill_inode()
1894 if (S_ISDIR(vfs_inode->i_mode)) in btrfs_fill_inode()
1895 inode->index_cnt = (u64)-1; in btrfs_fill_inode()
1897 mutex_unlock(&delayed_node->mutex); in btrfs_fill_inode()
1905 struct btrfs_root *root = inode->root; in btrfs_delayed_update_inode() local
1913 mutex_lock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1914 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in btrfs_delayed_update_inode()
1915 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1919 ret = btrfs_delayed_inode_reserve_metadata(trans, root, delayed_node); in btrfs_delayed_update_inode()
1923 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); in btrfs_delayed_update_inode()
1924 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); in btrfs_delayed_update_inode()
1925 delayed_node->count++; in btrfs_delayed_update_inode()
1926 atomic_inc(&root->fs_info->delayed_root->items); in btrfs_delayed_update_inode()
1928 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_update_inode()
1935 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_delayed_delete_inode_ref()
1943 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) in btrfs_delayed_delete_inode_ref()
1944 return -EAGAIN; in btrfs_delayed_delete_inode_ref()
1952 * - We ONLY do async inode ref deletion for the inode who has only in btrfs_delayed_delete_inode_ref()
1958 * - If the inode ref and the inode item are not in the same leaf, in btrfs_delayed_delete_inode_ref()
1961 * - At the worst, we can steal some space from the global reservation. in btrfs_delayed_delete_inode_ref()
1964 mutex_lock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1965 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) in btrfs_delayed_delete_inode_ref()
1968 set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); in btrfs_delayed_delete_inode_ref()
1969 delayed_node->count++; in btrfs_delayed_delete_inode_ref()
1970 atomic_inc(&fs_info->delayed_root->items); in btrfs_delayed_delete_inode_ref()
1972 mutex_unlock(&delayed_node->mutex); in btrfs_delayed_delete_inode_ref()
1979 struct btrfs_root *root = delayed_node->root; in __btrfs_kill_delayed_node() local
1980 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_kill_delayed_node()
1983 mutex_lock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
1991 if (delayed_node->index_item_leaves > 0) { in __btrfs_kill_delayed_node()
1993 delayed_node->index_item_leaves); in __btrfs_kill_delayed_node()
1994 delayed_node->index_item_leaves = 0; in __btrfs_kill_delayed_node()
1999 btrfs_delayed_item_release_metadata(root, curr_item); in __btrfs_kill_delayed_node()
2007 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { in __btrfs_kill_delayed_node()
2011 mutex_unlock(&delayed_node->mutex); in __btrfs_kill_delayed_node()
2026 void btrfs_kill_all_delayed_nodes(struct btrfs_root *root) in btrfs_kill_all_delayed_nodes() argument
2032 struct btrfs_delayed_node *node; in btrfs_kill_all_delayed_nodes() local
2035 xa_lock(&root->delayed_nodes); in btrfs_kill_all_delayed_nodes()
2036 if (xa_empty(&root->delayed_nodes)) { in btrfs_kill_all_delayed_nodes()
2037 xa_unlock(&root->delayed_nodes); in btrfs_kill_all_delayed_nodes()
2042 xa_for_each_start(&root->delayed_nodes, index, node, index) { in btrfs_kill_all_delayed_nodes()
2044 * Don't increase refs in case the node is dead and 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()
2054 xa_unlock(&root->delayed_nodes); in btrfs_kill_all_delayed_nodes()
2068 curr_node = btrfs_first_delayed_node(fs_info->delayed_root); in btrfs_destroy_delayed_inodes()
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()
2115 if (!item->logged && list_empty(&item->log_list)) { in btrfs_log_get_delayed_items()
2116 refcount_inc(&item->refs); in btrfs_log_get_delayed_items()
2117 list_add_tail(&item->log_list, ins_list); in btrfs_log_get_delayed_items()
2122 item = __btrfs_first_delayed_deletion_item(node); in btrfs_log_get_delayed_items()
2124 /* It may be non-empty, for the same reason mentioned above. */ in btrfs_log_get_delayed_items()
2125 if (!item->logged && list_empty(&item->log_list)) { in btrfs_log_get_delayed_items()
2126 refcount_inc(&item->refs); in btrfs_log_get_delayed_items()
2127 list_add_tail(&item->log_list, del_list); 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()
2161 item->logged = true; in btrfs_log_put_delayed_items()
2162 list_del_init(&item->log_list); in btrfs_log_put_delayed_items()
2163 if (refcount_dec_and_test(&item->refs)) in btrfs_log_put_delayed_items()
2168 item->logged = true; in btrfs_log_put_delayed_items()
2169 list_del_init(&item->log_list); in btrfs_log_put_delayed_items()
2170 if (refcount_dec_and_test(&item->refs)) 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()