Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:
Btrfs: don't warn in btrfs_add_orphan
Btrfs: fix free space cache when there are pinned extents and clusters V2
Btrfs: Fix uninitialized root flags for subvolumes
btrfs: clear __GFP_FS flag in the space cache inode
Btrfs: fix memory leak in start_transaction()
Btrfs: fix memory leak in btrfs_ioctl_start_sync()
Btrfs: fix subvol_sem leak in btrfs_rename()
Btrfs: Fix oops for defrag with compression turned on
Btrfs: fix /proc/mounts info.
Btrfs: fix compiler warning in file.c

+145 -25
+4
fs/btrfs/ctree.h
··· 1284 1284 #define BTRFS_INODE_DIRSYNC (1 << 10) 1285 1285 #define BTRFS_INODE_COMPRESS (1 << 11) 1286 1286 1287 + #define BTRFS_INODE_ROOT_ITEM_INIT (1 << 31) 1288 + 1287 1289 /* some macros to generate set/get funcs for the struct fields. This 1288 1290 * assumes there is a lefoo_to_cpu for every type, so lets make a simple 1289 1291 * one for u8: ··· 2361 2359 int btrfs_find_orphan_roots(struct btrfs_root *tree_root); 2362 2360 int btrfs_set_root_node(struct btrfs_root_item *item, 2363 2361 struct extent_buffer *node); 2362 + void btrfs_check_and_init_root_item(struct btrfs_root_item *item); 2363 + 2364 2364 /* dir-item.c */ 2365 2365 int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, 2366 2366 struct btrfs_root *root, const char *name,
+3 -1
fs/btrfs/disk-io.c
··· 1275 1275 root->commit_root = btrfs_root_node(root); 1276 1276 BUG_ON(!root->node); 1277 1277 out: 1278 - if (location->objectid != BTRFS_TREE_LOG_OBJECTID) 1278 + if (location->objectid != BTRFS_TREE_LOG_OBJECTID) { 1279 1279 root->ref_cows = 1; 1280 + btrfs_check_and_init_root_item(&root->root_item); 1281 + } 1280 1282 1281 1283 return root; 1282 1284 }
+1 -1
fs/btrfs/file.c
··· 906 906 unsigned long last_index; 907 907 size_t num_written = 0; 908 908 int nrptrs; 909 - int ret; 909 + int ret = 0; 910 910 911 911 nrptrs = min((iov_iter_count(i) + PAGE_CACHE_SIZE - 1) / 912 912 PAGE_CACHE_SIZE, PAGE_CACHE_SIZE /
+80 -4
fs/btrfs/free-space-cache.c
··· 24 24 #include "free-space-cache.h" 25 25 #include "transaction.h" 26 26 #include "disk-io.h" 27 + #include "extent_io.h" 27 28 28 29 #define BITS_PER_BITMAP (PAGE_CACHE_SIZE * 8) 29 30 #define MAX_CACHE_BYTES_PER_GIG (32 * 1024) ··· 81 80 iput(inode); 82 81 return ERR_PTR(-ENOENT); 83 82 } 83 + 84 + inode->i_mapping->flags &= ~__GFP_FS; 84 85 85 86 spin_lock(&block_group->lock); 86 87 if (!root->fs_info->closing) { ··· 225 222 u64 num_entries; 226 223 u64 num_bitmaps; 227 224 u64 generation; 225 + u64 used = btrfs_block_group_used(&block_group->item); 228 226 u32 cur_crc = ~(u32)0; 229 227 pgoff_t index = 0; 230 228 unsigned long first_page_offset; ··· 471 467 index++; 472 468 } 473 469 470 + spin_lock(&block_group->tree_lock); 471 + if (block_group->free_space != (block_group->key.offset - used - 472 + block_group->bytes_super)) { 473 + spin_unlock(&block_group->tree_lock); 474 + printk(KERN_ERR "block group %llu has an wrong amount of free " 475 + "space\n", block_group->key.objectid); 476 + ret = 0; 477 + goto free_cache; 478 + } 479 + spin_unlock(&block_group->tree_lock); 480 + 474 481 ret = 1; 475 482 out: 476 483 kfree(checksums); ··· 510 495 struct list_head *pos, *n; 511 496 struct page *page; 512 497 struct extent_state *cached_state = NULL; 498 + struct btrfs_free_cluster *cluster = NULL; 499 + struct extent_io_tree *unpin = NULL; 513 500 struct list_head bitmap_list; 514 501 struct btrfs_key key; 502 + u64 start, end, len; 515 503 u64 bytes = 0; 516 504 u32 *crc, *checksums; 517 505 pgoff_t index = 0, last_index = 0; ··· 523 505 int entries = 0; 524 506 int bitmaps = 0; 525 507 int ret = 0; 508 + bool next_page = false; 526 509 527 510 root = root->fs_info->tree_root; 528 511 ··· 570 551 */ 571 552 first_page_offset = (sizeof(u32) * num_checksums) + sizeof(u64); 572 553 554 + /* Get the cluster for this block_group if it exists */ 555 + if (!list_empty(&block_group->cluster_list)) 556 + cluster = list_entry(block_group->cluster_list.next, 557 + struct btrfs_free_cluster, 558 + block_group_list); 559 + 560 + /* 561 + * We shouldn't have switched the pinned extents yet so this is the 562 + * right one 563 + */ 564 + unpin = root->fs_info->pinned_extents; 565 + 573 566 /* 574 567 * Lock all pages first so we can lock the extent safely. 575 568 * ··· 611 580 lock_extent_bits(&BTRFS_I(inode)->io_tree, 0, i_size_read(inode) - 1, 612 581 0, &cached_state, GFP_NOFS); 613 582 583 + /* 584 + * When searching for pinned extents, we need to start at our start 585 + * offset. 586 + */ 587 + start = block_group->key.objectid; 588 + 614 589 /* Write out the extent entries */ 615 590 do { 616 591 struct btrfs_free_space_entry *entry; 617 592 void *addr; 618 593 unsigned long offset = 0; 619 594 unsigned long start_offset = 0; 595 + 596 + next_page = false; 620 597 621 598 if (index == 0) { 622 599 start_offset = first_page_offset; ··· 637 598 entry = addr + start_offset; 638 599 639 600 memset(addr, 0, PAGE_CACHE_SIZE); 640 - while (1) { 601 + while (node && !next_page) { 641 602 struct btrfs_free_space *e; 642 603 643 604 e = rb_entry(node, struct btrfs_free_space, offset_index); ··· 653 614 entry->type = BTRFS_FREE_SPACE_EXTENT; 654 615 } 655 616 node = rb_next(node); 656 - if (!node) 657 - break; 617 + if (!node && cluster) { 618 + node = rb_first(&cluster->root); 619 + cluster = NULL; 620 + } 658 621 offset += sizeof(struct btrfs_free_space_entry); 659 622 if (offset + sizeof(struct btrfs_free_space_entry) >= 660 623 PAGE_CACHE_SIZE) 624 + next_page = true; 625 + entry++; 626 + } 627 + 628 + /* 629 + * We want to add any pinned extents to our free space cache 630 + * so we don't leak the space 631 + */ 632 + while (!next_page && (start < block_group->key.objectid + 633 + block_group->key.offset)) { 634 + ret = find_first_extent_bit(unpin, start, &start, &end, 635 + EXTENT_DIRTY); 636 + if (ret) { 637 + ret = 0; 661 638 break; 639 + } 640 + 641 + /* This pinned extent is out of our range */ 642 + if (start >= block_group->key.objectid + 643 + block_group->key.offset) 644 + break; 645 + 646 + len = block_group->key.objectid + 647 + block_group->key.offset - start; 648 + len = min(len, end + 1 - start); 649 + 650 + entries++; 651 + entry->offset = cpu_to_le64(start); 652 + entry->bytes = cpu_to_le64(len); 653 + entry->type = BTRFS_FREE_SPACE_EXTENT; 654 + 655 + start = end + 1; 656 + offset += sizeof(struct btrfs_free_space_entry); 657 + if (offset + sizeof(struct btrfs_free_space_entry) >= 658 + PAGE_CACHE_SIZE) 659 + next_page = true; 662 660 entry++; 663 661 } 664 662 *crc = ~(u32)0; ··· 726 650 page_cache_release(page); 727 651 728 652 index++; 729 - } while (node); 653 + } while (node || next_page); 730 654 731 655 /* Write out the bitmaps */ 732 656 list_for_each_safe(pos, n, &bitmap_list) {
+13 -16
fs/btrfs/inode.c
··· 112 112 static noinline int insert_inline_extent(struct btrfs_trans_handle *trans, 113 113 struct btrfs_root *root, struct inode *inode, 114 114 u64 start, size_t size, size_t compressed_size, 115 + int compress_type, 115 116 struct page **compressed_pages) 116 117 { 117 118 struct btrfs_key key; ··· 127 126 size_t cur_size = size; 128 127 size_t datasize; 129 128 unsigned long offset; 130 - int compress_type = BTRFS_COMPRESS_NONE; 131 129 132 - if (compressed_size && compressed_pages) { 133 - compress_type = root->fs_info->compress_type; 130 + if (compressed_size && compressed_pages) 134 131 cur_size = compressed_size; 135 - } 136 132 137 133 path = btrfs_alloc_path(); 138 134 if (!path) ··· 219 221 static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans, 220 222 struct btrfs_root *root, 221 223 struct inode *inode, u64 start, u64 end, 222 - size_t compressed_size, 224 + size_t compressed_size, int compress_type, 223 225 struct page **compressed_pages) 224 226 { 225 227 u64 isize = i_size_read(inode); ··· 252 254 inline_len = min_t(u64, isize, actual_end); 253 255 ret = insert_inline_extent(trans, root, inode, start, 254 256 inline_len, compressed_size, 255 - compressed_pages); 257 + compress_type, compressed_pages); 256 258 BUG_ON(ret); 257 259 btrfs_delalloc_release_metadata(inode, end + 1 - start); 258 260 btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); ··· 431 433 * to make an uncompressed inline extent. 432 434 */ 433 435 ret = cow_file_range_inline(trans, root, inode, 434 - start, end, 0, NULL); 436 + start, end, 0, 0, NULL); 435 437 } else { 436 438 /* try making a compressed inline extent */ 437 439 ret = cow_file_range_inline(trans, root, inode, 438 440 start, end, 439 - total_compressed, pages); 441 + total_compressed, 442 + compress_type, pages); 440 443 } 441 444 if (ret == 0) { 442 445 /* ··· 791 792 if (start == 0) { 792 793 /* lets try to make an inline extent */ 793 794 ret = cow_file_range_inline(trans, root, inode, 794 - start, end, 0, NULL); 795 + start, end, 0, 0, NULL); 795 796 if (ret == 0) { 796 797 extent_clear_unlock_delalloc(inode, 797 798 &BTRFS_I(inode)->io_tree, ··· 2221 2222 insert = 1; 2222 2223 #endif 2223 2224 insert = 1; 2224 - } else { 2225 - WARN_ON(!BTRFS_I(inode)->orphan_meta_reserved); 2226 2225 } 2227 2226 2228 2227 if (!BTRFS_I(inode)->orphan_meta_reserved) { ··· 2534 2537 BTRFS_I(inode)->flags = btrfs_inode_flags(leaf, inode_item); 2535 2538 2536 2539 alloc_group_block = btrfs_inode_block_group(leaf, inode_item); 2537 - if (location.objectid == BTRFS_FREE_SPACE_OBJECTID) 2538 - inode->i_mapping->flags &= ~__GFP_FS; 2539 2540 2540 2541 /* 2541 2542 * try to precache a NULL acl entry for files that don't have ··· 6955 6960 * should cover the worst case number of items we'll modify. 6956 6961 */ 6957 6962 trans = btrfs_start_transaction(root, 20); 6958 - if (IS_ERR(trans)) 6959 - return PTR_ERR(trans); 6963 + if (IS_ERR(trans)) { 6964 + ret = PTR_ERR(trans); 6965 + goto out_notrans; 6966 + } 6960 6967 6961 6968 btrfs_set_trans_block_group(trans, new_dir); 6962 6969 ··· 7058 7061 } 7059 7062 out_fail: 7060 7063 btrfs_end_transaction_throttle(trans, root); 7061 - 7064 + out_notrans: 7062 7065 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) 7063 7066 up_read(&root->fs_info->subvol_sem); 7064 7067
+7 -1
fs/btrfs/ioctl.c
··· 373 373 inode_item->nbytes = cpu_to_le64(root->leafsize); 374 374 inode_item->mode = cpu_to_le32(S_IFDIR | 0755); 375 375 376 + root_item.flags = 0; 377 + root_item.byte_limit = 0; 378 + inode_item->flags = cpu_to_le64(BTRFS_INODE_ROOT_ITEM_INIT); 379 + 376 380 btrfs_set_root_bytenr(&root_item, leaf->start); 377 381 btrfs_set_root_generation(&root_item, trans->transid); 378 382 btrfs_set_root_level(&root_item, 0); ··· 2440 2436 return PTR_ERR(trans); 2441 2437 transid = trans->transid; 2442 2438 ret = btrfs_commit_transaction_async(trans, root, 0); 2443 - if (ret) 2439 + if (ret) { 2440 + btrfs_end_transaction(trans, root); 2444 2441 return ret; 2442 + } 2445 2443 2446 2444 if (argp) 2447 2445 if (copy_to_user(argp, &transid, sizeof(transid)))
+18
fs/btrfs/root-tree.c
··· 473 473 btrfs_free_path(path); 474 474 return 0; 475 475 } 476 + 477 + /* 478 + * Old btrfs forgets to init root_item->flags and root_item->byte_limit 479 + * for subvolumes. To work around this problem, we steal a bit from 480 + * root_item->inode_item->flags, and use it to indicate if those fields 481 + * have been properly initialized. 482 + */ 483 + void btrfs_check_and_init_root_item(struct btrfs_root_item *root_item) 484 + { 485 + u64 inode_flags = le64_to_cpu(root_item->inode.flags); 486 + 487 + if (!(inode_flags & BTRFS_INODE_ROOT_ITEM_INIT)) { 488 + inode_flags |= BTRFS_INODE_ROOT_ITEM_INIT; 489 + root_item->inode.flags = cpu_to_le64(inode_flags); 490 + root_item->flags = 0; 491 + root_item->byte_limit = 0; 492 + } 493 + }
+17 -2
fs/btrfs/super.c
··· 644 644 { 645 645 struct btrfs_root *root = btrfs_sb(vfs->mnt_sb); 646 646 struct btrfs_fs_info *info = root->fs_info; 647 + char *compress_type; 647 648 648 649 if (btrfs_test_opt(root, DEGRADED)) 649 650 seq_puts(seq, ",degraded"); ··· 663 662 if (info->thread_pool_size != min_t(unsigned long, 664 663 num_online_cpus() + 2, 8)) 665 664 seq_printf(seq, ",thread_pool=%d", info->thread_pool_size); 666 - if (btrfs_test_opt(root, COMPRESS)) 667 - seq_puts(seq, ",compress"); 665 + if (btrfs_test_opt(root, COMPRESS)) { 666 + if (info->compress_type == BTRFS_COMPRESS_ZLIB) 667 + compress_type = "zlib"; 668 + else 669 + compress_type = "lzo"; 670 + if (btrfs_test_opt(root, FORCE_COMPRESS)) 671 + seq_printf(seq, ",compress-force=%s", compress_type); 672 + else 673 + seq_printf(seq, ",compress=%s", compress_type); 674 + } 668 675 if (btrfs_test_opt(root, NOSSD)) 669 676 seq_puts(seq, ",nossd"); 670 677 if (btrfs_test_opt(root, SSD_SPREAD)) ··· 687 678 seq_puts(seq, ",discard"); 688 679 if (!(root->fs_info->sb->s_flags & MS_POSIXACL)) 689 680 seq_puts(seq, ",noacl"); 681 + if (btrfs_test_opt(root, SPACE_CACHE)) 682 + seq_puts(seq, ",space_cache"); 683 + if (btrfs_test_opt(root, CLEAR_CACHE)) 684 + seq_puts(seq, ",clear_cache"); 685 + if (btrfs_test_opt(root, USER_SUBVOL_RM_ALLOWED)) 686 + seq_puts(seq, ",user_subvol_rm_allowed"); 690 687 return 0; 691 688 } 692 689
+2
fs/btrfs/transaction.c
··· 197 197 198 198 ret = join_transaction(root); 199 199 if (ret < 0) { 200 + kmem_cache_free(btrfs_trans_handle_cachep, h); 200 201 if (type != TRANS_JOIN_NOLOCK) 201 202 mutex_unlock(&root->fs_info->trans_mutex); 202 203 return ERR_PTR(ret); ··· 976 975 record_root_in_trans(trans, root); 977 976 btrfs_set_root_last_snapshot(&root->root_item, trans->transid); 978 977 memcpy(new_root_item, &root->root_item, sizeof(*new_root_item)); 978 + btrfs_check_and_init_root_item(new_root_item); 979 979 980 980 root_flags = btrfs_root_flags(new_root_item); 981 981 if (pending->readonly)