0001
0002
0003
0004
0005
0006 #include <linux/slab.h>
0007 #include <linux/blkdev.h>
0008 #include <linux/writeback.h>
0009 #include <linux/sched/mm.h>
0010 #include "misc.h"
0011 #include "ctree.h"
0012 #include "transaction.h"
0013 #include "btrfs_inode.h"
0014 #include "extent_io.h"
0015 #include "disk-io.h"
0016 #include "compression.h"
0017 #include "delalloc-space.h"
0018 #include "qgroup.h"
0019 #include "subpage.h"
0020
0021 static struct kmem_cache *btrfs_ordered_extent_cache;
0022
0023 static u64 entry_end(struct btrfs_ordered_extent *entry)
0024 {
0025 if (entry->file_offset + entry->num_bytes < entry->file_offset)
0026 return (u64)-1;
0027 return entry->file_offset + entry->num_bytes;
0028 }
0029
0030
0031
0032
0033 static struct rb_node *tree_insert(struct rb_root *root, u64 file_offset,
0034 struct rb_node *node)
0035 {
0036 struct rb_node **p = &root->rb_node;
0037 struct rb_node *parent = NULL;
0038 struct btrfs_ordered_extent *entry;
0039
0040 while (*p) {
0041 parent = *p;
0042 entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node);
0043
0044 if (file_offset < entry->file_offset)
0045 p = &(*p)->rb_left;
0046 else if (file_offset >= entry_end(entry))
0047 p = &(*p)->rb_right;
0048 else
0049 return parent;
0050 }
0051
0052 rb_link_node(node, parent, p);
0053 rb_insert_color(node, root);
0054 return NULL;
0055 }
0056
0057
0058
0059
0060
0061 static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset,
0062 struct rb_node **prev_ret)
0063 {
0064 struct rb_node *n = root->rb_node;
0065 struct rb_node *prev = NULL;
0066 struct rb_node *test;
0067 struct btrfs_ordered_extent *entry;
0068 struct btrfs_ordered_extent *prev_entry = NULL;
0069
0070 while (n) {
0071 entry = rb_entry(n, struct btrfs_ordered_extent, rb_node);
0072 prev = n;
0073 prev_entry = entry;
0074
0075 if (file_offset < entry->file_offset)
0076 n = n->rb_left;
0077 else if (file_offset >= entry_end(entry))
0078 n = n->rb_right;
0079 else
0080 return n;
0081 }
0082 if (!prev_ret)
0083 return NULL;
0084
0085 while (prev && file_offset >= entry_end(prev_entry)) {
0086 test = rb_next(prev);
0087 if (!test)
0088 break;
0089 prev_entry = rb_entry(test, struct btrfs_ordered_extent,
0090 rb_node);
0091 if (file_offset < entry_end(prev_entry))
0092 break;
0093
0094 prev = test;
0095 }
0096 if (prev)
0097 prev_entry = rb_entry(prev, struct btrfs_ordered_extent,
0098 rb_node);
0099 while (prev && file_offset < entry_end(prev_entry)) {
0100 test = rb_prev(prev);
0101 if (!test)
0102 break;
0103 prev_entry = rb_entry(test, struct btrfs_ordered_extent,
0104 rb_node);
0105 prev = test;
0106 }
0107 *prev_ret = prev;
0108 return NULL;
0109 }
0110
0111 static int range_overlaps(struct btrfs_ordered_extent *entry, u64 file_offset,
0112 u64 len)
0113 {
0114 if (file_offset + len <= entry->file_offset ||
0115 entry->file_offset + entry->num_bytes <= file_offset)
0116 return 0;
0117 return 1;
0118 }
0119
0120
0121
0122
0123
0124 static inline struct rb_node *tree_search(struct btrfs_ordered_inode_tree *tree,
0125 u64 file_offset)
0126 {
0127 struct rb_root *root = &tree->tree;
0128 struct rb_node *prev = NULL;
0129 struct rb_node *ret;
0130 struct btrfs_ordered_extent *entry;
0131
0132 if (tree->last) {
0133 entry = rb_entry(tree->last, struct btrfs_ordered_extent,
0134 rb_node);
0135 if (in_range(file_offset, entry->file_offset, entry->num_bytes))
0136 return tree->last;
0137 }
0138 ret = __tree_search(root, file_offset, &prev);
0139 if (!ret)
0140 ret = prev;
0141 if (ret)
0142 tree->last = ret;
0143 return ret;
0144 }
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 int btrfs_add_ordered_extent(struct btrfs_inode *inode, u64 file_offset,
0165 u64 num_bytes, u64 ram_bytes, u64 disk_bytenr,
0166 u64 disk_num_bytes, u64 offset, unsigned flags,
0167 int compress_type)
0168 {
0169 struct btrfs_root *root = inode->root;
0170 struct btrfs_fs_info *fs_info = root->fs_info;
0171 struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
0172 struct rb_node *node;
0173 struct btrfs_ordered_extent *entry;
0174 int ret;
0175
0176 if (flags &
0177 ((1 << BTRFS_ORDERED_NOCOW) | (1 << BTRFS_ORDERED_PREALLOC))) {
0178
0179 ret = btrfs_qgroup_free_data(inode, NULL, file_offset, num_bytes);
0180 if (ret < 0)
0181 return ret;
0182 ret = 0;
0183 } else {
0184
0185
0186
0187
0188 ret = btrfs_qgroup_release_data(inode, file_offset, num_bytes);
0189 if (ret < 0)
0190 return ret;
0191 }
0192 entry = kmem_cache_zalloc(btrfs_ordered_extent_cache, GFP_NOFS);
0193 if (!entry)
0194 return -ENOMEM;
0195
0196 entry->file_offset = file_offset;
0197 entry->num_bytes = num_bytes;
0198 entry->ram_bytes = ram_bytes;
0199 entry->disk_bytenr = disk_bytenr;
0200 entry->disk_num_bytes = disk_num_bytes;
0201 entry->offset = offset;
0202 entry->bytes_left = num_bytes;
0203 entry->inode = igrab(&inode->vfs_inode);
0204 entry->compress_type = compress_type;
0205 entry->truncated_len = (u64)-1;
0206 entry->qgroup_rsv = ret;
0207 entry->physical = (u64)-1;
0208
0209 ASSERT((flags & ~BTRFS_ORDERED_TYPE_FLAGS) == 0);
0210 entry->flags = flags;
0211
0212 percpu_counter_add_batch(&fs_info->ordered_bytes, num_bytes,
0213 fs_info->delalloc_batch);
0214
0215
0216 refcount_set(&entry->refs, 1);
0217 init_waitqueue_head(&entry->wait);
0218 INIT_LIST_HEAD(&entry->list);
0219 INIT_LIST_HEAD(&entry->log_list);
0220 INIT_LIST_HEAD(&entry->root_extent_list);
0221 INIT_LIST_HEAD(&entry->work_list);
0222 init_completion(&entry->completion);
0223
0224 trace_btrfs_ordered_extent_add(inode, entry);
0225
0226 spin_lock_irq(&tree->lock);
0227 node = tree_insert(&tree->tree, file_offset,
0228 &entry->rb_node);
0229 if (node)
0230 btrfs_panic(fs_info, -EEXIST,
0231 "inconsistency in ordered tree at offset %llu",
0232 file_offset);
0233 spin_unlock_irq(&tree->lock);
0234
0235 spin_lock(&root->ordered_extent_lock);
0236 list_add_tail(&entry->root_extent_list,
0237 &root->ordered_extents);
0238 root->nr_ordered_extents++;
0239 if (root->nr_ordered_extents == 1) {
0240 spin_lock(&fs_info->ordered_root_lock);
0241 BUG_ON(!list_empty(&root->ordered_root));
0242 list_add_tail(&root->ordered_root, &fs_info->ordered_roots);
0243 spin_unlock(&fs_info->ordered_root_lock);
0244 }
0245 spin_unlock(&root->ordered_extent_lock);
0246
0247
0248
0249
0250
0251
0252 spin_lock(&inode->lock);
0253 btrfs_mod_outstanding_extents(inode, 1);
0254 spin_unlock(&inode->lock);
0255
0256 return 0;
0257 }
0258
0259
0260
0261
0262
0263
0264 void btrfs_add_ordered_sum(struct btrfs_ordered_extent *entry,
0265 struct btrfs_ordered_sum *sum)
0266 {
0267 struct btrfs_ordered_inode_tree *tree;
0268
0269 tree = &BTRFS_I(entry->inode)->ordered_tree;
0270 spin_lock_irq(&tree->lock);
0271 list_add_tail(&sum->list, &entry->list);
0272 spin_unlock_irq(&tree->lock);
0273 }
0274
0275 static void finish_ordered_fn(struct btrfs_work *work)
0276 {
0277 struct btrfs_ordered_extent *ordered_extent;
0278
0279 ordered_extent = container_of(work, struct btrfs_ordered_extent, work);
0280 btrfs_finish_ordered_io(ordered_extent);
0281 }
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296 void btrfs_mark_ordered_io_finished(struct btrfs_inode *inode,
0297 struct page *page, u64 file_offset,
0298 u64 num_bytes, bool uptodate)
0299 {
0300 struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
0301 struct btrfs_fs_info *fs_info = inode->root->fs_info;
0302 struct btrfs_workqueue *wq;
0303 struct rb_node *node;
0304 struct btrfs_ordered_extent *entry = NULL;
0305 unsigned long flags;
0306 u64 cur = file_offset;
0307
0308 if (btrfs_is_free_space_inode(inode))
0309 wq = fs_info->endio_freespace_worker;
0310 else
0311 wq = fs_info->endio_write_workers;
0312
0313 if (page)
0314 ASSERT(page->mapping && page_offset(page) <= file_offset &&
0315 file_offset + num_bytes <= page_offset(page) + PAGE_SIZE);
0316
0317 spin_lock_irqsave(&tree->lock, flags);
0318 while (cur < file_offset + num_bytes) {
0319 u64 entry_end;
0320 u64 end;
0321 u32 len;
0322
0323 node = tree_search(tree, cur);
0324
0325 if (!node)
0326 break;
0327
0328 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
0329 entry_end = entry->file_offset + entry->num_bytes;
0330
0331
0332
0333
0334
0335 if (cur >= entry_end) {
0336 node = rb_next(node);
0337
0338 if (!node)
0339 break;
0340 entry = rb_entry(node, struct btrfs_ordered_extent,
0341 rb_node);
0342
0343
0344 cur = entry->file_offset;
0345 continue;
0346 }
0347
0348
0349
0350
0351
0352 if (cur < entry->file_offset) {
0353 cur = entry->file_offset;
0354 continue;
0355 }
0356
0357
0358
0359
0360
0361
0362
0363
0364 end = min(entry->file_offset + entry->num_bytes,
0365 file_offset + num_bytes) - 1;
0366 ASSERT(end + 1 - cur < U32_MAX);
0367 len = end + 1 - cur;
0368
0369 if (page) {
0370
0371
0372
0373
0374
0375
0376 if (!btrfs_page_test_ordered(fs_info, page, cur, len)) {
0377 cur += len;
0378 continue;
0379 }
0380 btrfs_page_clear_ordered(fs_info, page, cur, len);
0381 }
0382
0383
0384 if (unlikely(len > entry->bytes_left)) {
0385 WARN_ON(1);
0386 btrfs_crit(fs_info,
0387 "bad ordered extent accounting, root=%llu ino=%llu OE offset=%llu OE len=%llu to_dec=%u left=%llu",
0388 inode->root->root_key.objectid,
0389 btrfs_ino(inode),
0390 entry->file_offset,
0391 entry->num_bytes,
0392 len, entry->bytes_left);
0393 entry->bytes_left = 0;
0394 } else {
0395 entry->bytes_left -= len;
0396 }
0397
0398 if (!uptodate)
0399 set_bit(BTRFS_ORDERED_IOERR, &entry->flags);
0400
0401
0402
0403
0404
0405 if (entry->bytes_left == 0) {
0406 set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
0407 cond_wake_up(&entry->wait);
0408 refcount_inc(&entry->refs);
0409 trace_btrfs_ordered_extent_mark_finished(inode, entry);
0410 spin_unlock_irqrestore(&tree->lock, flags);
0411 btrfs_init_work(&entry->work, finish_ordered_fn, NULL, NULL);
0412 btrfs_queue_work(wq, &entry->work);
0413 spin_lock_irqsave(&tree->lock, flags);
0414 }
0415 cur += len;
0416 }
0417 spin_unlock_irqrestore(&tree->lock, flags);
0418 }
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437 bool btrfs_dec_test_ordered_pending(struct btrfs_inode *inode,
0438 struct btrfs_ordered_extent **cached,
0439 u64 file_offset, u64 io_size)
0440 {
0441 struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
0442 struct rb_node *node;
0443 struct btrfs_ordered_extent *entry = NULL;
0444 unsigned long flags;
0445 bool finished = false;
0446
0447 spin_lock_irqsave(&tree->lock, flags);
0448 if (cached && *cached) {
0449 entry = *cached;
0450 goto have_entry;
0451 }
0452
0453 node = tree_search(tree, file_offset);
0454 if (!node)
0455 goto out;
0456
0457 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
0458 have_entry:
0459 if (!in_range(file_offset, entry->file_offset, entry->num_bytes))
0460 goto out;
0461
0462 if (io_size > entry->bytes_left)
0463 btrfs_crit(inode->root->fs_info,
0464 "bad ordered accounting left %llu size %llu",
0465 entry->bytes_left, io_size);
0466
0467 entry->bytes_left -= io_size;
0468
0469 if (entry->bytes_left == 0) {
0470
0471
0472
0473
0474 finished = !test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
0475
0476 cond_wake_up_nomb(&entry->wait);
0477 }
0478 out:
0479 if (finished && cached && entry) {
0480 *cached = entry;
0481 refcount_inc(&entry->refs);
0482 trace_btrfs_ordered_extent_dec_test_pending(inode, entry);
0483 }
0484 spin_unlock_irqrestore(&tree->lock, flags);
0485 return finished;
0486 }
0487
0488
0489
0490
0491
0492 void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry)
0493 {
0494 struct list_head *cur;
0495 struct btrfs_ordered_sum *sum;
0496
0497 trace_btrfs_ordered_extent_put(BTRFS_I(entry->inode), entry);
0498
0499 if (refcount_dec_and_test(&entry->refs)) {
0500 ASSERT(list_empty(&entry->root_extent_list));
0501 ASSERT(list_empty(&entry->log_list));
0502 ASSERT(RB_EMPTY_NODE(&entry->rb_node));
0503 if (entry->inode)
0504 btrfs_add_delayed_iput(entry->inode);
0505 while (!list_empty(&entry->list)) {
0506 cur = entry->list.next;
0507 sum = list_entry(cur, struct btrfs_ordered_sum, list);
0508 list_del(&sum->list);
0509 kvfree(sum);
0510 }
0511 kmem_cache_free(btrfs_ordered_extent_cache, entry);
0512 }
0513 }
0514
0515
0516
0517
0518
0519 void btrfs_remove_ordered_extent(struct btrfs_inode *btrfs_inode,
0520 struct btrfs_ordered_extent *entry)
0521 {
0522 struct btrfs_ordered_inode_tree *tree;
0523 struct btrfs_root *root = btrfs_inode->root;
0524 struct btrfs_fs_info *fs_info = root->fs_info;
0525 struct rb_node *node;
0526 bool pending;
0527
0528
0529 spin_lock(&btrfs_inode->lock);
0530 btrfs_mod_outstanding_extents(btrfs_inode, -1);
0531 spin_unlock(&btrfs_inode->lock);
0532 if (root != fs_info->tree_root) {
0533 u64 release;
0534
0535 if (test_bit(BTRFS_ORDERED_ENCODED, &entry->flags))
0536 release = entry->disk_num_bytes;
0537 else
0538 release = entry->num_bytes;
0539 btrfs_delalloc_release_metadata(btrfs_inode, release, false);
0540 }
0541
0542 percpu_counter_add_batch(&fs_info->ordered_bytes, -entry->num_bytes,
0543 fs_info->delalloc_batch);
0544
0545 tree = &btrfs_inode->ordered_tree;
0546 spin_lock_irq(&tree->lock);
0547 node = &entry->rb_node;
0548 rb_erase(node, &tree->tree);
0549 RB_CLEAR_NODE(node);
0550 if (tree->last == node)
0551 tree->last = NULL;
0552 set_bit(BTRFS_ORDERED_COMPLETE, &entry->flags);
0553 pending = test_and_clear_bit(BTRFS_ORDERED_PENDING, &entry->flags);
0554 spin_unlock_irq(&tree->lock);
0555
0556
0557
0558
0559
0560 if (pending) {
0561 struct btrfs_transaction *trans;
0562
0563
0564
0565
0566
0567
0568
0569 spin_lock(&fs_info->trans_lock);
0570 trans = fs_info->running_transaction;
0571 if (trans)
0572 refcount_inc(&trans->use_count);
0573 spin_unlock(&fs_info->trans_lock);
0574
0575 ASSERT(trans);
0576 if (trans) {
0577 if (atomic_dec_and_test(&trans->pending_ordered))
0578 wake_up(&trans->pending_wait);
0579 btrfs_put_transaction(trans);
0580 }
0581 }
0582
0583 spin_lock(&root->ordered_extent_lock);
0584 list_del_init(&entry->root_extent_list);
0585 root->nr_ordered_extents--;
0586
0587 trace_btrfs_ordered_extent_remove(btrfs_inode, entry);
0588
0589 if (!root->nr_ordered_extents) {
0590 spin_lock(&fs_info->ordered_root_lock);
0591 BUG_ON(list_empty(&root->ordered_root));
0592 list_del_init(&root->ordered_root);
0593 spin_unlock(&fs_info->ordered_root_lock);
0594 }
0595 spin_unlock(&root->ordered_extent_lock);
0596 wake_up(&entry->wait);
0597 }
0598
0599 static void btrfs_run_ordered_extent_work(struct btrfs_work *work)
0600 {
0601 struct btrfs_ordered_extent *ordered;
0602
0603 ordered = container_of(work, struct btrfs_ordered_extent, flush_work);
0604 btrfs_start_ordered_extent(ordered, 1);
0605 complete(&ordered->completion);
0606 }
0607
0608
0609
0610
0611
0612 u64 btrfs_wait_ordered_extents(struct btrfs_root *root, u64 nr,
0613 const u64 range_start, const u64 range_len)
0614 {
0615 struct btrfs_fs_info *fs_info = root->fs_info;
0616 LIST_HEAD(splice);
0617 LIST_HEAD(skipped);
0618 LIST_HEAD(works);
0619 struct btrfs_ordered_extent *ordered, *next;
0620 u64 count = 0;
0621 const u64 range_end = range_start + range_len;
0622
0623 mutex_lock(&root->ordered_extent_mutex);
0624 spin_lock(&root->ordered_extent_lock);
0625 list_splice_init(&root->ordered_extents, &splice);
0626 while (!list_empty(&splice) && nr) {
0627 ordered = list_first_entry(&splice, struct btrfs_ordered_extent,
0628 root_extent_list);
0629
0630 if (range_end <= ordered->disk_bytenr ||
0631 ordered->disk_bytenr + ordered->disk_num_bytes <= range_start) {
0632 list_move_tail(&ordered->root_extent_list, &skipped);
0633 cond_resched_lock(&root->ordered_extent_lock);
0634 continue;
0635 }
0636
0637 list_move_tail(&ordered->root_extent_list,
0638 &root->ordered_extents);
0639 refcount_inc(&ordered->refs);
0640 spin_unlock(&root->ordered_extent_lock);
0641
0642 btrfs_init_work(&ordered->flush_work,
0643 btrfs_run_ordered_extent_work, NULL, NULL);
0644 list_add_tail(&ordered->work_list, &works);
0645 btrfs_queue_work(fs_info->flush_workers, &ordered->flush_work);
0646
0647 cond_resched();
0648 spin_lock(&root->ordered_extent_lock);
0649 if (nr != U64_MAX)
0650 nr--;
0651 count++;
0652 }
0653 list_splice_tail(&skipped, &root->ordered_extents);
0654 list_splice_tail(&splice, &root->ordered_extents);
0655 spin_unlock(&root->ordered_extent_lock);
0656
0657 list_for_each_entry_safe(ordered, next, &works, work_list) {
0658 list_del_init(&ordered->work_list);
0659 wait_for_completion(&ordered->completion);
0660 btrfs_put_ordered_extent(ordered);
0661 cond_resched();
0662 }
0663 mutex_unlock(&root->ordered_extent_mutex);
0664
0665 return count;
0666 }
0667
0668 void btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, u64 nr,
0669 const u64 range_start, const u64 range_len)
0670 {
0671 struct btrfs_root *root;
0672 struct list_head splice;
0673 u64 done;
0674
0675 INIT_LIST_HEAD(&splice);
0676
0677 mutex_lock(&fs_info->ordered_operations_mutex);
0678 spin_lock(&fs_info->ordered_root_lock);
0679 list_splice_init(&fs_info->ordered_roots, &splice);
0680 while (!list_empty(&splice) && nr) {
0681 root = list_first_entry(&splice, struct btrfs_root,
0682 ordered_root);
0683 root = btrfs_grab_root(root);
0684 BUG_ON(!root);
0685 list_move_tail(&root->ordered_root,
0686 &fs_info->ordered_roots);
0687 spin_unlock(&fs_info->ordered_root_lock);
0688
0689 done = btrfs_wait_ordered_extents(root, nr,
0690 range_start, range_len);
0691 btrfs_put_root(root);
0692
0693 spin_lock(&fs_info->ordered_root_lock);
0694 if (nr != U64_MAX) {
0695 nr -= done;
0696 }
0697 }
0698 list_splice_tail(&splice, &fs_info->ordered_roots);
0699 spin_unlock(&fs_info->ordered_root_lock);
0700 mutex_unlock(&fs_info->ordered_operations_mutex);
0701 }
0702
0703
0704
0705
0706
0707
0708
0709
0710 void btrfs_start_ordered_extent(struct btrfs_ordered_extent *entry, int wait)
0711 {
0712 u64 start = entry->file_offset;
0713 u64 end = start + entry->num_bytes - 1;
0714 struct btrfs_inode *inode = BTRFS_I(entry->inode);
0715
0716 trace_btrfs_ordered_extent_start(inode, entry);
0717
0718
0719
0720
0721
0722
0723 if (!test_bit(BTRFS_ORDERED_DIRECT, &entry->flags))
0724 filemap_fdatawrite_range(inode->vfs_inode.i_mapping, start, end);
0725 if (wait) {
0726 wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE,
0727 &entry->flags));
0728 }
0729 }
0730
0731
0732
0733
0734 int btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len)
0735 {
0736 int ret = 0;
0737 int ret_wb = 0;
0738 u64 end;
0739 u64 orig_end;
0740 struct btrfs_ordered_extent *ordered;
0741
0742 if (start + len < start) {
0743 orig_end = INT_LIMIT(loff_t);
0744 } else {
0745 orig_end = start + len - 1;
0746 if (orig_end > INT_LIMIT(loff_t))
0747 orig_end = INT_LIMIT(loff_t);
0748 }
0749
0750
0751
0752
0753 ret = btrfs_fdatawrite_range(inode, start, orig_end);
0754 if (ret)
0755 return ret;
0756
0757
0758
0759
0760
0761
0762
0763
0764 ret_wb = filemap_fdatawait_range(inode->i_mapping, start, orig_end);
0765
0766 end = orig_end;
0767 while (1) {
0768 ordered = btrfs_lookup_first_ordered_extent(BTRFS_I(inode), end);
0769 if (!ordered)
0770 break;
0771 if (ordered->file_offset > orig_end) {
0772 btrfs_put_ordered_extent(ordered);
0773 break;
0774 }
0775 if (ordered->file_offset + ordered->num_bytes <= start) {
0776 btrfs_put_ordered_extent(ordered);
0777 break;
0778 }
0779 btrfs_start_ordered_extent(ordered, 1);
0780 end = ordered->file_offset;
0781
0782
0783
0784
0785
0786 if (test_bit(BTRFS_ORDERED_IOERR, &ordered->flags))
0787 ret = -EIO;
0788 btrfs_put_ordered_extent(ordered);
0789 if (end == 0 || end == start)
0790 break;
0791 end--;
0792 }
0793 return ret_wb ? ret_wb : ret;
0794 }
0795
0796
0797
0798
0799
0800 struct btrfs_ordered_extent *btrfs_lookup_ordered_extent(struct btrfs_inode *inode,
0801 u64 file_offset)
0802 {
0803 struct btrfs_ordered_inode_tree *tree;
0804 struct rb_node *node;
0805 struct btrfs_ordered_extent *entry = NULL;
0806 unsigned long flags;
0807
0808 tree = &inode->ordered_tree;
0809 spin_lock_irqsave(&tree->lock, flags);
0810 node = tree_search(tree, file_offset);
0811 if (!node)
0812 goto out;
0813
0814 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
0815 if (!in_range(file_offset, entry->file_offset, entry->num_bytes))
0816 entry = NULL;
0817 if (entry) {
0818 refcount_inc(&entry->refs);
0819 trace_btrfs_ordered_extent_lookup(inode, entry);
0820 }
0821 out:
0822 spin_unlock_irqrestore(&tree->lock, flags);
0823 return entry;
0824 }
0825
0826
0827
0828
0829 struct btrfs_ordered_extent *btrfs_lookup_ordered_range(
0830 struct btrfs_inode *inode, u64 file_offset, u64 len)
0831 {
0832 struct btrfs_ordered_inode_tree *tree;
0833 struct rb_node *node;
0834 struct btrfs_ordered_extent *entry = NULL;
0835
0836 tree = &inode->ordered_tree;
0837 spin_lock_irq(&tree->lock);
0838 node = tree_search(tree, file_offset);
0839 if (!node) {
0840 node = tree_search(tree, file_offset + len);
0841 if (!node)
0842 goto out;
0843 }
0844
0845 while (1) {
0846 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
0847 if (range_overlaps(entry, file_offset, len))
0848 break;
0849
0850 if (entry->file_offset >= file_offset + len) {
0851 entry = NULL;
0852 break;
0853 }
0854 entry = NULL;
0855 node = rb_next(node);
0856 if (!node)
0857 break;
0858 }
0859 out:
0860 if (entry) {
0861 refcount_inc(&entry->refs);
0862 trace_btrfs_ordered_extent_lookup_range(inode, entry);
0863 }
0864 spin_unlock_irq(&tree->lock);
0865 return entry;
0866 }
0867
0868
0869
0870
0871
0872 void btrfs_get_ordered_extents_for_logging(struct btrfs_inode *inode,
0873 struct list_head *list)
0874 {
0875 struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
0876 struct rb_node *n;
0877
0878 ASSERT(inode_is_locked(&inode->vfs_inode));
0879
0880 spin_lock_irq(&tree->lock);
0881 for (n = rb_first(&tree->tree); n; n = rb_next(n)) {
0882 struct btrfs_ordered_extent *ordered;
0883
0884 ordered = rb_entry(n, struct btrfs_ordered_extent, rb_node);
0885
0886 if (test_bit(BTRFS_ORDERED_LOGGED, &ordered->flags))
0887 continue;
0888
0889 ASSERT(list_empty(&ordered->log_list));
0890 list_add_tail(&ordered->log_list, list);
0891 refcount_inc(&ordered->refs);
0892 trace_btrfs_ordered_extent_lookup_for_logging(inode, ordered);
0893 }
0894 spin_unlock_irq(&tree->lock);
0895 }
0896
0897
0898
0899
0900
0901 struct btrfs_ordered_extent *
0902 btrfs_lookup_first_ordered_extent(struct btrfs_inode *inode, u64 file_offset)
0903 {
0904 struct btrfs_ordered_inode_tree *tree;
0905 struct rb_node *node;
0906 struct btrfs_ordered_extent *entry = NULL;
0907
0908 tree = &inode->ordered_tree;
0909 spin_lock_irq(&tree->lock);
0910 node = tree_search(tree, file_offset);
0911 if (!node)
0912 goto out;
0913
0914 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
0915 refcount_inc(&entry->refs);
0916 trace_btrfs_ordered_extent_lookup_first(inode, entry);
0917 out:
0918 spin_unlock_irq(&tree->lock);
0919 return entry;
0920 }
0921
0922
0923
0924
0925
0926
0927
0928
0929
0930
0931 struct btrfs_ordered_extent *btrfs_lookup_first_ordered_range(
0932 struct btrfs_inode *inode, u64 file_offset, u64 len)
0933 {
0934 struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
0935 struct rb_node *node;
0936 struct rb_node *cur;
0937 struct rb_node *prev;
0938 struct rb_node *next;
0939 struct btrfs_ordered_extent *entry = NULL;
0940
0941 spin_lock_irq(&tree->lock);
0942 node = tree->tree.rb_node;
0943
0944
0945
0946
0947
0948
0949 while (node) {
0950 entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
0951
0952 if (file_offset < entry->file_offset) {
0953 node = node->rb_left;
0954 } else if (file_offset >= entry_end(entry)) {
0955 node = node->rb_right;
0956 } else {
0957
0958
0959
0960
0961 goto out;
0962 }
0963 }
0964 if (!entry) {
0965
0966 goto out;
0967 }
0968
0969 cur = &entry->rb_node;
0970
0971 if (entry->file_offset < file_offset) {
0972 prev = cur;
0973 next = rb_next(cur);
0974 } else {
0975 prev = rb_prev(cur);
0976 next = cur;
0977 }
0978 if (prev) {
0979 entry = rb_entry(prev, struct btrfs_ordered_extent, rb_node);
0980 if (range_overlaps(entry, file_offset, len))
0981 goto out;
0982 }
0983 if (next) {
0984 entry = rb_entry(next, struct btrfs_ordered_extent, rb_node);
0985 if (range_overlaps(entry, file_offset, len))
0986 goto out;
0987 }
0988
0989 entry = NULL;
0990 out:
0991 if (entry) {
0992 refcount_inc(&entry->refs);
0993 trace_btrfs_ordered_extent_lookup_first_range(inode, entry);
0994 }
0995
0996 spin_unlock_irq(&tree->lock);
0997 return entry;
0998 }
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013 void btrfs_lock_and_flush_ordered_range(struct btrfs_inode *inode, u64 start,
1014 u64 end,
1015 struct extent_state **cached_state)
1016 {
1017 struct btrfs_ordered_extent *ordered;
1018 struct extent_state *cache = NULL;
1019 struct extent_state **cachedp = &cache;
1020
1021 if (cached_state)
1022 cachedp = cached_state;
1023
1024 while (1) {
1025 lock_extent_bits(&inode->io_tree, start, end, cachedp);
1026 ordered = btrfs_lookup_ordered_range(inode, start,
1027 end - start + 1);
1028 if (!ordered) {
1029
1030
1031
1032
1033
1034 if (!cached_state)
1035 refcount_dec(&cache->refs);
1036 break;
1037 }
1038 unlock_extent_cached(&inode->io_tree, start, end, cachedp);
1039 btrfs_start_ordered_extent(ordered, 1);
1040 btrfs_put_ordered_extent(ordered);
1041 }
1042 }
1043
1044 static int clone_ordered_extent(struct btrfs_ordered_extent *ordered, u64 pos,
1045 u64 len)
1046 {
1047 struct inode *inode = ordered->inode;
1048 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
1049 u64 file_offset = ordered->file_offset + pos;
1050 u64 disk_bytenr = ordered->disk_bytenr + pos;
1051 unsigned long flags = ordered->flags & BTRFS_ORDERED_TYPE_FLAGS;
1052
1053
1054
1055
1056
1057 percpu_counter_add_batch(&fs_info->ordered_bytes, -len,
1058 fs_info->delalloc_batch);
1059 WARN_ON_ONCE(flags & (1 << BTRFS_ORDERED_COMPRESSED));
1060 return btrfs_add_ordered_extent(BTRFS_I(inode), file_offset, len, len,
1061 disk_bytenr, len, 0, flags,
1062 ordered->compress_type);
1063 }
1064
1065 int btrfs_split_ordered_extent(struct btrfs_ordered_extent *ordered, u64 pre,
1066 u64 post)
1067 {
1068 struct inode *inode = ordered->inode;
1069 struct btrfs_ordered_inode_tree *tree = &BTRFS_I(inode)->ordered_tree;
1070 struct rb_node *node;
1071 struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
1072 int ret = 0;
1073
1074 trace_btrfs_ordered_extent_split(BTRFS_I(inode), ordered);
1075
1076 spin_lock_irq(&tree->lock);
1077
1078 node = &ordered->rb_node;
1079 rb_erase(node, &tree->tree);
1080 RB_CLEAR_NODE(node);
1081 if (tree->last == node)
1082 tree->last = NULL;
1083
1084 ordered->file_offset += pre;
1085 ordered->disk_bytenr += pre;
1086 ordered->num_bytes -= (pre + post);
1087 ordered->disk_num_bytes -= (pre + post);
1088 ordered->bytes_left -= (pre + post);
1089
1090
1091 node = tree_insert(&tree->tree, ordered->file_offset, &ordered->rb_node);
1092 if (node)
1093 btrfs_panic(fs_info, -EEXIST,
1094 "zoned: inconsistency in ordered tree at offset %llu",
1095 ordered->file_offset);
1096
1097 spin_unlock_irq(&tree->lock);
1098
1099 if (pre)
1100 ret = clone_ordered_extent(ordered, 0, pre);
1101 if (ret == 0 && post)
1102 ret = clone_ordered_extent(ordered, pre + ordered->disk_num_bytes,
1103 post);
1104
1105 return ret;
1106 }
1107
1108 int __init ordered_data_init(void)
1109 {
1110 btrfs_ordered_extent_cache = kmem_cache_create("btrfs_ordered_extent",
1111 sizeof(struct btrfs_ordered_extent), 0,
1112 SLAB_MEM_SPREAD,
1113 NULL);
1114 if (!btrfs_ordered_extent_cache)
1115 return -ENOMEM;
1116
1117 return 0;
1118 }
1119
1120 void __cold ordered_data_exit(void)
1121 {
1122 kmem_cache_destroy(btrfs_ordered_extent_cache);
1123 }