aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorNikolay Borisov <n.borisov.lkml@gmail.com>2016-06-23 14:17:08 -0400
committerDavid Sterba <dsterba@suse.com>2016-07-26 07:52:25 -0400
commitfba4b697710eb2a4bee456b9d39e9239c66f8bee (patch)
treefdd49decee2eac671ab875c9b195fb3ec5730692 /fs/btrfs
parent7af7c616fa2f1ce6c0d806b89898d2df098b4bd8 (diff)
btrfs: Fix slab accounting flags
BTRFS is using a variety of slab caches to satisfy internal needs. Those slab caches are always allocated with the SLAB_RECLAIM_ACCOUNT, meaning allocations from the caches are going to be accounted as SReclaimable. At the same time btrfs is not registering any shrinkers whatsoever, thus preventing memory from the slabs to be shrunk. This means those caches are not in fact reclaimable. To fix this remove the SLAB_RECLAIM_ACCOUNT on all caches apart from the inode cache, since this one is being freed by the generic VFS super_block shrinker. Also set the transaction related caches as SLAB_TEMPORARY, to better document the lifetime of the objects (it just translates to SLAB_RECLAIM_ACCOUNT). Signed-off-by: Nikolay Borisov <n.borisov.lkml@gmail.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/backref.c2
-rw-r--r--fs/btrfs/delayed-inode.c2
-rw-r--r--fs/btrfs/delayed-ref.c8
-rw-r--r--fs/btrfs/disk-io.c2
-rw-r--r--fs/btrfs/extent_io.c4
-rw-r--r--fs/btrfs/extent_map.c2
-rw-r--r--fs/btrfs/file.c2
-rw-r--r--fs/btrfs/inode.c8
-rw-r--r--fs/btrfs/ordered-data.c2
9 files changed, 16 insertions, 16 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index 8bb3509099e8..1ac8a3c7f68e 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -139,7 +139,7 @@ int __init btrfs_prelim_ref_init(void)
139 btrfs_prelim_ref_cache = kmem_cache_create("btrfs_prelim_ref", 139 btrfs_prelim_ref_cache = kmem_cache_create("btrfs_prelim_ref",
140 sizeof(struct __prelim_ref), 140 sizeof(struct __prelim_ref),
141 0, 141 0,
142 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, 142 SLAB_MEM_SPREAD,
143 NULL); 143 NULL);
144 if (!btrfs_prelim_ref_cache) 144 if (!btrfs_prelim_ref_cache)
145 return -ENOMEM; 145 return -ENOMEM;
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index dd3c040139a2..9e2a907d9ddb 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -34,7 +34,7 @@ int __init btrfs_delayed_inode_init(void)
34 delayed_node_cache = kmem_cache_create("btrfs_delayed_node", 34 delayed_node_cache = kmem_cache_create("btrfs_delayed_node",
35 sizeof(struct btrfs_delayed_node), 35 sizeof(struct btrfs_delayed_node),
36 0, 36 0,
37 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, 37 SLAB_MEM_SPREAD,
38 NULL); 38 NULL);
39 if (!delayed_node_cache) 39 if (!delayed_node_cache)
40 return -ENOMEM; 40 return -ENOMEM;
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index 430b3689b112..08e452599249 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -940,28 +940,28 @@ int btrfs_delayed_ref_init(void)
940 btrfs_delayed_ref_head_cachep = kmem_cache_create( 940 btrfs_delayed_ref_head_cachep = kmem_cache_create(
941 "btrfs_delayed_ref_head", 941 "btrfs_delayed_ref_head",
942 sizeof(struct btrfs_delayed_ref_head), 0, 942 sizeof(struct btrfs_delayed_ref_head), 0,
943 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 943 SLAB_MEM_SPREAD, NULL);
944 if (!btrfs_delayed_ref_head_cachep) 944 if (!btrfs_delayed_ref_head_cachep)
945 goto fail; 945 goto fail;
946 946
947 btrfs_delayed_tree_ref_cachep = kmem_cache_create( 947 btrfs_delayed_tree_ref_cachep = kmem_cache_create(
948 "btrfs_delayed_tree_ref", 948 "btrfs_delayed_tree_ref",
949 sizeof(struct btrfs_delayed_tree_ref), 0, 949 sizeof(struct btrfs_delayed_tree_ref), 0,
950 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 950 SLAB_MEM_SPREAD, NULL);
951 if (!btrfs_delayed_tree_ref_cachep) 951 if (!btrfs_delayed_tree_ref_cachep)
952 goto fail; 952 goto fail;
953 953
954 btrfs_delayed_data_ref_cachep = kmem_cache_create( 954 btrfs_delayed_data_ref_cachep = kmem_cache_create(
955 "btrfs_delayed_data_ref", 955 "btrfs_delayed_data_ref",
956 sizeof(struct btrfs_delayed_data_ref), 0, 956 sizeof(struct btrfs_delayed_data_ref), 0,
957 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 957 SLAB_MEM_SPREAD, NULL);
958 if (!btrfs_delayed_data_ref_cachep) 958 if (!btrfs_delayed_data_ref_cachep)
959 goto fail; 959 goto fail;
960 960
961 btrfs_delayed_extent_op_cachep = kmem_cache_create( 961 btrfs_delayed_extent_op_cachep = kmem_cache_create(
962 "btrfs_delayed_extent_op", 962 "btrfs_delayed_extent_op",
963 sizeof(struct btrfs_delayed_extent_op), 0, 963 sizeof(struct btrfs_delayed_extent_op), 0,
964 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 964 SLAB_MEM_SPREAD, NULL);
965 if (!btrfs_delayed_extent_op_cachep) 965 if (!btrfs_delayed_extent_op_cachep)
966 goto fail; 966 goto fail;
967 967
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 6c88c63f3be7..49565626321e 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -101,7 +101,7 @@ int __init btrfs_end_io_wq_init(void)
101 btrfs_end_io_wq_cache = kmem_cache_create("btrfs_end_io_wq", 101 btrfs_end_io_wq_cache = kmem_cache_create("btrfs_end_io_wq",
102 sizeof(struct btrfs_end_io_wq), 102 sizeof(struct btrfs_end_io_wq),
103 0, 103 0,
104 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, 104 SLAB_MEM_SPREAD,
105 NULL); 105 NULL);
106 if (!btrfs_end_io_wq_cache) 106 if (!btrfs_end_io_wq_cache)
107 return -ENOMEM; 107 return -ENOMEM;
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 75533adef998..9aaa544e65a9 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -163,13 +163,13 @@ int __init extent_io_init(void)
163{ 163{
164 extent_state_cache = kmem_cache_create("btrfs_extent_state", 164 extent_state_cache = kmem_cache_create("btrfs_extent_state",
165 sizeof(struct extent_state), 0, 165 sizeof(struct extent_state), 0,
166 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 166 SLAB_MEM_SPREAD, NULL);
167 if (!extent_state_cache) 167 if (!extent_state_cache)
168 return -ENOMEM; 168 return -ENOMEM;
169 169
170 extent_buffer_cache = kmem_cache_create("btrfs_extent_buffer", 170 extent_buffer_cache = kmem_cache_create("btrfs_extent_buffer",
171 sizeof(struct extent_buffer), 0, 171 sizeof(struct extent_buffer), 0,
172 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 172 SLAB_MEM_SPREAD, NULL);
173 if (!extent_buffer_cache) 173 if (!extent_buffer_cache)
174 goto free_state_cache; 174 goto free_state_cache;
175 175
diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index e0715fcfb11e..26f9ac719d20 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -13,7 +13,7 @@ int __init extent_map_init(void)
13{ 13{
14 extent_map_cache = kmem_cache_create("btrfs_extent_map", 14 extent_map_cache = kmem_cache_create("btrfs_extent_map",
15 sizeof(struct extent_map), 0, 15 sizeof(struct extent_map), 0,
16 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 16 SLAB_MEM_SPREAD, NULL);
17 if (!extent_map_cache) 17 if (!extent_map_cache)
18 return -ENOMEM; 18 return -ENOMEM;
19 return 0; 19 return 0;
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index bcfb4a27ddd4..38bea7bb0987 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2975,7 +2975,7 @@ int btrfs_auto_defrag_init(void)
2975{ 2975{
2976 btrfs_inode_defrag_cachep = kmem_cache_create("btrfs_inode_defrag", 2976 btrfs_inode_defrag_cachep = kmem_cache_create("btrfs_inode_defrag",
2977 sizeof(struct inode_defrag), 0, 2977 sizeof(struct inode_defrag), 0,
2978 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, 2978 SLAB_MEM_SPREAD,
2979 NULL); 2979 NULL);
2980 if (!btrfs_inode_defrag_cachep) 2980 if (!btrfs_inode_defrag_cachep)
2981 return -ENOMEM; 2981 return -ENOMEM;
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 5c2c076bc552..01c6fca925f7 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -9392,25 +9392,25 @@ int btrfs_init_cachep(void)
9392 9392
9393 btrfs_trans_handle_cachep = kmem_cache_create("btrfs_trans_handle", 9393 btrfs_trans_handle_cachep = kmem_cache_create("btrfs_trans_handle",
9394 sizeof(struct btrfs_trans_handle), 0, 9394 sizeof(struct btrfs_trans_handle), 0,
9395 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 9395 SLAB_TEMPORARY | SLAB_MEM_SPREAD, NULL);
9396 if (!btrfs_trans_handle_cachep) 9396 if (!btrfs_trans_handle_cachep)
9397 goto fail; 9397 goto fail;
9398 9398
9399 btrfs_transaction_cachep = kmem_cache_create("btrfs_transaction", 9399 btrfs_transaction_cachep = kmem_cache_create("btrfs_transaction",
9400 sizeof(struct btrfs_transaction), 0, 9400 sizeof(struct btrfs_transaction), 0,
9401 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 9401 SLAB_TEMPORARY | SLAB_MEM_SPREAD, NULL);
9402 if (!btrfs_transaction_cachep) 9402 if (!btrfs_transaction_cachep)
9403 goto fail; 9403 goto fail;
9404 9404
9405 btrfs_path_cachep = kmem_cache_create("btrfs_path", 9405 btrfs_path_cachep = kmem_cache_create("btrfs_path",
9406 sizeof(struct btrfs_path), 0, 9406 sizeof(struct btrfs_path), 0,
9407 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 9407 SLAB_MEM_SPREAD, NULL);
9408 if (!btrfs_path_cachep) 9408 if (!btrfs_path_cachep)
9409 goto fail; 9409 goto fail;
9410 9410
9411 btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space", 9411 btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space",
9412 sizeof(struct btrfs_free_space), 0, 9412 sizeof(struct btrfs_free_space), 0,
9413 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL); 9413 SLAB_MEM_SPREAD, NULL);
9414 if (!btrfs_free_space_cachep) 9414 if (!btrfs_free_space_cachep)
9415 goto fail; 9415 goto fail;
9416 9416
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index aca8264f4a49..3b78d38173b3 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -1122,7 +1122,7 @@ int __init ordered_data_init(void)
1122{ 1122{
1123 btrfs_ordered_extent_cache = kmem_cache_create("btrfs_ordered_extent", 1123 btrfs_ordered_extent_cache = kmem_cache_create("btrfs_ordered_extent",
1124 sizeof(struct btrfs_ordered_extent), 0, 1124 sizeof(struct btrfs_ordered_extent), 0,
1125 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, 1125 SLAB_MEM_SPREAD,
1126 NULL); 1126 NULL);
1127 if (!btrfs_ordered_extent_cache) 1127 if (!btrfs_ordered_extent_cache)
1128 return -ENOMEM; 1128 return -ENOMEM;