]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/2.6.32.19/btrfs-make-metadata-chunks-smaller.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 2.6.32.19 / btrfs-make-metadata-chunks-smaller.patch
CommitLineData
8de80845
GKH
1From 83d3c9696fed237a3d96fce18299e2fcf112109f Mon Sep 17 00:00:00 2001
2From: Josef Bacik <josef@redhat.com>
3Date: Mon, 7 Dec 2009 21:45:59 +0000
4Subject: Btrfs: make metadata chunks smaller
5
6From: Josef Bacik <josef@redhat.com>
7
8commit 83d3c9696fed237a3d96fce18299e2fcf112109f upstream.
9
10This patch makes us a bit less zealous about making sure we have enough free
11metadata space by pearing down the size of new metadata chunks to 256mb instead
12of 1gb. Also, we used to try an allocate metadata chunks when allocating data,
13but that sort of thing is done elsewhere now so we can just remove it. With my
14-ENOSPC test I used to have 3gb reserved for metadata out of 75gb, now I have
151.7gb. Thanks,
16
17Signed-off-by: Josef Bacik <josef@redhat.com>
18Signed-off-by: Chris Mason <chris.mason@oracle.com>
19Acked-by: Jeff Mahoney <jeffm@suse.com>
20Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
21
22
23---
24 fs/btrfs/extent-tree.c | 11 +----------
25 fs/btrfs/volumes.c | 2 +-
26 2 files changed, 2 insertions(+), 11 deletions(-)
27
28--- a/fs/btrfs/extent-tree.c
29+++ b/fs/btrfs/extent-tree.c
30@@ -4593,7 +4593,6 @@ int btrfs_reserve_extent(struct btrfs_tr
31 {
32 int ret;
33 u64 search_start = 0;
34- struct btrfs_fs_info *info = root->fs_info;
35
36 data = btrfs_get_alloc_profile(root, data);
37 again:
38@@ -4601,17 +4600,9 @@ again:
39 * the only place that sets empty_size is btrfs_realloc_node, which
40 * is not called recursively on allocations
41 */
42- if (empty_size || root->ref_cows) {
43- if (!(data & BTRFS_BLOCK_GROUP_METADATA)) {
44- ret = do_chunk_alloc(trans, root->fs_info->extent_root,
45- 2 * 1024 * 1024,
46- BTRFS_BLOCK_GROUP_METADATA |
47- (info->metadata_alloc_profile &
48- info->avail_metadata_alloc_bits), 0);
49- }
50+ if (empty_size || root->ref_cows)
51 ret = do_chunk_alloc(trans, root->fs_info->extent_root,
52 num_bytes + 2 * 1024 * 1024, data, 0);
53- }
54
55 WARN_ON(num_bytes < root->sectorsize);
56 ret = find_free_extent(trans, root, num_bytes, empty_size,
57--- a/fs/btrfs/volumes.c
58+++ b/fs/btrfs/volumes.c
59@@ -2209,7 +2209,7 @@ static int __btrfs_alloc_chunk(struct bt
60 max_chunk_size = 10 * calc_size;
61 min_stripe_size = 64 * 1024 * 1024;
62 } else if (type & BTRFS_BLOCK_GROUP_METADATA) {
63- max_chunk_size = 4 * calc_size;
64+ max_chunk_size = 256 * 1024 * 1024;
65 min_stripe_size = 32 * 1024 * 1024;
66 } else if (type & BTRFS_BLOCK_GROUP_SYSTEM) {
67 calc_size = 8 * 1024 * 1024;