]>
Commit | Line | Data |
---|---|---|
8de80845 GKH |
1 | From 83d3c9696fed237a3d96fce18299e2fcf112109f Mon Sep 17 00:00:00 2001 |
2 | From: Josef Bacik <josef@redhat.com> | |
3 | Date: Mon, 7 Dec 2009 21:45:59 +0000 | |
4 | Subject: Btrfs: make metadata chunks smaller | |
5 | ||
6 | From: Josef Bacik <josef@redhat.com> | |
7 | ||
8 | commit 83d3c9696fed237a3d96fce18299e2fcf112109f upstream. | |
9 | ||
10 | This patch makes us a bit less zealous about making sure we have enough free | |
11 | metadata space by pearing down the size of new metadata chunks to 256mb instead | |
12 | of 1gb. Also, we used to try an allocate metadata chunks when allocating data, | |
13 | but 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 | |
15 | 1.7gb. Thanks, | |
16 | ||
17 | Signed-off-by: Josef Bacik <josef@redhat.com> | |
18 | Signed-off-by: Chris Mason <chris.mason@oracle.com> | |
19 | Acked-by: Jeff Mahoney <jeffm@suse.com> | |
20 | Signed-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; |