Lines Matching refs:entry
22 static u64 entry_end(struct btrfs_ordered_extent *entry) in entry_end() argument
24 if (entry->file_offset + entry->num_bytes < entry->file_offset) in entry_end()
26 return entry->file_offset + entry->num_bytes; in entry_end()
37 struct btrfs_ordered_extent *entry; in tree_insert() local
41 entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node); in tree_insert()
43 if (file_offset < entry->file_offset) in tree_insert()
45 else if (file_offset >= entry_end(entry)) in tree_insert()
66 struct btrfs_ordered_extent *entry; in __tree_search() local
70 entry = rb_entry(n, struct btrfs_ordered_extent, rb_node); in __tree_search()
72 prev_entry = entry; in __tree_search()
74 if (file_offset < entry->file_offset) in __tree_search()
76 else if (file_offset >= entry_end(entry)) in __tree_search()
113 static int offset_in_entry(struct btrfs_ordered_extent *entry, u64 file_offset) in offset_in_entry() argument
115 if (file_offset < entry->file_offset || in offset_in_entry()
116 entry->file_offset + entry->num_bytes <= file_offset) in offset_in_entry()
121 static int range_overlaps(struct btrfs_ordered_extent *entry, u64 file_offset, in range_overlaps() argument
124 if (file_offset + len <= entry->file_offset || in range_overlaps()
125 entry->file_offset + entry->num_bytes <= file_offset) in range_overlaps()
140 struct btrfs_ordered_extent *entry; in tree_search() local
143 entry = rb_entry(tree->last, struct btrfs_ordered_extent, in tree_search()
145 if (offset_in_entry(entry, file_offset)) in tree_search()
171 struct btrfs_ordered_extent *entry; in __btrfs_add_ordered_extent() local
189 entry = kmem_cache_zalloc(btrfs_ordered_extent_cache, GFP_NOFS); in __btrfs_add_ordered_extent()
190 if (!entry) in __btrfs_add_ordered_extent()
193 entry->file_offset = file_offset; in __btrfs_add_ordered_extent()
194 entry->disk_bytenr = disk_bytenr; in __btrfs_add_ordered_extent()
195 entry->num_bytes = num_bytes; in __btrfs_add_ordered_extent()
196 entry->disk_num_bytes = disk_num_bytes; in __btrfs_add_ordered_extent()
197 entry->bytes_left = num_bytes; in __btrfs_add_ordered_extent()
198 entry->inode = igrab(&inode->vfs_inode); in __btrfs_add_ordered_extent()
199 entry->compress_type = compress_type; in __btrfs_add_ordered_extent()
200 entry->truncated_len = (u64)-1; in __btrfs_add_ordered_extent()
201 entry->qgroup_rsv = ret; in __btrfs_add_ordered_extent()
203 set_bit(type, &entry->flags); in __btrfs_add_ordered_extent()
208 set_bit(BTRFS_ORDERED_DIRECT, &entry->flags); in __btrfs_add_ordered_extent()
212 refcount_set(&entry->refs, 1); in __btrfs_add_ordered_extent()
213 init_waitqueue_head(&entry->wait); in __btrfs_add_ordered_extent()
214 INIT_LIST_HEAD(&entry->list); in __btrfs_add_ordered_extent()
215 INIT_LIST_HEAD(&entry->log_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()
220 trace_btrfs_ordered_extent_add(inode, entry); in __btrfs_add_ordered_extent()
224 &entry->rb_node); in __btrfs_add_ordered_extent()
232 list_add_tail(&entry->root_extent_list, in __btrfs_add_ordered_extent()
288 void btrfs_add_ordered_sum(struct btrfs_ordered_extent *entry, in btrfs_add_ordered_sum() argument
293 tree = &BTRFS_I(entry->inode)->ordered_tree; in btrfs_add_ordered_sum()
295 list_add_tail(&sum->list, &entry->list); in btrfs_add_ordered_sum()
318 struct btrfs_ordered_extent *entry = NULL; in btrfs_dec_test_first_ordered_pending() local
332 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_dec_test_first_ordered_pending()
333 if (!offset_in_entry(entry, *file_offset)) { in btrfs_dec_test_first_ordered_pending()
338 dec_start = max(*file_offset, entry->file_offset); in btrfs_dec_test_first_ordered_pending()
340 entry->file_offset + entry->num_bytes); in btrfs_dec_test_first_ordered_pending()
347 if (to_dec > entry->bytes_left) { in btrfs_dec_test_first_ordered_pending()
350 entry->bytes_left, to_dec); in btrfs_dec_test_first_ordered_pending()
352 entry->bytes_left -= to_dec; in btrfs_dec_test_first_ordered_pending()
354 set_bit(BTRFS_ORDERED_IOERR, &entry->flags); in btrfs_dec_test_first_ordered_pending()
356 if (entry->bytes_left == 0) { in btrfs_dec_test_first_ordered_pending()
357 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_dec_test_first_ordered_pending()
359 cond_wake_up_nomb(&entry->wait); in btrfs_dec_test_first_ordered_pending()
364 if (!ret && cached && entry) { in btrfs_dec_test_first_ordered_pending()
365 *cached = entry; in btrfs_dec_test_first_ordered_pending()
366 refcount_inc(&entry->refs); in btrfs_dec_test_first_ordered_pending()
387 struct btrfs_ordered_extent *entry = NULL; in btrfs_dec_test_ordered_pending() local
393 entry = *cached; in btrfs_dec_test_ordered_pending()
403 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_dec_test_ordered_pending()
405 if (!offset_in_entry(entry, file_offset)) { in btrfs_dec_test_ordered_pending()
410 if (io_size > entry->bytes_left) { in btrfs_dec_test_ordered_pending()
413 entry->bytes_left, io_size); in btrfs_dec_test_ordered_pending()
415 entry->bytes_left -= io_size; in btrfs_dec_test_ordered_pending()
417 set_bit(BTRFS_ORDERED_IOERR, &entry->flags); in btrfs_dec_test_ordered_pending()
419 if (entry->bytes_left == 0) { in btrfs_dec_test_ordered_pending()
420 ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags); in btrfs_dec_test_ordered_pending()
422 cond_wake_up_nomb(&entry->wait); in btrfs_dec_test_ordered_pending()
427 if (!ret && cached && entry) { in btrfs_dec_test_ordered_pending()
428 *cached = entry; in btrfs_dec_test_ordered_pending()
429 refcount_inc(&entry->refs); in btrfs_dec_test_ordered_pending()
439 void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry) in btrfs_put_ordered_extent() argument
444 trace_btrfs_ordered_extent_put(BTRFS_I(entry->inode), entry); in btrfs_put_ordered_extent()
446 if (refcount_dec_and_test(&entry->refs)) { in btrfs_put_ordered_extent()
447 ASSERT(list_empty(&entry->root_extent_list)); in btrfs_put_ordered_extent()
448 ASSERT(list_empty(&entry->log_list)); in btrfs_put_ordered_extent()
449 ASSERT(RB_EMPTY_NODE(&entry->rb_node)); in btrfs_put_ordered_extent()
450 if (entry->inode) in btrfs_put_ordered_extent()
451 btrfs_add_delayed_iput(entry->inode); in btrfs_put_ordered_extent()
452 while (!list_empty(&entry->list)) { in btrfs_put_ordered_extent()
453 cur = entry->list.next; in btrfs_put_ordered_extent()
458 kmem_cache_free(btrfs_ordered_extent_cache, entry); in btrfs_put_ordered_extent()
467 struct btrfs_ordered_extent *entry) in btrfs_remove_ordered_extent() argument
480 btrfs_delalloc_release_metadata(btrfs_inode, entry->num_bytes, in btrfs_remove_ordered_extent()
483 if (test_bit(BTRFS_ORDERED_DIRECT, &entry->flags)) in btrfs_remove_ordered_extent()
484 percpu_counter_add_batch(&fs_info->dio_bytes, -entry->num_bytes, in btrfs_remove_ordered_extent()
489 node = &entry->rb_node; in btrfs_remove_ordered_extent()
494 set_bit(BTRFS_ORDERED_COMPLETE, &entry->flags); in btrfs_remove_ordered_extent()
495 pending = test_and_clear_bit(BTRFS_ORDERED_PENDING, &entry->flags); in btrfs_remove_ordered_extent()
526 list_del_init(&entry->root_extent_list); in btrfs_remove_ordered_extent()
529 trace_btrfs_ordered_extent_remove(btrfs_inode, entry); in btrfs_remove_ordered_extent()
538 wake_up(&entry->wait); in btrfs_remove_ordered_extent()
652 void btrfs_start_ordered_extent(struct btrfs_ordered_extent *entry, int wait) in btrfs_start_ordered_extent() argument
654 u64 start = entry->file_offset; in btrfs_start_ordered_extent()
655 u64 end = start + entry->num_bytes - 1; in btrfs_start_ordered_extent()
656 struct btrfs_inode *inode = BTRFS_I(entry->inode); in btrfs_start_ordered_extent()
658 trace_btrfs_ordered_extent_start(inode, entry); in btrfs_start_ordered_extent()
665 if (!test_bit(BTRFS_ORDERED_DIRECT, &entry->flags)) in btrfs_start_ordered_extent()
668 wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE, in btrfs_start_ordered_extent()
669 &entry->flags)); in btrfs_start_ordered_extent()
747 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_extent() local
755 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_extent()
756 if (!offset_in_entry(entry, file_offset)) in btrfs_lookup_ordered_extent()
757 entry = NULL; in btrfs_lookup_ordered_extent()
758 if (entry) in btrfs_lookup_ordered_extent()
759 refcount_inc(&entry->refs); in btrfs_lookup_ordered_extent()
762 return entry; in btrfs_lookup_ordered_extent()
773 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_ordered_range() local
785 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_ordered_range()
786 if (range_overlaps(entry, file_offset, len)) in btrfs_lookup_ordered_range()
789 if (entry->file_offset >= file_offset + len) { in btrfs_lookup_ordered_range()
790 entry = NULL; in btrfs_lookup_ordered_range()
793 entry = NULL; in btrfs_lookup_ordered_range()
799 if (entry) in btrfs_lookup_ordered_range()
800 refcount_inc(&entry->refs); in btrfs_lookup_ordered_range()
802 return entry; in btrfs_lookup_ordered_range()
842 struct btrfs_ordered_extent *entry = NULL; in btrfs_lookup_first_ordered_extent() local
850 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node); in btrfs_lookup_first_ordered_extent()
851 refcount_inc(&entry->refs); in btrfs_lookup_first_ordered_extent()
854 return entry; in btrfs_lookup_first_ordered_extent()