Lines Matching refs:entry
26 static u64 entry_end(struct btrfs_ordered_extent *entry) in entry_end() argument
28 if (entry->file_offset + entry->num_bytes < entry->file_offset) in entry_end()
30 return entry->file_offset + entry->num_bytes; in entry_end()
41 struct btrfs_ordered_extent *entry; in tree_insert() local
45 entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node); in tree_insert()
47 if (file_offset < entry->file_offset) in tree_insert()
49 else if (file_offset >= entry_end(entry)) in tree_insert()
70 struct btrfs_ordered_extent *entry; in __tree_search() local
74 entry = rb_entry(n, struct btrfs_ordered_extent, rb_node); in __tree_search()
76 prev_entry = entry; in __tree_search()
78 if (file_offset < entry->file_offset) in __tree_search()
80 else if (file_offset >= entry_end(entry)) in __tree_search()
114 static int btrfs_range_overlaps(struct btrfs_ordered_extent *entry, u64 file_offset, in btrfs_range_overlaps() argument
117 if (file_offset + len <= entry->file_offset || in btrfs_range_overlaps()
118 entry->file_offset + entry->num_bytes <= file_offset) in btrfs_range_overlaps()
132 struct btrfs_ordered_extent *entry; in ordered_tree_search() local
135 entry = rb_entry(inode->ordered_tree_last, struct btrfs_ordered_extent, in ordered_tree_search()
137 if (in_range(file_offset, entry->file_offset, entry->num_bytes)) in ordered_tree_search()
153 struct btrfs_ordered_extent *entry; in alloc_ordered_extent() local
175 entry = kmem_cache_zalloc(btrfs_ordered_extent_cache, GFP_NOFS); in alloc_ordered_extent()
176 if (!entry) { in alloc_ordered_extent()
177 entry = ERR_PTR(-ENOMEM); in alloc_ordered_extent()
181 entry->file_offset = file_offset; in alloc_ordered_extent()
182 entry->num_bytes = num_bytes; in alloc_ordered_extent()
183 entry->ram_bytes = ram_bytes; in alloc_ordered_extent()
184 entry->disk_bytenr = disk_bytenr; in alloc_ordered_extent()
185 entry->disk_num_bytes = disk_num_bytes; in alloc_ordered_extent()
186 entry->offset = offset; in alloc_ordered_extent()
187 entry->bytes_left = num_bytes; in alloc_ordered_extent()
189 kmem_cache_free(btrfs_ordered_extent_cache, entry); in alloc_ordered_extent()
190 entry = ERR_PTR(-ESTALE); in alloc_ordered_extent()
193 entry->inode = inode; in alloc_ordered_extent()
194 entry->compress_type = compress_type; in alloc_ordered_extent()
195 entry->truncated_len = (u64)-1; in alloc_ordered_extent()
196 entry->qgroup_rsv = qgroup_rsv; in alloc_ordered_extent()
197 entry->flags = flags; in alloc_ordered_extent()
198 refcount_set(&entry->refs, 1); in alloc_ordered_extent()
199 init_waitqueue_head(&entry->wait); in alloc_ordered_extent()
200 INIT_LIST_HEAD(&entry->list); in alloc_ordered_extent()
201 INIT_LIST_HEAD(&entry->log_list); in alloc_ordered_extent()
202 INIT_LIST_HEAD(&entry->root_extent_list); in alloc_ordered_extent()
203 INIT_LIST_HEAD(&entry->work_list); in alloc_ordered_extent()
204 INIT_LIST_HEAD(&entry->bioc_list); in alloc_ordered_extent()
205 init_completion(&entry->completion); in alloc_ordered_extent()
217 if (IS_ERR(entry) && !is_nocow) in alloc_ordered_extent()
222 return entry; in alloc_ordered_extent()
225 static void insert_ordered_extent(struct btrfs_ordered_extent *entry) in insert_ordered_extent() argument
227 struct btrfs_inode *inode = entry->inode; in insert_ordered_extent()
232 trace_btrfs_ordered_extent_add(inode, entry); in insert_ordered_extent()
234 percpu_counter_add_batch(&fs_info->ordered_bytes, entry->num_bytes, in insert_ordered_extent()
238 refcount_inc(&entry->refs); in insert_ordered_extent()
241 node = tree_insert(&inode->ordered_tree, entry->file_offset, in insert_ordered_extent()
242 &entry->rb_node); in insert_ordered_extent()
246 entry->file_offset); in insert_ordered_extent()
250 list_add_tail(&entry->root_extent_list, in insert_ordered_extent()
285 struct btrfs_ordered_extent *entry; in btrfs_alloc_ordered_extent() local
302 entry = alloc_ordered_extent(inode, file_offset, in btrfs_alloc_ordered_extent()
309 entry = alloc_ordered_extent(inode, file_offset, in btrfs_alloc_ordered_extent()
316 if (!IS_ERR(entry)) in btrfs_alloc_ordered_extent()
317 insert_ordered_extent(entry); in btrfs_alloc_ordered_extent()
318 return entry; in btrfs_alloc_ordered_extent()
326 void btrfs_add_ordered_sum(struct btrfs_ordered_extent *entry, in btrfs_add_ordered_sum() argument
329 struct btrfs_inode *inode = entry->inode; in btrfs_add_ordered_sum()
332 list_add_tail(&sum->list, &entry->list); in btrfs_add_ordered_sum()
483 struct btrfs_ordered_extent *entry = NULL; in btrfs_mark_ordered_io_finished() local
502 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_mark_ordered_io_finished()
503 entry_end = entry->file_offset + entry->num_bytes; in btrfs_mark_ordered_io_finished()
514 entry = rb_entry(node, struct btrfs_ordered_extent, in btrfs_mark_ordered_io_finished()
518 cur = entry->file_offset; in btrfs_mark_ordered_io_finished()
526 if (cur < entry->file_offset) { in btrfs_mark_ordered_io_finished()
527 cur = entry->file_offset; in btrfs_mark_ordered_io_finished()
538 end = min(entry->file_offset + entry->num_bytes, in btrfs_mark_ordered_io_finished()
543 if (can_finish_ordered_extent(entry, folio, cur, len, uptodate)) { in btrfs_mark_ordered_io_finished()
545 btrfs_queue_ordered_fn(entry); in btrfs_mark_ordered_io_finished()
575 struct btrfs_ordered_extent *entry = NULL; in btrfs_dec_test_ordered_pending() local
581 entry = *cached; in btrfs_dec_test_ordered_pending()
589 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_dec_test_ordered_pending()
591 if (!in_range(file_offset, entry->file_offset, entry->num_bytes)) in btrfs_dec_test_ordered_pending()
594 if (io_size > entry->bytes_left) in btrfs_dec_test_ordered_pending()
597 entry->bytes_left, io_size); in btrfs_dec_test_ordered_pending()
599 entry->bytes_left -= io_size; in btrfs_dec_test_ordered_pending()
601 if (entry->bytes_left == 0) { in btrfs_dec_test_ordered_pending()
606 finished = !test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_dec_test_ordered_pending()
608 cond_wake_up_nomb(&entry->wait); in btrfs_dec_test_ordered_pending()
611 if (finished && cached && entry) { in btrfs_dec_test_ordered_pending()
612 *cached = entry; in btrfs_dec_test_ordered_pending()
613 refcount_inc(&entry->refs); in btrfs_dec_test_ordered_pending()
614 trace_btrfs_ordered_extent_dec_test_pending(inode, entry); in btrfs_dec_test_ordered_pending()
624 void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry) in btrfs_put_ordered_extent() argument
626 trace_btrfs_ordered_extent_put(entry->inode, entry); in btrfs_put_ordered_extent()
628 if (refcount_dec_and_test(&entry->refs)) { in btrfs_put_ordered_extent()
632 ASSERT(list_empty(&entry->root_extent_list)); in btrfs_put_ordered_extent()
633 ASSERT(list_empty(&entry->log_list)); in btrfs_put_ordered_extent()
634 ASSERT(RB_EMPTY_NODE(&entry->rb_node)); in btrfs_put_ordered_extent()
635 btrfs_add_delayed_iput(entry->inode); in btrfs_put_ordered_extent()
636 list_for_each_entry_safe(sum, tmp, &entry->list, list) in btrfs_put_ordered_extent()
638 kmem_cache_free(btrfs_ordered_extent_cache, entry); in btrfs_put_ordered_extent()
647 struct btrfs_ordered_extent *entry) in btrfs_remove_ordered_extent() argument
669 if (test_bit(BTRFS_ORDERED_ENCODED, &entry->flags)) in btrfs_remove_ordered_extent()
670 release = entry->disk_num_bytes; in btrfs_remove_ordered_extent()
672 release = entry->num_bytes; in btrfs_remove_ordered_extent()
675 &entry->flags)); in btrfs_remove_ordered_extent()
678 percpu_counter_add_batch(&fs_info->ordered_bytes, -entry->num_bytes, in btrfs_remove_ordered_extent()
682 node = &entry->rb_node; in btrfs_remove_ordered_extent()
687 set_bit(BTRFS_ORDERED_COMPLETE, &entry->flags); in btrfs_remove_ordered_extent()
688 pending = test_and_clear_bit(BTRFS_ORDERED_PENDING, &entry->flags); in btrfs_remove_ordered_extent()
721 list_del_init(&entry->root_extent_list); in btrfs_remove_ordered_extent()
724 trace_btrfs_ordered_extent_remove(btrfs_inode, entry); in btrfs_remove_ordered_extent()
733 wake_up(&entry->wait); in btrfs_remove_ordered_extent()
860 void btrfs_start_ordered_extent_nowriteback(struct btrfs_ordered_extent *entry, in btrfs_start_ordered_extent_nowriteback() argument
863 u64 start = entry->file_offset; in btrfs_start_ordered_extent_nowriteback()
864 u64 end = start + entry->num_bytes - 1; in btrfs_start_ordered_extent_nowriteback()
865 struct btrfs_inode *inode = entry->inode; in btrfs_start_ordered_extent_nowriteback()
868 trace_btrfs_ordered_extent_start(inode, entry); in btrfs_start_ordered_extent_nowriteback()
881 if (!test_bit(BTRFS_ORDERED_DIRECT, &entry->flags)) { in btrfs_start_ordered_extent_nowriteback()
897 wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE, &entry->flags)); in btrfs_start_ordered_extent_nowriteback()
973 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_extent() local
981 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_extent()
982 if (!in_range(file_offset, entry->file_offset, entry->num_bytes)) in btrfs_lookup_ordered_extent()
983 entry = NULL; in btrfs_lookup_ordered_extent()
984 if (entry) { in btrfs_lookup_ordered_extent()
985 refcount_inc(&entry->refs); in btrfs_lookup_ordered_extent()
986 trace_btrfs_ordered_extent_lookup(inode, entry); in btrfs_lookup_ordered_extent()
990 return entry; in btrfs_lookup_ordered_extent()
1000 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_range() local
1011 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_range()
1012 if (btrfs_range_overlaps(entry, file_offset, len)) in btrfs_lookup_ordered_range()
1015 if (entry->file_offset >= file_offset + len) { in btrfs_lookup_ordered_range()
1016 entry = NULL; in btrfs_lookup_ordered_range()
1019 entry = NULL; in btrfs_lookup_ordered_range()
1025 if (entry) { in btrfs_lookup_ordered_range()
1026 refcount_inc(&entry->refs); in btrfs_lookup_ordered_range()
1027 trace_btrfs_ordered_extent_lookup_range(inode, entry); in btrfs_lookup_ordered_range()
1030 return entry; in btrfs_lookup_ordered_range()
1069 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_first_ordered_extent() local
1076 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_extent()
1077 refcount_inc(&entry->refs); in btrfs_lookup_first_ordered_extent()
1078 trace_btrfs_ordered_extent_lookup_first(inode, entry); in btrfs_lookup_first_ordered_extent()
1081 return entry; in btrfs_lookup_first_ordered_extent()
1100 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_first_ordered_range() local
1111 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_range()
1113 if (file_offset < entry->file_offset) { in btrfs_lookup_first_ordered_range()
1115 } else if (file_offset >= entry_end(entry)) { in btrfs_lookup_first_ordered_range()
1125 if (!entry) { in btrfs_lookup_first_ordered_range()
1130 cur = &entry->rb_node; in btrfs_lookup_first_ordered_range()
1132 if (entry->file_offset < file_offset) { in btrfs_lookup_first_ordered_range()
1140 entry = rb_entry(prev, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_range()
1141 if (btrfs_range_overlaps(entry, file_offset, len)) in btrfs_lookup_first_ordered_range()
1145 entry = rb_entry(next, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_range()
1146 if (btrfs_range_overlaps(entry, file_offset, len)) in btrfs_lookup_first_ordered_range()
1150 entry = NULL; in btrfs_lookup_first_ordered_range()
1152 if (entry) { in btrfs_lookup_first_ordered_range()
1153 refcount_inc(&entry->refs); in btrfs_lookup_first_ordered_range()
1154 trace_btrfs_ordered_extent_lookup_first_range(inode, entry); in btrfs_lookup_first_ordered_range()
1158 return entry; in btrfs_lookup_first_ordered_range()