Lines Matching refs:entry

23 static u64 entry_end(struct btrfs_ordered_extent *entry)  in entry_end()  argument
25 if (entry->file_offset + entry->num_bytes < entry->file_offset) in entry_end()
27 return entry->file_offset + entry->num_bytes; in entry_end()
38 struct btrfs_ordered_extent *entry; in tree_insert() local
42 entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node); in tree_insert()
44 if (file_offset < entry->file_offset) in tree_insert()
46 else if (file_offset >= entry_end(entry)) in tree_insert()
67 struct btrfs_ordered_extent *entry; in __tree_search() local
71 entry = rb_entry(n, struct btrfs_ordered_extent, rb_node); in __tree_search()
73 prev_entry = entry; in __tree_search()
75 if (file_offset < entry->file_offset) in __tree_search()
77 else if (file_offset >= entry_end(entry)) in __tree_search()
111 static int range_overlaps(struct btrfs_ordered_extent *entry, u64 file_offset, in range_overlaps() argument
114 if (file_offset + len <= entry->file_offset || in range_overlaps()
115 entry->file_offset + entry->num_bytes <= file_offset) in range_overlaps()
130 struct btrfs_ordered_extent *entry; in tree_search() local
133 entry = rb_entry(tree->last, struct btrfs_ordered_extent, in tree_search()
135 if (in_range(file_offset, entry->file_offset, entry->num_bytes)) in tree_search()
173 struct btrfs_ordered_extent *entry; in btrfs_add_ordered_extent() local
192 entry = kmem_cache_zalloc(btrfs_ordered_extent_cache, GFP_NOFS); in btrfs_add_ordered_extent()
193 if (!entry) in btrfs_add_ordered_extent()
196 entry->file_offset = file_offset; in btrfs_add_ordered_extent()
197 entry->num_bytes = num_bytes; in btrfs_add_ordered_extent()
198 entry->ram_bytes = ram_bytes; in btrfs_add_ordered_extent()
199 entry->disk_bytenr = disk_bytenr; in btrfs_add_ordered_extent()
200 entry->disk_num_bytes = disk_num_bytes; in btrfs_add_ordered_extent()
201 entry->offset = offset; in btrfs_add_ordered_extent()
202 entry->bytes_left = num_bytes; in btrfs_add_ordered_extent()
203 entry->inode = igrab(&inode->vfs_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()
206 entry->qgroup_rsv = ret; in btrfs_add_ordered_extent()
207 entry->physical = (u64)-1; in btrfs_add_ordered_extent()
210 entry->flags = flags; in btrfs_add_ordered_extent()
216 refcount_set(&entry->refs, 1); in btrfs_add_ordered_extent()
217 init_waitqueue_head(&entry->wait); in btrfs_add_ordered_extent()
218 INIT_LIST_HEAD(&entry->list); in btrfs_add_ordered_extent()
219 INIT_LIST_HEAD(&entry->log_list); in btrfs_add_ordered_extent()
220 INIT_LIST_HEAD(&entry->root_extent_list); in btrfs_add_ordered_extent()
221 INIT_LIST_HEAD(&entry->work_list); in btrfs_add_ordered_extent()
222 init_completion(&entry->completion); in btrfs_add_ordered_extent()
224 trace_btrfs_ordered_extent_add(inode, entry); in btrfs_add_ordered_extent()
228 &entry->rb_node); in btrfs_add_ordered_extent()
236 list_add_tail(&entry->root_extent_list, in btrfs_add_ordered_extent()
264 void btrfs_add_ordered_sum(struct btrfs_ordered_extent *entry, in btrfs_add_ordered_sum() argument
269 tree = &BTRFS_I(entry->inode)->ordered_tree; in btrfs_add_ordered_sum()
271 list_add_tail(&sum->list, &entry->list); in btrfs_add_ordered_sum()
304 struct btrfs_ordered_extent *entry = NULL; in btrfs_mark_ordered_io_finished() local
328 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_mark_ordered_io_finished()
329 entry_end = entry->file_offset + entry->num_bytes; in btrfs_mark_ordered_io_finished()
340 entry = rb_entry(node, struct btrfs_ordered_extent, in btrfs_mark_ordered_io_finished()
344 cur = entry->file_offset; in btrfs_mark_ordered_io_finished()
352 if (cur < entry->file_offset) { in btrfs_mark_ordered_io_finished()
353 cur = entry->file_offset; in btrfs_mark_ordered_io_finished()
364 end = min(entry->file_offset + entry->num_bytes, in btrfs_mark_ordered_io_finished()
384 if (unlikely(len > entry->bytes_left)) { in btrfs_mark_ordered_io_finished()
390 entry->file_offset, in btrfs_mark_ordered_io_finished()
391 entry->num_bytes, in btrfs_mark_ordered_io_finished()
392 len, entry->bytes_left); in btrfs_mark_ordered_io_finished()
393 entry->bytes_left = 0; in btrfs_mark_ordered_io_finished()
395 entry->bytes_left -= len; in btrfs_mark_ordered_io_finished()
399 set_bit(BTRFS_ORDERED_IOERR, &entry->flags); in btrfs_mark_ordered_io_finished()
405 if (entry->bytes_left == 0) { in btrfs_mark_ordered_io_finished()
406 set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_mark_ordered_io_finished()
407 cond_wake_up(&entry->wait); in btrfs_mark_ordered_io_finished()
408 refcount_inc(&entry->refs); in btrfs_mark_ordered_io_finished()
409 trace_btrfs_ordered_extent_mark_finished(inode, entry); in btrfs_mark_ordered_io_finished()
411 btrfs_init_work(&entry->work, finish_ordered_fn, NULL, NULL); in btrfs_mark_ordered_io_finished()
412 btrfs_queue_work(wq, &entry->work); in btrfs_mark_ordered_io_finished()
443 struct btrfs_ordered_extent *entry = NULL; in btrfs_dec_test_ordered_pending() local
449 entry = *cached; in btrfs_dec_test_ordered_pending()
457 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_dec_test_ordered_pending()
459 if (!in_range(file_offset, entry->file_offset, entry->num_bytes)) in btrfs_dec_test_ordered_pending()
462 if (io_size > entry->bytes_left) in btrfs_dec_test_ordered_pending()
465 entry->bytes_left, io_size); in btrfs_dec_test_ordered_pending()
467 entry->bytes_left -= io_size; in btrfs_dec_test_ordered_pending()
469 if (entry->bytes_left == 0) { in btrfs_dec_test_ordered_pending()
474 finished = !test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_dec_test_ordered_pending()
476 cond_wake_up_nomb(&entry->wait); in btrfs_dec_test_ordered_pending()
479 if (finished && cached && entry) { in btrfs_dec_test_ordered_pending()
480 *cached = entry; in btrfs_dec_test_ordered_pending()
481 refcount_inc(&entry->refs); in btrfs_dec_test_ordered_pending()
482 trace_btrfs_ordered_extent_dec_test_pending(inode, entry); in btrfs_dec_test_ordered_pending()
492 void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry) in btrfs_put_ordered_extent() argument
497 trace_btrfs_ordered_extent_put(BTRFS_I(entry->inode), entry); in btrfs_put_ordered_extent()
499 if (refcount_dec_and_test(&entry->refs)) { in btrfs_put_ordered_extent()
500 ASSERT(list_empty(&entry->root_extent_list)); in btrfs_put_ordered_extent()
501 ASSERT(list_empty(&entry->log_list)); in btrfs_put_ordered_extent()
502 ASSERT(RB_EMPTY_NODE(&entry->rb_node)); in btrfs_put_ordered_extent()
503 if (entry->inode) in btrfs_put_ordered_extent()
504 btrfs_add_delayed_iput(entry->inode); in btrfs_put_ordered_extent()
505 while (!list_empty(&entry->list)) { in btrfs_put_ordered_extent()
506 cur = entry->list.next; in btrfs_put_ordered_extent()
511 kmem_cache_free(btrfs_ordered_extent_cache, entry); in btrfs_put_ordered_extent()
520 struct btrfs_ordered_extent *entry) in btrfs_remove_ordered_extent() argument
543 if (test_bit(BTRFS_ORDERED_ENCODED, &entry->flags)) in btrfs_remove_ordered_extent()
544 release = entry->disk_num_bytes; in btrfs_remove_ordered_extent()
546 release = entry->num_bytes; in btrfs_remove_ordered_extent()
550 percpu_counter_add_batch(&fs_info->ordered_bytes, -entry->num_bytes, in btrfs_remove_ordered_extent()
555 node = &entry->rb_node; in btrfs_remove_ordered_extent()
560 set_bit(BTRFS_ORDERED_COMPLETE, &entry->flags); in btrfs_remove_ordered_extent()
561 pending = test_and_clear_bit(BTRFS_ORDERED_PENDING, &entry->flags); in btrfs_remove_ordered_extent()
594 list_del_init(&entry->root_extent_list); in btrfs_remove_ordered_extent()
597 trace_btrfs_ordered_extent_remove(btrfs_inode, entry); in btrfs_remove_ordered_extent()
606 wake_up(&entry->wait); in btrfs_remove_ordered_extent()
722 void btrfs_start_ordered_extent(struct btrfs_ordered_extent *entry, int wait) in btrfs_start_ordered_extent() argument
724 u64 start = entry->file_offset; in btrfs_start_ordered_extent()
725 u64 end = start + entry->num_bytes - 1; in btrfs_start_ordered_extent()
726 struct btrfs_inode *inode = BTRFS_I(entry->inode); in btrfs_start_ordered_extent()
729 trace_btrfs_ordered_extent_start(inode, entry); in btrfs_start_ordered_extent()
742 if (!test_bit(BTRFS_ORDERED_DIRECT, &entry->flags)) in btrfs_start_ordered_extent()
747 wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE, in btrfs_start_ordered_extent()
748 &entry->flags)); in btrfs_start_ordered_extent()
826 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_extent() local
835 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_extent()
836 if (!in_range(file_offset, entry->file_offset, entry->num_bytes)) in btrfs_lookup_ordered_extent()
837 entry = NULL; in btrfs_lookup_ordered_extent()
838 if (entry) { in btrfs_lookup_ordered_extent()
839 refcount_inc(&entry->refs); in btrfs_lookup_ordered_extent()
840 trace_btrfs_ordered_extent_lookup(inode, entry); in btrfs_lookup_ordered_extent()
844 return entry; in btrfs_lookup_ordered_extent()
855 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_range() local
867 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_range()
868 if (range_overlaps(entry, file_offset, len)) in btrfs_lookup_ordered_range()
871 if (entry->file_offset >= file_offset + len) { in btrfs_lookup_ordered_range()
872 entry = NULL; in btrfs_lookup_ordered_range()
875 entry = NULL; in btrfs_lookup_ordered_range()
881 if (entry) { in btrfs_lookup_ordered_range()
882 refcount_inc(&entry->refs); in btrfs_lookup_ordered_range()
883 trace_btrfs_ordered_extent_lookup_range(inode, entry); in btrfs_lookup_ordered_range()
886 return entry; in btrfs_lookup_ordered_range()
927 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_first_ordered_extent() local
935 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_extent()
936 refcount_inc(&entry->refs); in btrfs_lookup_first_ordered_extent()
937 trace_btrfs_ordered_extent_lookup_first(inode, entry); in btrfs_lookup_first_ordered_extent()
940 return entry; in btrfs_lookup_first_ordered_extent()
960 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_first_ordered_range() local
971 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_range()
973 if (file_offset < entry->file_offset) { in btrfs_lookup_first_ordered_range()
975 } else if (file_offset >= entry_end(entry)) { in btrfs_lookup_first_ordered_range()
985 if (!entry) { in btrfs_lookup_first_ordered_range()
990 cur = &entry->rb_node; in btrfs_lookup_first_ordered_range()
992 if (entry->file_offset < file_offset) { in btrfs_lookup_first_ordered_range()
1000 entry = rb_entry(prev, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_range()
1001 if (range_overlaps(entry, file_offset, len)) in btrfs_lookup_first_ordered_range()
1005 entry = rb_entry(next, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_range()
1006 if (range_overlaps(entry, file_offset, len)) in btrfs_lookup_first_ordered_range()
1010 entry = NULL; in btrfs_lookup_first_ordered_range()
1012 if (entry) { in btrfs_lookup_first_ordered_range()
1013 refcount_inc(&entry->refs); in btrfs_lookup_first_ordered_range()
1014 trace_btrfs_ordered_extent_lookup_first_range(inode, entry); in btrfs_lookup_first_ordered_range()
1018 return entry; in btrfs_lookup_first_ordered_range()