v4->v5: - Backed to the latest 4.18 kernel and modify the code accordingly. Patch 1 "Relocate dentry_kill() after lock_parent()" is now no longer necessary. - Make tracking and limiting of negative dentries an user configurable option (CONFIG_DCACHE_TRACK_NEG_ENTRY) so that users can decide if they want to include this capability in the kernel. - Make killing excess negative dentries an optional feature that can be enabled via a boot command line option or a sysctl parameter. - Spread negative dentry pruning across multiple CPUs. v4: https://lkml.org/lkml/2017/9/18/739 A rogue application can potentially create a large number of negative dentries in the system consuming most of the memory available if it is not under the direct control of a memory controller that enforce kernel memory limit. This patchset introduces changes to the dcache subsystem to track and optionally limit the number of negative dentries allowed to be created by background pruning of excess negative dentries or even kill it after use. This capability will help to limit the amount of memory that can be consumed by negative dentries. Patch 1 tracks the number of negative dentries present in the LRU lists and reports it in /proc/sys/fs/dentry-state. Patch 2 makes negative dentry tracking a user configurable option (CONFIG_DCACHE_TRACK_NEG_ENTRY) as well as adding a "neg_dentry_pc=" boot command line option to specify a soft limit on the number of negative allowed as a percentage of total system memory. The default is 2%. Patch 3 enables automatic pruning of least recently used negative dentries when the total number is close to the preset limit. Patch 4 spreads the negative dentry pruning effort to multiple CPUs to make it more fair. Patch 5 extends the "neg_dentry_pc=" boot command line option to optionally enable enforcing the limit by killing off excess negative dentries immediately after use. Patch 6 makes the limit enforcing option a sysctl parameter so that it can be dynamically enabled at run time if the need arises, for example, when a rogue application generating a lot of negative dentries is detected. Waiman Long (6): fs/dcache: Track & report number of negative dentries fs/dcache: Make negative dentry tracking configurable fs/dcache: Enable automatic pruning of negative dentries fs/dcache: Spread negative dentry pruning across multiple CPUs fs/dcache: Allow optional enforcement of negative dentry limit fs/dcache: Make negative dentry limit enforcement sysctl parameter Documentation/admin-guide/kernel-parameters.txt | 12 + Documentation/sysctl/fs.txt | 30 +- fs/Kconfig | 10 + fs/dcache.c | 452 +++++++++++++++++++++++- include/linux/dcache.h | 13 +- include/linux/list_lru.h | 1 + kernel/sysctl.c | 11 + mm/list_lru.c | 4 +- 8 files changed, 519 insertions(+), 14 deletions(-) -- 1.8.3.1