Blame view
fs/drop_caches.c
1.27 KB
9d0243bca [PATCH] drop-page... |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * Implement the manual drop-all-pagecache function */ #include <linux/kernel.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/writeback.h> #include <linux/sysctl.h> #include <linux/gfp.h> /* A global variable is a bit ugly, but it keeps the code simple */ int sysctl_drop_caches; |
01a05b337 new helper: itera... |
14 |
static void drop_pagecache_sb(struct super_block *sb, void *unused) |
9d0243bca [PATCH] drop-page... |
15 |
{ |
eccb95cee vfs: fix lock inv... |
16 |
struct inode *inode, *toput_inode = NULL; |
9d0243bca [PATCH] drop-page... |
17 18 19 |
spin_lock(&inode_lock); list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { |
a4ffdde6e simplify checks f... |
20 |
if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) |
9d0243bca [PATCH] drop-page... |
21 |
continue; |
af065b8a1 vfs: skip inodes ... |
22 23 |
if (inode->i_mapping->nrpages == 0) continue; |
eccb95cee vfs: fix lock inv... |
24 25 |
__iget(inode); spin_unlock(&inode_lock); |
286973552 mm: remove __inva... |
26 |
invalidate_mapping_pages(inode->i_mapping, 0, -1); |
eccb95cee vfs: fix lock inv... |
27 28 29 |
iput(toput_inode); toput_inode = inode; spin_lock(&inode_lock); |
9d0243bca [PATCH] drop-page... |
30 31 |
} spin_unlock(&inode_lock); |
eccb95cee vfs: fix lock inv... |
32 |
iput(toput_inode); |
9d0243bca [PATCH] drop-page... |
33 |
} |
07d45da61 fs/drop_caches.c:... |
34 |
static void drop_slab(void) |
9d0243bca [PATCH] drop-page... |
35 36 37 38 39 40 41 42 43 |
{ int nr_objects; do { nr_objects = shrink_slab(1000, GFP_KERNEL, 1000); } while (nr_objects > 10); } int drop_caches_sysctl_handler(ctl_table *table, int write, |
8d65af789 sysctl: remove "s... |
44 |
void __user *buffer, size_t *length, loff_t *ppos) |
9d0243bca [PATCH] drop-page... |
45 |
{ |
8d65af789 sysctl: remove "s... |
46 |
proc_dointvec_minmax(table, write, buffer, length, ppos); |
9d0243bca [PATCH] drop-page... |
47 48 |
if (write) { if (sysctl_drop_caches & 1) |
01a05b337 new helper: itera... |
49 |
iterate_supers(drop_pagecache_sb, NULL); |
9d0243bca [PATCH] drop-page... |
50 51 52 53 54 |
if (sysctl_drop_caches & 2) drop_slab(); } return 0; } |