summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.c
diff options
context:
space:
mode:
authorJaegeuk Kim2017-10-19 04:05:57 +0200
committerJaegeuk Kim2017-10-26 10:44:21 +0200
commit57864ae5ce3ab5c6e3137dd03edefdb2e5531ba1 (patch)
tree759d8b6d20e4c1eae6ea718708288ba484b0e778 /fs/f2fs/node.c
parentf2fs: update ctx->pos correctly when hitting hole in directory (diff)
downloadkernel-qcow2-linux-57864ae5ce3ab5c6e3137dd03edefdb2e5531ba1.tar.gz
kernel-qcow2-linux-57864ae5ce3ab5c6e3137dd03edefdb2e5531ba1.tar.xz
kernel-qcow2-linux-57864ae5ce3ab5c6e3137dd03edefdb2e5531ba1.zip
f2fs: limit # of inmemory pages
If some abnormal users try lots of atomic write operations, f2fs is able to produce pinned pages in the main memory which affects system performance. This patch limits that as 20% over total memory size, and if f2fs reaches to the limit, it will drop all the inmemory pages. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r--fs/f2fs/node.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 20f60f9d524b..d571961f42a7 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -74,6 +74,10 @@ bool available_free_memory(struct f2fs_sb_info *sbi, int type)
atomic_read(&sbi->total_ext_node) *
sizeof(struct extent_node)) >> PAGE_SHIFT;
res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 1);
+ } else if (type == INMEM_PAGES) {
+ /* it allows 20% / total_ram for inmemory pages */
+ mem_size = get_pages(sbi, F2FS_INMEM_PAGES);
+ res = mem_size < (val.totalram / 5);
} else {
if (!sbi->sb->s_bdi->wb.dirty_exceeded)
return true;