summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-03-21 20:20:09 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-03-21 20:20:09 -0400
commit1a9d73b5c0b949fd4b53935a43e7dc1e0d9d1127 (patch)
treecbe5bbae21ca9f9a4cf2f206d6bd665903ae0084 /include/linux
parent205d75307a7c71f3807c8aa74405cd7267a40e4b (diff)
Shrinker improvements
After memory allocation failure, don't rely on /proc/meminfo to figure out how much memory we should free - instead unconditionally free 1/8th of each cache. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/shrinker.h2
-rw-r--r--include/linux/slab.h4
-rw-r--r--include/linux/vmalloc.h2
3 files changed, 4 insertions, 4 deletions
diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h
index 626b768c..eba6cfdd 100644
--- a/include/linux/shrinker.h
+++ b/include/linux/shrinker.h
@@ -25,6 +25,6 @@ struct shrinker {
int register_shrinker(struct shrinker *);
void unregister_shrinker(struct shrinker *);
-void run_shrinkers(void);
+void run_shrinkers(gfp_t gfp_mask, bool);
#endif /* __TOOLS_LINUX_SHRINKER_H */
diff --git a/include/linux/slab.h b/include/linux/slab.h
index bc99973f..557c0411 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -20,7 +20,7 @@ static inline void *kmalloc(size_t size, gfp_t flags)
void *p;
do {
- run_shrinkers();
+ run_shrinkers(flags, i != 0);
if (size) {
size_t alignment = min(rounddown_pow_of_two(size), (size_t)PAGE_SIZE);
@@ -83,7 +83,7 @@ static inline struct page *alloc_pages(gfp_t flags, unsigned int order)
void *p;
do {
- run_shrinkers();
+ run_shrinkers(flags, i != 0);
p = aligned_alloc(PAGE_SIZE, size);
if (p && (flags & __GFP_ZERO))
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index ccb319eb..965e341d 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -20,7 +20,7 @@ static inline void *__vmalloc(unsigned long size, gfp_t gfp_mask)
size = round_up(size, PAGE_SIZE);
do {
- run_shrinkers();
+ run_shrinkers(gfp_mask, i != 0);
p = aligned_alloc(PAGE_SIZE, size);
if (p && gfp_mask & __GFP_ZERO)