Lines Matching refs:entry

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