1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2007 Oracle. All rights reserved. 4 */ 5 6 #include <linux/sched.h> 7 #include "ctree.h" 8 #include "disk-io.h" 9 #include "transaction.h" 10 #include "locking.h" 11 #include "accessors.h" 12 #include "messages.h" 13 #include "delalloc-space.h" 14 #include "subpage.h" 15 #include "defrag.h" 16 #include "file-item.h" 17 #include "super.h" 18 #include "compression.h" 19 20 static struct kmem_cache *btrfs_inode_defrag_cachep; 21 22 /* 23 * When auto defrag is enabled we queue up these defrag structs to remember 24 * which inodes need defragging passes. 25 */ 26 struct inode_defrag { 27 struct rb_node rb_node; 28 /* Inode number */ 29 u64 ino; 30 /* 31 * Transid where the defrag was added, we search for extents newer than 32 * this. 33 */ 34 u64 transid; 35 36 /* Root objectid */ 37 u64 root; 38 39 /* 40 * The extent size threshold for autodefrag. 41 * 42 * This value is different for compressed/non-compressed extents, thus 43 * needs to be passed from higher layer. 44 * (aka, inode_should_defrag()) 45 */ 46 u32 extent_thresh; 47 }; 48 49 static int compare_inode_defrag(const struct inode_defrag *defrag1, 50 const struct inode_defrag *defrag2) 51 { 52 if (defrag1->root > defrag2->root) 53 return 1; 54 else if (defrag1->root < defrag2->root) 55 return -1; 56 else if (defrag1->ino > defrag2->ino) 57 return 1; 58 else if (defrag1->ino < defrag2->ino) 59 return -1; 60 else 61 return 0; 62 } 63 64 static int inode_defrag_cmp(struct rb_node *new, const struct rb_node *existing) 65 { 66 const struct inode_defrag *new_defrag = rb_entry(new, struct inode_defrag, rb_node); 67 const struct inode_defrag *existing_defrag = rb_entry(existing, struct inode_defrag, rb_node); 68 69 return compare_inode_defrag(new_defrag, existing_defrag); 70 } 71 72 /* 73 * Insert a record for an inode into the defrag tree. The lock must be held 74 * already. 75 * 76 * If you're inserting a record for an older transid than an existing record, 77 * the transid already in the tree is lowered. 78 */ 79 static int btrfs_insert_inode_defrag(struct btrfs_inode *inode, 80 struct inode_defrag *defrag) 81 { 82 struct btrfs_fs_info *fs_info = inode->root->fs_info; 83 struct rb_node *node; 84 85 node = rb_find_add(&defrag->rb_node, &fs_info->defrag_inodes, inode_defrag_cmp); 86 if (node) { 87 struct inode_defrag *entry; 88 89 entry = rb_entry(node, struct inode_defrag, rb_node); 90 /* 91 * If we're reinserting an entry for an old defrag run, make 92 * sure to lower the transid of our existing record. 93 */ 94 if (defrag->transid < entry->transid) 95 entry->transid = defrag->transid; 96 entry->extent_thresh = min(defrag->extent_thresh, entry->extent_thresh); 97 return -EEXIST; 98 } 99 set_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags); 100 return 0; 101 } 102 103 static inline bool need_auto_defrag(struct btrfs_fs_info *fs_info) 104 { 105 if (!btrfs_test_opt(fs_info, AUTO_DEFRAG)) 106 return false; 107 108 if (btrfs_fs_closing(fs_info)) 109 return false; 110 111 return true; 112 } 113 114 /* 115 * Insert a defrag record for this inode if auto defrag is enabled. No errors 116 * returned as they're not considered fatal. 117 */ 118 void btrfs_add_inode_defrag(struct btrfs_inode *inode, u32 extent_thresh) 119 { 120 struct btrfs_root *root = inode->root; 121 struct btrfs_fs_info *fs_info = root->fs_info; 122 struct inode_defrag *defrag; 123 int ret; 124 125 if (!need_auto_defrag(fs_info)) 126 return; 127 128 if (test_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags)) 129 return; 130 131 defrag = kmem_cache_zalloc(btrfs_inode_defrag_cachep, GFP_NOFS); 132 if (!defrag) 133 return; 134 135 defrag->ino = btrfs_ino(inode); 136 defrag->transid = btrfs_get_root_last_trans(root); 137 defrag->root = btrfs_root_id(root); 138 defrag->extent_thresh = extent_thresh; 139 140 spin_lock(&fs_info->defrag_inodes_lock); 141 if (!test_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags)) { 142 /* 143 * If we set IN_DEFRAG flag and evict the inode from memory, 144 * and then re-read this inode, this new inode doesn't have 145 * IN_DEFRAG flag. At the case, we may find the existed defrag. 146 */ 147 ret = btrfs_insert_inode_defrag(inode, defrag); 148 if (ret) 149 kmem_cache_free(btrfs_inode_defrag_cachep, defrag); 150 } else { 151 kmem_cache_free(btrfs_inode_defrag_cachep, defrag); 152 } 153 spin_unlock(&fs_info->defrag_inodes_lock); 154 } 155 156 /* 157 * Pick the defraggable inode that we want, if it doesn't exist, we will get the 158 * next one. 159 */ 160 static struct inode_defrag *btrfs_pick_defrag_inode( 161 struct btrfs_fs_info *fs_info, u64 root, u64 ino) 162 { 163 struct inode_defrag *entry = NULL; 164 struct inode_defrag tmp; 165 struct rb_node *p; 166 struct rb_node *parent = NULL; 167 int ret; 168 169 tmp.ino = ino; 170 tmp.root = root; 171 172 spin_lock(&fs_info->defrag_inodes_lock); 173 p = fs_info->defrag_inodes.rb_node; 174 while (p) { 175 parent = p; 176 entry = rb_entry(parent, struct inode_defrag, rb_node); 177 178 ret = compare_inode_defrag(&tmp, entry); 179 if (ret < 0) 180 p = parent->rb_left; 181 else if (ret > 0) 182 p = parent->rb_right; 183 else 184 goto out; 185 } 186 187 if (parent && compare_inode_defrag(&tmp, entry) > 0) { 188 parent = rb_next(parent); 189 entry = rb_entry_safe(parent, struct inode_defrag, rb_node); 190 } 191 out: 192 if (entry) 193 rb_erase(parent, &fs_info->defrag_inodes); 194 spin_unlock(&fs_info->defrag_inodes_lock); 195 return entry; 196 } 197 198 void btrfs_cleanup_defrag_inodes(struct btrfs_fs_info *fs_info) 199 { 200 struct inode_defrag *defrag, *next; 201 202 spin_lock(&fs_info->defrag_inodes_lock); 203 204 rbtree_postorder_for_each_entry_safe(defrag, next, 205 &fs_info->defrag_inodes, rb_node) 206 kmem_cache_free(btrfs_inode_defrag_cachep, defrag); 207 208 fs_info->defrag_inodes = RB_ROOT; 209 210 spin_unlock(&fs_info->defrag_inodes_lock); 211 } 212 213 #define BTRFS_DEFRAG_BATCH 1024 214 215 static int btrfs_run_defrag_inode(struct btrfs_fs_info *fs_info, 216 struct inode_defrag *defrag, 217 struct file_ra_state *ra) 218 { 219 struct btrfs_root *inode_root; 220 struct btrfs_inode *inode; 221 struct btrfs_ioctl_defrag_range_args range; 222 int ret = 0; 223 u64 cur = 0; 224 225 again: 226 if (test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state)) 227 goto cleanup; 228 if (!need_auto_defrag(fs_info)) 229 goto cleanup; 230 231 /* Get the inode */ 232 inode_root = btrfs_get_fs_root(fs_info, defrag->root, true); 233 if (IS_ERR(inode_root)) { 234 ret = PTR_ERR(inode_root); 235 goto cleanup; 236 } 237 238 inode = btrfs_iget(defrag->ino, inode_root); 239 btrfs_put_root(inode_root); 240 if (IS_ERR(inode)) { 241 ret = PTR_ERR(inode); 242 goto cleanup; 243 } 244 245 if (cur >= i_size_read(&inode->vfs_inode)) { 246 iput(&inode->vfs_inode); 247 goto cleanup; 248 } 249 250 /* Do a chunk of defrag */ 251 clear_bit(BTRFS_INODE_IN_DEFRAG, &inode->runtime_flags); 252 memset(&range, 0, sizeof(range)); 253 range.len = (u64)-1; 254 range.start = cur; 255 range.extent_thresh = defrag->extent_thresh; 256 file_ra_state_init(ra, inode->vfs_inode.i_mapping); 257 258 scoped_guard(super_write, fs_info->sb) 259 ret = btrfs_defrag_file(inode, ra, &range, 260 defrag->transid, BTRFS_DEFRAG_BATCH); 261 iput(&inode->vfs_inode); 262 263 if (ret < 0) 264 goto cleanup; 265 266 cur = max(cur + fs_info->sectorsize, range.start); 267 goto again; 268 269 cleanup: 270 kmem_cache_free(btrfs_inode_defrag_cachep, defrag); 271 return ret; 272 } 273 274 /* 275 * Run through the list of inodes in the FS that need defragging. 276 */ 277 int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info) 278 { 279 struct inode_defrag *defrag; 280 u64 first_ino = 0; 281 u64 root_objectid = 0; 282 283 atomic_inc(&fs_info->defrag_running); 284 while (1) { 285 struct file_ra_state ra = { 0 }; 286 287 /* Pause the auto defragger. */ 288 if (test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state)) 289 break; 290 291 if (!need_auto_defrag(fs_info)) 292 break; 293 294 /* find an inode to defrag */ 295 defrag = btrfs_pick_defrag_inode(fs_info, root_objectid, first_ino); 296 if (!defrag) { 297 if (root_objectid || first_ino) { 298 root_objectid = 0; 299 first_ino = 0; 300 continue; 301 } else { 302 break; 303 } 304 } 305 306 first_ino = defrag->ino + 1; 307 root_objectid = defrag->root; 308 309 btrfs_run_defrag_inode(fs_info, defrag, &ra); 310 } 311 atomic_dec(&fs_info->defrag_running); 312 313 /* 314 * During unmount, we use the transaction_wait queue to wait for the 315 * defragger to stop. 316 */ 317 wake_up(&fs_info->transaction_wait); 318 return 0; 319 } 320 321 /* 322 * Check if two blocks addresses are close, used by defrag. 323 */ 324 static bool close_blocks(u64 blocknr, u64 other, u32 blocksize) 325 { 326 if (blocknr < other && other - (blocknr + blocksize) < SZ_32K) 327 return true; 328 if (blocknr > other && blocknr - (other + blocksize) < SZ_32K) 329 return true; 330 return false; 331 } 332 333 /* 334 * Go through all the leaves pointed to by a node and reallocate them so that 335 * disk order is close to key order. 336 */ 337 static int btrfs_realloc_node(struct btrfs_trans_handle *trans, 338 struct btrfs_root *root, 339 struct extent_buffer *parent, 340 int start_slot, u64 *last_ret, 341 struct btrfs_key *progress) 342 { 343 struct btrfs_fs_info *fs_info = root->fs_info; 344 const u32 blocksize = fs_info->nodesize; 345 const int end_slot = btrfs_header_nritems(parent) - 1; 346 u64 search_start = *last_ret; 347 u64 last_block = 0; 348 int ret = 0; 349 bool progress_passed = false; 350 351 /* 352 * COWing must happen through a running transaction, which always 353 * matches the current fs generation (it's a transaction with a state 354 * less than TRANS_STATE_UNBLOCKED). If it doesn't, then turn the fs 355 * into error state to prevent the commit of any transaction. 356 */ 357 if (unlikely(trans->transaction != fs_info->running_transaction || 358 trans->transid != fs_info->generation)) { 359 btrfs_abort_transaction(trans, -EUCLEAN); 360 btrfs_crit(fs_info, 361 "unexpected transaction when attempting to reallocate parent %llu for root %llu, transaction %llu running transaction %llu fs generation %llu", 362 parent->start, btrfs_root_id(root), trans->transid, 363 fs_info->running_transaction->transid, 364 fs_info->generation); 365 return -EUCLEAN; 366 } 367 368 if (btrfs_header_nritems(parent) <= 1) 369 return 0; 370 371 for (int i = start_slot; i <= end_slot; i++) { 372 struct extent_buffer *cur; 373 struct btrfs_disk_key disk_key; 374 u64 blocknr; 375 u64 other; 376 bool close = true; 377 378 btrfs_node_key(parent, &disk_key, i); 379 if (!progress_passed && btrfs_comp_keys(&disk_key, progress) < 0) 380 continue; 381 382 progress_passed = true; 383 blocknr = btrfs_node_blockptr(parent, i); 384 if (last_block == 0) 385 last_block = blocknr; 386 387 if (i > 0) { 388 other = btrfs_node_blockptr(parent, i - 1); 389 close = close_blocks(blocknr, other, blocksize); 390 } 391 if (!close && i < end_slot) { 392 other = btrfs_node_blockptr(parent, i + 1); 393 close = close_blocks(blocknr, other, blocksize); 394 } 395 if (close) { 396 last_block = blocknr; 397 continue; 398 } 399 400 cur = btrfs_read_node_slot(parent, i); 401 if (IS_ERR(cur)) 402 return PTR_ERR(cur); 403 if (search_start == 0) 404 search_start = last_block; 405 406 btrfs_tree_lock(cur); 407 ret = btrfs_force_cow_block(trans, root, cur, parent, i, 408 &cur, search_start, 409 min(16 * blocksize, 410 (end_slot - i) * blocksize), 411 BTRFS_NESTING_COW); 412 if (ret) { 413 btrfs_tree_unlock(cur); 414 free_extent_buffer(cur); 415 break; 416 } 417 search_start = cur->start; 418 last_block = cur->start; 419 *last_ret = search_start; 420 btrfs_tree_unlock(cur); 421 free_extent_buffer(cur); 422 } 423 return ret; 424 } 425 426 /* 427 * Defrag all the leaves in a given btree. 428 * Read all the leaves and try to get key order to 429 * better reflect disk order 430 */ 431 432 static int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, 433 struct btrfs_root *root) 434 { 435 struct btrfs_path *path = NULL; 436 struct btrfs_key key; 437 int ret = 0; 438 int wret; 439 int level; 440 int next_key_ret = 0; 441 u64 last_ret = 0; 442 443 if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) 444 goto out; 445 446 path = btrfs_alloc_path(); 447 if (!path) { 448 ret = -ENOMEM; 449 goto out; 450 } 451 452 level = btrfs_header_level(root->node); 453 454 if (level == 0) 455 goto out; 456 457 if (root->defrag_progress.objectid == 0) { 458 struct extent_buffer *root_node; 459 u32 nritems; 460 461 root_node = btrfs_lock_root_node(root); 462 nritems = btrfs_header_nritems(root_node); 463 root->defrag_max.objectid = 0; 464 /* from above we know this is not a leaf */ 465 btrfs_node_key_to_cpu(root_node, &root->defrag_max, 466 nritems - 1); 467 btrfs_tree_unlock(root_node); 468 free_extent_buffer(root_node); 469 memset(&key, 0, sizeof(key)); 470 } else { 471 memcpy(&key, &root->defrag_progress, sizeof(key)); 472 } 473 474 path->keep_locks = true; 475 476 ret = btrfs_search_forward(root, &key, path, BTRFS_OLDEST_GENERATION); 477 if (ret < 0) 478 goto out; 479 if (ret > 0) { 480 ret = 0; 481 goto out; 482 } 483 btrfs_release_path(path); 484 /* 485 * We don't need a lock on a leaf. btrfs_realloc_node() will lock all 486 * leafs from path->nodes[1], so set lowest_level to 1 to avoid later 487 * a deadlock (attempting to write lock an already write locked leaf). 488 */ 489 path->lowest_level = 1; 490 wret = btrfs_search_slot(trans, root, &key, path, 0, 1); 491 492 if (wret < 0) { 493 ret = wret; 494 goto out; 495 } 496 if (!path->nodes[1]) { 497 ret = 0; 498 goto out; 499 } 500 /* 501 * The node at level 1 must always be locked when our path has 502 * keep_locks set and lowest_level is 1, regardless of the value of 503 * path->slots[1]. 504 */ 505 ASSERT(path->locks[1] != 0); 506 ret = btrfs_realloc_node(trans, root, 507 path->nodes[1], 0, 508 &last_ret, 509 &root->defrag_progress); 510 if (ret) { 511 WARN_ON(ret == -EAGAIN); 512 goto out; 513 } 514 /* 515 * Now that we reallocated the node we can find the next key. Note that 516 * btrfs_find_next_key() can release our path and do another search 517 * without COWing, this is because even with path->keep_locks == true, 518 * btrfs_search_slot() / ctree.c:unlock_up() does not keeps a lock on a 519 * node when path->slots[node_level - 1] does not point to the last 520 * item or a slot beyond the last item (ctree.c:unlock_up()). Therefore 521 * we search for the next key after reallocating our node. 522 */ 523 path->slots[1] = btrfs_header_nritems(path->nodes[1]); 524 next_key_ret = btrfs_find_next_key(root, path, &key, 1, 525 BTRFS_OLDEST_GENERATION); 526 if (next_key_ret == 0) { 527 memcpy(&root->defrag_progress, &key, sizeof(key)); 528 ret = -EAGAIN; 529 } 530 out: 531 btrfs_free_path(path); 532 if (ret == -EAGAIN) { 533 if (btrfs_comp_cpu_keys(&root->defrag_max, &root->defrag_progress) > 0) 534 goto done; 535 ret = 0; 536 } 537 done: 538 if (ret != -EAGAIN) 539 memset(&root->defrag_progress, 0, 540 sizeof(root->defrag_progress)); 541 542 return ret; 543 } 544 545 /* 546 * Defrag a given btree. Every leaf in the btree is read and defragmented. 547 */ 548 int btrfs_defrag_root(struct btrfs_root *root) 549 { 550 struct btrfs_fs_info *fs_info = root->fs_info; 551 int ret; 552 553 if (test_and_set_bit(BTRFS_ROOT_DEFRAG_RUNNING, &root->state)) 554 return 0; 555 556 while (1) { 557 struct btrfs_trans_handle *trans; 558 559 trans = btrfs_start_transaction(root, 0); 560 if (IS_ERR(trans)) { 561 ret = PTR_ERR(trans); 562 break; 563 } 564 565 ret = btrfs_defrag_leaves(trans, root); 566 567 btrfs_end_transaction(trans); 568 btrfs_btree_balance_dirty(fs_info); 569 cond_resched(); 570 571 if (btrfs_fs_closing(fs_info) || ret != -EAGAIN) 572 break; 573 574 if (btrfs_defrag_cancelled(fs_info)) { 575 btrfs_debug(fs_info, "defrag_root cancelled"); 576 ret = -EAGAIN; 577 break; 578 } 579 } 580 clear_bit(BTRFS_ROOT_DEFRAG_RUNNING, &root->state); 581 return ret; 582 } 583 584 /* 585 * Defrag specific helper to get an extent map. 586 * 587 * Differences between this and btrfs_get_extent() are: 588 * 589 * - No extent_map will be added to inode->extent_tree 590 * To reduce memory usage in the long run. 591 * 592 * - Extra optimization to skip file extents older than @newer_than 593 * By using btrfs_search_forward() we can skip entire file ranges that 594 * have extents created in past transactions, because btrfs_search_forward() 595 * will not visit leaves and nodes with a generation smaller than given 596 * minimal generation threshold (@newer_than). 597 * 598 * Return valid em if we find a file extent matching the requirement. 599 * Return NULL if we can not find a file extent matching the requirement. 600 * 601 * Return ERR_PTR() for error. 602 */ 603 static struct extent_map *defrag_get_extent(struct btrfs_inode *inode, 604 u64 start, u64 newer_than) 605 { 606 struct btrfs_root *root = inode->root; 607 struct btrfs_file_extent_item *fi; 608 BTRFS_PATH_AUTO_RELEASE(path); 609 struct extent_map *em; 610 struct btrfs_key key; 611 u64 ino = btrfs_ino(inode); 612 int ret; 613 614 em = btrfs_alloc_extent_map(); 615 if (!em) { 616 ret = -ENOMEM; 617 goto err; 618 } 619 620 key.objectid = ino; 621 key.type = BTRFS_EXTENT_DATA_KEY; 622 key.offset = start; 623 624 if (newer_than) { 625 ret = btrfs_search_forward(root, &key, &path, newer_than); 626 if (ret < 0) 627 goto err; 628 /* Can't find anything newer */ 629 if (ret > 0) 630 goto not_found; 631 } else { 632 ret = btrfs_search_slot(NULL, root, &key, &path, 0, 0); 633 if (ret < 0) 634 goto err; 635 } 636 if (path.slots[0] >= btrfs_header_nritems(path.nodes[0])) { 637 /* 638 * If btrfs_search_slot() makes path to point beyond nritems, 639 * we should not have an empty leaf, as this inode must at 640 * least have its INODE_ITEM. 641 */ 642 ASSERT(btrfs_header_nritems(path.nodes[0])); 643 path.slots[0] = btrfs_header_nritems(path.nodes[0]) - 1; 644 } 645 btrfs_item_key_to_cpu(path.nodes[0], &key, path.slots[0]); 646 /* Perfect match, no need to go one slot back */ 647 if (key.objectid == ino && key.type == BTRFS_EXTENT_DATA_KEY && 648 key.offset == start) 649 goto iterate; 650 651 /* We didn't find a perfect match, needs to go one slot back */ 652 if (path.slots[0] > 0) { 653 btrfs_item_key_to_cpu(path.nodes[0], &key, path.slots[0]); 654 if (key.objectid == ino && key.type == BTRFS_EXTENT_DATA_KEY) 655 path.slots[0]--; 656 } 657 658 iterate: 659 /* Iterate through the path to find a file extent covering @start */ 660 while (true) { 661 u64 extent_end; 662 663 if (path.slots[0] >= btrfs_header_nritems(path.nodes[0])) 664 goto next; 665 666 btrfs_item_key_to_cpu(path.nodes[0], &key, path.slots[0]); 667 668 /* 669 * We may go one slot back to INODE_REF/XATTR item, then 670 * need to go forward until we reach an EXTENT_DATA. 671 * But we should still has the correct ino as key.objectid. 672 */ 673 if (WARN_ON(key.objectid < ino) || key.type < BTRFS_EXTENT_DATA_KEY) 674 goto next; 675 676 /* It's beyond our target range, definitely not extent found */ 677 if (key.objectid > ino || key.type > BTRFS_EXTENT_DATA_KEY) 678 goto not_found; 679 680 /* 681 * | |<- File extent ->| 682 * \- start 683 * 684 * This means there is a hole between start and key.offset. 685 */ 686 if (key.offset > start) { 687 em->start = start; 688 em->disk_bytenr = EXTENT_MAP_HOLE; 689 em->disk_num_bytes = 0; 690 em->ram_bytes = 0; 691 em->offset = 0; 692 em->len = key.offset - start; 693 break; 694 } 695 696 fi = btrfs_item_ptr(path.nodes[0], path.slots[0], 697 struct btrfs_file_extent_item); 698 extent_end = btrfs_file_extent_end(&path); 699 700 /* 701 * |<- file extent ->| | 702 * \- start 703 * 704 * We haven't reached start, search next slot. 705 */ 706 if (extent_end <= start) 707 goto next; 708 709 /* Now this extent covers @start, convert it to em */ 710 btrfs_extent_item_to_extent_map(inode, &path, fi, em); 711 break; 712 next: 713 ret = btrfs_next_item(root, &path); 714 if (ret < 0) 715 goto err; 716 if (ret > 0) 717 goto not_found; 718 } 719 return em; 720 721 not_found: 722 btrfs_free_extent_map(em); 723 return NULL; 724 725 err: 726 btrfs_free_extent_map(em); 727 return ERR_PTR(ret); 728 } 729 730 static struct extent_map *defrag_lookup_extent(struct inode *inode, u64 start, 731 u64 newer_than, bool locked) 732 { 733 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 734 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; 735 struct extent_map *em; 736 const u32 sectorsize = BTRFS_I(inode)->root->fs_info->sectorsize; 737 738 /* 739 * Hopefully we have this extent in the tree already, try without the 740 * full extent lock. 741 */ 742 read_lock(&em_tree->lock); 743 em = btrfs_lookup_extent_mapping(em_tree, start, sectorsize); 744 read_unlock(&em_tree->lock); 745 746 /* 747 * We can get a merged extent, in that case, we need to re-search 748 * tree to get the original em for defrag. 749 * 750 * This is because even if we have adjacent extents that are contiguous 751 * and compatible (same type and flags), we still want to defrag them 752 * so that we use less metadata (extent items in the extent tree and 753 * file extent items in the inode's subvolume tree). 754 */ 755 if (em && (em->flags & EXTENT_FLAG_MERGED)) { 756 btrfs_free_extent_map(em); 757 em = NULL; 758 } 759 760 if (!em) { 761 struct extent_state *cached = NULL; 762 u64 end = start + sectorsize - 1; 763 764 /* Get the big lock and read metadata off disk. */ 765 if (!locked) 766 btrfs_lock_extent(io_tree, start, end, &cached); 767 em = defrag_get_extent(BTRFS_I(inode), start, newer_than); 768 if (!locked) 769 btrfs_unlock_extent(io_tree, start, end, &cached); 770 771 if (IS_ERR(em)) 772 return NULL; 773 } 774 775 return em; 776 } 777 778 static u32 get_extent_max_capacity(const struct btrfs_fs_info *fs_info, 779 const struct extent_map *em) 780 { 781 if (btrfs_extent_map_is_compressed(em)) 782 return BTRFS_MAX_COMPRESSED; 783 return fs_info->max_extent_size; 784 } 785 786 static bool defrag_check_next_extent(struct inode *inode, struct extent_map *em, 787 u32 extent_thresh, u64 newer_than, bool locked) 788 { 789 struct btrfs_fs_info *fs_info = inode_to_fs_info(inode); 790 struct extent_map *next; 791 const u64 em_end = btrfs_extent_map_end(em); 792 bool ret = false; 793 794 /* This is the last extent */ 795 if (em_end >= i_size_read(inode)) 796 return false; 797 798 /* 799 * Here we need to pass @newer_then when checking the next extent, or 800 * we will hit a case we mark current extent for defrag, but the next 801 * one will not be a target. 802 * This will just cause extra IO without really reducing the fragments. 803 */ 804 next = defrag_lookup_extent(inode, em_end, newer_than, locked); 805 /* No more em or hole */ 806 if (!next || next->disk_bytenr >= EXTENT_MAP_LAST_BYTE) 807 goto out; 808 if (next->flags & EXTENT_FLAG_PREALLOC) 809 goto out; 810 /* 811 * If the next extent is at its max capacity, defragging current extent 812 * makes no sense, as the total number of extents won't change. 813 */ 814 if (next->len >= get_extent_max_capacity(fs_info, next)) 815 goto out; 816 /* Skip older extent */ 817 if (next->generation < newer_than) 818 goto out; 819 /* Also check extent size */ 820 if (next->len >= extent_thresh) 821 goto out; 822 823 ret = true; 824 out: 825 btrfs_free_extent_map(next); 826 return ret; 827 } 828 829 /* 830 * Prepare one page to be defragged. 831 * 832 * This will ensure: 833 * 834 * - Returned page is locked and has been set up properly. 835 * - No ordered extent exists in the page. 836 * - The page is uptodate. 837 * 838 * NOTE: Caller should also wait for page writeback after the cluster is 839 * prepared, here we don't do writeback wait for each page. 840 */ 841 static struct folio *defrag_prepare_one_folio(struct btrfs_inode *inode, pgoff_t index) 842 { 843 struct address_space *mapping = inode->vfs_inode.i_mapping; 844 gfp_t mask = btrfs_alloc_write_mask(mapping); 845 u64 lock_start; 846 u64 lock_end; 847 struct extent_state *cached_state = NULL; 848 struct folio *folio; 849 int ret; 850 851 again: 852 /* TODO: Add order fgp order flags when large folios are fully enabled. */ 853 folio = __filemap_get_folio(mapping, index, 854 FGP_LOCK | FGP_ACCESSED | FGP_CREAT, mask); 855 if (IS_ERR(folio)) 856 return folio; 857 858 ret = set_folio_extent_mapped(folio); 859 if (ret < 0) { 860 folio_unlock(folio); 861 folio_put(folio); 862 return ERR_PTR(ret); 863 } 864 865 lock_start = folio_pos(folio); 866 lock_end = folio_next_pos(folio) - 1; 867 /* Wait for any existing ordered extent in the range */ 868 while (1) { 869 struct btrfs_ordered_extent *ordered; 870 871 btrfs_lock_extent(&inode->io_tree, lock_start, lock_end, &cached_state); 872 ordered = btrfs_lookup_ordered_range(inode, lock_start, folio_size(folio)); 873 btrfs_unlock_extent(&inode->io_tree, lock_start, lock_end, &cached_state); 874 if (!ordered) 875 break; 876 877 folio_unlock(folio); 878 btrfs_start_ordered_extent(ordered); 879 btrfs_put_ordered_extent(ordered); 880 folio_lock(folio); 881 /* 882 * We unlocked the folio above, so we need check if it was 883 * released or not. 884 */ 885 if (folio->mapping != mapping || !folio->private) { 886 folio_unlock(folio); 887 folio_put(folio); 888 goto again; 889 } 890 } 891 892 /* 893 * Now the page range has no ordered extent any more. Read the page to 894 * make it uptodate. 895 */ 896 if (!folio_test_uptodate(folio)) { 897 btrfs_read_folio(NULL, folio); 898 folio_lock(folio); 899 if (folio->mapping != mapping || !folio->private) { 900 folio_unlock(folio); 901 folio_put(folio); 902 goto again; 903 } 904 if (unlikely(!folio_test_uptodate(folio))) { 905 folio_unlock(folio); 906 folio_put(folio); 907 return ERR_PTR(-EIO); 908 } 909 } 910 return folio; 911 } 912 913 struct defrag_target_range { 914 struct list_head list; 915 u64 start; 916 u64 len; 917 }; 918 919 /* 920 * Collect all valid target extents. 921 * 922 * @start: file offset to lookup 923 * @len: length to lookup 924 * @extent_thresh: file extent size threshold, any extent size >= this value 925 * will be ignored 926 * @newer_than: only defrag extents newer than this value 927 * @do_compress: whether the defrag is doing compression or no-compression 928 * if true, @extent_thresh will be ignored and all regular 929 * file extents meeting @newer_than will be targets. 930 * @locked: if the range has already held extent lock 931 * @target_list: list of targets file extents 932 */ 933 static int defrag_collect_targets(struct btrfs_inode *inode, 934 u64 start, u64 len, u32 extent_thresh, 935 u64 newer_than, bool do_compress, 936 bool locked, struct list_head *target_list, 937 u64 *last_scanned_ret) 938 { 939 struct btrfs_fs_info *fs_info = inode->root->fs_info; 940 bool last_is_target = false; 941 u64 cur = start; 942 int ret = 0; 943 944 while (cur < start + len) { 945 struct extent_map *em; 946 struct defrag_target_range *new; 947 bool next_mergeable = true; 948 u64 range_len; 949 950 last_is_target = false; 951 em = defrag_lookup_extent(&inode->vfs_inode, cur, newer_than, locked); 952 if (!em) 953 break; 954 955 /* 956 * If the file extent is an inlined one, we may still want to 957 * defrag it (fallthrough) if it will cause a regular extent. 958 * This is for users who want to convert inline extents to 959 * regular ones through max_inline= mount option. 960 */ 961 if (em->disk_bytenr == EXTENT_MAP_INLINE && 962 em->len <= inode->root->fs_info->max_inline) 963 goto next; 964 965 /* Skip holes and preallocated extents. */ 966 if (em->disk_bytenr == EXTENT_MAP_HOLE || 967 (em->flags & EXTENT_FLAG_PREALLOC)) 968 goto next; 969 970 /* Skip older extent */ 971 if (em->generation < newer_than) 972 goto next; 973 974 /* This em is under writeback, no need to defrag */ 975 if (em->generation == (u64)-1) 976 goto next; 977 978 /* 979 * Our start offset might be in the middle of an existing extent 980 * map, so take that into account. 981 */ 982 range_len = em->len - (cur - em->start); 983 /* 984 * If this range of the extent map is already flagged for delalloc, 985 * skip it, because: 986 * 987 * 1) We could deadlock later, when trying to reserve space for 988 * delalloc, because in case we can't immediately reserve space 989 * the flusher can start delalloc and wait for the respective 990 * ordered extents to complete. The deadlock would happen 991 * because we do the space reservation while holding the range 992 * locked, and starting writeback, or finishing an ordered 993 * extent, requires locking the range; 994 * 995 * 2) If there's delalloc there, it means there's dirty pages for 996 * which writeback has not started yet (we clean the delalloc 997 * flag when starting writeback and after creating an ordered 998 * extent). If we mark pages in an adjacent range for defrag, 999 * then we will have a larger contiguous range for delalloc, 1000 * very likely resulting in a larger extent after writeback is 1001 * triggered (except in a case of free space fragmentation). 1002 */ 1003 if (btrfs_test_range_bit_exists(&inode->io_tree, cur, cur + range_len - 1, 1004 EXTENT_DELALLOC)) 1005 goto next; 1006 1007 /* 1008 * For do_compress case, we want to compress all valid file 1009 * extents, thus no @extent_thresh or mergeable check. 1010 */ 1011 if (do_compress) 1012 goto add; 1013 1014 /* Skip too large extent */ 1015 if (em->len >= extent_thresh) 1016 goto next; 1017 1018 /* 1019 * Skip extents already at its max capacity, this is mostly for 1020 * compressed extents, which max cap is only 128K. 1021 */ 1022 if (em->len >= get_extent_max_capacity(fs_info, em)) 1023 goto next; 1024 1025 /* 1026 * Normally there are no more extents after an inline one, thus 1027 * @next_mergeable will normally be false and not defragged. 1028 * So if an inline extent passed all above checks, just add it 1029 * for defrag, and be converted to regular extents. 1030 */ 1031 if (em->disk_bytenr == EXTENT_MAP_INLINE) 1032 goto add; 1033 1034 next_mergeable = defrag_check_next_extent(&inode->vfs_inode, em, 1035 extent_thresh, newer_than, locked); 1036 if (!next_mergeable) { 1037 struct defrag_target_range *last; 1038 1039 /* Empty target list, no way to merge with last entry */ 1040 if (list_empty(target_list)) 1041 goto next; 1042 last = list_last_entry(target_list, 1043 struct defrag_target_range, list); 1044 /* Not mergeable with last entry */ 1045 if (last->start + last->len != cur) 1046 goto next; 1047 1048 /* Mergeable, fall through to add it to @target_list. */ 1049 } 1050 1051 add: 1052 last_is_target = true; 1053 range_len = min(btrfs_extent_map_end(em), start + len) - cur; 1054 /* 1055 * This one is a good target, check if it can be merged into 1056 * last range of the target list. 1057 */ 1058 if (!list_empty(target_list)) { 1059 struct defrag_target_range *last; 1060 1061 last = list_last_entry(target_list, 1062 struct defrag_target_range, list); 1063 ASSERT(last->start + last->len <= cur); 1064 if (last->start + last->len == cur) { 1065 /* Mergeable, enlarge the last entry */ 1066 last->len += range_len; 1067 goto next; 1068 } 1069 /* Fall through to allocate a new entry */ 1070 } 1071 1072 /* Allocate new defrag_target_range */ 1073 new = kmalloc_obj(*new, GFP_NOFS); 1074 if (!new) { 1075 btrfs_free_extent_map(em); 1076 ret = -ENOMEM; 1077 break; 1078 } 1079 new->start = cur; 1080 new->len = range_len; 1081 list_add_tail(&new->list, target_list); 1082 1083 next: 1084 cur = btrfs_extent_map_end(em); 1085 btrfs_free_extent_map(em); 1086 } 1087 if (ret < 0) { 1088 struct defrag_target_range *entry; 1089 struct defrag_target_range *tmp; 1090 1091 list_for_each_entry_safe(entry, tmp, target_list, list) { 1092 list_del(&entry->list); 1093 kfree(entry); 1094 } 1095 } 1096 if (!ret && last_scanned_ret) { 1097 /* 1098 * If the last extent is not a target, the caller can skip to 1099 * the end of that extent. 1100 * Otherwise, we can only go the end of the specified range. 1101 */ 1102 if (!last_is_target) 1103 *last_scanned_ret = max(cur, *last_scanned_ret); 1104 else 1105 *last_scanned_ret = max(start + len, *last_scanned_ret); 1106 } 1107 return ret; 1108 } 1109 1110 #define CLUSTER_SIZE (SZ_256K) 1111 static_assert(PAGE_ALIGNED(CLUSTER_SIZE)); 1112 1113 /* 1114 * Defrag one contiguous target range. 1115 * 1116 * @inode: target inode 1117 * @target: target range to defrag 1118 * @pages: locked pages covering the defrag range 1119 * @nr_pages: number of locked pages 1120 * 1121 * Caller should ensure: 1122 * 1123 * - Pages are prepared 1124 * Pages should be locked, no ordered extent in the pages range, 1125 * no writeback. 1126 * 1127 * - Extent bits are locked 1128 */ 1129 static void defrag_one_locked_target(struct btrfs_inode *inode, 1130 struct defrag_target_range *target, 1131 struct folio **folios, int nr_pages, 1132 struct extent_state **cached_state) 1133 { 1134 struct btrfs_fs_info *fs_info = inode->root->fs_info; 1135 const u64 start = target->start; 1136 const u64 len = target->len; 1137 1138 btrfs_clear_extent_bit(&inode->io_tree, start, start + len - 1, 1139 EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | 1140 EXTENT_DEFRAG, cached_state); 1141 btrfs_set_extent_bit(&inode->io_tree, start, start + len - 1, 1142 EXTENT_DELALLOC | EXTENT_DEFRAG, cached_state); 1143 1144 /* 1145 * Update the page status. 1146 * Due to possible large folios, we have to check all folios one by one. 1147 */ 1148 for (int i = 0; i < nr_pages && folios[i]; i++) { 1149 struct folio *folio = folios[i]; 1150 1151 if (!folio) 1152 break; 1153 if (start >= folio_next_pos(folio) || 1154 start + len <= folio_pos(folio)) 1155 continue; 1156 btrfs_folio_clamp_set_dirty(fs_info, folio, start, len); 1157 } 1158 } 1159 1160 static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len, 1161 u32 extent_thresh, u64 newer_than, bool do_compress, 1162 u64 *last_scanned_ret) 1163 { 1164 struct extent_state *cached_state = NULL; 1165 struct defrag_target_range *entry; 1166 struct defrag_target_range *tmp; 1167 LIST_HEAD(target_list); 1168 struct folio AUTO_KFREE(*folios); 1169 const u32 sectorsize = inode->root->fs_info->sectorsize; 1170 u64 cur = start; 1171 const unsigned int nr_pages = ((start + len - 1) >> PAGE_SHIFT) - 1172 (start >> PAGE_SHIFT) + 1; 1173 struct extent_changeset *data_reserved = NULL; 1174 u64 last_defrag_end = start; 1175 int ret = 0; 1176 1177 ASSERT(nr_pages <= CLUSTER_SIZE / PAGE_SIZE); 1178 ASSERT(IS_ALIGNED(start, sectorsize) && IS_ALIGNED(len, sectorsize)); 1179 1180 folios = kzalloc_objs(struct folio *, nr_pages, GFP_NOFS); 1181 if (!folios) 1182 return -ENOMEM; 1183 1184 /* 1185 * Reserve delalloc space before locking the range and before locking 1186 * and dirtying any folios - otherwise we could deadlock, for example 1187 * after defrag of one range we dirty folios and keep them locked when 1188 * we move to the next range, so reserving delalloc space right before 1189 * each range could trigger flushing of delalloc and deadlock on the 1190 * extent lock or trigger a transaction commit with flushoncommit, which 1191 * can either deadlock on the lock of a folio made dirty in the previous 1192 * range or the extent lock. 1193 */ 1194 ret = btrfs_delalloc_reserve_space(inode, &data_reserved, start, len); 1195 if (ret < 0) 1196 return ret; 1197 1198 /* Prepare all pages */ 1199 for (int i = 0; cur < start + len && i < nr_pages; i++) { 1200 folios[i] = defrag_prepare_one_folio(inode, cur >> PAGE_SHIFT); 1201 if (IS_ERR(folios[i])) { 1202 ret = PTR_ERR(folios[i]); 1203 folios[i] = NULL; 1204 goto free_folios; 1205 } 1206 cur = folio_next_pos(folios[i]); 1207 } 1208 for (int i = 0; i < nr_pages; i++) { 1209 if (!folios[i]) 1210 break; 1211 folio_wait_writeback(folios[i]); 1212 } 1213 1214 /* We should get at least one folio. */ 1215 ASSERT(folios[0]); 1216 /* Lock the pages range */ 1217 btrfs_lock_extent(&inode->io_tree, folio_pos(folios[0]), cur - 1, &cached_state); 1218 /* 1219 * Now we have a consistent view about the extent map, re-check 1220 * which range really needs to be defragged. 1221 * 1222 * And this time we have extent locked already, pass @locked = true 1223 * so that we won't relock the extent range and cause deadlock. 1224 */ 1225 ret = defrag_collect_targets(inode, start, len, extent_thresh, 1226 newer_than, do_compress, true, 1227 &target_list, last_scanned_ret); 1228 if (ret < 0) 1229 goto unlock_extent; 1230 1231 list_for_each_entry_safe(entry, tmp, &target_list, list) { 1232 defrag_one_locked_target(inode, entry, folios, nr_pages, &cached_state); 1233 if (entry->start > last_defrag_end) 1234 btrfs_delalloc_release_space(inode, data_reserved, last_defrag_end, 1235 entry->start - last_defrag_end, true); 1236 last_defrag_end = entry->start + entry->len; 1237 kfree(entry); 1238 } 1239 unlock_extent: 1240 btrfs_unlock_extent(&inode->io_tree, folio_pos(folios[0]), cur - 1, &cached_state); 1241 free_folios: 1242 for (int i = 0; i < nr_pages; i++) { 1243 if (!folios[i]) 1244 break; 1245 folio_unlock(folios[i]); 1246 folio_put(folios[i]); 1247 } 1248 btrfs_delalloc_release_extents(inode, len); 1249 if (last_defrag_end < start + len) 1250 btrfs_delalloc_release_space(inode, data_reserved, last_defrag_end, 1251 start + len - last_defrag_end, true); 1252 extent_changeset_free(data_reserved); 1253 1254 return ret; 1255 } 1256 1257 static int defrag_one_cluster(struct btrfs_inode *inode, 1258 struct file_ra_state *ra, 1259 u64 start, u32 len, u32 extent_thresh, 1260 u64 newer_than, bool do_compress, 1261 unsigned long *sectors_defragged, 1262 unsigned long max_sectors, 1263 u64 *last_scanned_ret) 1264 { 1265 const u32 sectorsize = inode->root->fs_info->sectorsize; 1266 struct defrag_target_range *entry; 1267 struct defrag_target_range *tmp; 1268 LIST_HEAD(target_list); 1269 int ret; 1270 1271 ret = defrag_collect_targets(inode, start, len, extent_thresh, 1272 newer_than, do_compress, false, 1273 &target_list, NULL); 1274 if (ret < 0) 1275 goto out; 1276 1277 list_for_each_entry(entry, &target_list, list) { 1278 u32 range_len = entry->len; 1279 1280 /* Reached or beyond the limit */ 1281 if (max_sectors && *sectors_defragged >= max_sectors) { 1282 ret = 1; 1283 break; 1284 } 1285 1286 if (max_sectors) 1287 range_len = min_t(u32, range_len, 1288 (max_sectors - *sectors_defragged) * sectorsize); 1289 1290 /* 1291 * If defrag_one_range() has updated last_scanned_ret, 1292 * our range may already be invalid (e.g. hole punched). 1293 * Skip if our range is before last_scanned_ret, as there is 1294 * no need to defrag the range anymore. 1295 */ 1296 if (entry->start + range_len <= *last_scanned_ret) 1297 continue; 1298 1299 page_cache_sync_readahead(inode->vfs_inode.i_mapping, 1300 ra, NULL, entry->start >> PAGE_SHIFT, 1301 ((entry->start + range_len - 1) >> PAGE_SHIFT) - 1302 (entry->start >> PAGE_SHIFT) + 1); 1303 /* 1304 * Here we may not defrag any range if holes are punched before 1305 * we locked the pages. 1306 * But that's fine, it only affects the @sectors_defragged 1307 * accounting. 1308 */ 1309 ret = defrag_one_range(inode, entry->start, range_len, 1310 extent_thresh, newer_than, do_compress, 1311 last_scanned_ret); 1312 if (ret < 0) 1313 break; 1314 *sectors_defragged += range_len >> 1315 inode->root->fs_info->sectorsize_bits; 1316 } 1317 out: 1318 list_for_each_entry_safe(entry, tmp, &target_list, list) 1319 kfree(entry); 1320 if (ret >= 0) 1321 *last_scanned_ret = max(*last_scanned_ret, start + len); 1322 return ret; 1323 } 1324 1325 /* 1326 * Entry point to file defragmentation. 1327 * 1328 * @inode: inode to be defragged 1329 * @ra: readahead state 1330 * @range: defrag options including range and flags 1331 * @newer_than: minimum transid to defrag 1332 * @max_to_defrag: max number of sectors to be defragged, if 0, the whole inode 1333 * will be defragged. 1334 * 1335 * Return <0 for error. 1336 * Return >=0 for the number of sectors defragged, and range->start will be updated 1337 * to indicate the file offset where next defrag should be started at. 1338 * (Mostly for autodefrag, which sets @max_to_defrag thus we may exit early without 1339 * defragging all the range). 1340 */ 1341 int btrfs_defrag_file(struct btrfs_inode *inode, struct file_ra_state *ra, 1342 struct btrfs_ioctl_defrag_range_args *range, 1343 u64 newer_than, unsigned long max_to_defrag) 1344 { 1345 struct btrfs_fs_info *fs_info = inode->root->fs_info; 1346 unsigned long sectors_defragged = 0; 1347 u64 isize = i_size_read(&inode->vfs_inode); 1348 u64 cur; 1349 u64 last_byte; 1350 bool do_compress = (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS); 1351 bool no_compress = (range->flags & BTRFS_DEFRAG_RANGE_NOCOMPRESS); 1352 int compress_type = BTRFS_COMPRESS_ZLIB; 1353 int compress_level = 0; 1354 int ret = 0; 1355 u32 extent_thresh = range->extent_thresh; 1356 pgoff_t start_index; 1357 1358 ASSERT(ra); 1359 1360 if (isize == 0) 1361 return 0; 1362 1363 if (range->start >= isize) 1364 return -EINVAL; 1365 1366 if (do_compress) { 1367 if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS_LEVEL) { 1368 if (range->compress.type >= BTRFS_NR_COMPRESS_TYPES) 1369 return -EINVAL; 1370 if (range->compress.type) { 1371 compress_type = range->compress.type; 1372 compress_level = range->compress.level; 1373 if (!btrfs_compress_level_valid(compress_type, compress_level)) 1374 return -EINVAL; 1375 } 1376 } else { 1377 if (range->compress_type >= BTRFS_NR_COMPRESS_TYPES) 1378 return -EINVAL; 1379 if (range->compress_type) 1380 compress_type = range->compress_type; 1381 } 1382 } else if (range->flags & BTRFS_DEFRAG_RANGE_NOCOMPRESS) { 1383 compress_type = BTRFS_DEFRAG_DONT_COMPRESS; 1384 compress_level = 1; 1385 } 1386 1387 if (extent_thresh == 0) 1388 extent_thresh = SZ_256K; 1389 1390 if (range->start + range->len > range->start) { 1391 /* Got a specific range */ 1392 last_byte = min(isize, range->start + range->len); 1393 } else { 1394 /* Defrag until file end */ 1395 last_byte = isize; 1396 } 1397 1398 /* Align the range */ 1399 cur = round_down(range->start, fs_info->sectorsize); 1400 last_byte = round_up(last_byte, fs_info->sectorsize) - 1; 1401 1402 /* 1403 * Make writeback start from the beginning of the range, so that the 1404 * defrag range can be written sequentially. 1405 */ 1406 start_index = cur >> PAGE_SHIFT; 1407 if (start_index < inode->vfs_inode.i_mapping->writeback_index) 1408 inode->vfs_inode.i_mapping->writeback_index = start_index; 1409 1410 while (cur < last_byte) { 1411 const unsigned long prev_sectors_defragged = sectors_defragged; 1412 u64 last_scanned = cur; 1413 u64 cluster_end; 1414 1415 if (btrfs_defrag_cancelled(fs_info)) { 1416 ret = -EAGAIN; 1417 break; 1418 } 1419 1420 /* We want the cluster end at page boundary when possible */ 1421 cluster_end = (((cur >> PAGE_SHIFT) + 1422 (SZ_256K >> PAGE_SHIFT)) << PAGE_SHIFT) - 1; 1423 cluster_end = min(cluster_end, last_byte); 1424 1425 btrfs_inode_lock(inode, 0); 1426 if (IS_SWAPFILE(&inode->vfs_inode)) { 1427 ret = -ETXTBSY; 1428 btrfs_inode_unlock(inode, 0); 1429 break; 1430 } 1431 if (!(inode->vfs_inode.i_sb->s_flags & SB_ACTIVE)) { 1432 btrfs_inode_unlock(inode, 0); 1433 break; 1434 } 1435 if (do_compress || no_compress) { 1436 inode->defrag_compress = compress_type; 1437 inode->defrag_compress_level = compress_level; 1438 } 1439 ret = defrag_one_cluster(inode, ra, cur, 1440 cluster_end + 1 - cur, extent_thresh, 1441 newer_than, do_compress || no_compress, 1442 §ors_defragged, 1443 max_to_defrag, &last_scanned); 1444 1445 if (sectors_defragged > prev_sectors_defragged) 1446 balance_dirty_pages_ratelimited(inode->vfs_inode.i_mapping); 1447 1448 btrfs_inode_unlock(inode, 0); 1449 if (ret < 0) 1450 break; 1451 cur = max(cluster_end + 1, last_scanned); 1452 if (ret > 0) { 1453 ret = 0; 1454 break; 1455 } 1456 cond_resched(); 1457 } 1458 1459 /* 1460 * Update range.start for autodefrag, this will indicate where to start 1461 * in next run. 1462 */ 1463 range->start = cur; 1464 if (sectors_defragged) { 1465 /* 1466 * We have defragged some sectors, for compression case they 1467 * need to be written back immediately. 1468 */ 1469 if (range->flags & BTRFS_DEFRAG_RANGE_START_IO) { 1470 filemap_flush(inode->vfs_inode.i_mapping); 1471 if (test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT, 1472 &inode->runtime_flags)) 1473 filemap_flush(inode->vfs_inode.i_mapping); 1474 } 1475 if (range->compress_type == BTRFS_COMPRESS_LZO) 1476 btrfs_set_fs_incompat(fs_info, COMPRESS_LZO); 1477 else if (range->compress_type == BTRFS_COMPRESS_ZSTD) 1478 btrfs_set_fs_incompat(fs_info, COMPRESS_ZSTD); 1479 ret = sectors_defragged; 1480 } 1481 if (do_compress || no_compress) { 1482 btrfs_inode_lock(inode, 0); 1483 inode->defrag_compress = BTRFS_COMPRESS_NONE; 1484 btrfs_inode_unlock(inode, 0); 1485 } 1486 return ret; 1487 } 1488 1489 void __cold btrfs_auto_defrag_exit(void) 1490 { 1491 kmem_cache_destroy(btrfs_inode_defrag_cachep); 1492 } 1493 1494 int __init btrfs_auto_defrag_init(void) 1495 { 1496 btrfs_inode_defrag_cachep = kmem_cache_create("btrfs_inode_defrag", 1497 sizeof(struct inode_defrag), 0, 0, NULL); 1498 if (!btrfs_inode_defrag_cachep) 1499 return -ENOMEM; 1500 1501 return 0; 1502 } 1503