Lines Matching refs:entry

31 static u64 entry_end(struct btrfs_ordered_extent *entry)  in entry_end()  argument
33 if (entry->file_offset + entry->len < entry->file_offset) in entry_end()
35 return entry->file_offset + entry->len; in entry_end()
46 struct btrfs_ordered_extent *entry; in tree_insert() local
50 entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node); in tree_insert()
52 if (file_offset < entry->file_offset) in tree_insert()
54 else if (file_offset >= entry_end(entry)) in tree_insert()
83 struct btrfs_ordered_extent *entry; in __tree_search() local
87 entry = rb_entry(n, struct btrfs_ordered_extent, rb_node); in __tree_search()
89 prev_entry = entry; in __tree_search()
91 if (file_offset < entry->file_offset) in __tree_search()
93 else if (file_offset >= entry_end(entry)) in __tree_search()
130 static int offset_in_entry(struct btrfs_ordered_extent *entry, u64 file_offset) in offset_in_entry() argument
132 if (file_offset < entry->file_offset || in offset_in_entry()
133 entry->file_offset + entry->len <= file_offset) in offset_in_entry()
138 static int range_overlaps(struct btrfs_ordered_extent *entry, u64 file_offset, in range_overlaps() argument
141 if (file_offset + len <= entry->file_offset || in range_overlaps()
142 entry->file_offset + entry->len <= file_offset) in range_overlaps()
157 struct btrfs_ordered_extent *entry; in tree_search() local
160 entry = rb_entry(tree->last, struct btrfs_ordered_extent, in tree_search()
162 if (offset_in_entry(entry, file_offset)) in tree_search()
191 struct btrfs_ordered_extent *entry; in __btrfs_add_ordered_extent() local
194 entry = kmem_cache_zalloc(btrfs_ordered_extent_cache, GFP_NOFS); in __btrfs_add_ordered_extent()
195 if (!entry) in __btrfs_add_ordered_extent()
198 entry->file_offset = file_offset; in __btrfs_add_ordered_extent()
199 entry->start = start; in __btrfs_add_ordered_extent()
200 entry->len = len; in __btrfs_add_ordered_extent()
201 entry->disk_len = disk_len; in __btrfs_add_ordered_extent()
202 entry->bytes_left = len; in __btrfs_add_ordered_extent()
203 entry->inode = igrab(inode); in __btrfs_add_ordered_extent()
204 entry->compress_type = compress_type; in __btrfs_add_ordered_extent()
205 entry->truncated_len = (u64)-1; in __btrfs_add_ordered_extent()
207 set_bit(type, &entry->flags); in __btrfs_add_ordered_extent()
210 set_bit(BTRFS_ORDERED_DIRECT, &entry->flags); in __btrfs_add_ordered_extent()
213 atomic_set(&entry->refs, 1); in __btrfs_add_ordered_extent()
214 init_waitqueue_head(&entry->wait); in __btrfs_add_ordered_extent()
215 INIT_LIST_HEAD(&entry->list); in __btrfs_add_ordered_extent()
216 INIT_LIST_HEAD(&entry->root_extent_list); in __btrfs_add_ordered_extent()
217 INIT_LIST_HEAD(&entry->work_list); in __btrfs_add_ordered_extent()
218 init_completion(&entry->completion); in __btrfs_add_ordered_extent()
219 INIT_LIST_HEAD(&entry->log_list); in __btrfs_add_ordered_extent()
220 INIT_LIST_HEAD(&entry->trans_list); in __btrfs_add_ordered_extent()
222 trace_btrfs_ordered_extent_add(inode, entry); in __btrfs_add_ordered_extent()
226 &entry->rb_node); in __btrfs_add_ordered_extent()
232 list_add_tail(&entry->root_extent_list, in __btrfs_add_ordered_extent()
278 struct btrfs_ordered_extent *entry, in btrfs_add_ordered_sum() argument
285 list_add_tail(&sum->list, &entry->list); in btrfs_add_ordered_sum()
307 struct btrfs_ordered_extent *entry = NULL; in btrfs_dec_test_first_ordered_pending() local
322 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_dec_test_first_ordered_pending()
323 if (!offset_in_entry(entry, *file_offset)) { in btrfs_dec_test_first_ordered_pending()
328 dec_start = max(*file_offset, entry->file_offset); in btrfs_dec_test_first_ordered_pending()
329 dec_end = min(*file_offset + io_size, entry->file_offset + in btrfs_dec_test_first_ordered_pending()
330 entry->len); in btrfs_dec_test_first_ordered_pending()
337 if (to_dec > entry->bytes_left) { in btrfs_dec_test_first_ordered_pending()
340 entry->bytes_left, to_dec); in btrfs_dec_test_first_ordered_pending()
342 entry->bytes_left -= to_dec; in btrfs_dec_test_first_ordered_pending()
344 set_bit(BTRFS_ORDERED_IOERR, &entry->flags); in btrfs_dec_test_first_ordered_pending()
346 if (entry->bytes_left == 0) { in btrfs_dec_test_first_ordered_pending()
347 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_dec_test_first_ordered_pending()
351 if (waitqueue_active(&entry->wait)) in btrfs_dec_test_first_ordered_pending()
352 wake_up(&entry->wait); in btrfs_dec_test_first_ordered_pending()
357 if (!ret && cached && entry) { in btrfs_dec_test_first_ordered_pending()
358 *cached = entry; in btrfs_dec_test_first_ordered_pending()
359 atomic_inc(&entry->refs); in btrfs_dec_test_first_ordered_pending()
380 struct btrfs_ordered_extent *entry = NULL; in btrfs_dec_test_ordered_pending() local
387 entry = *cached; in btrfs_dec_test_ordered_pending()
397 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_dec_test_ordered_pending()
399 if (!offset_in_entry(entry, file_offset)) { in btrfs_dec_test_ordered_pending()
404 if (io_size > entry->bytes_left) { in btrfs_dec_test_ordered_pending()
407 entry->bytes_left, io_size); in btrfs_dec_test_ordered_pending()
409 entry->bytes_left -= io_size; in btrfs_dec_test_ordered_pending()
411 set_bit(BTRFS_ORDERED_IOERR, &entry->flags); in btrfs_dec_test_ordered_pending()
413 if (entry->bytes_left == 0) { in btrfs_dec_test_ordered_pending()
414 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_dec_test_ordered_pending()
418 if (waitqueue_active(&entry->wait)) in btrfs_dec_test_ordered_pending()
419 wake_up(&entry->wait); in btrfs_dec_test_ordered_pending()
424 if (!ret && cached && entry) { in btrfs_dec_test_ordered_pending()
425 *cached = entry; in btrfs_dec_test_ordered_pending()
426 atomic_inc(&entry->refs); in btrfs_dec_test_ordered_pending()
559 void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry) in btrfs_put_ordered_extent() argument
564 trace_btrfs_ordered_extent_put(entry->inode, entry); in btrfs_put_ordered_extent()
566 if (atomic_dec_and_test(&entry->refs)) { in btrfs_put_ordered_extent()
567 ASSERT(list_empty(&entry->log_list)); in btrfs_put_ordered_extent()
568 ASSERT(list_empty(&entry->trans_list)); in btrfs_put_ordered_extent()
569 ASSERT(list_empty(&entry->root_extent_list)); in btrfs_put_ordered_extent()
570 ASSERT(RB_EMPTY_NODE(&entry->rb_node)); in btrfs_put_ordered_extent()
571 if (entry->inode) in btrfs_put_ordered_extent()
572 btrfs_add_delayed_iput(entry->inode); in btrfs_put_ordered_extent()
573 while (!list_empty(&entry->list)) { in btrfs_put_ordered_extent()
574 cur = entry->list.next; in btrfs_put_ordered_extent()
579 kmem_cache_free(btrfs_ordered_extent_cache, entry); in btrfs_put_ordered_extent()
588 struct btrfs_ordered_extent *entry) in btrfs_remove_ordered_extent() argument
597 node = &entry->rb_node; in btrfs_remove_ordered_extent()
602 set_bit(BTRFS_ORDERED_COMPLETE, &entry->flags); in btrfs_remove_ordered_extent()
603 if (test_and_clear_bit(BTRFS_ORDERED_PENDING, &entry->flags)) in btrfs_remove_ordered_extent()
635 list_del_init(&entry->root_extent_list); in btrfs_remove_ordered_extent()
638 trace_btrfs_ordered_extent_remove(inode, entry); in btrfs_remove_ordered_extent()
647 wake_up(&entry->wait); in btrfs_remove_ordered_extent()
752 struct btrfs_ordered_extent *entry, in btrfs_start_ordered_extent() argument
755 u64 start = entry->file_offset; in btrfs_start_ordered_extent()
756 u64 end = start + entry->len - 1; in btrfs_start_ordered_extent()
758 trace_btrfs_ordered_extent_start(inode, entry); in btrfs_start_ordered_extent()
765 if (!test_bit(BTRFS_ORDERED_DIRECT, &entry->flags)) in btrfs_start_ordered_extent()
768 wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE, in btrfs_start_ordered_extent()
769 &entry->flags)); in btrfs_start_ordered_extent()
842 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_extent() local
850 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_extent()
851 if (!offset_in_entry(entry, file_offset)) in btrfs_lookup_ordered_extent()
852 entry = NULL; in btrfs_lookup_ordered_extent()
853 if (entry) in btrfs_lookup_ordered_extent()
854 atomic_inc(&entry->refs); in btrfs_lookup_ordered_extent()
857 return entry; in btrfs_lookup_ordered_extent()
869 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_range() local
881 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_range()
882 if (range_overlaps(entry, file_offset, len)) in btrfs_lookup_ordered_range()
885 if (entry->file_offset >= file_offset + len) { in btrfs_lookup_ordered_range()
886 entry = NULL; in btrfs_lookup_ordered_range()
889 entry = NULL; in btrfs_lookup_ordered_range()
895 if (entry) in btrfs_lookup_ordered_range()
896 atomic_inc(&entry->refs); in btrfs_lookup_ordered_range()
898 return entry; in btrfs_lookup_ordered_range()
924 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_first_ordered_extent() local
932 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_extent()
933 atomic_inc(&entry->refs); in btrfs_lookup_first_ordered_extent()
936 return entry; in btrfs_lookup_first_ordered_extent()