1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2009 Oracle. All rights reserved. 4 */ 5 6 #include <linux/sched.h> 7 #include <linux/slab.h> 8 #include <linux/sort.h> 9 #include "ctree.h" 10 #include "delayed-ref.h" 11 #include "transaction.h" 12 #include "qgroup.h" 13 14 struct kmem_cache *btrfs_delayed_ref_head_cachep; 15 struct kmem_cache *btrfs_delayed_tree_ref_cachep; 16 struct kmem_cache *btrfs_delayed_data_ref_cachep; 17 struct kmem_cache *btrfs_delayed_extent_op_cachep; 18 /* 19 * delayed back reference update tracking. For subvolume trees 20 * we queue up extent allocations and backref maintenance for 21 * delayed processing. This avoids deep call chains where we 22 * add extents in the middle of btrfs_search_slot, and it allows 23 * us to buffer up frequently modified backrefs in an rb tree instead 24 * of hammering updates on the extent allocation tree. 25 */ 26 27 /* 28 * compare two delayed tree backrefs with same bytenr and type 29 */ 30 static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref1, 31 struct btrfs_delayed_tree_ref *ref2) 32 { 33 if (ref1->node.type == BTRFS_TREE_BLOCK_REF_KEY) { 34 if (ref1->root < ref2->root) 35 return -1; 36 if (ref1->root > ref2->root) 37 return 1; 38 } else { 39 if (ref1->parent < ref2->parent) 40 return -1; 41 if (ref1->parent > ref2->parent) 42 return 1; 43 } 44 return 0; 45 } 46 47 /* 48 * compare two delayed data backrefs with same bytenr and type 49 */ 50 static int comp_data_refs(struct btrfs_delayed_data_ref *ref1, 51 struct btrfs_delayed_data_ref *ref2) 52 { 53 if (ref1->node.type == BTRFS_EXTENT_DATA_REF_KEY) { 54 if (ref1->root < ref2->root) 55 return -1; 56 if (ref1->root > ref2->root) 57 return 1; 58 if (ref1->objectid < ref2->objectid) 59 return -1; 60 if (ref1->objectid > ref2->objectid) 61 return 1; 62 if (ref1->offset < ref2->offset) 63 return -1; 64 if (ref1->offset > ref2->offset) 65 return 1; 66 } else { 67 if (ref1->parent < ref2->parent) 68 return -1; 69 if (ref1->parent > ref2->parent) 70 return 1; 71 } 72 return 0; 73 } 74 75 static int comp_refs(struct btrfs_delayed_ref_node *ref1, 76 struct btrfs_delayed_ref_node *ref2, 77 bool check_seq) 78 { 79 int ret = 0; 80 81 if (ref1->type < ref2->type) 82 return -1; 83 if (ref1->type > ref2->type) 84 return 1; 85 if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY || 86 ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) 87 ret = comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref1), 88 btrfs_delayed_node_to_tree_ref(ref2)); 89 else 90 ret = comp_data_refs(btrfs_delayed_node_to_data_ref(ref1), 91 btrfs_delayed_node_to_data_ref(ref2)); 92 if (ret) 93 return ret; 94 if (check_seq) { 95 if (ref1->seq < ref2->seq) 96 return -1; 97 if (ref1->seq > ref2->seq) 98 return 1; 99 } 100 return 0; 101 } 102 103 /* insert a new ref to head ref rbtree */ 104 static struct btrfs_delayed_ref_head *htree_insert(struct rb_root *root, 105 struct rb_node *node) 106 { 107 struct rb_node **p = &root->rb_node; 108 struct rb_node *parent_node = NULL; 109 struct btrfs_delayed_ref_head *entry; 110 struct btrfs_delayed_ref_head *ins; 111 u64 bytenr; 112 113 ins = rb_entry(node, struct btrfs_delayed_ref_head, href_node); 114 bytenr = ins->bytenr; 115 while (*p) { 116 parent_node = *p; 117 entry = rb_entry(parent_node, struct btrfs_delayed_ref_head, 118 href_node); 119 120 if (bytenr < entry->bytenr) 121 p = &(*p)->rb_left; 122 else if (bytenr > entry->bytenr) 123 p = &(*p)->rb_right; 124 else 125 return entry; 126 } 127 128 rb_link_node(node, parent_node, p); 129 rb_insert_color(node, root); 130 return NULL; 131 } 132 133 static struct btrfs_delayed_ref_node* tree_insert(struct rb_root *root, 134 struct btrfs_delayed_ref_node *ins) 135 { 136 struct rb_node **p = &root->rb_node; 137 struct rb_node *node = &ins->ref_node; 138 struct rb_node *parent_node = NULL; 139 struct btrfs_delayed_ref_node *entry; 140 141 while (*p) { 142 int comp; 143 144 parent_node = *p; 145 entry = rb_entry(parent_node, struct btrfs_delayed_ref_node, 146 ref_node); 147 comp = comp_refs(ins, entry, true); 148 if (comp < 0) 149 p = &(*p)->rb_left; 150 else if (comp > 0) 151 p = &(*p)->rb_right; 152 else 153 return entry; 154 } 155 156 rb_link_node(node, parent_node, p); 157 rb_insert_color(node, root); 158 return NULL; 159 } 160 161 /* 162 * find an head entry based on bytenr. This returns the delayed ref 163 * head if it was able to find one, or NULL if nothing was in that spot. 164 * If return_bigger is given, the next bigger entry is returned if no exact 165 * match is found. 166 */ 167 static struct btrfs_delayed_ref_head * 168 find_ref_head(struct rb_root *root, u64 bytenr, 169 int return_bigger) 170 { 171 struct rb_node *n; 172 struct btrfs_delayed_ref_head *entry; 173 174 n = root->rb_node; 175 entry = NULL; 176 while (n) { 177 entry = rb_entry(n, struct btrfs_delayed_ref_head, href_node); 178 179 if (bytenr < entry->bytenr) 180 n = n->rb_left; 181 else if (bytenr > entry->bytenr) 182 n = n->rb_right; 183 else 184 return entry; 185 } 186 if (entry && return_bigger) { 187 if (bytenr > entry->bytenr) { 188 n = rb_next(&entry->href_node); 189 if (!n) 190 n = rb_first(root); 191 entry = rb_entry(n, struct btrfs_delayed_ref_head, 192 href_node); 193 return entry; 194 } 195 return entry; 196 } 197 return NULL; 198 } 199 200 int btrfs_delayed_ref_lock(struct btrfs_trans_handle *trans, 201 struct btrfs_delayed_ref_head *head) 202 { 203 struct btrfs_delayed_ref_root *delayed_refs; 204 205 delayed_refs = &trans->transaction->delayed_refs; 206 lockdep_assert_held(&delayed_refs->lock); 207 if (mutex_trylock(&head->mutex)) 208 return 0; 209 210 refcount_inc(&head->refs); 211 spin_unlock(&delayed_refs->lock); 212 213 mutex_lock(&head->mutex); 214 spin_lock(&delayed_refs->lock); 215 if (RB_EMPTY_NODE(&head->href_node)) { 216 mutex_unlock(&head->mutex); 217 btrfs_put_delayed_ref_head(head); 218 return -EAGAIN; 219 } 220 btrfs_put_delayed_ref_head(head); 221 return 0; 222 } 223 224 static inline void drop_delayed_ref(struct btrfs_trans_handle *trans, 225 struct btrfs_delayed_ref_root *delayed_refs, 226 struct btrfs_delayed_ref_head *head, 227 struct btrfs_delayed_ref_node *ref) 228 { 229 lockdep_assert_held(&head->lock); 230 rb_erase(&ref->ref_node, &head->ref_tree); 231 RB_CLEAR_NODE(&ref->ref_node); 232 if (!list_empty(&ref->add_list)) 233 list_del(&ref->add_list); 234 ref->in_tree = 0; 235 btrfs_put_delayed_ref(ref); 236 atomic_dec(&delayed_refs->num_entries); 237 if (trans->delayed_ref_updates) 238 trans->delayed_ref_updates--; 239 } 240 241 static bool merge_ref(struct btrfs_trans_handle *trans, 242 struct btrfs_delayed_ref_root *delayed_refs, 243 struct btrfs_delayed_ref_head *head, 244 struct btrfs_delayed_ref_node *ref, 245 u64 seq) 246 { 247 struct btrfs_delayed_ref_node *next; 248 struct rb_node *node = rb_next(&ref->ref_node); 249 bool done = false; 250 251 while (!done && node) { 252 int mod; 253 254 next = rb_entry(node, struct btrfs_delayed_ref_node, ref_node); 255 node = rb_next(node); 256 if (seq && next->seq >= seq) 257 break; 258 if (comp_refs(ref, next, false)) 259 break; 260 261 if (ref->action == next->action) { 262 mod = next->ref_mod; 263 } else { 264 if (ref->ref_mod < next->ref_mod) { 265 swap(ref, next); 266 done = true; 267 } 268 mod = -next->ref_mod; 269 } 270 271 drop_delayed_ref(trans, delayed_refs, head, next); 272 ref->ref_mod += mod; 273 if (ref->ref_mod == 0) { 274 drop_delayed_ref(trans, delayed_refs, head, ref); 275 done = true; 276 } else { 277 /* 278 * Can't have multiples of the same ref on a tree block. 279 */ 280 WARN_ON(ref->type == BTRFS_TREE_BLOCK_REF_KEY || 281 ref->type == BTRFS_SHARED_BLOCK_REF_KEY); 282 } 283 } 284 285 return done; 286 } 287 288 void btrfs_merge_delayed_refs(struct btrfs_trans_handle *trans, 289 struct btrfs_fs_info *fs_info, 290 struct btrfs_delayed_ref_root *delayed_refs, 291 struct btrfs_delayed_ref_head *head) 292 { 293 struct btrfs_delayed_ref_node *ref; 294 struct rb_node *node; 295 u64 seq = 0; 296 297 lockdep_assert_held(&head->lock); 298 299 if (RB_EMPTY_ROOT(&head->ref_tree)) 300 return; 301 302 /* We don't have too many refs to merge for data. */ 303 if (head->is_data) 304 return; 305 306 spin_lock(&fs_info->tree_mod_seq_lock); 307 if (!list_empty(&fs_info->tree_mod_seq_list)) { 308 struct seq_list *elem; 309 310 elem = list_first_entry(&fs_info->tree_mod_seq_list, 311 struct seq_list, list); 312 seq = elem->seq; 313 } 314 spin_unlock(&fs_info->tree_mod_seq_lock); 315 316 again: 317 for (node = rb_first(&head->ref_tree); node; node = rb_next(node)) { 318 ref = rb_entry(node, struct btrfs_delayed_ref_node, ref_node); 319 if (seq && ref->seq >= seq) 320 continue; 321 if (merge_ref(trans, delayed_refs, head, ref, seq)) 322 goto again; 323 } 324 } 325 326 int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info, 327 struct btrfs_delayed_ref_root *delayed_refs, 328 u64 seq) 329 { 330 struct seq_list *elem; 331 int ret = 0; 332 333 spin_lock(&fs_info->tree_mod_seq_lock); 334 if (!list_empty(&fs_info->tree_mod_seq_list)) { 335 elem = list_first_entry(&fs_info->tree_mod_seq_list, 336 struct seq_list, list); 337 if (seq >= elem->seq) { 338 btrfs_debug(fs_info, 339 "holding back delayed_ref %#x.%x, lowest is %#x.%x (%p)", 340 (u32)(seq >> 32), (u32)seq, 341 (u32)(elem->seq >> 32), (u32)elem->seq, 342 delayed_refs); 343 ret = 1; 344 } 345 } 346 347 spin_unlock(&fs_info->tree_mod_seq_lock); 348 return ret; 349 } 350 351 struct btrfs_delayed_ref_head * 352 btrfs_select_ref_head(struct btrfs_trans_handle *trans) 353 { 354 struct btrfs_delayed_ref_root *delayed_refs; 355 struct btrfs_delayed_ref_head *head; 356 u64 start; 357 bool loop = false; 358 359 delayed_refs = &trans->transaction->delayed_refs; 360 361 again: 362 start = delayed_refs->run_delayed_start; 363 head = find_ref_head(&delayed_refs->href_root, start, 1); 364 if (!head && !loop) { 365 delayed_refs->run_delayed_start = 0; 366 start = 0; 367 loop = true; 368 head = find_ref_head(&delayed_refs->href_root, start, 1); 369 if (!head) 370 return NULL; 371 } else if (!head && loop) { 372 return NULL; 373 } 374 375 while (head->processing) { 376 struct rb_node *node; 377 378 node = rb_next(&head->href_node); 379 if (!node) { 380 if (loop) 381 return NULL; 382 delayed_refs->run_delayed_start = 0; 383 start = 0; 384 loop = true; 385 goto again; 386 } 387 head = rb_entry(node, struct btrfs_delayed_ref_head, 388 href_node); 389 } 390 391 head->processing = 1; 392 WARN_ON(delayed_refs->num_heads_ready == 0); 393 delayed_refs->num_heads_ready--; 394 delayed_refs->run_delayed_start = head->bytenr + 395 head->num_bytes; 396 return head; 397 } 398 399 /* 400 * Helper to insert the ref_node to the tail or merge with tail. 401 * 402 * Return 0 for insert. 403 * Return >0 for merge. 404 */ 405 static int insert_delayed_ref(struct btrfs_trans_handle *trans, 406 struct btrfs_delayed_ref_root *root, 407 struct btrfs_delayed_ref_head *href, 408 struct btrfs_delayed_ref_node *ref) 409 { 410 struct btrfs_delayed_ref_node *exist; 411 int mod; 412 int ret = 0; 413 414 spin_lock(&href->lock); 415 exist = tree_insert(&href->ref_tree, ref); 416 if (!exist) 417 goto inserted; 418 419 /* Now we are sure we can merge */ 420 ret = 1; 421 if (exist->action == ref->action) { 422 mod = ref->ref_mod; 423 } else { 424 /* Need to change action */ 425 if (exist->ref_mod < ref->ref_mod) { 426 exist->action = ref->action; 427 mod = -exist->ref_mod; 428 exist->ref_mod = ref->ref_mod; 429 if (ref->action == BTRFS_ADD_DELAYED_REF) 430 list_add_tail(&exist->add_list, 431 &href->ref_add_list); 432 else if (ref->action == BTRFS_DROP_DELAYED_REF) { 433 ASSERT(!list_empty(&exist->add_list)); 434 list_del(&exist->add_list); 435 } else { 436 ASSERT(0); 437 } 438 } else 439 mod = -ref->ref_mod; 440 } 441 exist->ref_mod += mod; 442 443 /* remove existing tail if its ref_mod is zero */ 444 if (exist->ref_mod == 0) 445 drop_delayed_ref(trans, root, href, exist); 446 spin_unlock(&href->lock); 447 return ret; 448 inserted: 449 if (ref->action == BTRFS_ADD_DELAYED_REF) 450 list_add_tail(&ref->add_list, &href->ref_add_list); 451 atomic_inc(&root->num_entries); 452 trans->delayed_ref_updates++; 453 spin_unlock(&href->lock); 454 return ret; 455 } 456 457 /* 458 * helper function to update the accounting in the head ref 459 * existing and update must have the same bytenr 460 */ 461 static noinline void 462 update_existing_head_ref(struct btrfs_delayed_ref_root *delayed_refs, 463 struct btrfs_delayed_ref_head *existing, 464 struct btrfs_delayed_ref_head *update, 465 int *old_ref_mod_ret) 466 { 467 int old_ref_mod; 468 469 BUG_ON(existing->is_data != update->is_data); 470 471 spin_lock(&existing->lock); 472 if (update->must_insert_reserved) { 473 /* if the extent was freed and then 474 * reallocated before the delayed ref 475 * entries were processed, we can end up 476 * with an existing head ref without 477 * the must_insert_reserved flag set. 478 * Set it again here 479 */ 480 existing->must_insert_reserved = update->must_insert_reserved; 481 482 /* 483 * update the num_bytes so we make sure the accounting 484 * is done correctly 485 */ 486 existing->num_bytes = update->num_bytes; 487 488 } 489 490 if (update->extent_op) { 491 if (!existing->extent_op) { 492 existing->extent_op = update->extent_op; 493 } else { 494 if (update->extent_op->update_key) { 495 memcpy(&existing->extent_op->key, 496 &update->extent_op->key, 497 sizeof(update->extent_op->key)); 498 existing->extent_op->update_key = true; 499 } 500 if (update->extent_op->update_flags) { 501 existing->extent_op->flags_to_set |= 502 update->extent_op->flags_to_set; 503 existing->extent_op->update_flags = true; 504 } 505 btrfs_free_delayed_extent_op(update->extent_op); 506 } 507 } 508 /* 509 * update the reference mod on the head to reflect this new operation, 510 * only need the lock for this case cause we could be processing it 511 * currently, for refs we just added we know we're a-ok. 512 */ 513 old_ref_mod = existing->total_ref_mod; 514 if (old_ref_mod_ret) 515 *old_ref_mod_ret = old_ref_mod; 516 existing->ref_mod += update->ref_mod; 517 existing->total_ref_mod += update->ref_mod; 518 519 /* 520 * If we are going to from a positive ref mod to a negative or vice 521 * versa we need to make sure to adjust pending_csums accordingly. 522 */ 523 if (existing->is_data) { 524 if (existing->total_ref_mod >= 0 && old_ref_mod < 0) 525 delayed_refs->pending_csums -= existing->num_bytes; 526 if (existing->total_ref_mod < 0 && old_ref_mod >= 0) 527 delayed_refs->pending_csums += existing->num_bytes; 528 } 529 spin_unlock(&existing->lock); 530 } 531 532 /* 533 * helper function to actually insert a head node into the rbtree. 534 * this does all the dirty work in terms of maintaining the correct 535 * overall modification count. 536 */ 537 static noinline struct btrfs_delayed_ref_head * 538 add_delayed_ref_head(struct btrfs_fs_info *fs_info, 539 struct btrfs_trans_handle *trans, 540 struct btrfs_delayed_ref_head *head_ref, 541 struct btrfs_qgroup_extent_record *qrecord, 542 u64 bytenr, u64 num_bytes, u64 ref_root, u64 reserved, 543 int action, int is_data, int *qrecord_inserted_ret, 544 int *old_ref_mod, int *new_ref_mod) 545 { 546 struct btrfs_delayed_ref_head *existing; 547 struct btrfs_delayed_ref_root *delayed_refs; 548 int count_mod = 1; 549 int must_insert_reserved = 0; 550 int qrecord_inserted = 0; 551 552 /* If reserved is provided, it must be a data extent. */ 553 BUG_ON(!is_data && reserved); 554 555 /* 556 * the head node stores the sum of all the mods, so dropping a ref 557 * should drop the sum in the head node by one. 558 */ 559 if (action == BTRFS_UPDATE_DELAYED_HEAD) 560 count_mod = 0; 561 else if (action == BTRFS_DROP_DELAYED_REF) 562 count_mod = -1; 563 564 /* 565 * BTRFS_ADD_DELAYED_EXTENT means that we need to update 566 * the reserved accounting when the extent is finally added, or 567 * if a later modification deletes the delayed ref without ever 568 * inserting the extent into the extent allocation tree. 569 * ref->must_insert_reserved is the flag used to record 570 * that accounting mods are required. 571 * 572 * Once we record must_insert_reserved, switch the action to 573 * BTRFS_ADD_DELAYED_REF because other special casing is not required. 574 */ 575 if (action == BTRFS_ADD_DELAYED_EXTENT) 576 must_insert_reserved = 1; 577 else 578 must_insert_reserved = 0; 579 580 delayed_refs = &trans->transaction->delayed_refs; 581 582 refcount_set(&head_ref->refs, 1); 583 head_ref->bytenr = bytenr; 584 head_ref->num_bytes = num_bytes; 585 head_ref->ref_mod = count_mod; 586 head_ref->must_insert_reserved = must_insert_reserved; 587 head_ref->is_data = is_data; 588 head_ref->ref_tree = RB_ROOT; 589 INIT_LIST_HEAD(&head_ref->ref_add_list); 590 RB_CLEAR_NODE(&head_ref->href_node); 591 head_ref->processing = 0; 592 head_ref->total_ref_mod = count_mod; 593 head_ref->qgroup_reserved = 0; 594 head_ref->qgroup_ref_root = 0; 595 spin_lock_init(&head_ref->lock); 596 mutex_init(&head_ref->mutex); 597 598 /* Record qgroup extent info if provided */ 599 if (qrecord) { 600 if (ref_root && reserved) { 601 head_ref->qgroup_ref_root = ref_root; 602 head_ref->qgroup_reserved = reserved; 603 } 604 605 qrecord->bytenr = bytenr; 606 qrecord->num_bytes = num_bytes; 607 qrecord->old_roots = NULL; 608 609 if(btrfs_qgroup_trace_extent_nolock(fs_info, 610 delayed_refs, qrecord)) 611 kfree(qrecord); 612 else 613 qrecord_inserted = 1; 614 } 615 616 trace_add_delayed_ref_head(fs_info, head_ref, action); 617 618 existing = htree_insert(&delayed_refs->href_root, 619 &head_ref->href_node); 620 if (existing) { 621 WARN_ON(ref_root && reserved && existing->qgroup_ref_root 622 && existing->qgroup_reserved); 623 update_existing_head_ref(delayed_refs, existing, head_ref, 624 old_ref_mod); 625 /* 626 * we've updated the existing ref, free the newly 627 * allocated ref 628 */ 629 kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref); 630 head_ref = existing; 631 } else { 632 if (old_ref_mod) 633 *old_ref_mod = 0; 634 if (is_data && count_mod < 0) 635 delayed_refs->pending_csums += num_bytes; 636 delayed_refs->num_heads++; 637 delayed_refs->num_heads_ready++; 638 atomic_inc(&delayed_refs->num_entries); 639 trans->delayed_ref_updates++; 640 } 641 if (qrecord_inserted_ret) 642 *qrecord_inserted_ret = qrecord_inserted; 643 if (new_ref_mod) 644 *new_ref_mod = head_ref->total_ref_mod; 645 return head_ref; 646 } 647 648 /* 649 * helper to insert a delayed tree ref into the rbtree. 650 */ 651 static noinline void 652 add_delayed_tree_ref(struct btrfs_fs_info *fs_info, 653 struct btrfs_trans_handle *trans, 654 struct btrfs_delayed_ref_head *head_ref, 655 struct btrfs_delayed_ref_node *ref, u64 bytenr, 656 u64 num_bytes, u64 parent, u64 ref_root, int level, 657 int action) 658 { 659 struct btrfs_delayed_tree_ref *full_ref; 660 struct btrfs_delayed_ref_root *delayed_refs; 661 u64 seq = 0; 662 int ret; 663 664 if (action == BTRFS_ADD_DELAYED_EXTENT) 665 action = BTRFS_ADD_DELAYED_REF; 666 667 if (is_fstree(ref_root)) 668 seq = atomic64_read(&fs_info->tree_mod_seq); 669 delayed_refs = &trans->transaction->delayed_refs; 670 671 /* first set the basic ref node struct up */ 672 refcount_set(&ref->refs, 1); 673 ref->bytenr = bytenr; 674 ref->num_bytes = num_bytes; 675 ref->ref_mod = 1; 676 ref->action = action; 677 ref->is_head = 0; 678 ref->in_tree = 1; 679 ref->seq = seq; 680 RB_CLEAR_NODE(&ref->ref_node); 681 INIT_LIST_HEAD(&ref->add_list); 682 683 full_ref = btrfs_delayed_node_to_tree_ref(ref); 684 full_ref->parent = parent; 685 full_ref->root = ref_root; 686 if (parent) 687 ref->type = BTRFS_SHARED_BLOCK_REF_KEY; 688 else 689 ref->type = BTRFS_TREE_BLOCK_REF_KEY; 690 full_ref->level = level; 691 692 trace_add_delayed_tree_ref(fs_info, ref, full_ref, action); 693 694 ret = insert_delayed_ref(trans, delayed_refs, head_ref, ref); 695 696 /* 697 * XXX: memory should be freed at the same level allocated. 698 * But bad practice is anywhere... Follow it now. Need cleanup. 699 */ 700 if (ret > 0) 701 kmem_cache_free(btrfs_delayed_tree_ref_cachep, full_ref); 702 } 703 704 /* 705 * helper to insert a delayed data ref into the rbtree. 706 */ 707 static noinline void 708 add_delayed_data_ref(struct btrfs_fs_info *fs_info, 709 struct btrfs_trans_handle *trans, 710 struct btrfs_delayed_ref_head *head_ref, 711 struct btrfs_delayed_ref_node *ref, u64 bytenr, 712 u64 num_bytes, u64 parent, u64 ref_root, u64 owner, 713 u64 offset, int action) 714 { 715 struct btrfs_delayed_data_ref *full_ref; 716 struct btrfs_delayed_ref_root *delayed_refs; 717 u64 seq = 0; 718 int ret; 719 720 if (action == BTRFS_ADD_DELAYED_EXTENT) 721 action = BTRFS_ADD_DELAYED_REF; 722 723 delayed_refs = &trans->transaction->delayed_refs; 724 725 if (is_fstree(ref_root)) 726 seq = atomic64_read(&fs_info->tree_mod_seq); 727 728 /* first set the basic ref node struct up */ 729 refcount_set(&ref->refs, 1); 730 ref->bytenr = bytenr; 731 ref->num_bytes = num_bytes; 732 ref->ref_mod = 1; 733 ref->action = action; 734 ref->is_head = 0; 735 ref->in_tree = 1; 736 ref->seq = seq; 737 RB_CLEAR_NODE(&ref->ref_node); 738 INIT_LIST_HEAD(&ref->add_list); 739 740 full_ref = btrfs_delayed_node_to_data_ref(ref); 741 full_ref->parent = parent; 742 full_ref->root = ref_root; 743 if (parent) 744 ref->type = BTRFS_SHARED_DATA_REF_KEY; 745 else 746 ref->type = BTRFS_EXTENT_DATA_REF_KEY; 747 748 full_ref->objectid = owner; 749 full_ref->offset = offset; 750 751 trace_add_delayed_data_ref(fs_info, ref, full_ref, action); 752 753 ret = insert_delayed_ref(trans, delayed_refs, head_ref, ref); 754 if (ret > 0) 755 kmem_cache_free(btrfs_delayed_data_ref_cachep, full_ref); 756 } 757 758 /* 759 * add a delayed tree ref. This does all of the accounting required 760 * to make sure the delayed ref is eventually processed before this 761 * transaction commits. 762 */ 763 int btrfs_add_delayed_tree_ref(struct btrfs_fs_info *fs_info, 764 struct btrfs_trans_handle *trans, 765 u64 bytenr, u64 num_bytes, u64 parent, 766 u64 ref_root, int level, int action, 767 struct btrfs_delayed_extent_op *extent_op, 768 int *old_ref_mod, int *new_ref_mod) 769 { 770 struct btrfs_delayed_tree_ref *ref; 771 struct btrfs_delayed_ref_head *head_ref; 772 struct btrfs_delayed_ref_root *delayed_refs; 773 struct btrfs_qgroup_extent_record *record = NULL; 774 int qrecord_inserted; 775 776 BUG_ON(extent_op && extent_op->is_data); 777 ref = kmem_cache_alloc(btrfs_delayed_tree_ref_cachep, GFP_NOFS); 778 if (!ref) 779 return -ENOMEM; 780 781 head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS); 782 if (!head_ref) 783 goto free_ref; 784 785 if (test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) && 786 is_fstree(ref_root)) { 787 record = kmalloc(sizeof(*record), GFP_NOFS); 788 if (!record) 789 goto free_head_ref; 790 } 791 792 head_ref->extent_op = extent_op; 793 794 delayed_refs = &trans->transaction->delayed_refs; 795 spin_lock(&delayed_refs->lock); 796 797 /* 798 * insert both the head node and the new ref without dropping 799 * the spin lock 800 */ 801 head_ref = add_delayed_ref_head(fs_info, trans, head_ref, record, 802 bytenr, num_bytes, 0, 0, action, 0, 803 &qrecord_inserted, old_ref_mod, 804 new_ref_mod); 805 806 add_delayed_tree_ref(fs_info, trans, head_ref, &ref->node, bytenr, 807 num_bytes, parent, ref_root, level, action); 808 spin_unlock(&delayed_refs->lock); 809 810 if (qrecord_inserted) 811 btrfs_qgroup_trace_extent_post(fs_info, record); 812 813 return 0; 814 815 free_head_ref: 816 kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref); 817 free_ref: 818 kmem_cache_free(btrfs_delayed_tree_ref_cachep, ref); 819 820 return -ENOMEM; 821 } 822 823 /* 824 * add a delayed data ref. it's similar to btrfs_add_delayed_tree_ref. 825 */ 826 int btrfs_add_delayed_data_ref(struct btrfs_fs_info *fs_info, 827 struct btrfs_trans_handle *trans, 828 u64 bytenr, u64 num_bytes, 829 u64 parent, u64 ref_root, 830 u64 owner, u64 offset, u64 reserved, int action, 831 int *old_ref_mod, int *new_ref_mod) 832 { 833 struct btrfs_delayed_data_ref *ref; 834 struct btrfs_delayed_ref_head *head_ref; 835 struct btrfs_delayed_ref_root *delayed_refs; 836 struct btrfs_qgroup_extent_record *record = NULL; 837 int qrecord_inserted; 838 839 ref = kmem_cache_alloc(btrfs_delayed_data_ref_cachep, GFP_NOFS); 840 if (!ref) 841 return -ENOMEM; 842 843 head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS); 844 if (!head_ref) { 845 kmem_cache_free(btrfs_delayed_data_ref_cachep, ref); 846 return -ENOMEM; 847 } 848 849 if (test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) && 850 is_fstree(ref_root)) { 851 record = kmalloc(sizeof(*record), GFP_NOFS); 852 if (!record) { 853 kmem_cache_free(btrfs_delayed_data_ref_cachep, ref); 854 kmem_cache_free(btrfs_delayed_ref_head_cachep, 855 head_ref); 856 return -ENOMEM; 857 } 858 } 859 860 head_ref->extent_op = NULL; 861 862 delayed_refs = &trans->transaction->delayed_refs; 863 spin_lock(&delayed_refs->lock); 864 865 /* 866 * insert both the head node and the new ref without dropping 867 * the spin lock 868 */ 869 head_ref = add_delayed_ref_head(fs_info, trans, head_ref, record, 870 bytenr, num_bytes, ref_root, reserved, 871 action, 1, &qrecord_inserted, 872 old_ref_mod, new_ref_mod); 873 874 add_delayed_data_ref(fs_info, trans, head_ref, &ref->node, bytenr, 875 num_bytes, parent, ref_root, owner, offset, 876 action); 877 spin_unlock(&delayed_refs->lock); 878 879 if (qrecord_inserted) 880 return btrfs_qgroup_trace_extent_post(fs_info, record); 881 return 0; 882 } 883 884 int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info, 885 struct btrfs_trans_handle *trans, 886 u64 bytenr, u64 num_bytes, 887 struct btrfs_delayed_extent_op *extent_op) 888 { 889 struct btrfs_delayed_ref_head *head_ref; 890 struct btrfs_delayed_ref_root *delayed_refs; 891 892 head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS); 893 if (!head_ref) 894 return -ENOMEM; 895 896 head_ref->extent_op = extent_op; 897 898 delayed_refs = &trans->transaction->delayed_refs; 899 spin_lock(&delayed_refs->lock); 900 901 add_delayed_ref_head(fs_info, trans, head_ref, NULL, bytenr, 902 num_bytes, 0, 0, BTRFS_UPDATE_DELAYED_HEAD, 903 extent_op->is_data, NULL, NULL, NULL); 904 905 spin_unlock(&delayed_refs->lock); 906 return 0; 907 } 908 909 /* 910 * this does a simple search for the head node for a given extent. 911 * It must be called with the delayed ref spinlock held, and it returns 912 * the head node if any where found, or NULL if not. 913 */ 914 struct btrfs_delayed_ref_head * 915 btrfs_find_delayed_ref_head(struct btrfs_delayed_ref_root *delayed_refs, u64 bytenr) 916 { 917 return find_ref_head(&delayed_refs->href_root, bytenr, 0); 918 } 919 920 void __cold btrfs_delayed_ref_exit(void) 921 { 922 kmem_cache_destroy(btrfs_delayed_ref_head_cachep); 923 kmem_cache_destroy(btrfs_delayed_tree_ref_cachep); 924 kmem_cache_destroy(btrfs_delayed_data_ref_cachep); 925 kmem_cache_destroy(btrfs_delayed_extent_op_cachep); 926 } 927 928 int __init btrfs_delayed_ref_init(void) 929 { 930 btrfs_delayed_ref_head_cachep = kmem_cache_create( 931 "btrfs_delayed_ref_head", 932 sizeof(struct btrfs_delayed_ref_head), 0, 933 SLAB_MEM_SPREAD, NULL); 934 if (!btrfs_delayed_ref_head_cachep) 935 goto fail; 936 937 btrfs_delayed_tree_ref_cachep = kmem_cache_create( 938 "btrfs_delayed_tree_ref", 939 sizeof(struct btrfs_delayed_tree_ref), 0, 940 SLAB_MEM_SPREAD, NULL); 941 if (!btrfs_delayed_tree_ref_cachep) 942 goto fail; 943 944 btrfs_delayed_data_ref_cachep = kmem_cache_create( 945 "btrfs_delayed_data_ref", 946 sizeof(struct btrfs_delayed_data_ref), 0, 947 SLAB_MEM_SPREAD, NULL); 948 if (!btrfs_delayed_data_ref_cachep) 949 goto fail; 950 951 btrfs_delayed_extent_op_cachep = kmem_cache_create( 952 "btrfs_delayed_extent_op", 953 sizeof(struct btrfs_delayed_extent_op), 0, 954 SLAB_MEM_SPREAD, NULL); 955 if (!btrfs_delayed_extent_op_cachep) 956 goto fail; 957 958 return 0; 959 fail: 960 btrfs_delayed_ref_exit(); 961 return -ENOMEM; 962 } 963