Today I want to know what happend in UBIFS during drop cache.
Drop cache is part of sysctl, you can get the details from Documentation/sysctl/vm.txt as below:
drop_caches
Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.
==============================================================
After echo N > /proc/sys/vm/drop_caches, kernel will call function drop_caches_sysctl_handler, this is the top interface to drop caches:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 int drop_caches_sysctl_handler(ctl_table *table, int write, 2 void __user *buffer, size_t *length, loff_t *ppos) 3 { 4 int ret; 5 6 ret = proc_dointvec_minmax(table, write, buffer, length, ppos); 7 if (ret) 8 return ret; 9 if (write) { 10 if (sysctl_drop_caches & 1) 11 iterate_supers(drop_pagecache_sb, NULL); 12 if (sysctl_drop_caches & 2) 13 drop_slab(); 14 } 15 return 0; 16 }
drop_slab will call all the shrinkers to free memory, like ubifs_shrinker.
In ubifs_shinker, will free the znodes and tnc tree. Details please refer to ubifs_shrinker in fs/ubifs/shrinker.c.
Author: Marty
Date: 2016-8-24
The end.