1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2011 Fujitsu. All rights reserved. 4 * Written by Miao Xie <miaox@cn.fujitsu.com> 5 */ 6 7 #include <linux/slab.h> 8 #include <linux/iversion.h> 9 #include <linux/error-injection.h> 10 #include "ctree.h" 11 #include "fs.h" 12 #include "messages.h" 13 #include "misc.h" 14 #include "delayed-inode.h" 15 #include "disk-io.h" 16 #include "transaction.h" 17 #include "qgroup.h" 18 #include "locking.h" 19 #include "inode-item.h" 20 #include "space-info.h" 21 #include "accessors.h" 22 #include "file-item.h" 23 24 #define BTRFS_DELAYED_WRITEBACK 512 25 #define BTRFS_DELAYED_BACKGROUND 128 26 #define BTRFS_DELAYED_BATCH 16 27 28 static struct kmem_cache *delayed_node_cache; 29 30 int __init btrfs_delayed_inode_init(void) 31 { 32 delayed_node_cache = KMEM_CACHE(btrfs_delayed_node, 0); 33 if (!delayed_node_cache) 34 return -ENOMEM; 35 return 0; 36 } 37 38 void __cold btrfs_delayed_inode_exit(void) 39 { 40 kmem_cache_destroy(delayed_node_cache); 41 } 42 43 void btrfs_init_delayed_root(struct btrfs_delayed_root *delayed_root) 44 { 45 atomic_set(&delayed_root->items, 0); 46 atomic_set(&delayed_root->items_seq, 0); 47 delayed_root->nodes = 0; 48 spin_lock_init(&delayed_root->lock); 49 init_waitqueue_head(&delayed_root->wait); 50 INIT_LIST_HEAD(&delayed_root->node_list); 51 INIT_LIST_HEAD(&delayed_root->prepare_list); 52 } 53 54 static inline void btrfs_init_delayed_node( 55 struct btrfs_delayed_node *delayed_node, 56 struct btrfs_root *root, u64 inode_id) 57 { 58 delayed_node->root = root; 59 delayed_node->inode_id = inode_id; 60 refcount_set(&delayed_node->refs, 0); 61 btrfs_delayed_node_ref_tracker_dir_init(delayed_node); 62 delayed_node->ins_root = RB_ROOT_CACHED; 63 delayed_node->del_root = RB_ROOT_CACHED; 64 mutex_init(&delayed_node->mutex); 65 INIT_LIST_HEAD(&delayed_node->n_list); 66 INIT_LIST_HEAD(&delayed_node->p_list); 67 } 68 69 static struct btrfs_delayed_node *btrfs_get_delayed_node( 70 struct btrfs_inode *btrfs_inode, 71 struct btrfs_ref_tracker *tracker) 72 { 73 struct btrfs_root *root = btrfs_inode->root; 74 u64 ino = btrfs_ino(btrfs_inode); 75 struct btrfs_delayed_node *node; 76 77 node = READ_ONCE(btrfs_inode->delayed_node); 78 if (node) { 79 refcount_inc(&node->refs); 80 btrfs_delayed_node_ref_tracker_alloc(node, tracker, GFP_NOFS); 81 return node; 82 } 83 84 xa_lock(&root->delayed_nodes); 85 node = xa_load(&root->delayed_nodes, ino); 86 87 if (node) { 88 if (btrfs_inode->delayed_node) { 89 refcount_inc(&node->refs); /* can be accessed */ 90 btrfs_delayed_node_ref_tracker_alloc(node, tracker, GFP_ATOMIC); 91 BUG_ON(btrfs_inode->delayed_node != node); 92 xa_unlock(&root->delayed_nodes); 93 return node; 94 } 95 96 /* 97 * It's possible that we're racing into the middle of removing 98 * this node from the xarray. In this case, the refcount 99 * was zero and it should never go back to one. Just return 100 * NULL like it was never in the xarray at all; our release 101 * function is in the process of removing it. 102 * 103 * Some implementations of refcount_inc refuse to bump the 104 * refcount once it has hit zero. If we don't do this dance 105 * here, refcount_inc() may decide to just WARN_ONCE() instead 106 * of actually bumping the refcount. 107 * 108 * If this node is properly in the xarray, we want to bump the 109 * refcount twice, once for the inode and once for this get 110 * operation. 111 */ 112 if (refcount_inc_not_zero(&node->refs)) { 113 refcount_inc(&node->refs); 114 btrfs_delayed_node_ref_tracker_alloc(node, tracker, GFP_ATOMIC); 115 btrfs_delayed_node_ref_tracker_alloc(node, &node->inode_cache_tracker, 116 GFP_ATOMIC); 117 btrfs_inode->delayed_node = node; 118 } else { 119 node = NULL; 120 } 121 122 xa_unlock(&root->delayed_nodes); 123 return node; 124 } 125 xa_unlock(&root->delayed_nodes); 126 127 return NULL; 128 } 129 130 /* 131 * Look up an existing delayed node associated with @btrfs_inode or create a new 132 * one and insert it to the delayed nodes of the root. 133 * 134 * Return the delayed node, or error pointer on failure. 135 */ 136 static struct btrfs_delayed_node *btrfs_get_or_create_delayed_node( 137 struct btrfs_inode *btrfs_inode, 138 struct btrfs_ref_tracker *tracker) 139 { 140 struct btrfs_delayed_node *node; 141 struct btrfs_root *root = btrfs_inode->root; 142 u64 ino = btrfs_ino(btrfs_inode); 143 int ret; 144 void *ptr; 145 146 again: 147 node = btrfs_get_delayed_node(btrfs_inode, tracker); 148 if (node) 149 return node; 150 151 node = kmem_cache_zalloc(delayed_node_cache, GFP_NOFS); 152 if (!node) 153 return ERR_PTR(-ENOMEM); 154 btrfs_init_delayed_node(node, root, ino); 155 156 /* Cached in the inode and can be accessed. */ 157 refcount_set(&node->refs, 2); 158 btrfs_delayed_node_ref_tracker_alloc(node, tracker, GFP_NOFS); 159 btrfs_delayed_node_ref_tracker_alloc(node, &node->inode_cache_tracker, GFP_NOFS); 160 161 /* Allocate and reserve the slot, from now it can return a NULL from xa_load(). */ 162 ret = xa_reserve(&root->delayed_nodes, ino, GFP_NOFS); 163 if (ret == -ENOMEM) 164 goto cleanup; 165 166 xa_lock(&root->delayed_nodes); 167 ptr = xa_load(&root->delayed_nodes, ino); 168 if (ptr) { 169 /* Somebody inserted it, go back and read it. */ 170 xa_unlock(&root->delayed_nodes); 171 goto cleanup; 172 } 173 ptr = __xa_store(&root->delayed_nodes, ino, node, GFP_ATOMIC); 174 ASSERT(xa_err(ptr) != -EINVAL); 175 ASSERT(xa_err(ptr) != -ENOMEM); 176 ASSERT(ptr == NULL); 177 btrfs_inode->delayed_node = node; 178 xa_unlock(&root->delayed_nodes); 179 180 return node; 181 cleanup: 182 btrfs_delayed_node_ref_tracker_free(node, tracker); 183 btrfs_delayed_node_ref_tracker_free(node, &node->inode_cache_tracker); 184 btrfs_delayed_node_ref_tracker_dir_exit(node); 185 kmem_cache_free(delayed_node_cache, node); 186 if (ret) 187 return ERR_PTR(ret); 188 goto again; 189 } 190 191 /* 192 * Call it when holding delayed_node->mutex 193 * 194 * If mod = 1, add this node into the prepared list. 195 */ 196 static void btrfs_queue_delayed_node(struct btrfs_delayed_root *root, 197 struct btrfs_delayed_node *node, 198 int mod) 199 { 200 spin_lock(&root->lock); 201 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { 202 if (!list_empty(&node->p_list)) 203 list_move_tail(&node->p_list, &root->prepare_list); 204 else if (mod) 205 list_add_tail(&node->p_list, &root->prepare_list); 206 } else { 207 list_add_tail(&node->n_list, &root->node_list); 208 list_add_tail(&node->p_list, &root->prepare_list); 209 refcount_inc(&node->refs); /* inserted into list */ 210 btrfs_delayed_node_ref_tracker_alloc(node, &node->node_list_tracker, 211 GFP_ATOMIC); 212 root->nodes++; 213 set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); 214 } 215 spin_unlock(&root->lock); 216 } 217 218 /* Call it when holding delayed_node->mutex */ 219 static void btrfs_dequeue_delayed_node(struct btrfs_delayed_root *root, 220 struct btrfs_delayed_node *node) 221 { 222 spin_lock(&root->lock); 223 if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { 224 root->nodes--; 225 btrfs_delayed_node_ref_tracker_free(node, &node->node_list_tracker); 226 refcount_dec(&node->refs); /* not in the list */ 227 list_del_init(&node->n_list); 228 if (!list_empty(&node->p_list)) 229 list_del_init(&node->p_list); 230 clear_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); 231 } 232 spin_unlock(&root->lock); 233 } 234 235 static struct btrfs_delayed_node *btrfs_first_delayed_node( 236 struct btrfs_fs_info *fs_info, 237 struct btrfs_ref_tracker *tracker) 238 { 239 struct btrfs_delayed_node *node; 240 241 spin_lock(&fs_info->delayed_root.lock); 242 node = list_first_entry_or_null(&fs_info->delayed_root.node_list, 243 struct btrfs_delayed_node, n_list); 244 if (node) { 245 refcount_inc(&node->refs); 246 btrfs_delayed_node_ref_tracker_alloc(node, tracker, GFP_ATOMIC); 247 } 248 spin_unlock(&fs_info->delayed_root.lock); 249 250 return node; 251 } 252 253 static struct btrfs_delayed_node *btrfs_next_delayed_node( 254 struct btrfs_delayed_node *node, 255 struct btrfs_ref_tracker *tracker) 256 { 257 struct btrfs_delayed_root *delayed_root; 258 struct list_head *p; 259 struct btrfs_delayed_node *next = NULL; 260 261 delayed_root = &node->root->fs_info->delayed_root; 262 spin_lock(&delayed_root->lock); 263 if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { 264 /* not in the list */ 265 if (list_empty(&delayed_root->node_list)) 266 goto out; 267 p = delayed_root->node_list.next; 268 } else if (list_is_last(&node->n_list, &delayed_root->node_list)) 269 goto out; 270 else 271 p = node->n_list.next; 272 273 next = list_entry(p, struct btrfs_delayed_node, n_list); 274 refcount_inc(&next->refs); 275 btrfs_delayed_node_ref_tracker_alloc(next, tracker, GFP_ATOMIC); 276 out: 277 spin_unlock(&delayed_root->lock); 278 279 return next; 280 } 281 282 static void __btrfs_release_delayed_node( 283 struct btrfs_delayed_node *delayed_node, 284 int mod, struct btrfs_ref_tracker *tracker) 285 { 286 struct btrfs_delayed_root *delayed_root; 287 288 if (!delayed_node) 289 return; 290 291 delayed_root = &delayed_node->root->fs_info->delayed_root; 292 293 mutex_lock(&delayed_node->mutex); 294 if (delayed_node->count) 295 btrfs_queue_delayed_node(delayed_root, delayed_node, mod); 296 else 297 btrfs_dequeue_delayed_node(delayed_root, delayed_node); 298 mutex_unlock(&delayed_node->mutex); 299 300 btrfs_delayed_node_ref_tracker_free(delayed_node, tracker); 301 if (refcount_dec_and_test(&delayed_node->refs)) { 302 struct btrfs_root *root = delayed_node->root; 303 304 xa_erase(&root->delayed_nodes, delayed_node->inode_id); 305 /* 306 * Once our refcount goes to zero, nobody is allowed to bump it 307 * back up. We can delete it now. 308 */ 309 ASSERT(refcount_read(&delayed_node->refs) == 0); 310 btrfs_delayed_node_ref_tracker_dir_exit(delayed_node); 311 kmem_cache_free(delayed_node_cache, delayed_node); 312 } 313 } 314 315 static inline void btrfs_release_delayed_node(struct btrfs_delayed_node *node, 316 struct btrfs_ref_tracker *tracker) 317 { 318 __btrfs_release_delayed_node(node, 0, tracker); 319 } 320 321 static struct btrfs_delayed_node *btrfs_first_prepared_delayed_node( 322 struct btrfs_delayed_root *delayed_root, 323 struct btrfs_ref_tracker *tracker) 324 { 325 struct btrfs_delayed_node *node; 326 327 spin_lock(&delayed_root->lock); 328 node = list_first_entry_or_null(&delayed_root->prepare_list, 329 struct btrfs_delayed_node, p_list); 330 if (node) { 331 list_del_init(&node->p_list); 332 refcount_inc(&node->refs); 333 btrfs_delayed_node_ref_tracker_alloc(node, tracker, GFP_ATOMIC); 334 } 335 spin_unlock(&delayed_root->lock); 336 337 return node; 338 } 339 340 static inline void btrfs_release_prepared_delayed_node( 341 struct btrfs_delayed_node *node, 342 struct btrfs_ref_tracker *tracker) 343 { 344 __btrfs_release_delayed_node(node, 1, tracker); 345 } 346 347 static struct btrfs_delayed_item *btrfs_alloc_delayed_item(u16 data_len, 348 struct btrfs_delayed_node *node, 349 enum btrfs_delayed_item_type type) 350 { 351 struct btrfs_delayed_item *item; 352 353 item = kmalloc_flex(*item, data, data_len, GFP_NOFS); 354 if (item) { 355 item->data_len = data_len; 356 item->type = type; 357 item->bytes_reserved = 0; 358 item->delayed_node = node; 359 RB_CLEAR_NODE(&item->rb_node); 360 INIT_LIST_HEAD(&item->log_list); 361 item->logged = false; 362 refcount_set(&item->refs, 1); 363 } 364 return item; 365 } 366 367 static int delayed_item_index_cmp(const void *key, const struct rb_node *node) 368 { 369 const u64 *index = key; 370 const struct btrfs_delayed_item *delayed_item = rb_entry(node, 371 struct btrfs_delayed_item, rb_node); 372 373 if (delayed_item->index < *index) 374 return 1; 375 else if (delayed_item->index > *index) 376 return -1; 377 378 return 0; 379 } 380 381 /* 382 * Look up the delayed item by key. 383 * 384 * @delayed_node: pointer to the delayed node 385 * @index: the dir index value to lookup (offset of a dir index key) 386 * 387 * Note: if we don't find the right item, we will return the prev item and 388 * the next item. 389 */ 390 static struct btrfs_delayed_item *__btrfs_lookup_delayed_item( 391 struct rb_root *root, 392 u64 index) 393 { 394 struct rb_node *node; 395 396 node = rb_find(&index, root, delayed_item_index_cmp); 397 return rb_entry_safe(node, struct btrfs_delayed_item, rb_node); 398 } 399 400 static int btrfs_delayed_item_cmp(const struct rb_node *new, 401 const struct rb_node *exist) 402 { 403 const struct btrfs_delayed_item *new_item = 404 rb_entry(new, struct btrfs_delayed_item, rb_node); 405 406 return delayed_item_index_cmp(&new_item->index, exist); 407 } 408 409 static int __btrfs_add_delayed_item(struct btrfs_delayed_node *delayed_node, 410 struct btrfs_delayed_item *ins) 411 { 412 struct rb_root_cached *root; 413 struct rb_node *exist; 414 415 if (ins->type == BTRFS_DELAYED_INSERTION_ITEM) 416 root = &delayed_node->ins_root; 417 else 418 root = &delayed_node->del_root; 419 420 exist = rb_find_add_cached(&ins->rb_node, root, btrfs_delayed_item_cmp); 421 if (exist) 422 return -EEXIST; 423 424 if (ins->type == BTRFS_DELAYED_INSERTION_ITEM && 425 ins->index >= delayed_node->index_cnt) 426 delayed_node->index_cnt = ins->index + 1; 427 428 delayed_node->count++; 429 atomic_inc(&delayed_node->root->fs_info->delayed_root.items); 430 return 0; 431 } 432 433 static void finish_one_item(struct btrfs_delayed_root *delayed_root) 434 { 435 int seq = atomic_inc_return(&delayed_root->items_seq); 436 437 /* atomic_dec_return implies a barrier */ 438 if ((atomic_dec_return(&delayed_root->items) < 439 BTRFS_DELAYED_BACKGROUND || seq % BTRFS_DELAYED_BATCH == 0)) 440 cond_wake_up_nomb(&delayed_root->wait); 441 } 442 443 static void __btrfs_remove_delayed_item(struct btrfs_delayed_item *delayed_item) 444 { 445 struct btrfs_delayed_node *delayed_node = delayed_item->delayed_node; 446 struct rb_root_cached *root; 447 448 /* Not inserted, ignore it. */ 449 if (RB_EMPTY_NODE(&delayed_item->rb_node)) 450 return; 451 452 /* If it's in a rbtree, then we need to have delayed node locked. */ 453 lockdep_assert_held(&delayed_node->mutex); 454 455 if (delayed_item->type == BTRFS_DELAYED_INSERTION_ITEM) 456 root = &delayed_node->ins_root; 457 else 458 root = &delayed_node->del_root; 459 460 rb_erase_cached(&delayed_item->rb_node, root); 461 RB_CLEAR_NODE(&delayed_item->rb_node); 462 delayed_node->count--; 463 finish_one_item(&delayed_node->root->fs_info->delayed_root); 464 } 465 466 static void btrfs_release_delayed_item(struct btrfs_delayed_item *item) 467 { 468 if (item) { 469 __btrfs_remove_delayed_item(item); 470 if (refcount_dec_and_test(&item->refs)) 471 kfree(item); 472 } 473 } 474 475 static struct btrfs_delayed_item *__btrfs_first_delayed_insertion_item( 476 struct btrfs_delayed_node *delayed_node) 477 { 478 struct rb_node *p = rb_first_cached(&delayed_node->ins_root); 479 480 return rb_entry_safe(p, struct btrfs_delayed_item, rb_node); 481 } 482 483 static struct btrfs_delayed_item *__btrfs_first_delayed_deletion_item( 484 struct btrfs_delayed_node *delayed_node) 485 { 486 struct rb_node *p = rb_first_cached(&delayed_node->del_root); 487 488 return rb_entry_safe(p, struct btrfs_delayed_item, rb_node); 489 } 490 491 static struct btrfs_delayed_item *__btrfs_next_delayed_item( 492 struct btrfs_delayed_item *item) 493 { 494 struct rb_node *p = rb_next(&item->rb_node); 495 496 return rb_entry_safe(p, struct btrfs_delayed_item, rb_node); 497 } 498 499 static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans, 500 struct btrfs_delayed_item *item) 501 { 502 struct btrfs_block_rsv *src_rsv; 503 struct btrfs_block_rsv *dst_rsv; 504 struct btrfs_fs_info *fs_info = trans->fs_info; 505 u64 num_bytes; 506 int ret; 507 508 if (!trans->bytes_reserved) 509 return 0; 510 511 src_rsv = trans->block_rsv; 512 dst_rsv = &fs_info->delayed_block_rsv; 513 514 num_bytes = btrfs_calc_insert_metadata_size(fs_info, 1); 515 516 /* 517 * Here we migrate space rsv from transaction rsv, since have already 518 * reserved space when starting a transaction. So no need to reserve 519 * qgroup space here. 520 */ 521 ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, true); 522 if (!ret) { 523 trace_btrfs_space_reservation(fs_info, "delayed_item", 524 item->delayed_node->inode_id, 525 num_bytes, 1); 526 /* 527 * For insertions we track reserved metadata space by accounting 528 * for the number of leaves that will be used, based on the delayed 529 * node's curr_index_batch_size and index_item_leaves fields. 530 */ 531 if (item->type == BTRFS_DELAYED_DELETION_ITEM) 532 item->bytes_reserved = num_bytes; 533 } 534 535 return ret; 536 } 537 538 static void btrfs_delayed_item_release_metadata(struct btrfs_root *root, 539 struct btrfs_delayed_item *item) 540 { 541 struct btrfs_block_rsv *rsv; 542 struct btrfs_fs_info *fs_info = root->fs_info; 543 544 if (!item->bytes_reserved) 545 return; 546 547 rsv = &fs_info->delayed_block_rsv; 548 /* 549 * Check btrfs_delayed_item_reserve_metadata() to see why we don't need 550 * to release/reserve qgroup space. 551 */ 552 trace_btrfs_space_reservation(fs_info, "delayed_item", 553 item->delayed_node->inode_id, 554 item->bytes_reserved, 0); 555 btrfs_block_rsv_release(fs_info, rsv, item->bytes_reserved, NULL); 556 } 557 558 static void btrfs_delayed_item_release_leaves(struct btrfs_delayed_node *node, 559 unsigned int num_leaves) 560 { 561 struct btrfs_fs_info *fs_info = node->root->fs_info; 562 const u64 bytes = btrfs_calc_insert_metadata_size(fs_info, num_leaves); 563 564 /* There are no space reservations during log replay, bail out. */ 565 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) 566 return; 567 568 trace_btrfs_space_reservation(fs_info, "delayed_item", node->inode_id, 569 bytes, 0); 570 btrfs_block_rsv_release(fs_info, &fs_info->delayed_block_rsv, bytes, NULL); 571 } 572 573 static int btrfs_delayed_inode_reserve_metadata( 574 struct btrfs_trans_handle *trans, 575 struct btrfs_root *root, 576 struct btrfs_delayed_node *node) 577 { 578 struct btrfs_fs_info *fs_info = root->fs_info; 579 struct btrfs_block_rsv *src_rsv; 580 struct btrfs_block_rsv *dst_rsv; 581 u64 num_bytes; 582 int ret; 583 584 src_rsv = trans->block_rsv; 585 dst_rsv = &fs_info->delayed_block_rsv; 586 587 num_bytes = btrfs_calc_metadata_size(fs_info, 1); 588 589 /* 590 * btrfs_dirty_inode will update the inode under btrfs_join_transaction 591 * which doesn't reserve space for speed. This is a problem since we 592 * still need to reserve space for this update, so try to reserve the 593 * space. 594 * 595 * Now if src_rsv == delalloc_block_rsv we'll let it just steal since 596 * we always reserve enough to update the inode item. 597 */ 598 if (!src_rsv || (!trans->bytes_reserved && 599 src_rsv->type != BTRFS_BLOCK_RSV_DELALLOC)) { 600 ret = btrfs_qgroup_reserve_meta_prealloc(root, num_bytes, true, true); 601 if (ret < 0) 602 return ret; 603 ret = btrfs_block_rsv_add(dst_rsv, num_bytes, BTRFS_RESERVE_NO_FLUSH); 604 /* NO_FLUSH could only fail with -ENOSPC */ 605 ASSERT(ret == 0 || ret == -ENOSPC); 606 if (ret) 607 btrfs_qgroup_free_meta_prealloc(root, num_bytes); 608 } else { 609 ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, true); 610 } 611 612 if (!ret) { 613 trace_btrfs_space_reservation(fs_info, "delayed_inode", 614 node->inode_id, num_bytes, 1); 615 node->bytes_reserved = num_bytes; 616 } 617 618 return ret; 619 } 620 621 static void btrfs_delayed_inode_release_metadata(struct btrfs_fs_info *fs_info, 622 struct btrfs_delayed_node *node, 623 bool qgroup_free) 624 { 625 struct btrfs_block_rsv *rsv; 626 627 if (!node->bytes_reserved) 628 return; 629 630 rsv = &fs_info->delayed_block_rsv; 631 trace_btrfs_space_reservation(fs_info, "delayed_inode", 632 node->inode_id, node->bytes_reserved, 0); 633 btrfs_block_rsv_release(fs_info, rsv, node->bytes_reserved, NULL); 634 if (qgroup_free) 635 btrfs_qgroup_free_meta_prealloc(node->root, 636 node->bytes_reserved); 637 else 638 btrfs_qgroup_convert_reserved_meta(node->root, 639 node->bytes_reserved); 640 node->bytes_reserved = 0; 641 } 642 643 /* 644 * Insert a single delayed item or a batch of delayed items, as many as possible 645 * that fit in a leaf. The delayed items (dir index keys) are sorted by their key 646 * in the rbtree, and if there's a gap between two consecutive dir index items, 647 * then it means at some point we had delayed dir indexes to add but they got 648 * removed (by btrfs_delete_delayed_dir_index()) before we attempted to flush them 649 * into the subvolume tree. Dir index keys also have their offsets coming from a 650 * monotonically increasing counter, so we can't get new keys with an offset that 651 * fits within a gap between delayed dir index items. 652 */ 653 static int btrfs_insert_delayed_item(struct btrfs_trans_handle *trans, 654 struct btrfs_root *root, 655 struct btrfs_path *path, 656 struct btrfs_delayed_item *first_item) 657 { 658 struct btrfs_fs_info *fs_info = root->fs_info; 659 struct btrfs_delayed_node *node = first_item->delayed_node; 660 LIST_HEAD(item_list); 661 struct btrfs_delayed_item *curr; 662 struct btrfs_delayed_item *next; 663 const int max_size = BTRFS_LEAF_DATA_SIZE(fs_info); 664 struct btrfs_item_batch batch; 665 struct btrfs_key first_key; 666 const u32 first_data_size = first_item->data_len; 667 int total_size; 668 char AUTO_KFREE(ins_data); 669 int ret; 670 bool continuous_keys_only = false; 671 672 lockdep_assert_held(&node->mutex); 673 674 /* 675 * During normal operation the delayed index offset is continuously 676 * increasing, so we can batch insert all items as there will not be any 677 * overlapping keys in the tree. 678 * 679 * The exception to this is log replay, where we may have interleaved 680 * offsets in the tree, so our batch needs to be continuous keys only in 681 * order to ensure we do not end up with out of order items in our leaf. 682 */ 683 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) 684 continuous_keys_only = true; 685 686 /* 687 * For delayed items to insert, we track reserved metadata bytes based 688 * on the number of leaves that we will use. 689 * See btrfs_insert_delayed_dir_index_prealloc() and 690 * btrfs_delayed_item_reserve_metadata()). 691 */ 692 ASSERT(first_item->bytes_reserved == 0); 693 694 list_add_tail(&first_item->tree_list, &item_list); 695 batch.total_data_size = first_data_size; 696 batch.nr = 1; 697 total_size = first_data_size + sizeof(struct btrfs_item); 698 curr = first_item; 699 700 while (true) { 701 int next_size; 702 703 next = __btrfs_next_delayed_item(curr); 704 if (!next) 705 break; 706 707 /* 708 * We cannot allow gaps in the key space if we're doing log 709 * replay. 710 */ 711 if (continuous_keys_only && (next->index != curr->index + 1)) 712 break; 713 714 ASSERT(next->bytes_reserved == 0); 715 716 next_size = next->data_len + sizeof(struct btrfs_item); 717 if (total_size + next_size > max_size) 718 break; 719 720 list_add_tail(&next->tree_list, &item_list); 721 batch.nr++; 722 total_size += next_size; 723 batch.total_data_size += next->data_len; 724 curr = next; 725 } 726 727 if (batch.nr == 1) { 728 first_key.objectid = node->inode_id; 729 first_key.type = BTRFS_DIR_INDEX_KEY; 730 first_key.offset = first_item->index; 731 batch.keys = &first_key; 732 batch.data_sizes = &first_data_size; 733 } else { 734 struct btrfs_key *ins_keys; 735 u32 *ins_sizes; 736 int i = 0; 737 738 ins_data = kmalloc_array(batch.nr, 739 sizeof(u32) + sizeof(struct btrfs_key), GFP_NOFS); 740 if (!ins_data) 741 return -ENOMEM; 742 ins_sizes = (u32 *)ins_data; 743 ins_keys = (struct btrfs_key *)(ins_data + batch.nr * sizeof(u32)); 744 batch.keys = ins_keys; 745 batch.data_sizes = ins_sizes; 746 list_for_each_entry(curr, &item_list, tree_list) { 747 ins_keys[i].objectid = node->inode_id; 748 ins_keys[i].type = BTRFS_DIR_INDEX_KEY; 749 ins_keys[i].offset = curr->index; 750 ins_sizes[i] = curr->data_len; 751 i++; 752 } 753 } 754 755 ret = btrfs_insert_empty_items(trans, root, path, &batch); 756 if (ret) 757 return ret; 758 759 list_for_each_entry(curr, &item_list, tree_list) { 760 char *data_ptr; 761 762 data_ptr = btrfs_item_ptr(path->nodes[0], path->slots[0], char); 763 write_extent_buffer(path->nodes[0], &curr->data, 764 (unsigned long)data_ptr, curr->data_len); 765 path->slots[0]++; 766 } 767 768 /* 769 * Now release our path before releasing the delayed items and their 770 * metadata reservations, so that we don't block other tasks for more 771 * time than needed. 772 */ 773 btrfs_release_path(path); 774 775 ASSERT(node->index_item_leaves > 0); 776 777 /* 778 * For normal operations we will batch an entire leaf's worth of delayed 779 * items, so if there are more items to process we can decrement 780 * index_item_leaves by 1 as we inserted 1 leaf's worth of items. 781 * 782 * However for log replay we may not have inserted an entire leaf's 783 * worth of items, we may have not had continuous items, so decrementing 784 * here would mess up the index_item_leaves accounting. For this case 785 * only clean up the accounting when there are no items left. 786 */ 787 if (next && !continuous_keys_only) { 788 /* 789 * We inserted one batch of items into a leaf a there are more 790 * items to flush in a future batch, now release one unit of 791 * metadata space from the delayed block reserve, corresponding 792 * the leaf we just flushed to. 793 */ 794 btrfs_delayed_item_release_leaves(node, 1); 795 node->index_item_leaves--; 796 } else if (!next) { 797 /* 798 * There are no more items to insert. We can have a number of 799 * reserved leaves > 1 here - this happens when many dir index 800 * items are added and then removed before they are flushed (file 801 * names with a very short life, never span a transaction). So 802 * release all remaining leaves. 803 */ 804 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); 805 node->index_item_leaves = 0; 806 } 807 808 list_for_each_entry_safe(curr, next, &item_list, tree_list) { 809 list_del(&curr->tree_list); 810 btrfs_release_delayed_item(curr); 811 } 812 813 return 0; 814 } 815 816 static int btrfs_insert_delayed_items(struct btrfs_trans_handle *trans, 817 struct btrfs_path *path, 818 struct btrfs_root *root, 819 struct btrfs_delayed_node *node) 820 { 821 int ret = 0; 822 823 while (ret == 0) { 824 struct btrfs_delayed_item *curr; 825 826 mutex_lock(&node->mutex); 827 curr = __btrfs_first_delayed_insertion_item(node); 828 if (!curr) { 829 mutex_unlock(&node->mutex); 830 break; 831 } 832 ret = btrfs_insert_delayed_item(trans, root, path, curr); 833 mutex_unlock(&node->mutex); 834 } 835 836 return ret; 837 } 838 839 static int btrfs_batch_delete_items(struct btrfs_trans_handle *trans, 840 struct btrfs_root *root, 841 struct btrfs_path *path, 842 struct btrfs_delayed_item *item) 843 { 844 const u64 ino = item->delayed_node->inode_id; 845 struct btrfs_fs_info *fs_info = root->fs_info; 846 struct btrfs_delayed_item *curr, *next; 847 struct extent_buffer *leaf = path->nodes[0]; 848 LIST_HEAD(batch_list); 849 int nitems, slot, last_slot; 850 int ret; 851 u64 total_reserved_size = item->bytes_reserved; 852 853 ASSERT(leaf != NULL); 854 855 slot = path->slots[0]; 856 last_slot = btrfs_header_nritems(leaf) - 1; 857 /* 858 * Our caller always gives us a path pointing to an existing item, so 859 * this can not happen. 860 */ 861 ASSERT(slot <= last_slot); 862 if (WARN_ON(slot > last_slot)) 863 return -ENOENT; 864 865 nitems = 1; 866 curr = item; 867 list_add_tail(&curr->tree_list, &batch_list); 868 869 /* 870 * Keep checking if the next delayed item matches the next item in the 871 * leaf - if so, we can add it to the batch of items to delete from the 872 * leaf. 873 */ 874 while (slot < last_slot) { 875 struct btrfs_key key; 876 877 next = __btrfs_next_delayed_item(curr); 878 if (!next) 879 break; 880 881 slot++; 882 btrfs_item_key_to_cpu(leaf, &key, slot); 883 if (key.objectid != ino || 884 key.type != BTRFS_DIR_INDEX_KEY || 885 key.offset != next->index) 886 break; 887 nitems++; 888 curr = next; 889 list_add_tail(&curr->tree_list, &batch_list); 890 total_reserved_size += curr->bytes_reserved; 891 } 892 893 ret = btrfs_del_items(trans, root, path, path->slots[0], nitems); 894 if (ret) 895 return ret; 896 897 /* In case of BTRFS_FS_LOG_RECOVERING items won't have reserved space */ 898 if (total_reserved_size > 0) { 899 /* 900 * Check btrfs_delayed_item_reserve_metadata() to see why we 901 * don't need to release/reserve qgroup space. 902 */ 903 trace_btrfs_space_reservation(fs_info, "delayed_item", ino, 904 total_reserved_size, 0); 905 btrfs_block_rsv_release(fs_info, &fs_info->delayed_block_rsv, 906 total_reserved_size, NULL); 907 } 908 909 list_for_each_entry_safe(curr, next, &batch_list, tree_list) { 910 list_del(&curr->tree_list); 911 btrfs_release_delayed_item(curr); 912 } 913 914 return 0; 915 } 916 917 static int btrfs_delete_delayed_items(struct btrfs_trans_handle *trans, 918 struct btrfs_path *path, 919 struct btrfs_root *root, 920 struct btrfs_delayed_node *node) 921 { 922 struct btrfs_key key; 923 int ret = 0; 924 925 key.objectid = node->inode_id; 926 key.type = BTRFS_DIR_INDEX_KEY; 927 928 while (ret == 0) { 929 struct btrfs_delayed_item *item; 930 931 mutex_lock(&node->mutex); 932 item = __btrfs_first_delayed_deletion_item(node); 933 if (!item) { 934 mutex_unlock(&node->mutex); 935 break; 936 } 937 938 key.offset = item->index; 939 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); 940 if (ret > 0) { 941 /* 942 * There's no matching item in the leaf. This means we 943 * have already deleted this item in a past run of the 944 * delayed items. We ignore errors when running delayed 945 * items from an async context, through a work queue job 946 * running btrfs_async_run_delayed_root(), and don't 947 * release delayed items that failed to complete. This 948 * is because we will retry later, and at transaction 949 * commit time we always run delayed items and will 950 * then deal with errors if they fail to run again. 951 * 952 * So just release delayed items for which we can't find 953 * an item in the tree, and move to the next item. 954 */ 955 btrfs_release_path(path); 956 btrfs_release_delayed_item(item); 957 ret = 0; 958 } else if (ret == 0) { 959 ret = btrfs_batch_delete_items(trans, root, path, item); 960 btrfs_release_path(path); 961 } 962 963 /* 964 * We unlock and relock on each iteration, this is to prevent 965 * blocking other tasks for too long while we are being run from 966 * the async context (work queue job). Those tasks are typically 967 * running system calls like creat/mkdir/rename/unlink/etc which 968 * need to add delayed items to this delayed node. 969 */ 970 mutex_unlock(&node->mutex); 971 } 972 973 return ret; 974 } 975 976 static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) 977 { 978 if (delayed_node && 979 test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { 980 ASSERT(delayed_node->root); 981 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); 982 delayed_node->count--; 983 finish_one_item(&delayed_node->root->fs_info->delayed_root); 984 } 985 } 986 987 static void btrfs_release_delayed_iref(struct btrfs_delayed_node *delayed_node) 988 { 989 if (test_and_clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) { 990 ASSERT(delayed_node->root); 991 delayed_node->count--; 992 finish_one_item(&delayed_node->root->fs_info->delayed_root); 993 } 994 } 995 996 static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans, 997 struct btrfs_root *root, 998 struct btrfs_path *path, 999 struct btrfs_delayed_node *node) 1000 { 1001 struct btrfs_fs_info *fs_info = root->fs_info; 1002 struct btrfs_key key; 1003 struct btrfs_inode_item *inode_item; 1004 struct extent_buffer *leaf; 1005 int mod; 1006 int ret; 1007 1008 key.objectid = node->inode_id; 1009 key.type = BTRFS_INODE_ITEM_KEY; 1010 key.offset = 0; 1011 1012 if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) 1013 mod = -1; 1014 else 1015 mod = 1; 1016 1017 ret = btrfs_lookup_inode(trans, root, path, &key, mod); 1018 if (ret > 0) 1019 ret = -ENOENT; 1020 if (ret < 0) { 1021 /* 1022 * If we fail to update the delayed inode we need to abort the 1023 * transaction, because we could leave the inode with the 1024 * improper counts behind. 1025 */ 1026 if (unlikely(ret != -ENOENT)) 1027 btrfs_abort_transaction(trans, ret); 1028 goto out; 1029 } 1030 1031 leaf = path->nodes[0]; 1032 inode_item = btrfs_item_ptr(leaf, path->slots[0], 1033 struct btrfs_inode_item); 1034 write_extent_buffer(leaf, &node->inode_item, (unsigned long)inode_item, 1035 sizeof(struct btrfs_inode_item)); 1036 1037 if (!test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags)) 1038 goto out; 1039 1040 /* 1041 * Now we're going to delete the INODE_REF/EXTREF, which should be the 1042 * only one ref left. Check if the next item is an INODE_REF/EXTREF. 1043 * 1044 * But if we're the last item already, release and search for the last 1045 * INODE_REF/EXTREF. 1046 */ 1047 if (path->slots[0] + 1 >= btrfs_header_nritems(leaf)) { 1048 key.objectid = node->inode_id; 1049 key.type = BTRFS_INODE_EXTREF_KEY; 1050 key.offset = (u64)-1; 1051 1052 btrfs_release_path(path); 1053 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); 1054 if (unlikely(ret < 0)) { 1055 btrfs_abort_transaction(trans, ret); 1056 goto err_out; 1057 } 1058 ASSERT(ret > 0); 1059 ASSERT(path->slots[0] > 0); 1060 ret = 0; 1061 path->slots[0]--; 1062 leaf = path->nodes[0]; 1063 } else { 1064 path->slots[0]++; 1065 } 1066 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); 1067 if (key.objectid != node->inode_id) 1068 goto out; 1069 if (key.type != BTRFS_INODE_REF_KEY && 1070 key.type != BTRFS_INODE_EXTREF_KEY) 1071 goto out; 1072 1073 /* 1074 * Delayed iref deletion is for the inode who has only one link, 1075 * so there is only one iref. The case that several irefs are 1076 * in the same item doesn't exist. 1077 */ 1078 ret = btrfs_del_item(trans, root, path); 1079 if (ret < 0) 1080 btrfs_abort_transaction(trans, ret); 1081 out: 1082 btrfs_release_delayed_iref(node); 1083 btrfs_release_path(path); 1084 err_out: 1085 btrfs_delayed_inode_release_metadata(fs_info, node, (ret < 0)); 1086 btrfs_release_delayed_inode(node); 1087 return ret; 1088 } 1089 1090 static inline int btrfs_update_delayed_inode(struct btrfs_trans_handle *trans, 1091 struct btrfs_root *root, 1092 struct btrfs_path *path, 1093 struct btrfs_delayed_node *node) 1094 { 1095 int ret; 1096 1097 mutex_lock(&node->mutex); 1098 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &node->flags)) { 1099 mutex_unlock(&node->mutex); 1100 return 0; 1101 } 1102 1103 ret = __btrfs_update_delayed_inode(trans, root, path, node); 1104 mutex_unlock(&node->mutex); 1105 return ret; 1106 } 1107 1108 static inline int 1109 __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, 1110 struct btrfs_path *path, 1111 struct btrfs_delayed_node *node) 1112 { 1113 int ret; 1114 1115 ret = btrfs_insert_delayed_items(trans, path, node->root, node); 1116 if (ret) 1117 return ret; 1118 1119 ret = btrfs_delete_delayed_items(trans, path, node->root, node); 1120 if (ret) 1121 return ret; 1122 1123 ret = btrfs_record_root_in_trans(trans, node->root); 1124 if (ret) 1125 return ret; 1126 1127 return btrfs_update_delayed_inode(trans, node->root, path, node); 1128 } 1129 1130 /* 1131 * Called when committing the transaction. 1132 * Returns 0 on success. 1133 * Returns < 0 on error and returns with an aborted transaction with any 1134 * outstanding delayed items cleaned up. 1135 */ 1136 static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans, int nr) 1137 { 1138 struct btrfs_fs_info *fs_info = trans->fs_info; 1139 struct btrfs_delayed_node *curr_node, *prev_node; 1140 struct btrfs_ref_tracker curr_delayed_node_tracker, prev_delayed_node_tracker; 1141 struct btrfs_path *path; 1142 struct btrfs_block_rsv *block_rsv; 1143 int ret = 0; 1144 bool count = (nr > 0); 1145 1146 if (TRANS_ABORTED(trans)) 1147 return -EIO; 1148 1149 path = btrfs_alloc_path(); 1150 if (!path) 1151 return -ENOMEM; 1152 1153 block_rsv = trans->block_rsv; 1154 trans->block_rsv = &fs_info->delayed_block_rsv; 1155 1156 curr_node = btrfs_first_delayed_node(fs_info, &curr_delayed_node_tracker); 1157 while (curr_node && (!count || nr--)) { 1158 ret = __btrfs_commit_inode_delayed_items(trans, path, 1159 curr_node); 1160 if (unlikely(ret)) { 1161 btrfs_abort_transaction(trans, ret); 1162 break; 1163 } 1164 1165 prev_node = curr_node; 1166 prev_delayed_node_tracker = curr_delayed_node_tracker; 1167 curr_node = btrfs_next_delayed_node(curr_node, &curr_delayed_node_tracker); 1168 /* 1169 * See the comment below about releasing path before releasing 1170 * node. If the commit of delayed items was successful the path 1171 * should always be released, but in case of an error, it may 1172 * point to locked extent buffers (a leaf at the very least). 1173 */ 1174 ASSERT(path->nodes[0] == NULL); 1175 btrfs_release_delayed_node(prev_node, &prev_delayed_node_tracker); 1176 } 1177 1178 /* 1179 * Release the path to avoid a potential deadlock and lockdep splat when 1180 * releasing the delayed node, as that requires taking the delayed node's 1181 * mutex. If another task starts running delayed items before we take 1182 * the mutex, it will first lock the mutex and then it may try to lock 1183 * the same btree path (leaf). 1184 */ 1185 btrfs_free_path(path); 1186 1187 if (curr_node) 1188 btrfs_release_delayed_node(curr_node, &curr_delayed_node_tracker); 1189 trans->block_rsv = block_rsv; 1190 1191 return ret; 1192 } 1193 1194 int btrfs_run_delayed_items(struct btrfs_trans_handle *trans) 1195 { 1196 return __btrfs_run_delayed_items(trans, -1); 1197 } 1198 1199 int btrfs_run_delayed_items_nr(struct btrfs_trans_handle *trans, int nr) 1200 { 1201 return __btrfs_run_delayed_items(trans, nr); 1202 } 1203 1204 int btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, 1205 struct btrfs_inode *inode) 1206 { 1207 struct btrfs_ref_tracker delayed_node_tracker; 1208 struct btrfs_delayed_node *delayed_node = 1209 btrfs_get_delayed_node(inode, &delayed_node_tracker); 1210 BTRFS_PATH_AUTO_FREE(path); 1211 struct btrfs_block_rsv *block_rsv; 1212 int ret; 1213 1214 if (!delayed_node) 1215 return 0; 1216 1217 mutex_lock(&delayed_node->mutex); 1218 if (!delayed_node->count) { 1219 mutex_unlock(&delayed_node->mutex); 1220 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1221 return 0; 1222 } 1223 mutex_unlock(&delayed_node->mutex); 1224 1225 path = btrfs_alloc_path(); 1226 if (!path) { 1227 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1228 return -ENOMEM; 1229 } 1230 1231 block_rsv = trans->block_rsv; 1232 trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; 1233 1234 ret = __btrfs_commit_inode_delayed_items(trans, path, delayed_node); 1235 1236 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1237 trans->block_rsv = block_rsv; 1238 1239 return ret; 1240 } 1241 1242 int btrfs_commit_inode_delayed_inode(struct btrfs_inode *inode) 1243 { 1244 struct btrfs_fs_info *fs_info = inode->root->fs_info; 1245 struct btrfs_trans_handle *trans; 1246 struct btrfs_ref_tracker delayed_node_tracker; 1247 struct btrfs_delayed_node *delayed_node; 1248 struct btrfs_path *path; 1249 struct btrfs_block_rsv *block_rsv; 1250 int ret; 1251 1252 delayed_node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 1253 if (!delayed_node) 1254 return 0; 1255 1256 mutex_lock(&delayed_node->mutex); 1257 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { 1258 mutex_unlock(&delayed_node->mutex); 1259 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1260 return 0; 1261 } 1262 mutex_unlock(&delayed_node->mutex); 1263 1264 trans = btrfs_join_transaction(delayed_node->root); 1265 if (IS_ERR(trans)) { 1266 ret = PTR_ERR(trans); 1267 goto out; 1268 } 1269 1270 path = btrfs_alloc_path(); 1271 if (!path) { 1272 ret = -ENOMEM; 1273 goto trans_out; 1274 } 1275 1276 block_rsv = trans->block_rsv; 1277 trans->block_rsv = &fs_info->delayed_block_rsv; 1278 1279 mutex_lock(&delayed_node->mutex); 1280 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) 1281 ret = __btrfs_update_delayed_inode(trans, delayed_node->root, 1282 path, delayed_node); 1283 else 1284 ret = 0; 1285 mutex_unlock(&delayed_node->mutex); 1286 1287 btrfs_free_path(path); 1288 trans->block_rsv = block_rsv; 1289 trans_out: 1290 btrfs_end_transaction(trans); 1291 btrfs_btree_balance_dirty(fs_info); 1292 out: 1293 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1294 1295 return ret; 1296 } 1297 1298 void btrfs_remove_delayed_node(struct btrfs_inode *inode) 1299 { 1300 struct btrfs_delayed_node *delayed_node; 1301 1302 delayed_node = READ_ONCE(inode->delayed_node); 1303 if (!delayed_node) 1304 return; 1305 1306 inode->delayed_node = NULL; 1307 1308 btrfs_release_delayed_node(delayed_node, &delayed_node->inode_cache_tracker); 1309 } 1310 1311 struct btrfs_async_delayed_work { 1312 struct btrfs_delayed_root *delayed_root; 1313 int nr; 1314 struct btrfs_work work; 1315 }; 1316 1317 static void btrfs_async_run_delayed_root(struct btrfs_work *work) 1318 { 1319 struct btrfs_async_delayed_work *async_work; 1320 struct btrfs_delayed_root *delayed_root; 1321 struct btrfs_trans_handle *trans; 1322 struct btrfs_path *path; 1323 struct btrfs_delayed_node *delayed_node = NULL; 1324 struct btrfs_ref_tracker delayed_node_tracker; 1325 struct btrfs_root *root; 1326 struct btrfs_block_rsv *block_rsv; 1327 int total_done = 0; 1328 1329 async_work = container_of(work, struct btrfs_async_delayed_work, work); 1330 delayed_root = async_work->delayed_root; 1331 1332 path = btrfs_alloc_path(); 1333 if (!path) 1334 goto out; 1335 1336 do { 1337 if (atomic_read(&delayed_root->items) < 1338 BTRFS_DELAYED_BACKGROUND / 2) 1339 break; 1340 1341 delayed_node = btrfs_first_prepared_delayed_node(delayed_root, 1342 &delayed_node_tracker); 1343 if (!delayed_node) 1344 break; 1345 1346 root = delayed_node->root; 1347 1348 trans = btrfs_join_transaction(root); 1349 if (IS_ERR(trans)) { 1350 btrfs_release_path(path); 1351 btrfs_release_prepared_delayed_node(delayed_node, 1352 &delayed_node_tracker); 1353 total_done++; 1354 continue; 1355 } 1356 1357 block_rsv = trans->block_rsv; 1358 trans->block_rsv = &root->fs_info->delayed_block_rsv; 1359 1360 __btrfs_commit_inode_delayed_items(trans, path, delayed_node); 1361 1362 trans->block_rsv = block_rsv; 1363 btrfs_end_transaction(trans); 1364 btrfs_btree_balance_dirty_nodelay(root->fs_info); 1365 1366 btrfs_release_path(path); 1367 btrfs_release_prepared_delayed_node(delayed_node, 1368 &delayed_node_tracker); 1369 total_done++; 1370 1371 } while ((async_work->nr == 0 && total_done < BTRFS_DELAYED_WRITEBACK) 1372 || total_done < async_work->nr); 1373 1374 btrfs_free_path(path); 1375 out: 1376 wake_up(&delayed_root->wait); 1377 kfree(async_work); 1378 } 1379 1380 1381 static int btrfs_wq_run_delayed_node(struct btrfs_delayed_root *delayed_root, 1382 struct btrfs_fs_info *fs_info, int nr) 1383 { 1384 struct btrfs_async_delayed_work *async_work; 1385 1386 async_work = kmalloc_obj(*async_work, GFP_NOFS); 1387 if (!async_work) 1388 return -ENOMEM; 1389 1390 async_work->delayed_root = delayed_root; 1391 btrfs_init_work(&async_work->work, btrfs_async_run_delayed_root, NULL); 1392 async_work->nr = nr; 1393 1394 btrfs_queue_work(fs_info->delayed_workers, &async_work->work); 1395 return 0; 1396 } 1397 1398 void btrfs_assert_delayed_root_empty(struct btrfs_fs_info *fs_info) 1399 { 1400 struct btrfs_ref_tracker delayed_node_tracker; 1401 struct btrfs_delayed_node *node; 1402 1403 node = btrfs_first_delayed_node(fs_info, &delayed_node_tracker); 1404 if (WARN_ON(node)) { 1405 btrfs_delayed_node_ref_tracker_free(node, 1406 &delayed_node_tracker); 1407 refcount_dec(&node->refs); 1408 } 1409 } 1410 1411 static bool could_end_wait(struct btrfs_delayed_root *delayed_root, int seq) 1412 { 1413 int val = atomic_read(&delayed_root->items_seq); 1414 1415 if (val < seq || val >= seq + BTRFS_DELAYED_BATCH) 1416 return true; 1417 1418 if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) 1419 return true; 1420 1421 return false; 1422 } 1423 1424 void btrfs_balance_delayed_items(struct btrfs_fs_info *fs_info) 1425 { 1426 struct btrfs_delayed_root *delayed_root = &fs_info->delayed_root; 1427 1428 if ((atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND) || 1429 btrfs_workqueue_normal_congested(fs_info->delayed_workers)) 1430 return; 1431 1432 if (atomic_read(&delayed_root->items) >= BTRFS_DELAYED_WRITEBACK) { 1433 int seq; 1434 int ret; 1435 1436 seq = atomic_read(&delayed_root->items_seq); 1437 1438 ret = btrfs_wq_run_delayed_node(delayed_root, fs_info, 0); 1439 if (ret) 1440 return; 1441 1442 wait_event_interruptible(delayed_root->wait, 1443 could_end_wait(delayed_root, seq)); 1444 return; 1445 } 1446 1447 btrfs_wq_run_delayed_node(delayed_root, fs_info, BTRFS_DELAYED_BATCH); 1448 } 1449 1450 static void btrfs_release_dir_index_item_space(struct btrfs_trans_handle *trans) 1451 { 1452 struct btrfs_fs_info *fs_info = trans->fs_info; 1453 const u64 bytes = btrfs_calc_insert_metadata_size(fs_info, 1); 1454 1455 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) 1456 return; 1457 1458 /* 1459 * Adding the new dir index item does not require touching another 1460 * leaf, so we can release 1 unit of metadata that was previously 1461 * reserved when starting the transaction. This applies only to 1462 * the case where we had a transaction start and excludes the 1463 * transaction join case (when replaying log trees). 1464 */ 1465 trace_btrfs_space_reservation(fs_info, "transaction", 1466 trans->transid, bytes, 0); 1467 btrfs_block_rsv_release(fs_info, trans->block_rsv, bytes, NULL); 1468 ASSERT(trans->bytes_reserved >= bytes); 1469 trans->bytes_reserved -= bytes; 1470 } 1471 1472 /* 1473 * Pre-allocate a delayed node and delayed item for a dir index insertion and 1474 * copy the name into the item. Call this before modifying the btree so that 1475 * ENOMEM can be returned before any on-disk state has changed. 1476 * 1477 * The returned prealloc is consumed by either 1478 * btrfs_insert_delayed_dir_index_prealloc() or 1479 * btrfs_free_delayed_dir_index_prealloc(); it must not be used afterwards. 1480 * 1481 * Returns a prealloc on success, ERR_PTR on allocation failure. 1482 */ 1483 struct btrfs_dir_index_prealloc *btrfs_prealloc_delayed_dir_index(struct btrfs_inode *dir, 1484 const char *name, 1485 int name_len) 1486 { 1487 struct btrfs_dir_index_prealloc *prealloc; 1488 struct btrfs_delayed_node *node; 1489 struct btrfs_delayed_item *item; 1490 1491 prealloc = kzalloc_obj(*prealloc, GFP_NOFS); 1492 if (!prealloc) 1493 return ERR_PTR(-ENOMEM); 1494 1495 node = btrfs_get_or_create_delayed_node(dir, &prealloc->tracker); 1496 if (IS_ERR(node)) { 1497 kfree(prealloc); 1498 return ERR_CAST(node); 1499 } 1500 1501 item = btrfs_alloc_delayed_item(sizeof(struct btrfs_dir_item) + name_len, 1502 node, BTRFS_DELAYED_INSERTION_ITEM); 1503 if (!item) { 1504 btrfs_release_delayed_node(node, &prealloc->tracker); 1505 kfree(prealloc); 1506 return ERR_PTR(-ENOMEM); 1507 } 1508 1509 memcpy(item->data + sizeof(struct btrfs_dir_item), name, name_len); 1510 1511 prealloc->node = node; 1512 prealloc->item = item; 1513 return prealloc; 1514 } 1515 ALLOW_ERROR_INJECTION(btrfs_prealloc_delayed_dir_index, ERRNO); 1516 1517 /* 1518 * Free resources from btrfs_prealloc_delayed_dir_index() when the btree 1519 * insertion failed and we will not commit the delayed dir index. Does nothing 1520 * if @prealloc is NULL. 1521 */ 1522 void btrfs_free_delayed_dir_index_prealloc(struct btrfs_trans_handle *trans, 1523 struct btrfs_dir_index_prealloc *prealloc) 1524 { 1525 if (!prealloc) 1526 return; 1527 1528 btrfs_release_delayed_item(prealloc->item); 1529 btrfs_release_dir_index_item_space(trans); 1530 btrfs_release_delayed_node(prealloc->node, &prealloc->tracker); 1531 kfree(prealloc); 1532 } 1533 1534 /* 1535 * Commit a pre-allocated delayed dir index item. @prealloc must have been 1536 * returned by btrfs_prealloc_delayed_dir_index(). This populates the item, 1537 * adds it to the delayed node's rb-tree, and reserves metadata space. It 1538 * cannot fail with ENOMEM. @prealloc is freed here in all cases. 1539 * 1540 * Return 0 or -EEXIST (index number collision, unexpected). 1541 */ 1542 int btrfs_insert_delayed_dir_index_prealloc(struct btrfs_trans_handle *trans, 1543 struct btrfs_inode *dir, 1544 struct btrfs_dir_index_prealloc *prealloc, 1545 const struct btrfs_disk_key *disk_key, 1546 u8 flags, u64 index) 1547 { 1548 struct btrfs_delayed_node *delayed_node = prealloc->node; 1549 struct btrfs_ref_tracker *tracker = &prealloc->tracker; 1550 struct btrfs_delayed_item *delayed_item = prealloc->item; 1551 struct btrfs_fs_info *fs_info = trans->fs_info; 1552 const unsigned int leaf_data_size = BTRFS_LEAF_DATA_SIZE(fs_info); 1553 const int name_len = delayed_item->data_len - sizeof(struct btrfs_dir_item); 1554 struct btrfs_dir_item *dir_item; 1555 bool reserve_leaf_space; 1556 u32 data_len; 1557 int ret; 1558 1559 delayed_item->index = index; 1560 1561 dir_item = (struct btrfs_dir_item *)delayed_item->data; 1562 dir_item->location = *disk_key; 1563 btrfs_set_stack_dir_transid(dir_item, trans->transid); 1564 btrfs_set_stack_dir_data_len(dir_item, 0); 1565 btrfs_set_stack_dir_name_len(dir_item, name_len); 1566 btrfs_set_stack_dir_flags(dir_item, flags); 1567 /* Name was already copied by btrfs_prealloc_delayed_dir_index(). */ 1568 1569 data_len = delayed_item->data_len + sizeof(struct btrfs_item); 1570 1571 mutex_lock(&delayed_node->mutex); 1572 1573 /* 1574 * First attempt to insert the delayed item. This is to make the error 1575 * handling path simpler in case we fail (-EEXIST). There's no risk of 1576 * any other task coming in and running the delayed item before we do 1577 * the metadata space reservation below, because we are holding the 1578 * delayed node's mutex and that mutex must also be locked before the 1579 * node's delayed items can be run. 1580 */ 1581 ret = __btrfs_add_delayed_item(delayed_node, delayed_item); 1582 if (unlikely(ret)) { 1583 btrfs_err(trans->fs_info, 1584 "error adding delayed dir index item, name: %.*s, index: %llu, root: %llu, dir: %llu, dir->index_cnt: %llu, delayed_node->index_cnt: %llu, error: %pe", 1585 name_len, 1586 (const char *)(dir_item + 1), 1587 index, btrfs_root_id(delayed_node->root), 1588 delayed_node->inode_id, dir->index_cnt, 1589 delayed_node->index_cnt, ERR_PTR(ret)); 1590 btrfs_release_delayed_item(delayed_item); 1591 btrfs_release_dir_index_item_space(trans); 1592 mutex_unlock(&delayed_node->mutex); 1593 goto release_node; 1594 } 1595 1596 if (delayed_node->index_item_leaves == 0 || 1597 delayed_node->curr_index_batch_size + data_len > leaf_data_size) { 1598 delayed_node->curr_index_batch_size = data_len; 1599 reserve_leaf_space = true; 1600 } else { 1601 delayed_node->curr_index_batch_size += data_len; 1602 reserve_leaf_space = false; 1603 } 1604 1605 if (reserve_leaf_space) { 1606 ret = btrfs_delayed_item_reserve_metadata(trans, delayed_item); 1607 /* 1608 * Space was reserved for a dir index item insertion when we 1609 * started the transaction, so getting a failure here should be 1610 * impossible. 1611 */ 1612 if (WARN_ON(ret)) { 1613 btrfs_release_delayed_item(delayed_item); 1614 mutex_unlock(&delayed_node->mutex); 1615 goto release_node; 1616 } 1617 1618 delayed_node->index_item_leaves++; 1619 } else { 1620 btrfs_release_dir_index_item_space(trans); 1621 } 1622 mutex_unlock(&delayed_node->mutex); 1623 1624 release_node: 1625 /* Must release the node before freeing @tracker's containing struct. */ 1626 btrfs_release_delayed_node(delayed_node, tracker); 1627 kfree(prealloc); 1628 return ret; 1629 } 1630 1631 static bool btrfs_delete_delayed_insertion_item(struct btrfs_delayed_node *node, 1632 u64 index) 1633 { 1634 struct btrfs_delayed_item *item; 1635 1636 mutex_lock(&node->mutex); 1637 item = __btrfs_lookup_delayed_item(&node->ins_root.rb_root, index); 1638 if (!item) { 1639 mutex_unlock(&node->mutex); 1640 return false; 1641 } 1642 1643 /* 1644 * For delayed items to insert, we track reserved metadata bytes based 1645 * on the number of leaves that we will use. 1646 * See btrfs_insert_delayed_dir_index_prealloc() and 1647 * btrfs_delayed_item_reserve_metadata()). 1648 */ 1649 ASSERT(item->bytes_reserved == 0); 1650 ASSERT(node->index_item_leaves > 0); 1651 1652 /* 1653 * If there's only one leaf reserved, we can decrement this item from the 1654 * current batch, otherwise we can not because we don't know which leaf 1655 * it belongs to. With the current limit on delayed items, we rarely 1656 * accumulate enough dir index items to fill more than one leaf (even 1657 * when using a leaf size of 4K). 1658 */ 1659 if (node->index_item_leaves == 1) { 1660 const u32 data_len = item->data_len + sizeof(struct btrfs_item); 1661 1662 ASSERT(node->curr_index_batch_size >= data_len); 1663 node->curr_index_batch_size -= data_len; 1664 } 1665 1666 btrfs_release_delayed_item(item); 1667 1668 /* If we now have no more dir index items, we can release all leaves. */ 1669 if (RB_EMPTY_ROOT(&node->ins_root.rb_root)) { 1670 btrfs_delayed_item_release_leaves(node, node->index_item_leaves); 1671 node->index_item_leaves = 0; 1672 } 1673 1674 mutex_unlock(&node->mutex); 1675 return true; 1676 } 1677 1678 int btrfs_delete_delayed_dir_index(struct btrfs_trans_handle *trans, 1679 struct btrfs_inode *dir, u64 index) 1680 { 1681 struct btrfs_delayed_node *node; 1682 struct btrfs_ref_tracker delayed_node_tracker; 1683 struct btrfs_delayed_item *item; 1684 int ret; 1685 1686 node = btrfs_get_or_create_delayed_node(dir, &delayed_node_tracker); 1687 if (IS_ERR(node)) 1688 return PTR_ERR(node); 1689 1690 if (btrfs_delete_delayed_insertion_item(node, index)) { 1691 ret = 0; 1692 goto end; 1693 } 1694 1695 item = btrfs_alloc_delayed_item(0, node, BTRFS_DELAYED_DELETION_ITEM); 1696 if (!item) { 1697 ret = -ENOMEM; 1698 goto end; 1699 } 1700 1701 item->index = index; 1702 1703 ret = btrfs_delayed_item_reserve_metadata(trans, item); 1704 /* 1705 * we have reserved enough space when we start a new transaction, 1706 * so reserving metadata failure is impossible. 1707 */ 1708 if (ret < 0) { 1709 btrfs_err(trans->fs_info, 1710 "metadata reservation failed for delayed dir item deletion, index: %llu, root: %llu, inode: %llu, error: %pe", 1711 index, btrfs_root_id(node->root), node->inode_id, ERR_PTR(ret)); 1712 btrfs_release_delayed_item(item); 1713 goto end; 1714 } 1715 1716 mutex_lock(&node->mutex); 1717 ret = __btrfs_add_delayed_item(node, item); 1718 if (unlikely(ret)) { 1719 btrfs_err(trans->fs_info, 1720 "failed to add delayed dir index item, root: %llu, inode: %llu, index: %llu, error: %pe", 1721 btrfs_root_id(node->root), node->inode_id, index, ERR_PTR(ret)); 1722 btrfs_delayed_item_release_metadata(dir->root, item); 1723 btrfs_release_delayed_item(item); 1724 } 1725 mutex_unlock(&node->mutex); 1726 end: 1727 btrfs_release_delayed_node(node, &delayed_node_tracker); 1728 return ret; 1729 } 1730 1731 int btrfs_inode_delayed_dir_index_count(struct btrfs_inode *inode) 1732 { 1733 struct btrfs_ref_tracker delayed_node_tracker; 1734 struct btrfs_delayed_node *delayed_node; 1735 1736 delayed_node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 1737 if (!delayed_node) 1738 return -ENOENT; 1739 1740 /* 1741 * Since we have held i_mutex of this directory, it is impossible that 1742 * a new directory index is added into the delayed node and index_cnt 1743 * is updated now. So we needn't lock the delayed node. 1744 */ 1745 if (!delayed_node->index_cnt) { 1746 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1747 return -EINVAL; 1748 } 1749 1750 inode->index_cnt = delayed_node->index_cnt; 1751 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1752 return 0; 1753 } 1754 1755 bool btrfs_readdir_get_delayed_items(struct btrfs_inode *inode, 1756 u64 last_index, 1757 struct list_head *ins_list, 1758 struct list_head *del_list) 1759 { 1760 struct btrfs_delayed_node *delayed_node; 1761 struct btrfs_delayed_item *item; 1762 struct btrfs_ref_tracker delayed_node_tracker; 1763 1764 delayed_node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 1765 if (!delayed_node) 1766 return false; 1767 1768 /* 1769 * We can only do one readdir with delayed items at a time because of 1770 * item->readdir_list. 1771 */ 1772 btrfs_inode_unlock(inode, BTRFS_ILOCK_SHARED); 1773 btrfs_inode_lock(inode, 0); 1774 1775 mutex_lock(&delayed_node->mutex); 1776 item = __btrfs_first_delayed_insertion_item(delayed_node); 1777 while (item && item->index <= last_index) { 1778 refcount_inc(&item->refs); 1779 list_add_tail(&item->readdir_list, ins_list); 1780 item = __btrfs_next_delayed_item(item); 1781 } 1782 1783 item = __btrfs_first_delayed_deletion_item(delayed_node); 1784 while (item && item->index <= last_index) { 1785 refcount_inc(&item->refs); 1786 list_add_tail(&item->readdir_list, del_list); 1787 item = __btrfs_next_delayed_item(item); 1788 } 1789 mutex_unlock(&delayed_node->mutex); 1790 /* 1791 * This delayed node is still cached in the btrfs inode, so refs 1792 * must be > 1 now, and we needn't check it is going to be freed 1793 * or not. 1794 * 1795 * Besides that, this function is used to read dir, we do not 1796 * insert/delete delayed items in this period. So we also needn't 1797 * requeue or dequeue this delayed node. 1798 */ 1799 btrfs_delayed_node_ref_tracker_free(delayed_node, &delayed_node_tracker); 1800 refcount_dec(&delayed_node->refs); 1801 1802 return true; 1803 } 1804 1805 void btrfs_readdir_put_delayed_items(struct btrfs_inode *inode, 1806 struct list_head *ins_list, 1807 struct list_head *del_list) 1808 { 1809 struct btrfs_delayed_item *curr, *next; 1810 1811 list_for_each_entry_safe(curr, next, ins_list, readdir_list) { 1812 list_del(&curr->readdir_list); 1813 if (refcount_dec_and_test(&curr->refs)) 1814 kfree(curr); 1815 } 1816 1817 list_for_each_entry_safe(curr, next, del_list, readdir_list) { 1818 list_del(&curr->readdir_list); 1819 if (refcount_dec_and_test(&curr->refs)) 1820 kfree(curr); 1821 } 1822 1823 /* 1824 * The VFS is going to do up_read(), so we need to downgrade back to a 1825 * read lock. 1826 */ 1827 downgrade_write(&inode->vfs_inode.i_rwsem); 1828 } 1829 1830 bool btrfs_should_delete_dir_index(const struct list_head *del_list, u64 index) 1831 { 1832 struct btrfs_delayed_item *curr; 1833 bool ret = false; 1834 1835 list_for_each_entry(curr, del_list, readdir_list) { 1836 if (curr->index > index) 1837 break; 1838 if (curr->index == index) { 1839 ret = true; 1840 break; 1841 } 1842 } 1843 return ret; 1844 } 1845 1846 /* 1847 * Read dir info stored in the delayed tree. 1848 */ 1849 bool btrfs_readdir_delayed_dir_index(struct dir_context *ctx, 1850 const struct list_head *ins_list) 1851 { 1852 struct btrfs_dir_item *di; 1853 struct btrfs_delayed_item *curr, *next; 1854 struct btrfs_key location; 1855 char *name; 1856 int name_len; 1857 unsigned char d_type; 1858 1859 /* 1860 * Changing the data of the delayed item is impossible. So 1861 * we needn't lock them. And we have held i_mutex of the 1862 * directory, nobody can delete any directory indexes now. 1863 */ 1864 list_for_each_entry_safe(curr, next, ins_list, readdir_list) { 1865 bool over; 1866 1867 list_del(&curr->readdir_list); 1868 1869 if (curr->index < ctx->pos) { 1870 if (refcount_dec_and_test(&curr->refs)) 1871 kfree(curr); 1872 continue; 1873 } 1874 1875 ctx->pos = curr->index; 1876 1877 di = (struct btrfs_dir_item *)curr->data; 1878 name = (char *)(di + 1); 1879 name_len = btrfs_stack_dir_name_len(di); 1880 1881 d_type = fs_ftype_to_dtype(btrfs_dir_flags_to_ftype(di->type)); 1882 btrfs_disk_key_to_cpu(&location, &di->location); 1883 1884 over = !dir_emit(ctx, name, name_len, location.objectid, d_type); 1885 1886 if (refcount_dec_and_test(&curr->refs)) 1887 kfree(curr); 1888 1889 if (over) 1890 return true; 1891 ctx->pos++; 1892 } 1893 return false; 1894 } 1895 1896 static void fill_stack_inode_item(struct btrfs_trans_handle *trans, 1897 struct btrfs_inode_item *inode_item, 1898 struct btrfs_inode *inode) 1899 { 1900 struct inode *vfs_inode = &inode->vfs_inode; 1901 u64 flags; 1902 1903 btrfs_set_stack_inode_uid(inode_item, i_uid_read(vfs_inode)); 1904 btrfs_set_stack_inode_gid(inode_item, i_gid_read(vfs_inode)); 1905 btrfs_set_stack_inode_size(inode_item, inode->disk_i_size); 1906 btrfs_set_stack_inode_mode(inode_item, vfs_inode->i_mode); 1907 btrfs_set_stack_inode_nlink(inode_item, vfs_inode->i_nlink); 1908 btrfs_set_stack_inode_nbytes(inode_item, inode_get_bytes(vfs_inode)); 1909 btrfs_set_stack_inode_generation(inode_item, inode->generation); 1910 btrfs_set_stack_inode_sequence(inode_item, 1911 inode_peek_iversion(vfs_inode)); 1912 btrfs_set_stack_inode_transid(inode_item, trans->transid); 1913 btrfs_set_stack_inode_rdev(inode_item, vfs_inode->i_rdev); 1914 flags = btrfs_inode_combine_flags(inode->flags, inode->ro_flags); 1915 btrfs_set_stack_inode_flags(inode_item, flags); 1916 btrfs_set_stack_inode_block_group(inode_item, 0); 1917 1918 btrfs_set_stack_timespec_sec(&inode_item->atime, 1919 inode_get_atime_sec(vfs_inode)); 1920 btrfs_set_stack_timespec_nsec(&inode_item->atime, 1921 inode_get_atime_nsec(vfs_inode)); 1922 1923 btrfs_set_stack_timespec_sec(&inode_item->mtime, 1924 inode_get_mtime_sec(vfs_inode)); 1925 btrfs_set_stack_timespec_nsec(&inode_item->mtime, 1926 inode_get_mtime_nsec(vfs_inode)); 1927 1928 btrfs_set_stack_timespec_sec(&inode_item->ctime, 1929 inode_get_ctime_sec(vfs_inode)); 1930 btrfs_set_stack_timespec_nsec(&inode_item->ctime, 1931 inode_get_ctime_nsec(vfs_inode)); 1932 1933 btrfs_set_stack_timespec_sec(&inode_item->otime, inode->i_otime_sec); 1934 btrfs_set_stack_timespec_nsec(&inode_item->otime, inode->i_otime_nsec); 1935 } 1936 1937 int btrfs_fill_inode(struct btrfs_inode *inode, u32 *rdev) 1938 { 1939 struct btrfs_delayed_node *delayed_node; 1940 struct btrfs_ref_tracker delayed_node_tracker; 1941 struct btrfs_inode_item *inode_item; 1942 struct inode *vfs_inode = &inode->vfs_inode; 1943 1944 delayed_node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 1945 if (!delayed_node) 1946 return -ENOENT; 1947 1948 mutex_lock(&delayed_node->mutex); 1949 if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { 1950 mutex_unlock(&delayed_node->mutex); 1951 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1952 return -ENOENT; 1953 } 1954 1955 inode_item = &delayed_node->inode_item; 1956 1957 i_uid_write(vfs_inode, btrfs_stack_inode_uid(inode_item)); 1958 i_gid_write(vfs_inode, btrfs_stack_inode_gid(inode_item)); 1959 btrfs_i_size_write(inode, btrfs_stack_inode_size(inode_item)); 1960 vfs_inode->i_mode = btrfs_stack_inode_mode(inode_item); 1961 set_nlink(vfs_inode, btrfs_stack_inode_nlink(inode_item)); 1962 inode_set_bytes(vfs_inode, btrfs_stack_inode_nbytes(inode_item)); 1963 inode->generation = btrfs_stack_inode_generation(inode_item); 1964 inode->last_trans = btrfs_stack_inode_transid(inode_item); 1965 1966 inode_set_iversion_queried(vfs_inode, btrfs_stack_inode_sequence(inode_item)); 1967 vfs_inode->i_rdev = 0; 1968 *rdev = btrfs_stack_inode_rdev(inode_item); 1969 btrfs_inode_split_flags(btrfs_stack_inode_flags(inode_item), 1970 &inode->flags, &inode->ro_flags); 1971 1972 inode_set_atime(vfs_inode, btrfs_stack_timespec_sec(&inode_item->atime), 1973 btrfs_stack_timespec_nsec(&inode_item->atime)); 1974 1975 inode_set_mtime(vfs_inode, btrfs_stack_timespec_sec(&inode_item->mtime), 1976 btrfs_stack_timespec_nsec(&inode_item->mtime)); 1977 1978 inode_set_ctime(vfs_inode, btrfs_stack_timespec_sec(&inode_item->ctime), 1979 btrfs_stack_timespec_nsec(&inode_item->ctime)); 1980 1981 inode->i_otime_sec = btrfs_stack_timespec_sec(&inode_item->otime); 1982 inode->i_otime_nsec = btrfs_stack_timespec_nsec(&inode_item->otime); 1983 1984 vfs_inode->i_generation = inode->generation; 1985 if (S_ISDIR(vfs_inode->i_mode)) 1986 inode->index_cnt = (u64)-1; 1987 1988 mutex_unlock(&delayed_node->mutex); 1989 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 1990 return 0; 1991 } 1992 1993 int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans, 1994 struct btrfs_inode *inode) 1995 { 1996 struct btrfs_root *root = inode->root; 1997 struct btrfs_delayed_node *delayed_node; 1998 struct btrfs_ref_tracker delayed_node_tracker; 1999 int ret = 0; 2000 2001 delayed_node = btrfs_get_or_create_delayed_node(inode, &delayed_node_tracker); 2002 if (IS_ERR(delayed_node)) 2003 return PTR_ERR(delayed_node); 2004 2005 mutex_lock(&delayed_node->mutex); 2006 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { 2007 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); 2008 goto release_node; 2009 } 2010 2011 ret = btrfs_delayed_inode_reserve_metadata(trans, root, delayed_node); 2012 if (ret) 2013 goto release_node; 2014 2015 fill_stack_inode_item(trans, &delayed_node->inode_item, inode); 2016 set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); 2017 delayed_node->count++; 2018 atomic_inc(&root->fs_info->delayed_root.items); 2019 release_node: 2020 mutex_unlock(&delayed_node->mutex); 2021 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 2022 return ret; 2023 } 2024 2025 int btrfs_delayed_delete_inode_ref(struct btrfs_inode *inode) 2026 { 2027 struct btrfs_fs_info *fs_info = inode->root->fs_info; 2028 struct btrfs_delayed_node *delayed_node; 2029 struct btrfs_ref_tracker delayed_node_tracker; 2030 2031 /* 2032 * we don't do delayed inode updates during log recovery because it 2033 * leads to enospc problems. This means we also can't do 2034 * delayed inode refs 2035 */ 2036 if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) 2037 return -EAGAIN; 2038 2039 delayed_node = btrfs_get_or_create_delayed_node(inode, &delayed_node_tracker); 2040 if (IS_ERR(delayed_node)) 2041 return PTR_ERR(delayed_node); 2042 2043 /* 2044 * We don't reserve space for inode ref deletion is because: 2045 * - We ONLY do async inode ref deletion for the inode who has only 2046 * one link(i_nlink == 1), it means there is only one inode ref. 2047 * And in most case, the inode ref and the inode item are in the 2048 * same leaf, and we will deal with them at the same time. 2049 * Since we are sure we will reserve the space for the inode item, 2050 * it is unnecessary to reserve space for inode ref deletion. 2051 * - If the inode ref and the inode item are not in the same leaf, 2052 * We also needn't worry about enospc problem, because we reserve 2053 * much more space for the inode update than it needs. 2054 * - At the worst, we can steal some space from the global reservation. 2055 * It is very rare. 2056 */ 2057 mutex_lock(&delayed_node->mutex); 2058 if (!test_and_set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags)) { 2059 delayed_node->count++; 2060 atomic_inc(&fs_info->delayed_root.items); 2061 } 2062 mutex_unlock(&delayed_node->mutex); 2063 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 2064 return 0; 2065 } 2066 2067 static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node) 2068 { 2069 struct btrfs_root *root = delayed_node->root; 2070 struct btrfs_fs_info *fs_info = root->fs_info; 2071 struct btrfs_delayed_item *curr_item, *prev_item; 2072 2073 mutex_lock(&delayed_node->mutex); 2074 curr_item = __btrfs_first_delayed_insertion_item(delayed_node); 2075 while (curr_item) { 2076 prev_item = curr_item; 2077 curr_item = __btrfs_next_delayed_item(prev_item); 2078 btrfs_release_delayed_item(prev_item); 2079 } 2080 2081 if (delayed_node->index_item_leaves > 0) { 2082 btrfs_delayed_item_release_leaves(delayed_node, 2083 delayed_node->index_item_leaves); 2084 delayed_node->index_item_leaves = 0; 2085 } 2086 2087 curr_item = __btrfs_first_delayed_deletion_item(delayed_node); 2088 while (curr_item) { 2089 btrfs_delayed_item_release_metadata(root, curr_item); 2090 prev_item = curr_item; 2091 curr_item = __btrfs_next_delayed_item(prev_item); 2092 btrfs_release_delayed_item(prev_item); 2093 } 2094 2095 btrfs_release_delayed_iref(delayed_node); 2096 2097 if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { 2098 btrfs_delayed_inode_release_metadata(fs_info, delayed_node, false); 2099 btrfs_release_delayed_inode(delayed_node); 2100 } 2101 mutex_unlock(&delayed_node->mutex); 2102 } 2103 2104 void btrfs_kill_delayed_inode_items(struct btrfs_inode *inode) 2105 { 2106 struct btrfs_delayed_node *delayed_node; 2107 struct btrfs_ref_tracker delayed_node_tracker; 2108 2109 delayed_node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 2110 if (!delayed_node) 2111 return; 2112 2113 __btrfs_kill_delayed_node(delayed_node); 2114 btrfs_release_delayed_node(delayed_node, &delayed_node_tracker); 2115 } 2116 2117 void btrfs_kill_all_delayed_nodes(struct btrfs_root *root) 2118 { 2119 unsigned long index = 0; 2120 struct btrfs_delayed_node *delayed_nodes[8]; 2121 struct btrfs_ref_tracker delayed_node_trackers[8]; 2122 2123 while (1) { 2124 struct btrfs_delayed_node *node; 2125 int count; 2126 2127 xa_lock(&root->delayed_nodes); 2128 if (xa_empty(&root->delayed_nodes)) { 2129 xa_unlock(&root->delayed_nodes); 2130 return; 2131 } 2132 2133 count = 0; 2134 xa_for_each_start(&root->delayed_nodes, index, node, index) { 2135 /* 2136 * Don't increase refs in case the node is dead and 2137 * about to be removed from the tree in the loop below 2138 */ 2139 if (refcount_inc_not_zero(&node->refs)) { 2140 btrfs_delayed_node_ref_tracker_alloc(node, 2141 &delayed_node_trackers[count], 2142 GFP_ATOMIC); 2143 delayed_nodes[count] = node; 2144 count++; 2145 } 2146 if (count >= ARRAY_SIZE(delayed_nodes)) 2147 break; 2148 } 2149 xa_unlock(&root->delayed_nodes); 2150 index++; 2151 2152 for (int i = 0; i < count; i++) { 2153 __btrfs_kill_delayed_node(delayed_nodes[i]); 2154 btrfs_delayed_node_ref_tracker_dir_print(delayed_nodes[i]); 2155 btrfs_release_delayed_node(delayed_nodes[i], 2156 &delayed_node_trackers[i]); 2157 } 2158 } 2159 } 2160 2161 void btrfs_destroy_delayed_inodes(struct btrfs_fs_info *fs_info) 2162 { 2163 struct btrfs_delayed_node *curr_node, *prev_node; 2164 struct btrfs_ref_tracker curr_delayed_node_tracker, prev_delayed_node_tracker; 2165 2166 curr_node = btrfs_first_delayed_node(fs_info, &curr_delayed_node_tracker); 2167 while (curr_node) { 2168 __btrfs_kill_delayed_node(curr_node); 2169 2170 prev_node = curr_node; 2171 prev_delayed_node_tracker = curr_delayed_node_tracker; 2172 curr_node = btrfs_next_delayed_node(curr_node, &curr_delayed_node_tracker); 2173 btrfs_release_delayed_node(prev_node, &prev_delayed_node_tracker); 2174 } 2175 } 2176 2177 void btrfs_log_get_delayed_items(struct btrfs_inode *inode, 2178 struct list_head *ins_list, 2179 struct list_head *del_list) 2180 { 2181 struct btrfs_delayed_node *node; 2182 struct btrfs_delayed_item *item; 2183 struct btrfs_ref_tracker delayed_node_tracker; 2184 2185 node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 2186 if (!node) 2187 return; 2188 2189 mutex_lock(&node->mutex); 2190 item = __btrfs_first_delayed_insertion_item(node); 2191 while (item) { 2192 /* 2193 * It's possible that the item is already in a log list. This 2194 * can happen in case two tasks are trying to log the same 2195 * directory. For example if we have tasks A and task B: 2196 * 2197 * Task A collected the delayed items into a log list while 2198 * under the inode's log_mutex (at btrfs_log_inode()), but it 2199 * only releases the items after logging the inodes they point 2200 * to (if they are new inodes), which happens after unlocking 2201 * the log mutex; 2202 * 2203 * Task B enters btrfs_log_inode() and acquires the log_mutex 2204 * of the same directory inode, before task B releases the 2205 * delayed items. This can happen for example when logging some 2206 * inode we need to trigger logging of its parent directory, so 2207 * logging two files that have the same parent directory can 2208 * lead to this. 2209 * 2210 * If this happens, just ignore delayed items already in a log 2211 * list. All the tasks logging the directory are under a log 2212 * transaction and whichever finishes first can not sync the log 2213 * before the other completes and leaves the log transaction. 2214 */ 2215 if (!item->logged && list_empty(&item->log_list)) { 2216 refcount_inc(&item->refs); 2217 list_add_tail(&item->log_list, ins_list); 2218 } 2219 item = __btrfs_next_delayed_item(item); 2220 } 2221 2222 item = __btrfs_first_delayed_deletion_item(node); 2223 while (item) { 2224 /* It may be non-empty, for the same reason mentioned above. */ 2225 if (!item->logged && list_empty(&item->log_list)) { 2226 refcount_inc(&item->refs); 2227 list_add_tail(&item->log_list, del_list); 2228 } 2229 item = __btrfs_next_delayed_item(item); 2230 } 2231 mutex_unlock(&node->mutex); 2232 2233 /* 2234 * We are called during inode logging, which means the inode is in use 2235 * and can not be evicted before we finish logging the inode. So we never 2236 * have the last reference on the delayed inode. 2237 * Also, we don't use btrfs_release_delayed_node() because that would 2238 * requeue the delayed inode (change its order in the list of prepared 2239 * nodes) and we don't want to do such change because we don't create or 2240 * delete delayed items. 2241 */ 2242 ASSERT(refcount_read(&node->refs) > 1); 2243 btrfs_delayed_node_ref_tracker_free(node, &delayed_node_tracker); 2244 refcount_dec(&node->refs); 2245 } 2246 2247 void btrfs_log_put_delayed_items(struct btrfs_inode *inode, 2248 struct list_head *ins_list, 2249 struct list_head *del_list) 2250 { 2251 struct btrfs_delayed_node *node; 2252 struct btrfs_delayed_item *item; 2253 struct btrfs_delayed_item *next; 2254 struct btrfs_ref_tracker delayed_node_tracker; 2255 2256 node = btrfs_get_delayed_node(inode, &delayed_node_tracker); 2257 if (!node) 2258 return; 2259 2260 mutex_lock(&node->mutex); 2261 2262 list_for_each_entry_safe(item, next, ins_list, log_list) { 2263 item->logged = true; 2264 list_del_init(&item->log_list); 2265 if (refcount_dec_and_test(&item->refs)) 2266 kfree(item); 2267 } 2268 2269 list_for_each_entry_safe(item, next, del_list, log_list) { 2270 item->logged = true; 2271 list_del_init(&item->log_list); 2272 if (refcount_dec_and_test(&item->refs)) 2273 kfree(item); 2274 } 2275 2276 mutex_unlock(&node->mutex); 2277 2278 /* 2279 * We are called during inode logging, which means the inode is in use 2280 * and can not be evicted before we finish logging the inode. So we never 2281 * have the last reference on the delayed inode. 2282 * Also, we don't use btrfs_release_delayed_node() because that would 2283 * requeue the delayed inode (change its order in the list of prepared 2284 * nodes) and we don't want to do such change because we don't create or 2285 * delete delayed items. 2286 */ 2287 ASSERT(refcount_read(&node->refs) > 1); 2288 btrfs_delayed_node_ref_tracker_free(node, &delayed_node_tracker); 2289 refcount_dec(&node->refs); 2290 } 2291