1 /* 2 * Copyright (C) 2007 Oracle. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public 6 * License v2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public 14 * License along with this program; if not, write to the 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 * Boston, MA 021110-1307, USA. 17 */ 18 19 #include <linux/fs.h> 20 #include <linux/slab.h> 21 #include <linux/sched.h> 22 #include <linux/writeback.h> 23 #include <linux/pagemap.h> 24 #include <linux/blkdev.h> 25 #include "ctree.h" 26 #include "disk-io.h" 27 #include "transaction.h" 28 #include "locking.h" 29 #include "tree-log.h" 30 #include "inode-map.h" 31 #include "volumes.h" 32 33 #define BTRFS_ROOT_TRANS_TAG 0 34 35 void put_transaction(struct btrfs_transaction *transaction) 36 { 37 WARN_ON(atomic_read(&transaction->use_count) == 0); 38 if (atomic_dec_and_test(&transaction->use_count)) { 39 BUG_ON(!list_empty(&transaction->list)); 40 WARN_ON(transaction->delayed_refs.root.rb_node); 41 WARN_ON(!list_empty(&transaction->delayed_refs.seq_head)); 42 memset(transaction, 0, sizeof(*transaction)); 43 kmem_cache_free(btrfs_transaction_cachep, transaction); 44 } 45 } 46 47 static noinline void switch_commit_root(struct btrfs_root *root) 48 { 49 free_extent_buffer(root->commit_root); 50 root->commit_root = btrfs_root_node(root); 51 } 52 53 /* 54 * either allocate a new transaction or hop into the existing one 55 */ 56 static noinline int join_transaction(struct btrfs_root *root, int nofail) 57 { 58 struct btrfs_transaction *cur_trans; 59 struct btrfs_fs_info *fs_info = root->fs_info; 60 61 spin_lock(&fs_info->trans_lock); 62 loop: 63 /* The file system has been taken offline. No new transactions. */ 64 if (fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) { 65 spin_unlock(&fs_info->trans_lock); 66 return -EROFS; 67 } 68 69 if (fs_info->trans_no_join) { 70 if (!nofail) { 71 spin_unlock(&fs_info->trans_lock); 72 return -EBUSY; 73 } 74 } 75 76 cur_trans = fs_info->running_transaction; 77 if (cur_trans) { 78 if (cur_trans->aborted) { 79 spin_unlock(&fs_info->trans_lock); 80 return cur_trans->aborted; 81 } 82 atomic_inc(&cur_trans->use_count); 83 atomic_inc(&cur_trans->num_writers); 84 cur_trans->num_joined++; 85 spin_unlock(&fs_info->trans_lock); 86 return 0; 87 } 88 spin_unlock(&fs_info->trans_lock); 89 90 cur_trans = kmem_cache_alloc(btrfs_transaction_cachep, GFP_NOFS); 91 if (!cur_trans) 92 return -ENOMEM; 93 94 spin_lock(&fs_info->trans_lock); 95 if (fs_info->running_transaction) { 96 /* 97 * someone started a transaction after we unlocked. Make sure 98 * to redo the trans_no_join checks above 99 */ 100 kmem_cache_free(btrfs_transaction_cachep, cur_trans); 101 cur_trans = fs_info->running_transaction; 102 goto loop; 103 } 104 105 atomic_set(&cur_trans->num_writers, 1); 106 cur_trans->num_joined = 0; 107 init_waitqueue_head(&cur_trans->writer_wait); 108 init_waitqueue_head(&cur_trans->commit_wait); 109 cur_trans->in_commit = 0; 110 cur_trans->blocked = 0; 111 /* 112 * One for this trans handle, one so it will live on until we 113 * commit the transaction. 114 */ 115 atomic_set(&cur_trans->use_count, 2); 116 cur_trans->commit_done = 0; 117 cur_trans->start_time = get_seconds(); 118 119 cur_trans->delayed_refs.root = RB_ROOT; 120 cur_trans->delayed_refs.num_entries = 0; 121 cur_trans->delayed_refs.num_heads_ready = 0; 122 cur_trans->delayed_refs.num_heads = 0; 123 cur_trans->delayed_refs.flushing = 0; 124 cur_trans->delayed_refs.run_delayed_start = 0; 125 cur_trans->delayed_refs.seq = 1; 126 127 /* 128 * although the tree mod log is per file system and not per transaction, 129 * the log must never go across transaction boundaries. 130 */ 131 smp_mb(); 132 if (!list_empty(&fs_info->tree_mod_seq_list)) { 133 printk(KERN_ERR "btrfs: tree_mod_seq_list not empty when " 134 "creating a fresh transaction\n"); 135 WARN_ON(1); 136 } 137 if (!RB_EMPTY_ROOT(&fs_info->tree_mod_log)) { 138 printk(KERN_ERR "btrfs: tree_mod_log rb tree not empty when " 139 "creating a fresh transaction\n"); 140 WARN_ON(1); 141 } 142 atomic_set(&fs_info->tree_mod_seq, 0); 143 144 init_waitqueue_head(&cur_trans->delayed_refs.seq_wait); 145 spin_lock_init(&cur_trans->commit_lock); 146 spin_lock_init(&cur_trans->delayed_refs.lock); 147 INIT_LIST_HEAD(&cur_trans->delayed_refs.seq_head); 148 149 INIT_LIST_HEAD(&cur_trans->pending_snapshots); 150 list_add_tail(&cur_trans->list, &fs_info->trans_list); 151 extent_io_tree_init(&cur_trans->dirty_pages, 152 fs_info->btree_inode->i_mapping); 153 fs_info->generation++; 154 cur_trans->transid = fs_info->generation; 155 fs_info->running_transaction = cur_trans; 156 cur_trans->aborted = 0; 157 spin_unlock(&fs_info->trans_lock); 158 159 return 0; 160 } 161 162 /* 163 * this does all the record keeping required to make sure that a reference 164 * counted root is properly recorded in a given transaction. This is required 165 * to make sure the old root from before we joined the transaction is deleted 166 * when the transaction commits 167 */ 168 static int record_root_in_trans(struct btrfs_trans_handle *trans, 169 struct btrfs_root *root) 170 { 171 if (root->ref_cows && root->last_trans < trans->transid) { 172 WARN_ON(root == root->fs_info->extent_root); 173 WARN_ON(root->commit_root != root->node); 174 175 /* 176 * see below for in_trans_setup usage rules 177 * we have the reloc mutex held now, so there 178 * is only one writer in this function 179 */ 180 root->in_trans_setup = 1; 181 182 /* make sure readers find in_trans_setup before 183 * they find our root->last_trans update 184 */ 185 smp_wmb(); 186 187 spin_lock(&root->fs_info->fs_roots_radix_lock); 188 if (root->last_trans == trans->transid) { 189 spin_unlock(&root->fs_info->fs_roots_radix_lock); 190 return 0; 191 } 192 radix_tree_tag_set(&root->fs_info->fs_roots_radix, 193 (unsigned long)root->root_key.objectid, 194 BTRFS_ROOT_TRANS_TAG); 195 spin_unlock(&root->fs_info->fs_roots_radix_lock); 196 root->last_trans = trans->transid; 197 198 /* this is pretty tricky. We don't want to 199 * take the relocation lock in btrfs_record_root_in_trans 200 * unless we're really doing the first setup for this root in 201 * this transaction. 202 * 203 * Normally we'd use root->last_trans as a flag to decide 204 * if we want to take the expensive mutex. 205 * 206 * But, we have to set root->last_trans before we 207 * init the relocation root, otherwise, we trip over warnings 208 * in ctree.c. The solution used here is to flag ourselves 209 * with root->in_trans_setup. When this is 1, we're still 210 * fixing up the reloc trees and everyone must wait. 211 * 212 * When this is zero, they can trust root->last_trans and fly 213 * through btrfs_record_root_in_trans without having to take the 214 * lock. smp_wmb() makes sure that all the writes above are 215 * done before we pop in the zero below 216 */ 217 btrfs_init_reloc_root(trans, root); 218 smp_wmb(); 219 root->in_trans_setup = 0; 220 } 221 return 0; 222 } 223 224 225 int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans, 226 struct btrfs_root *root) 227 { 228 if (!root->ref_cows) 229 return 0; 230 231 /* 232 * see record_root_in_trans for comments about in_trans_setup usage 233 * and barriers 234 */ 235 smp_rmb(); 236 if (root->last_trans == trans->transid && 237 !root->in_trans_setup) 238 return 0; 239 240 mutex_lock(&root->fs_info->reloc_mutex); 241 record_root_in_trans(trans, root); 242 mutex_unlock(&root->fs_info->reloc_mutex); 243 244 return 0; 245 } 246 247 /* wait for commit against the current transaction to become unblocked 248 * when this is done, it is safe to start a new transaction, but the current 249 * transaction might not be fully on disk. 250 */ 251 static void wait_current_trans(struct btrfs_root *root) 252 { 253 struct btrfs_transaction *cur_trans; 254 255 spin_lock(&root->fs_info->trans_lock); 256 cur_trans = root->fs_info->running_transaction; 257 if (cur_trans && cur_trans->blocked) { 258 atomic_inc(&cur_trans->use_count); 259 spin_unlock(&root->fs_info->trans_lock); 260 261 wait_event(root->fs_info->transaction_wait, 262 !cur_trans->blocked); 263 put_transaction(cur_trans); 264 } else { 265 spin_unlock(&root->fs_info->trans_lock); 266 } 267 } 268 269 enum btrfs_trans_type { 270 TRANS_START, 271 TRANS_JOIN, 272 TRANS_USERSPACE, 273 TRANS_JOIN_NOLOCK, 274 }; 275 276 static int may_wait_transaction(struct btrfs_root *root, int type) 277 { 278 if (root->fs_info->log_root_recovering) 279 return 0; 280 281 if (type == TRANS_USERSPACE) 282 return 1; 283 284 if (type == TRANS_START && 285 !atomic_read(&root->fs_info->open_ioctl_trans)) 286 return 1; 287 288 return 0; 289 } 290 291 static struct btrfs_trans_handle *start_transaction(struct btrfs_root *root, 292 u64 num_items, int type) 293 { 294 struct btrfs_trans_handle *h; 295 struct btrfs_transaction *cur_trans; 296 u64 num_bytes = 0; 297 int ret; 298 299 if (root->fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) 300 return ERR_PTR(-EROFS); 301 302 if (current->journal_info) { 303 WARN_ON(type != TRANS_JOIN && type != TRANS_JOIN_NOLOCK); 304 h = current->journal_info; 305 h->use_count++; 306 h->orig_rsv = h->block_rsv; 307 h->block_rsv = NULL; 308 goto got_it; 309 } 310 311 /* 312 * Do the reservation before we join the transaction so we can do all 313 * the appropriate flushing if need be. 314 */ 315 if (num_items > 0 && root != root->fs_info->chunk_root) { 316 num_bytes = btrfs_calc_trans_metadata_size(root, num_items); 317 ret = btrfs_block_rsv_add(root, 318 &root->fs_info->trans_block_rsv, 319 num_bytes); 320 if (ret) 321 return ERR_PTR(ret); 322 } 323 again: 324 h = kmem_cache_alloc(btrfs_trans_handle_cachep, GFP_NOFS); 325 if (!h) 326 return ERR_PTR(-ENOMEM); 327 328 if (may_wait_transaction(root, type)) 329 wait_current_trans(root); 330 331 do { 332 ret = join_transaction(root, type == TRANS_JOIN_NOLOCK); 333 if (ret == -EBUSY) 334 wait_current_trans(root); 335 } while (ret == -EBUSY); 336 337 if (ret < 0) { 338 kmem_cache_free(btrfs_trans_handle_cachep, h); 339 return ERR_PTR(ret); 340 } 341 342 cur_trans = root->fs_info->running_transaction; 343 344 h->transid = cur_trans->transid; 345 h->transaction = cur_trans; 346 h->blocks_used = 0; 347 h->bytes_reserved = 0; 348 h->delayed_ref_updates = 0; 349 h->use_count = 1; 350 h->block_rsv = NULL; 351 h->orig_rsv = NULL; 352 h->aborted = 0; 353 354 smp_mb(); 355 if (cur_trans->blocked && may_wait_transaction(root, type)) { 356 btrfs_commit_transaction(h, root); 357 goto again; 358 } 359 360 if (num_bytes) { 361 trace_btrfs_space_reservation(root->fs_info, "transaction", 362 h->transid, num_bytes, 1); 363 h->block_rsv = &root->fs_info->trans_block_rsv; 364 h->bytes_reserved = num_bytes; 365 } 366 367 got_it: 368 btrfs_record_root_in_trans(h, root); 369 370 if (!current->journal_info && type != TRANS_USERSPACE) 371 current->journal_info = h; 372 return h; 373 } 374 375 struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root, 376 int num_items) 377 { 378 return start_transaction(root, num_items, TRANS_START); 379 } 380 struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root) 381 { 382 return start_transaction(root, 0, TRANS_JOIN); 383 } 384 385 struct btrfs_trans_handle *btrfs_join_transaction_nolock(struct btrfs_root *root) 386 { 387 return start_transaction(root, 0, TRANS_JOIN_NOLOCK); 388 } 389 390 struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *root) 391 { 392 return start_transaction(root, 0, TRANS_USERSPACE); 393 } 394 395 /* wait for a transaction commit to be fully complete */ 396 static noinline void wait_for_commit(struct btrfs_root *root, 397 struct btrfs_transaction *commit) 398 { 399 wait_event(commit->commit_wait, commit->commit_done); 400 } 401 402 int btrfs_wait_for_commit(struct btrfs_root *root, u64 transid) 403 { 404 struct btrfs_transaction *cur_trans = NULL, *t; 405 int ret; 406 407 ret = 0; 408 if (transid) { 409 if (transid <= root->fs_info->last_trans_committed) 410 goto out; 411 412 /* find specified transaction */ 413 spin_lock(&root->fs_info->trans_lock); 414 list_for_each_entry(t, &root->fs_info->trans_list, list) { 415 if (t->transid == transid) { 416 cur_trans = t; 417 atomic_inc(&cur_trans->use_count); 418 break; 419 } 420 if (t->transid > transid) 421 break; 422 } 423 spin_unlock(&root->fs_info->trans_lock); 424 ret = -EINVAL; 425 if (!cur_trans) 426 goto out; /* bad transid */ 427 } else { 428 /* find newest transaction that is committing | committed */ 429 spin_lock(&root->fs_info->trans_lock); 430 list_for_each_entry_reverse(t, &root->fs_info->trans_list, 431 list) { 432 if (t->in_commit) { 433 if (t->commit_done) 434 break; 435 cur_trans = t; 436 atomic_inc(&cur_trans->use_count); 437 break; 438 } 439 } 440 spin_unlock(&root->fs_info->trans_lock); 441 if (!cur_trans) 442 goto out; /* nothing committing|committed */ 443 } 444 445 wait_for_commit(root, cur_trans); 446 447 put_transaction(cur_trans); 448 ret = 0; 449 out: 450 return ret; 451 } 452 453 void btrfs_throttle(struct btrfs_root *root) 454 { 455 if (!atomic_read(&root->fs_info->open_ioctl_trans)) 456 wait_current_trans(root); 457 } 458 459 static int should_end_transaction(struct btrfs_trans_handle *trans, 460 struct btrfs_root *root) 461 { 462 int ret; 463 464 ret = btrfs_block_rsv_check(root, &root->fs_info->global_block_rsv, 5); 465 return ret ? 1 : 0; 466 } 467 468 int btrfs_should_end_transaction(struct btrfs_trans_handle *trans, 469 struct btrfs_root *root) 470 { 471 struct btrfs_transaction *cur_trans = trans->transaction; 472 struct btrfs_block_rsv *rsv = trans->block_rsv; 473 int updates; 474 int err; 475 476 smp_mb(); 477 if (cur_trans->blocked || cur_trans->delayed_refs.flushing) 478 return 1; 479 480 /* 481 * We need to do this in case we're deleting csums so the global block 482 * rsv get's used instead of the csum block rsv. 483 */ 484 trans->block_rsv = NULL; 485 486 updates = trans->delayed_ref_updates; 487 trans->delayed_ref_updates = 0; 488 if (updates) { 489 err = btrfs_run_delayed_refs(trans, root, updates); 490 if (err) /* Error code will also eval true */ 491 return err; 492 } 493 494 trans->block_rsv = rsv; 495 496 return should_end_transaction(trans, root); 497 } 498 499 static int __btrfs_end_transaction(struct btrfs_trans_handle *trans, 500 struct btrfs_root *root, int throttle, int lock) 501 { 502 struct btrfs_transaction *cur_trans = trans->transaction; 503 struct btrfs_fs_info *info = root->fs_info; 504 int count = 0; 505 int err = 0; 506 507 if (--trans->use_count) { 508 trans->block_rsv = trans->orig_rsv; 509 return 0; 510 } 511 512 btrfs_trans_release_metadata(trans, root); 513 trans->block_rsv = NULL; 514 while (count < 2) { 515 unsigned long cur = trans->delayed_ref_updates; 516 trans->delayed_ref_updates = 0; 517 if (cur && 518 trans->transaction->delayed_refs.num_heads_ready > 64) { 519 trans->delayed_ref_updates = 0; 520 btrfs_run_delayed_refs(trans, root, cur); 521 } else { 522 break; 523 } 524 count++; 525 } 526 527 if (lock && !atomic_read(&root->fs_info->open_ioctl_trans) && 528 should_end_transaction(trans, root)) { 529 trans->transaction->blocked = 1; 530 smp_wmb(); 531 } 532 533 if (lock && cur_trans->blocked && !cur_trans->in_commit) { 534 if (throttle) { 535 /* 536 * We may race with somebody else here so end up having 537 * to call end_transaction on ourselves again, so inc 538 * our use_count. 539 */ 540 trans->use_count++; 541 return btrfs_commit_transaction(trans, root); 542 } else { 543 wake_up_process(info->transaction_kthread); 544 } 545 } 546 547 WARN_ON(cur_trans != info->running_transaction); 548 WARN_ON(atomic_read(&cur_trans->num_writers) < 1); 549 atomic_dec(&cur_trans->num_writers); 550 551 smp_mb(); 552 if (waitqueue_active(&cur_trans->writer_wait)) 553 wake_up(&cur_trans->writer_wait); 554 put_transaction(cur_trans); 555 556 if (current->journal_info == trans) 557 current->journal_info = NULL; 558 559 if (throttle) 560 btrfs_run_delayed_iputs(root); 561 562 if (trans->aborted || 563 root->fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) { 564 err = -EIO; 565 } 566 567 memset(trans, 0, sizeof(*trans)); 568 kmem_cache_free(btrfs_trans_handle_cachep, trans); 569 return err; 570 } 571 572 int btrfs_end_transaction(struct btrfs_trans_handle *trans, 573 struct btrfs_root *root) 574 { 575 int ret; 576 577 ret = __btrfs_end_transaction(trans, root, 0, 1); 578 if (ret) 579 return ret; 580 return 0; 581 } 582 583 int btrfs_end_transaction_throttle(struct btrfs_trans_handle *trans, 584 struct btrfs_root *root) 585 { 586 int ret; 587 588 ret = __btrfs_end_transaction(trans, root, 1, 1); 589 if (ret) 590 return ret; 591 return 0; 592 } 593 594 int btrfs_end_transaction_nolock(struct btrfs_trans_handle *trans, 595 struct btrfs_root *root) 596 { 597 int ret; 598 599 ret = __btrfs_end_transaction(trans, root, 0, 0); 600 if (ret) 601 return ret; 602 return 0; 603 } 604 605 int btrfs_end_transaction_dmeta(struct btrfs_trans_handle *trans, 606 struct btrfs_root *root) 607 { 608 return __btrfs_end_transaction(trans, root, 1, 1); 609 } 610 611 /* 612 * when btree blocks are allocated, they have some corresponding bits set for 613 * them in one of two extent_io trees. This is used to make sure all of 614 * those extents are sent to disk but does not wait on them 615 */ 616 int btrfs_write_marked_extents(struct btrfs_root *root, 617 struct extent_io_tree *dirty_pages, int mark) 618 { 619 int err = 0; 620 int werr = 0; 621 struct address_space *mapping = root->fs_info->btree_inode->i_mapping; 622 u64 start = 0; 623 u64 end; 624 625 while (!find_first_extent_bit(dirty_pages, start, &start, &end, 626 mark)) { 627 convert_extent_bit(dirty_pages, start, end, EXTENT_NEED_WAIT, mark, 628 GFP_NOFS); 629 err = filemap_fdatawrite_range(mapping, start, end); 630 if (err) 631 werr = err; 632 cond_resched(); 633 start = end + 1; 634 } 635 if (err) 636 werr = err; 637 return werr; 638 } 639 640 /* 641 * when btree blocks are allocated, they have some corresponding bits set for 642 * them in one of two extent_io trees. This is used to make sure all of 643 * those extents are on disk for transaction or log commit. We wait 644 * on all the pages and clear them from the dirty pages state tree 645 */ 646 int btrfs_wait_marked_extents(struct btrfs_root *root, 647 struct extent_io_tree *dirty_pages, int mark) 648 { 649 int err = 0; 650 int werr = 0; 651 struct address_space *mapping = root->fs_info->btree_inode->i_mapping; 652 u64 start = 0; 653 u64 end; 654 655 while (!find_first_extent_bit(dirty_pages, start, &start, &end, 656 EXTENT_NEED_WAIT)) { 657 clear_extent_bits(dirty_pages, start, end, EXTENT_NEED_WAIT, GFP_NOFS); 658 err = filemap_fdatawait_range(mapping, start, end); 659 if (err) 660 werr = err; 661 cond_resched(); 662 start = end + 1; 663 } 664 if (err) 665 werr = err; 666 return werr; 667 } 668 669 /* 670 * when btree blocks are allocated, they have some corresponding bits set for 671 * them in one of two extent_io trees. This is used to make sure all of 672 * those extents are on disk for transaction or log commit 673 */ 674 int btrfs_write_and_wait_marked_extents(struct btrfs_root *root, 675 struct extent_io_tree *dirty_pages, int mark) 676 { 677 int ret; 678 int ret2; 679 680 ret = btrfs_write_marked_extents(root, dirty_pages, mark); 681 ret2 = btrfs_wait_marked_extents(root, dirty_pages, mark); 682 683 if (ret) 684 return ret; 685 if (ret2) 686 return ret2; 687 return 0; 688 } 689 690 int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans, 691 struct btrfs_root *root) 692 { 693 if (!trans || !trans->transaction) { 694 struct inode *btree_inode; 695 btree_inode = root->fs_info->btree_inode; 696 return filemap_write_and_wait(btree_inode->i_mapping); 697 } 698 return btrfs_write_and_wait_marked_extents(root, 699 &trans->transaction->dirty_pages, 700 EXTENT_DIRTY); 701 } 702 703 /* 704 * this is used to update the root pointer in the tree of tree roots. 705 * 706 * But, in the case of the extent allocation tree, updating the root 707 * pointer may allocate blocks which may change the root of the extent 708 * allocation tree. 709 * 710 * So, this loops and repeats and makes sure the cowonly root didn't 711 * change while the root pointer was being updated in the metadata. 712 */ 713 static int update_cowonly_root(struct btrfs_trans_handle *trans, 714 struct btrfs_root *root) 715 { 716 int ret; 717 u64 old_root_bytenr; 718 u64 old_root_used; 719 struct btrfs_root *tree_root = root->fs_info->tree_root; 720 721 old_root_used = btrfs_root_used(&root->root_item); 722 btrfs_write_dirty_block_groups(trans, root); 723 724 while (1) { 725 old_root_bytenr = btrfs_root_bytenr(&root->root_item); 726 if (old_root_bytenr == root->node->start && 727 old_root_used == btrfs_root_used(&root->root_item)) 728 break; 729 730 btrfs_set_root_node(&root->root_item, root->node); 731 ret = btrfs_update_root(trans, tree_root, 732 &root->root_key, 733 &root->root_item); 734 if (ret) 735 return ret; 736 737 old_root_used = btrfs_root_used(&root->root_item); 738 ret = btrfs_write_dirty_block_groups(trans, root); 739 if (ret) 740 return ret; 741 } 742 743 if (root != root->fs_info->extent_root) 744 switch_commit_root(root); 745 746 return 0; 747 } 748 749 /* 750 * update all the cowonly tree roots on disk 751 * 752 * The error handling in this function may not be obvious. Any of the 753 * failures will cause the file system to go offline. We still need 754 * to clean up the delayed refs. 755 */ 756 static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans, 757 struct btrfs_root *root) 758 { 759 struct btrfs_fs_info *fs_info = root->fs_info; 760 struct list_head *next; 761 struct extent_buffer *eb; 762 int ret; 763 764 ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1); 765 if (ret) 766 return ret; 767 768 eb = btrfs_lock_root_node(fs_info->tree_root); 769 ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 770 0, &eb); 771 btrfs_tree_unlock(eb); 772 free_extent_buffer(eb); 773 774 if (ret) 775 return ret; 776 777 ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1); 778 if (ret) 779 return ret; 780 781 ret = btrfs_run_dev_stats(trans, root->fs_info); 782 BUG_ON(ret); 783 784 while (!list_empty(&fs_info->dirty_cowonly_roots)) { 785 next = fs_info->dirty_cowonly_roots.next; 786 list_del_init(next); 787 root = list_entry(next, struct btrfs_root, dirty_list); 788 789 ret = update_cowonly_root(trans, root); 790 if (ret) 791 return ret; 792 } 793 794 down_write(&fs_info->extent_commit_sem); 795 switch_commit_root(fs_info->extent_root); 796 up_write(&fs_info->extent_commit_sem); 797 798 return 0; 799 } 800 801 /* 802 * dead roots are old snapshots that need to be deleted. This allocates 803 * a dirty root struct and adds it into the list of dead roots that need to 804 * be deleted 805 */ 806 int btrfs_add_dead_root(struct btrfs_root *root) 807 { 808 spin_lock(&root->fs_info->trans_lock); 809 list_add(&root->root_list, &root->fs_info->dead_roots); 810 spin_unlock(&root->fs_info->trans_lock); 811 return 0; 812 } 813 814 /* 815 * update all the cowonly tree roots on disk 816 */ 817 static noinline int commit_fs_roots(struct btrfs_trans_handle *trans, 818 struct btrfs_root *root) 819 { 820 struct btrfs_root *gang[8]; 821 struct btrfs_fs_info *fs_info = root->fs_info; 822 int i; 823 int ret; 824 int err = 0; 825 826 spin_lock(&fs_info->fs_roots_radix_lock); 827 while (1) { 828 ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix, 829 (void **)gang, 0, 830 ARRAY_SIZE(gang), 831 BTRFS_ROOT_TRANS_TAG); 832 if (ret == 0) 833 break; 834 for (i = 0; i < ret; i++) { 835 root = gang[i]; 836 radix_tree_tag_clear(&fs_info->fs_roots_radix, 837 (unsigned long)root->root_key.objectid, 838 BTRFS_ROOT_TRANS_TAG); 839 spin_unlock(&fs_info->fs_roots_radix_lock); 840 841 btrfs_free_log(trans, root); 842 btrfs_update_reloc_root(trans, root); 843 btrfs_orphan_commit_root(trans, root); 844 845 btrfs_save_ino_cache(root, trans); 846 847 /* see comments in should_cow_block() */ 848 root->force_cow = 0; 849 smp_wmb(); 850 851 if (root->commit_root != root->node) { 852 mutex_lock(&root->fs_commit_mutex); 853 switch_commit_root(root); 854 btrfs_unpin_free_ino(root); 855 mutex_unlock(&root->fs_commit_mutex); 856 857 btrfs_set_root_node(&root->root_item, 858 root->node); 859 } 860 861 err = btrfs_update_root(trans, fs_info->tree_root, 862 &root->root_key, 863 &root->root_item); 864 spin_lock(&fs_info->fs_roots_radix_lock); 865 if (err) 866 break; 867 } 868 } 869 spin_unlock(&fs_info->fs_roots_radix_lock); 870 return err; 871 } 872 873 /* 874 * defrag a given btree. If cacheonly == 1, this won't read from the disk, 875 * otherwise every leaf in the btree is read and defragged. 876 */ 877 int btrfs_defrag_root(struct btrfs_root *root, int cacheonly) 878 { 879 struct btrfs_fs_info *info = root->fs_info; 880 struct btrfs_trans_handle *trans; 881 int ret; 882 unsigned long nr; 883 884 if (xchg(&root->defrag_running, 1)) 885 return 0; 886 887 while (1) { 888 trans = btrfs_start_transaction(root, 0); 889 if (IS_ERR(trans)) 890 return PTR_ERR(trans); 891 892 ret = btrfs_defrag_leaves(trans, root, cacheonly); 893 894 nr = trans->blocks_used; 895 btrfs_end_transaction(trans, root); 896 btrfs_btree_balance_dirty(info->tree_root, nr); 897 cond_resched(); 898 899 if (btrfs_fs_closing(root->fs_info) || ret != -EAGAIN) 900 break; 901 } 902 root->defrag_running = 0; 903 return ret; 904 } 905 906 /* 907 * new snapshots need to be created at a very specific time in the 908 * transaction commit. This does the actual creation 909 */ 910 static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, 911 struct btrfs_fs_info *fs_info, 912 struct btrfs_pending_snapshot *pending) 913 { 914 struct btrfs_key key; 915 struct btrfs_root_item *new_root_item; 916 struct btrfs_root *tree_root = fs_info->tree_root; 917 struct btrfs_root *root = pending->root; 918 struct btrfs_root *parent_root; 919 struct btrfs_block_rsv *rsv; 920 struct inode *parent_inode; 921 struct dentry *parent; 922 struct dentry *dentry; 923 struct extent_buffer *tmp; 924 struct extent_buffer *old; 925 int ret; 926 u64 to_reserve = 0; 927 u64 index = 0; 928 u64 objectid; 929 u64 root_flags; 930 931 rsv = trans->block_rsv; 932 933 new_root_item = kmalloc(sizeof(*new_root_item), GFP_NOFS); 934 if (!new_root_item) { 935 ret = pending->error = -ENOMEM; 936 goto fail; 937 } 938 939 ret = btrfs_find_free_objectid(tree_root, &objectid); 940 if (ret) { 941 pending->error = ret; 942 goto fail; 943 } 944 945 btrfs_reloc_pre_snapshot(trans, pending, &to_reserve); 946 947 if (to_reserve > 0) { 948 ret = btrfs_block_rsv_add_noflush(root, &pending->block_rsv, 949 to_reserve); 950 if (ret) { 951 pending->error = ret; 952 goto fail; 953 } 954 } 955 956 key.objectid = objectid; 957 key.offset = (u64)-1; 958 key.type = BTRFS_ROOT_ITEM_KEY; 959 960 trans->block_rsv = &pending->block_rsv; 961 962 dentry = pending->dentry; 963 parent = dget_parent(dentry); 964 parent_inode = parent->d_inode; 965 parent_root = BTRFS_I(parent_inode)->root; 966 record_root_in_trans(trans, parent_root); 967 968 /* 969 * insert the directory item 970 */ 971 ret = btrfs_set_inode_index(parent_inode, &index); 972 BUG_ON(ret); /* -ENOMEM */ 973 ret = btrfs_insert_dir_item(trans, parent_root, 974 dentry->d_name.name, dentry->d_name.len, 975 parent_inode, &key, 976 BTRFS_FT_DIR, index); 977 if (ret == -EEXIST) { 978 pending->error = -EEXIST; 979 dput(parent); 980 goto fail; 981 } else if (ret) { 982 goto abort_trans_dput; 983 } 984 985 btrfs_i_size_write(parent_inode, parent_inode->i_size + 986 dentry->d_name.len * 2); 987 ret = btrfs_update_inode(trans, parent_root, parent_inode); 988 if (ret) 989 goto abort_trans_dput; 990 991 /* 992 * pull in the delayed directory update 993 * and the delayed inode item 994 * otherwise we corrupt the FS during 995 * snapshot 996 */ 997 ret = btrfs_run_delayed_items(trans, root); 998 if (ret) { /* Transaction aborted */ 999 dput(parent); 1000 goto fail; 1001 } 1002 1003 record_root_in_trans(trans, root); 1004 btrfs_set_root_last_snapshot(&root->root_item, trans->transid); 1005 memcpy(new_root_item, &root->root_item, sizeof(*new_root_item)); 1006 btrfs_check_and_init_root_item(new_root_item); 1007 1008 root_flags = btrfs_root_flags(new_root_item); 1009 if (pending->readonly) 1010 root_flags |= BTRFS_ROOT_SUBVOL_RDONLY; 1011 else 1012 root_flags &= ~BTRFS_ROOT_SUBVOL_RDONLY; 1013 btrfs_set_root_flags(new_root_item, root_flags); 1014 1015 old = btrfs_lock_root_node(root); 1016 ret = btrfs_cow_block(trans, root, old, NULL, 0, &old); 1017 if (ret) { 1018 btrfs_tree_unlock(old); 1019 free_extent_buffer(old); 1020 goto abort_trans_dput; 1021 } 1022 1023 btrfs_set_lock_blocking(old); 1024 1025 ret = btrfs_copy_root(trans, root, old, &tmp, objectid); 1026 /* clean up in any case */ 1027 btrfs_tree_unlock(old); 1028 free_extent_buffer(old); 1029 if (ret) 1030 goto abort_trans_dput; 1031 1032 /* see comments in should_cow_block() */ 1033 root->force_cow = 1; 1034 smp_wmb(); 1035 1036 btrfs_set_root_node(new_root_item, tmp); 1037 /* record when the snapshot was created in key.offset */ 1038 key.offset = trans->transid; 1039 ret = btrfs_insert_root(trans, tree_root, &key, new_root_item); 1040 btrfs_tree_unlock(tmp); 1041 free_extent_buffer(tmp); 1042 if (ret) 1043 goto abort_trans_dput; 1044 1045 /* 1046 * insert root back/forward references 1047 */ 1048 ret = btrfs_add_root_ref(trans, tree_root, objectid, 1049 parent_root->root_key.objectid, 1050 btrfs_ino(parent_inode), index, 1051 dentry->d_name.name, dentry->d_name.len); 1052 dput(parent); 1053 if (ret) 1054 goto fail; 1055 1056 key.offset = (u64)-1; 1057 pending->snap = btrfs_read_fs_root_no_name(root->fs_info, &key); 1058 if (IS_ERR(pending->snap)) { 1059 ret = PTR_ERR(pending->snap); 1060 goto abort_trans; 1061 } 1062 1063 ret = btrfs_reloc_post_snapshot(trans, pending); 1064 if (ret) 1065 goto abort_trans; 1066 ret = 0; 1067 fail: 1068 kfree(new_root_item); 1069 trans->block_rsv = rsv; 1070 btrfs_block_rsv_release(root, &pending->block_rsv, (u64)-1); 1071 return ret; 1072 1073 abort_trans_dput: 1074 dput(parent); 1075 abort_trans: 1076 btrfs_abort_transaction(trans, root, ret); 1077 goto fail; 1078 } 1079 1080 /* 1081 * create all the snapshots we've scheduled for creation 1082 */ 1083 static noinline int create_pending_snapshots(struct btrfs_trans_handle *trans, 1084 struct btrfs_fs_info *fs_info) 1085 { 1086 struct btrfs_pending_snapshot *pending; 1087 struct list_head *head = &trans->transaction->pending_snapshots; 1088 1089 list_for_each_entry(pending, head, list) 1090 create_pending_snapshot(trans, fs_info, pending); 1091 return 0; 1092 } 1093 1094 static void update_super_roots(struct btrfs_root *root) 1095 { 1096 struct btrfs_root_item *root_item; 1097 struct btrfs_super_block *super; 1098 1099 super = root->fs_info->super_copy; 1100 1101 root_item = &root->fs_info->chunk_root->root_item; 1102 super->chunk_root = root_item->bytenr; 1103 super->chunk_root_generation = root_item->generation; 1104 super->chunk_root_level = root_item->level; 1105 1106 root_item = &root->fs_info->tree_root->root_item; 1107 super->root = root_item->bytenr; 1108 super->generation = root_item->generation; 1109 super->root_level = root_item->level; 1110 if (btrfs_test_opt(root, SPACE_CACHE)) 1111 super->cache_generation = root_item->generation; 1112 } 1113 1114 int btrfs_transaction_in_commit(struct btrfs_fs_info *info) 1115 { 1116 int ret = 0; 1117 spin_lock(&info->trans_lock); 1118 if (info->running_transaction) 1119 ret = info->running_transaction->in_commit; 1120 spin_unlock(&info->trans_lock); 1121 return ret; 1122 } 1123 1124 int btrfs_transaction_blocked(struct btrfs_fs_info *info) 1125 { 1126 int ret = 0; 1127 spin_lock(&info->trans_lock); 1128 if (info->running_transaction) 1129 ret = info->running_transaction->blocked; 1130 spin_unlock(&info->trans_lock); 1131 return ret; 1132 } 1133 1134 /* 1135 * wait for the current transaction commit to start and block subsequent 1136 * transaction joins 1137 */ 1138 static void wait_current_trans_commit_start(struct btrfs_root *root, 1139 struct btrfs_transaction *trans) 1140 { 1141 wait_event(root->fs_info->transaction_blocked_wait, trans->in_commit); 1142 } 1143 1144 /* 1145 * wait for the current transaction to start and then become unblocked. 1146 * caller holds ref. 1147 */ 1148 static void wait_current_trans_commit_start_and_unblock(struct btrfs_root *root, 1149 struct btrfs_transaction *trans) 1150 { 1151 wait_event(root->fs_info->transaction_wait, 1152 trans->commit_done || (trans->in_commit && !trans->blocked)); 1153 } 1154 1155 /* 1156 * commit transactions asynchronously. once btrfs_commit_transaction_async 1157 * returns, any subsequent transaction will not be allowed to join. 1158 */ 1159 struct btrfs_async_commit { 1160 struct btrfs_trans_handle *newtrans; 1161 struct btrfs_root *root; 1162 struct delayed_work work; 1163 }; 1164 1165 static void do_async_commit(struct work_struct *work) 1166 { 1167 struct btrfs_async_commit *ac = 1168 container_of(work, struct btrfs_async_commit, work.work); 1169 1170 btrfs_commit_transaction(ac->newtrans, ac->root); 1171 kfree(ac); 1172 } 1173 1174 int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans, 1175 struct btrfs_root *root, 1176 int wait_for_unblock) 1177 { 1178 struct btrfs_async_commit *ac; 1179 struct btrfs_transaction *cur_trans; 1180 1181 ac = kmalloc(sizeof(*ac), GFP_NOFS); 1182 if (!ac) 1183 return -ENOMEM; 1184 1185 INIT_DELAYED_WORK(&ac->work, do_async_commit); 1186 ac->root = root; 1187 ac->newtrans = btrfs_join_transaction(root); 1188 if (IS_ERR(ac->newtrans)) { 1189 int err = PTR_ERR(ac->newtrans); 1190 kfree(ac); 1191 return err; 1192 } 1193 1194 /* take transaction reference */ 1195 cur_trans = trans->transaction; 1196 atomic_inc(&cur_trans->use_count); 1197 1198 btrfs_end_transaction(trans, root); 1199 schedule_delayed_work(&ac->work, 0); 1200 1201 /* wait for transaction to start and unblock */ 1202 if (wait_for_unblock) 1203 wait_current_trans_commit_start_and_unblock(root, cur_trans); 1204 else 1205 wait_current_trans_commit_start(root, cur_trans); 1206 1207 if (current->journal_info == trans) 1208 current->journal_info = NULL; 1209 1210 put_transaction(cur_trans); 1211 return 0; 1212 } 1213 1214 1215 static void cleanup_transaction(struct btrfs_trans_handle *trans, 1216 struct btrfs_root *root) 1217 { 1218 struct btrfs_transaction *cur_trans = trans->transaction; 1219 1220 WARN_ON(trans->use_count > 1); 1221 1222 spin_lock(&root->fs_info->trans_lock); 1223 list_del_init(&cur_trans->list); 1224 spin_unlock(&root->fs_info->trans_lock); 1225 1226 btrfs_cleanup_one_transaction(trans->transaction, root); 1227 1228 put_transaction(cur_trans); 1229 put_transaction(cur_trans); 1230 1231 trace_btrfs_transaction_commit(root); 1232 1233 btrfs_scrub_continue(root); 1234 1235 if (current->journal_info == trans) 1236 current->journal_info = NULL; 1237 1238 kmem_cache_free(btrfs_trans_handle_cachep, trans); 1239 } 1240 1241 /* 1242 * btrfs_transaction state sequence: 1243 * in_commit = 0, blocked = 0 (initial) 1244 * in_commit = 1, blocked = 1 1245 * blocked = 0 1246 * commit_done = 1 1247 */ 1248 int btrfs_commit_transaction(struct btrfs_trans_handle *trans, 1249 struct btrfs_root *root) 1250 { 1251 unsigned long joined = 0; 1252 struct btrfs_transaction *cur_trans = trans->transaction; 1253 struct btrfs_transaction *prev_trans = NULL; 1254 DEFINE_WAIT(wait); 1255 int ret = -EIO; 1256 int should_grow = 0; 1257 unsigned long now = get_seconds(); 1258 int flush_on_commit = btrfs_test_opt(root, FLUSHONCOMMIT); 1259 1260 btrfs_run_ordered_operations(root, 0); 1261 1262 btrfs_trans_release_metadata(trans, root); 1263 trans->block_rsv = NULL; 1264 1265 if (cur_trans->aborted) 1266 goto cleanup_transaction; 1267 1268 /* make a pass through all the delayed refs we have so far 1269 * any runnings procs may add more while we are here 1270 */ 1271 ret = btrfs_run_delayed_refs(trans, root, 0); 1272 if (ret) 1273 goto cleanup_transaction; 1274 1275 cur_trans = trans->transaction; 1276 1277 /* 1278 * set the flushing flag so procs in this transaction have to 1279 * start sending their work down. 1280 */ 1281 cur_trans->delayed_refs.flushing = 1; 1282 1283 ret = btrfs_run_delayed_refs(trans, root, 0); 1284 if (ret) 1285 goto cleanup_transaction; 1286 1287 spin_lock(&cur_trans->commit_lock); 1288 if (cur_trans->in_commit) { 1289 spin_unlock(&cur_trans->commit_lock); 1290 atomic_inc(&cur_trans->use_count); 1291 ret = btrfs_end_transaction(trans, root); 1292 1293 wait_for_commit(root, cur_trans); 1294 1295 put_transaction(cur_trans); 1296 1297 return ret; 1298 } 1299 1300 trans->transaction->in_commit = 1; 1301 trans->transaction->blocked = 1; 1302 spin_unlock(&cur_trans->commit_lock); 1303 wake_up(&root->fs_info->transaction_blocked_wait); 1304 1305 spin_lock(&root->fs_info->trans_lock); 1306 if (cur_trans->list.prev != &root->fs_info->trans_list) { 1307 prev_trans = list_entry(cur_trans->list.prev, 1308 struct btrfs_transaction, list); 1309 if (!prev_trans->commit_done) { 1310 atomic_inc(&prev_trans->use_count); 1311 spin_unlock(&root->fs_info->trans_lock); 1312 1313 wait_for_commit(root, prev_trans); 1314 1315 put_transaction(prev_trans); 1316 } else { 1317 spin_unlock(&root->fs_info->trans_lock); 1318 } 1319 } else { 1320 spin_unlock(&root->fs_info->trans_lock); 1321 } 1322 1323 if (now < cur_trans->start_time || now - cur_trans->start_time < 1) 1324 should_grow = 1; 1325 1326 do { 1327 int snap_pending = 0; 1328 1329 joined = cur_trans->num_joined; 1330 if (!list_empty(&trans->transaction->pending_snapshots)) 1331 snap_pending = 1; 1332 1333 WARN_ON(cur_trans != trans->transaction); 1334 1335 if (flush_on_commit || snap_pending) { 1336 btrfs_start_delalloc_inodes(root, 1); 1337 btrfs_wait_ordered_extents(root, 0, 1); 1338 } 1339 1340 ret = btrfs_run_delayed_items(trans, root); 1341 if (ret) 1342 goto cleanup_transaction; 1343 1344 /* 1345 * rename don't use btrfs_join_transaction, so, once we 1346 * set the transaction to blocked above, we aren't going 1347 * to get any new ordered operations. We can safely run 1348 * it here and no for sure that nothing new will be added 1349 * to the list 1350 */ 1351 btrfs_run_ordered_operations(root, 1); 1352 1353 prepare_to_wait(&cur_trans->writer_wait, &wait, 1354 TASK_UNINTERRUPTIBLE); 1355 1356 if (atomic_read(&cur_trans->num_writers) > 1) 1357 schedule_timeout(MAX_SCHEDULE_TIMEOUT); 1358 else if (should_grow) 1359 schedule_timeout(1); 1360 1361 finish_wait(&cur_trans->writer_wait, &wait); 1362 } while (atomic_read(&cur_trans->num_writers) > 1 || 1363 (should_grow && cur_trans->num_joined != joined)); 1364 1365 /* 1366 * Ok now we need to make sure to block out any other joins while we 1367 * commit the transaction. We could have started a join before setting 1368 * no_join so make sure to wait for num_writers to == 1 again. 1369 */ 1370 spin_lock(&root->fs_info->trans_lock); 1371 root->fs_info->trans_no_join = 1; 1372 spin_unlock(&root->fs_info->trans_lock); 1373 wait_event(cur_trans->writer_wait, 1374 atomic_read(&cur_trans->num_writers) == 1); 1375 1376 /* 1377 * the reloc mutex makes sure that we stop 1378 * the balancing code from coming in and moving 1379 * extents around in the middle of the commit 1380 */ 1381 mutex_lock(&root->fs_info->reloc_mutex); 1382 1383 ret = btrfs_run_delayed_items(trans, root); 1384 if (ret) { 1385 mutex_unlock(&root->fs_info->reloc_mutex); 1386 goto cleanup_transaction; 1387 } 1388 1389 ret = create_pending_snapshots(trans, root->fs_info); 1390 if (ret) { 1391 mutex_unlock(&root->fs_info->reloc_mutex); 1392 goto cleanup_transaction; 1393 } 1394 1395 ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1); 1396 if (ret) { 1397 mutex_unlock(&root->fs_info->reloc_mutex); 1398 goto cleanup_transaction; 1399 } 1400 1401 /* 1402 * make sure none of the code above managed to slip in a 1403 * delayed item 1404 */ 1405 btrfs_assert_delayed_root_empty(root); 1406 1407 WARN_ON(cur_trans != trans->transaction); 1408 1409 btrfs_scrub_pause(root); 1410 /* btrfs_commit_tree_roots is responsible for getting the 1411 * various roots consistent with each other. Every pointer 1412 * in the tree of tree roots has to point to the most up to date 1413 * root for every subvolume and other tree. So, we have to keep 1414 * the tree logging code from jumping in and changing any 1415 * of the trees. 1416 * 1417 * At this point in the commit, there can't be any tree-log 1418 * writers, but a little lower down we drop the trans mutex 1419 * and let new people in. By holding the tree_log_mutex 1420 * from now until after the super is written, we avoid races 1421 * with the tree-log code. 1422 */ 1423 mutex_lock(&root->fs_info->tree_log_mutex); 1424 1425 ret = commit_fs_roots(trans, root); 1426 if (ret) { 1427 mutex_unlock(&root->fs_info->tree_log_mutex); 1428 mutex_unlock(&root->fs_info->reloc_mutex); 1429 goto cleanup_transaction; 1430 } 1431 1432 /* commit_fs_roots gets rid of all the tree log roots, it is now 1433 * safe to free the root of tree log roots 1434 */ 1435 btrfs_free_log_root_tree(trans, root->fs_info); 1436 1437 ret = commit_cowonly_roots(trans, root); 1438 if (ret) { 1439 mutex_unlock(&root->fs_info->tree_log_mutex); 1440 mutex_unlock(&root->fs_info->reloc_mutex); 1441 goto cleanup_transaction; 1442 } 1443 1444 btrfs_prepare_extent_commit(trans, root); 1445 1446 cur_trans = root->fs_info->running_transaction; 1447 1448 btrfs_set_root_node(&root->fs_info->tree_root->root_item, 1449 root->fs_info->tree_root->node); 1450 switch_commit_root(root->fs_info->tree_root); 1451 1452 btrfs_set_root_node(&root->fs_info->chunk_root->root_item, 1453 root->fs_info->chunk_root->node); 1454 switch_commit_root(root->fs_info->chunk_root); 1455 1456 update_super_roots(root); 1457 1458 if (!root->fs_info->log_root_recovering) { 1459 btrfs_set_super_log_root(root->fs_info->super_copy, 0); 1460 btrfs_set_super_log_root_level(root->fs_info->super_copy, 0); 1461 } 1462 1463 memcpy(root->fs_info->super_for_commit, root->fs_info->super_copy, 1464 sizeof(*root->fs_info->super_copy)); 1465 1466 trans->transaction->blocked = 0; 1467 spin_lock(&root->fs_info->trans_lock); 1468 root->fs_info->running_transaction = NULL; 1469 root->fs_info->trans_no_join = 0; 1470 spin_unlock(&root->fs_info->trans_lock); 1471 mutex_unlock(&root->fs_info->reloc_mutex); 1472 1473 wake_up(&root->fs_info->transaction_wait); 1474 1475 ret = btrfs_write_and_wait_transaction(trans, root); 1476 if (ret) { 1477 btrfs_error(root->fs_info, ret, 1478 "Error while writing out transaction."); 1479 mutex_unlock(&root->fs_info->tree_log_mutex); 1480 goto cleanup_transaction; 1481 } 1482 1483 ret = write_ctree_super(trans, root, 0); 1484 if (ret) { 1485 mutex_unlock(&root->fs_info->tree_log_mutex); 1486 goto cleanup_transaction; 1487 } 1488 1489 /* 1490 * the super is written, we can safely allow the tree-loggers 1491 * to go about their business 1492 */ 1493 mutex_unlock(&root->fs_info->tree_log_mutex); 1494 1495 btrfs_finish_extent_commit(trans, root); 1496 1497 cur_trans->commit_done = 1; 1498 1499 root->fs_info->last_trans_committed = cur_trans->transid; 1500 1501 wake_up(&cur_trans->commit_wait); 1502 1503 spin_lock(&root->fs_info->trans_lock); 1504 list_del_init(&cur_trans->list); 1505 spin_unlock(&root->fs_info->trans_lock); 1506 1507 put_transaction(cur_trans); 1508 put_transaction(cur_trans); 1509 1510 trace_btrfs_transaction_commit(root); 1511 1512 btrfs_scrub_continue(root); 1513 1514 if (current->journal_info == trans) 1515 current->journal_info = NULL; 1516 1517 kmem_cache_free(btrfs_trans_handle_cachep, trans); 1518 1519 if (current != root->fs_info->transaction_kthread) 1520 btrfs_run_delayed_iputs(root); 1521 1522 return ret; 1523 1524 cleanup_transaction: 1525 btrfs_printk(root->fs_info, "Skipping commit of aborted transaction.\n"); 1526 // WARN_ON(1); 1527 if (current->journal_info == trans) 1528 current->journal_info = NULL; 1529 cleanup_transaction(trans, root); 1530 1531 return ret; 1532 } 1533 1534 /* 1535 * interface function to delete all the snapshots we have scheduled for deletion 1536 */ 1537 int btrfs_clean_old_snapshots(struct btrfs_root *root) 1538 { 1539 LIST_HEAD(list); 1540 struct btrfs_fs_info *fs_info = root->fs_info; 1541 1542 spin_lock(&fs_info->trans_lock); 1543 list_splice_init(&fs_info->dead_roots, &list); 1544 spin_unlock(&fs_info->trans_lock); 1545 1546 while (!list_empty(&list)) { 1547 int ret; 1548 1549 root = list_entry(list.next, struct btrfs_root, root_list); 1550 list_del(&root->root_list); 1551 1552 btrfs_kill_all_delayed_nodes(root); 1553 1554 if (btrfs_header_backref_rev(root->node) < 1555 BTRFS_MIXED_BACKREF_REV) 1556 ret = btrfs_drop_snapshot(root, NULL, 0, 0); 1557 else 1558 ret =btrfs_drop_snapshot(root, NULL, 1, 0); 1559 BUG_ON(ret < 0); 1560 } 1561 return 0; 1562 } 1563