diff options
author | Dave Airlie <airlied@redhat.com> | 2015-08-17 00:13:53 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2015-08-17 00:13:53 -0400 |
commit | 4eebf60b7452fbd551fd7dece855ba7825a49cbc (patch) | |
tree | 490b4d194ba09c90e10201ab7fc084a0bda0ed27 /fs/btrfs | |
parent | 8f9cb50789e76f3e224e8861adf650e55c747af4 (diff) | |
parent | 2c6625cd545bdd66acff14f3394865d43920a5c7 (diff) |
Merge tag 'v4.2-rc7' into drm-next
Linux 4.2-rc7
Backmerge master for i915 fixes
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/dev-replace.c | 2 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 3 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 18 | ||||
-rw-r--r-- | fs/btrfs/qgroup.c | 5 | ||||
-rw-r--r-- | fs/btrfs/transaction.c | 3 |
5 files changed, 28 insertions, 3 deletions
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index 862fbc206755..564a7de17d99 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c | |||
@@ -378,7 +378,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, | |||
378 | 378 | ||
379 | ret = btrfs_kobj_add_device(tgt_device->fs_devices, tgt_device); | 379 | ret = btrfs_kobj_add_device(tgt_device->fs_devices, tgt_device); |
380 | if (ret) | 380 | if (ret) |
381 | btrfs_error(root->fs_info, ret, "kobj add dev failed"); | 381 | btrfs_err(root->fs_info, "kobj add dev failed %d\n", ret); |
382 | 382 | ||
383 | printk_in_rcu(KERN_INFO | 383 | printk_in_rcu(KERN_INFO |
384 | "BTRFS: dev_replace from %s (devid %llu) to %s started\n", | 384 | "BTRFS: dev_replace from %s (devid %llu) to %s started\n", |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a9aadb2ad525..f556c3732c2c 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2842,6 +2842,7 @@ int open_ctree(struct super_block *sb, | |||
2842 | !extent_buffer_uptodate(chunk_root->node)) { | 2842 | !extent_buffer_uptodate(chunk_root->node)) { |
2843 | printk(KERN_ERR "BTRFS: failed to read chunk root on %s\n", | 2843 | printk(KERN_ERR "BTRFS: failed to read chunk root on %s\n", |
2844 | sb->s_id); | 2844 | sb->s_id); |
2845 | chunk_root->node = NULL; | ||
2845 | goto fail_tree_roots; | 2846 | goto fail_tree_roots; |
2846 | } | 2847 | } |
2847 | btrfs_set_root_node(&chunk_root->root_item, chunk_root->node); | 2848 | btrfs_set_root_node(&chunk_root->root_item, chunk_root->node); |
@@ -2879,7 +2880,7 @@ retry_root_backup: | |||
2879 | !extent_buffer_uptodate(tree_root->node)) { | 2880 | !extent_buffer_uptodate(tree_root->node)) { |
2880 | printk(KERN_WARNING "BTRFS: failed to read tree root on %s\n", | 2881 | printk(KERN_WARNING "BTRFS: failed to read tree root on %s\n", |
2881 | sb->s_id); | 2882 | sb->s_id); |
2882 | 2883 | tree_root->node = NULL; | |
2883 | goto recovery_tree_root; | 2884 | goto recovery_tree_root; |
2884 | } | 2885 | } |
2885 | 2886 | ||
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 171312d51799..07204bf601ed 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -4227,6 +4227,24 @@ out: | |||
4227 | space_info->chunk_alloc = 0; | 4227 | space_info->chunk_alloc = 0; |
4228 | spin_unlock(&space_info->lock); | 4228 | spin_unlock(&space_info->lock); |
4229 | mutex_unlock(&fs_info->chunk_mutex); | 4229 | mutex_unlock(&fs_info->chunk_mutex); |
4230 | /* | ||
4231 | * When we allocate a new chunk we reserve space in the chunk block | ||
4232 | * reserve to make sure we can COW nodes/leafs in the chunk tree or | ||
4233 | * add new nodes/leafs to it if we end up needing to do it when | ||
4234 | * inserting the chunk item and updating device items as part of the | ||
4235 | * second phase of chunk allocation, performed by | ||
4236 | * btrfs_finish_chunk_alloc(). So make sure we don't accumulate a | ||
4237 | * large number of new block groups to create in our transaction | ||
4238 | * handle's new_bgs list to avoid exhausting the chunk block reserve | ||
4239 | * in extreme cases - like having a single transaction create many new | ||
4240 | * block groups when starting to write out the free space caches of all | ||
4241 | * the block groups that were made dirty during the lifetime of the | ||
4242 | * transaction. | ||
4243 | */ | ||
4244 | if (trans->chunk_bytes_reserved >= (2 * 1024 * 1024ull)) { | ||
4245 | btrfs_create_pending_block_groups(trans, trans->root); | ||
4246 | btrfs_trans_release_chunk_metadata(trans); | ||
4247 | } | ||
4230 | return ret; | 4248 | return ret; |
4231 | } | 4249 | } |
4232 | 4250 | ||
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index e9ace099162c..8a8202956576 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c | |||
@@ -1651,6 +1651,11 @@ static int qgroup_update_counters(struct btrfs_fs_info *fs_info, | |||
1651 | /* Exclusive -> exclusive, nothing changed */ | 1651 | /* Exclusive -> exclusive, nothing changed */ |
1652 | } | 1652 | } |
1653 | } | 1653 | } |
1654 | |||
1655 | /* For exclusive extent, free its reserved bytes too */ | ||
1656 | if (nr_old_roots == 0 && nr_new_roots == 1 && | ||
1657 | cur_new_count == nr_new_roots) | ||
1658 | qg->reserved -= num_bytes; | ||
1654 | if (dirty) | 1659 | if (dirty) |
1655 | qgroup_dirty(fs_info, qg); | 1660 | qgroup_dirty(fs_info, qg); |
1656 | } | 1661 | } |
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 51e0f0d0053e..f5021fcb154e 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -2152,7 +2152,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, | |||
2152 | 2152 | ||
2153 | kmem_cache_free(btrfs_trans_handle_cachep, trans); | 2153 | kmem_cache_free(btrfs_trans_handle_cachep, trans); |
2154 | 2154 | ||
2155 | if (current != root->fs_info->transaction_kthread) | 2155 | if (current != root->fs_info->transaction_kthread && |
2156 | current != root->fs_info->cleaner_kthread) | ||
2156 | btrfs_run_delayed_iputs(root); | 2157 | btrfs_run_delayed_iputs(root); |
2157 | 2158 | ||
2158 | return ret; | 2159 | return ret; |