Message ID | 20220624182121.995294-1-ran.xiaokai@zte.com.cn (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drop caches: skip tmpfs and ramfs | expand |
On Fri, Jun 24, 2022 at 06:21:21PM +0000, cgel.zte@gmail.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > All tmpfs and ramfs pages have PG_dirty bit set > once they are allocated and added to the pagecache。So pages > can not be freed from tmpfs or ramfs. So skip tmpfs and ramfs > when drop caches. Hard coding magic constants in VFS code is a bad idea. If you have numbers to justify this change (which should go into this commit log), it can be properly solved by a flag on the super block, file_system_type or even better bdi.
On Fri, Jun 24, 2022 at 06:21:21PM +0000, cgel.zte@gmail.com wrote: > From: Ran Xiaokai <ran.xiaokai@zte.com.cn> > > All tmpfs and ramfs pages have PG_dirty bit set > once they are allocated and added to the pagecache。So pages minor, ^ Chinese full stop here.. Thanks, Gao Xiang
diff --git a/fs/drop_caches.c b/fs/drop_caches.c index e619c31b6bd9..600c043c1eb7 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c @@ -10,6 +10,7 @@ #include <linux/writeback.h> #include <linux/sysctl.h> #include <linux/gfp.h> +#include <linux/magic.h> #include "internal.h" /* A global variable is a bit ugly, but it keeps the code simple */ @@ -19,6 +20,9 @@ static void drop_pagecache_sb(struct super_block *sb, void *unused) { struct inode *inode, *toput_inode = NULL; + if (sb->s_magic == TMPFS_MAGIC || sb->s_magic == RAMFS_MAGIC) + return; + spin_lock(&sb->s_inode_list_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { spin_lock(&inode->i_lock);