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